java.interview.preparation

This blog is to provide details for java interview preparation. Everybody is busy in day to day project work and most of times we are not able to spend time for interview preparation due to workload. I am trying to provide the consolidated details of java topics and sharing my java interview experiences.

Spring Boot makes it easy to create
stand-alone, production-grade Spring based Applications that you can “just
run”. We take an opinionated view of the Spring platform and third-party
libraries so you can get started with minimum fuss. Most Spring Boot applications
need very little Spring configuration.

•Provide a radically faster and widely
accessible getting started experience for all Spring development.

•Be opinionated out of the box, but get
out of the way quickly as requirements start to diverge from the defaults.

•Provide a range of non-functional
features that are common to large classes of projects (e.g. embedded servers,
security, metrics, health checks, externalized configuration).

•Absolutely no code generation and no
requirement for XML configuration.

The
first step in producing a deployable war file is to provide aSpringBootServletInitializersubclass and override itsconfiguremethod. This makes use of Spring
Framework’s Servlet 3.0 support and allows you to configure your application
when it’s launched by the servlet container.

1) There is a global ordering on the reads and writes to a volatile variable. This implies that every thread accessing a volatile field will read its current value before continuing, instead of (potentially) using a cached value. (However, there is no guarantee about the relative ordering of volatile reads and writes with regular reads and writes, meaning that it's generally not a useful threading construct.)2) After java 5, Volatile reads and writes establish a happens-before relationship, much like acquiring and releasing a mutex.

Using volatile may be faster than a lock, but it will not work in some situations.The range of situations in which volatile is effective was expanded in Java 5; in particular, double-checked locking now works correctly.

Where to use Volatile :

Best case will be where where the variable updates should be visible to all threads because The value of this variable will never be cached thread-locally: all reads and writes will go straight to "main memory". and Access to the variable acts as though it is enclosed in a synchronized block, synchronized on itself.

Danger of Volatile:

Atomic operations are not thread safe with volatile variables. see this Code :

volatile int i;

.

..

i += 5;

Here i += 5 is not thread safe and this is equivalent to

int temp;

synchronized (i) {

temp = i;

}

temp += 5;

synchronized (i) {

i = temp;

}

Solution of this in Java 5: Java Atomic package

Java Atomic package works on principle of CAS (compare and swap). The signature of any CAS method is -

boolean compareAndSet(expectedValue, updateValue);

As Described in Java Doc:

"This method (which varies in argument types across different classes) atomically sets a variable to the updateValue if it currently holds the expectedValue, reporting true on success. The classes in this package also contain methods to get and unconditionally set values, as well as a weaker conditional atomic update operation weakCompareAndSet described below.

The specifications of these methods enable implementations to employ efficient machine-level atomic instructions that are available on contemporary processors. However on some platforms, support may entail some form of internal locking. Thus the methods are not strictly guaranteed to be non-blocking -- a thread may block transiently before performing the operation."

Instances of classes AtomicBoolean, AtomicInteger, AtomicLong, and AtomicReference each provide access and updates to a single variable of the corresponding type. Each class also provides appropriate utility methods for that type.

In most of banks, the unix or linux is prefered application hosting platform, compare to the windows. It is always added advantage for candidate to be familiar with unix commands. These are basic unix commands which are sometime asked to candidate for checking his\her unix skills. These questions are mainly related to log search, find commands and unix processes. These commands are very handy if we are investigating any issue in production\uat. As application developer we must have came across these unix commands. Mostly questions are not asked in depth and they just confirm your familiarity with unix commands. These are most frequently asked unix commands in interview.

1) How to find hidden files in current directory?

$ ls -lrta

2) How to find current running processes in unix server?

$ ps -ef

and if we want to find specific process we can use 'grep' with pipe
$ ps -ef | grep -i 'application'

3) How to find process which is taking maximum memory in server?
$ top
top command tell us about cpu usage , process id and other details. below is output of top command

4) How to find Exception in log files available in current directory and how to find number of occurrence?

$ grep 'Exception' log1.txt | wc -l

5) find all files in current and subdirectories which contains 'log' name?

$ find . -name 'log'

6)How do you access command line arguments from within a shell script?

Arguments passed from the command line to a shell script can be accessed within the shell script by using a $ (dollar sign) immediately followed with the argument's numeric position on the command line.

7) How to tails last 200 lines of any log fine?

$ tail -200f filename.txt

8) How to find remaining disk space in unix\linux server?

$ df -kl

df -kl

Filesystem 1024-blocks Used Available Capacity iused ifree %iused Mounted on

/dev/disk0s2 244277768 153679844 90341924 63% 38483959 22585481 63% /

9) How to make any script file executable?

$chmod 755 *.sh10) How to kill process in unix server?
$ kill -9 #pid
these #pid can be found using ps -ef command.

BASIC Unix Command List

ls --- lists your filesls -l --- lists your files in 'long format', which contains lots of useful information, e.g. the exact size of the file, who owns the file and who has the right to look at it, and when it was last modified.ls -a --- lists all files, including the ones whose filenames begin in a dot, which you do not always want to see.There are many more options, for example to list files by size, by date, recursively etc.

more filename --- shows the first part of a file, just as much as will fit on one screen. Just hit the space bar to see more or q to quit. You can use /pattern to search for a pattern.

mv filename1 filename2 --- moves a file (i.e. gives it a different name, or moves it into a different directory (see below)

cp filename1 filename2 --- copies a file

rm filename --- removes a file. It is wise to use the option rm -i, which will ask you for confirmation before actually deleting anything. You can make this your default by making an alias in your .cshrc file.

wc filename --- tells you how many lines, words, and characters there are in a file

chmod options filename --- lets you change the read, write, and execute permissions on your files. The default is that only you can look at them and change them, but you may sometimes want to change these permissions. For example, chmod o+r filename will make the file readable for everyone, and chmod o-r filename will make it unreadable for others again. Note that for someone to be able to actually look at the file the directories it is in need to be at least executable.

File Compression

gzip filename --- compresses files, so that they take up much less space. Usually text files compress to about half their original size, but it depends very much on the size of the file and the nature of the contents. There are other tools for this purpose, too (e.g. compress), but gzip usually gives the highest compression rate. Gzip produces files with the ending '.gz' appended to the original filename.

gunzip filename --- uncompresses files compressed by gzip.

gzcat filename --- lets you look at a gzipped file without actually having to gunzip it (same as gunzip -c). You can even print it directly, using gzcat filename | lpr

lpr filename --- print. Use the -P option to specify the printer name if you want to use a printer other than your default printer. For example, if you want to print double-sided, use 'lpr -Pvalkyr-d', or if you're at CSLI, you may want to use 'lpr -Pcord115-d'. See 'help printers' for more information about printers and their locations.

Directories

Directories, like folders on a Macintosh, are used to group files together in a hierarchical structure.

mkdir dirname --- make a new directory

cd dirname --- change directory. You basically 'go' to another directory, and you will see the files in that directory when you do 'ls'. You always start out in your 'home directory', and you can get back there by typing 'cd' without arguments. 'cd ..' will get you one level up from your current position. You don't have to walk along step by step - you can make big leaps or avoid walking around by specifying pathnames.