Tuesday, May 28, 2013

Java Interview Question

1. What is immutable object? Can you write immutable object?You need to make class final and all its member final so that once objects gets crated no one can modify its state. You can achieve same functionality by making member as non final but private and not modifying them except in constructor.
 

2. Does all property of immutable object needs to be final?
Not necessary as stated above you can achieve same functionality by making member as non final but private and not modifying them except in constructor.
 

3. What is the difference between creating String as new () and literal?
When we create string with new () it’s created in heap and not added into string pool while String created using literal are created in String pool itself which exists in Perm area of heap.
String s = new String("Test");will put the object in String pool , it it does then why do one need String.intern() method which is used to put Strings into String pool explicitly. its only when you create String object as String literal e.g. String s = "Test" it put the String in pool.
 

4. How does substring () inside String works?
Another good question, I think answer is not sufficient but here it is “Substring creates new object out of string by taking a portion of original string”.
The substring() method is used to return a part (or substring) of the String used to invoke the method. The first argument represents the starting location (zero-based) of the substring. If the call has only one argument, the substring returned will include the characters to the end of the original String. If the call has two arguments, the substring returned will end with the character located in the nth position of the original String where n is the second argument. Unfortunately, the ending argument is not zero-based, so if the second argument is 7, the last character in the returned String will be in the original String’s 7 position, which is index 6. Let’s look at an example:String x = "0123456789";
System.out.println( x.substring(5) ); // output is "56789"System.out.println( x.substring(5, 8)); // output is "567"
The first example should be easy: start at index 5 and return the rest of the String. The second example should be read as follows: start at index 5 and return the characters up to and including the 8th position (index 7).
and @Anonymous pointed out some interesting fact:something important about String.substring() method, its implementation calls the following String(...) constructor :
// Package private constructor which shares value array for speed.String(int offset, int count, char value[]) {this.value = value;this.offset = offset;this.count = count;}
That means the new String() object returned by substring(...) shares the same backing array (this.value) as the original string object.
Thus if your original string object is 1GB long, the substring object will always be 1GB long too!
You will probably want to trim the new array size to the substring range, this should do the job:
String veryLongString = readFromFile(file);String tinyString = new String(veryLongString.substring(1,10));
The String(String) constructor is implemented that way:
public String(String original) {...if (originalValue.length > size) {// The array representing the String is bigger than the new// String itself. Perhaps this constructor is being called// in order to trim the baggage, so make a copy of the array.int off = original.offset;v = Arrays.copyOfRange(originalValue, off, off+size);}...}
 

5. Which two method you need to implement for key in hashMap ?
(equals and hashcode) read How HashMap works in Java for detailed explanation.
 

6. Where does these two method comes in picture during get operation?
See here How HashMap works in Java for detailed explanation.
 

7. How do you handle error condition while writing stored procedure or accessing stored procedure from java?
Open for all, my friend didn't know the answer so he didn't mind telling me.
 

8. What is difference between Executor.submit() and Executer.execute() method ?
(Former returns an object of Future which can be used to find result from worker thread)
@vinit Saini suggesed a very good point related to this core java interview question
There is a difference when looking at exception handling. If your tasks throws an exception and if it was submitted with execute this exception will go to the uncaught exception handler (when you don't have provided one explicitly, the default one will just print the stack trace to System.err). If you submitted the task with submit any thrown exception, checked or not, is then part of the task's return status. For a task that was submitted with submit and that terminates with an exception, the Future.get will rethrow this exception, wrapped in an ExecutionException.


9. What is the difference between factory and abstract factory pattern?
Open for all, he explains about factory pattern and how factory pattern saves maintenance time by encapsulating logic of object creation but didn't know exact answer
@Raj suggestedAbstract Factory provides one more level of abstraction. Consider different factories each extended from an Abstract Factory and responsible for creation of different hierarchies of objects based on the type of factory. E.g. AbstractFactory extended by AutomobileFactory, UserFactory, RoleFactory etc. Each individual factory would be responsible for creation of objects in that genre.
 

10. What is Singleton? is it better to make whole method synchronized or only critical section synchronized ?
see my article 10 Interview questions on Singleton Pattern in Java
 

11. Can you write Critical section code for singleton?

check here 10 Interview questions on Singleton Pattern in Java
 

12. Can you write code for iterating over hashmap in Java 4 and Java 5 ?Tricky one but he managed to write using while and for loop.
 

13. When do you override hashcode and equals() ?
Whenever necessary especially if you want to do equality check or want to use your object as key in HashMap. check this for writing equals method correctly 5 tips on equals in Java
 

14. What will be the problem if you don't override hashcode() method ?
You will not be able to recover your object from hash Map if that is used as key in HashMap. See here How HashMap works in Java for detailed explanation.
 

15. Is it better to synchronize critical section of getInstance() method or whole getInstance() method ?
Answer is critical section because if we lock whole method than every time some one call this method will have to wait even though we are not creating any object)
 

16. What is the difference when String is gets created using literal or new() operator ?
When we create string with new() its created in heap and not added into string pool while String created using literal are created in String pool itself which exists in Perm area of heap.

17. Does not overriding hashcode() method has any performance implication ?
This is a good question and open to all , as per my knowledge a poor hashcode function will result in frequent collision in HashMap which eventually increase time for adding an object into Hash Map.
 

18. What’s wrong using HashMap in multithreaded environment? When get() method go to infinite loop ?
Another good question. His answer was during concurrent access and re-sizing.
 

19. Give a simplest way to find out the time a method takes for execution without using any profiling tool?
this questions is suggested by @MohitRead the system time just before the method is invoked and immediately after method returns. Take the time difference, which will give you the time taken by a method for execution.
To put it in code…
long start = System.currentTimeMillis ();method ();long end = System.currentTimeMillis ();
System.out.println (“Time taken for execution is ” + (end – start));
Remember that if the time taken for execution is too small, it might show that it is taking zero milliseconds for execution. Try it on a method which is big enough, in the sense the one which is doing considerable amout of processing

20. Why main method is static in Java?
Now come to the main point "Why main method is static in Java", there are quite a few reasons around but here are few reasons which make sense to me:
  • Since main method is static Java virtual Machine can call it without creating any instance of class which contains main method.
  • Since C and C++ also has similar main method which serves as entry point for program execution, following that convention will only help Java.
  • If main method were not declared static than JVM has to create instance of main Class and since constructor can be overloaded and can have arguments there would not be any certain and consistent way for JVM to find main method in Java.
  • Anything which is declared in class in Java comes under reference type and requires object to be created before using them but static method and static data are loaded into separate memory inside JVM called context which is created when a class is loaded. If main method is static than it will be loaded in JVM context and are available to execution.
    Why main mehtod is public in Java.Java specifies several access modifiers e.g. private, protected and public. Any method or variable which is declared public in Java can be accessible from outside of that class. Since main method is public inJava, JVM can easily access and execute it.
    Why main method is void in Java. Since main method in Java is not supposed to return any value, its made void which simply means main is not returning anything.
    Summary:
  • Main method must be declared public, static and void in Java otherwise JVM will not able to run Java program.
  • JVM throws NoSuchMethodException:main if it doesn't find main method of predefined signature in class which is provided to Java command. E.g. if you run java Helloworld than JVM will search for public static void main String args[]) method in HelloWorld.class file.
  • Main method is entry point for any Core Java program. Execution starts from main method.
  • Main method is run by a special thread called "main" thread in Java. Your Java program will be running until your main thread is running or any non-daemon thread spawned from main method is running.
  • When you see "Exception in Thread main” e.g. Exception in Thread main: Java.lang.NullPointerException it means Exception is thrown inside main thread.
  • You can declare main method using varargs syntax from Java 1.5 onwards e.g.public static void main(String... args)
  • Apart from static, void and public you can use final, synchronized and strictfp modifier in signature of main method in Java.
  • Main method in Java can be overloaded like any other method in Java but JVM will only call main method with specified signature specified above.
  • You can use throws clause in signature of main method and can throw any checked or unchecked Exception.
  • Static initializer block is executed even before JVM calls main method. They are executed when a Class is loaded into Memory by JVM.


No comments:

Post a Comment