java interview questions most asked
1) Difference between String, StringBuffer, and StringBuilder in Java?
String is immutable while both StringBuffer and StringBuilder are mutable, which means any change e.g. converting String to upper case or trimming white space will produce another instance rather than changing the same instance. In later two, StringBuffer is synchronized while StringBuilder is not, in fact, it's a ditto replacement of StringBuffer added in Java 1.5.
2) Difference between extending Thread vs implementing Runnable in Java?
The difference comes from the fact that you can only extend one class in Java, which means if you extend the Thread class you lose your opportunity to extend another class, on the other hand, if you implement Runnable, you can still extend another class.
3) Difference between Runnable and Callable interface in Java?
Runnable was the only way to implement a task in Java that can be executed in parallel before JDK 1.5 adds Callable. Just like Runnable, Callable also defines a single call() method but unlike run() it can return values and throw exceptions.
4) Difference between ArrayList and LinkedList in Java?
In short, ArrayList is backed by an array in Java, while LinkedList is just a collection of nodes, similar to a linked list data structure. ArrayList also provides a random search if you know the index, while LinkedList only allows a sequential search. On other hand, adding and removing an element from the middle is efficient in LinkedList as compared to ArrayList because it only requires modifying links, and no other element is rearranged.
5) What is the difference between wait and notify in Java?
Both wait and notify methods are used for inter-thread communication, where the wait is used to pause the thread on a condition, and notify is used to send a notification to waiting threads. Both must be called from synchronized context e.g. synchronized method or block.
6) Difference between HashMap and Hashtable in Java?
Though both HashMap and Hashtable are based upon hash table data structure, there are subtle differences between them. HashMap is non-synchronized while Hashtable is synchronized and because of that HashMap is faster than Hashtable, as there is no cost of synchronization associated with it. One more minor difference is that HashMap allows a null key but Hashtable doesn't.
7) Difference between TreeSet and TreeMap in Java?
Though both are sorted collections, TreeSet is essentially a Set data structure that doesn't allow duplicate, and TreeMap is an implementation of Map interface. In reality, TreeSet is implemented via a TreeMap, much like how HashSet is implemented using HashMap.
8) Write a Java program to print the Fibonacci series?
Fibonacci series is a series of number on which a number is equal to sum of previous two numbers i.e. f(n) = f(n-1) + f(n-2). This program is used to teach recursion to students but you can also solve it without recursion.
9) Write a Java program to check if a number is Prime or not?
A number is said prime if it is not divisible by any other number except itself. 1 is not considered prime, so your check must start with 2. The simplest solution of this is to check every number until the number itself to see if it's divisible or not.
When the Interviewer will ask you to improve, you can say that check until the square root of the number. If you can further improve the algorithm, you will more impress your interviewer. check out the solution for how to do this in Java
10) How to Swap two numbers without using the temp variable?
This question is ages old. I have first seen this question way back in 2005 but I am sure it's even older than that. The good thing about this problem is that except XOR trick all solution has some flaws, which is used to test whether the candidate really knows his stuff or not. Check out the solution for all three possible solutions and drawbacks of each.
11) How to check if the linked list contains a loop in Java?
This is another problem-solving question which is very popular in telephonic and screening rounds. This is a great question to test the problem-solving skills of the candidate, especially if he has not seen this question before. It also has a nice little follow-up to find the starting of the loop. See the solution for a Java program that finds loops in singly linked.
12) Write a Java program to reverse String without using API?
One more question to test the problem-solving skill of the candidate. You wouldn't expect these kinds of questions in the telephonic round of Java interviews but these questions have now become norms. All interviewer is looking it for logic, you don't need to write the code but you should be able to think of a solution.
13) Difference between Serializable and Externalizable in Java?
Serializable is a marker interface with no methods defined it but Externalizable interface has two methods defined on it e.g. readExternal() and writeExternal() which allows you to control the serialization process. Serializable uses a default serialization process which can be very slow for some applications.
14) Difference between transient and volatile in Java?
the transient keyword is used in Serialization while volatile is used in multi-threading. If you want to exclude a variable from the serialization process then mark that variable transient. Similar to the static variable, transient variables are not serialized.
On the other hand, volatile variables are signal to the compiler that multiple threads are interested in this variable and it shouldn't reorder its access. the volatile variable also follows the happens-before relationship, which means any write happens before any read in a volatile variable. You can also make non-atomic access of double and long variable atomic using volatile.
15) Difference between abstract class and interface?
From Java 8 onwards difference between abstract class and interface in Java has been minimized, now even the interface can have an implementation in terms of default and static method. BTW, in Java, you can still extend just one class but can extend multiple inheritances. An abstract class is used to provide default implementation with just something left to customize, while an interface is used heavily in API to define the contract of a class.
16) Difference between Association, Composition, and Aggregation?
Between association, composition, and aggregation, the composition is strongest. If the part can exist without a whole then the relationship between two classes is known as aggregation but if the part cannot exist without a whole then the relationship between two classes is known as composition. Between Inheritance and composition, later provides a more flexible design.
17) What is the difference between FileInputStream and FileReader in Java?
The main difference between FileInputStream and FileReader is that the former is used to read binary data while the latter is used to read text data, which means later also consider character encoding while converting bytes to text in Java.
18) How do you convert bytes to characters in Java?
Bytes are converted to character or text data using character encoding. When you read binary data from a file or network endpoint, you provide a character encoding to convert those bytes to equivalent characters. Incorrect choice of character encoding may alter the meaning of the message by interpreting it differently.
19) Can we have a return statement in the finally clause? What will happen?
Yes, you can use the return statement in finally block, but it will not prevent finally block from being executed. BTW, if you also used the return statement in the try block then return the value from the finally block with override whatever is returned from the try block.
20) Can you override the static method in Java?
No, you cannot override static methods in Java because they are resolved at compile time rather than runtime. Though you can declare and define a static method of the same name and signature in the child class, this will hide the static method from the parent class, that's why it is also known as method hiding in Java.
21) Difference between the private, public, package, and protected in Java?
All four are access modifiers in Java but only private, public, and protected are modifier keywords. There is no keyword for package access, it's the default in Java. This means if you don't specify any access modifier then by default that will be accessible inside the same package.
Private variables are only accessible in the class they are declared, protected are accessible inside all classes in the same package but only on subclass outside package and public variables e.g. method, class or variables are accessible anywhere. This is the highest level of access modifier and provides the lowest form of encapsulation.
22) 5 Coding best practices you learned in Java?
If you are developing a programming language for a couple of years, you sure know lots of best practices, by asking a couple of them, the Interviewer just checks that you know your trade well. Here are my 5 Java best practices :
- Always name your thread, this will help immensely in debugging.
- Use StringBuilder for string concatenation
- Always specify the size of the Collection, this will save a lot of time spent on resizing
- Always declare variable private and final unless you have a good reason.
- Always code on interfaces instead of implementation
- Provide dependency to method instead they get it by themselves, this will make your code unit testable.
23) Write a Program to find the maximum and minimum number in the array?
This is another coding question that test the problem-solving ability of the candidate. Be ready for a couple of follow up as well depending upon how you answer this question. The simplest way which comes to mind is to sort the array and then pick the top and bottom elements. For a better answer see the solution.
24) Write a program to reverse Array in place?
Another problem-solving question for Java programmers. The key point here is that you need to reverse the array in place, which means you cannot use an additional buffer, one or two variables will be fine. Note you cannot use any library code, you need to create your own logic.
25) Write a program to reverse a number in Java?
This is an interesting program for a very junior programmer, right from the college but can sometimes puzzle developers with a couple of years of experience as well. Most of these developer does very little coding so they found these kind of questions challenging. Here the trick is to get the last digit of the number by using the modulus operator (%) and reducing the number in each go by using the division operator (/). See the solution for how to do that in Java.
26) Write a Program to calculate factorial in Java?
Another beginner's coding problem, is good for a telephonic interview because you can differentiate a guy who can write a program from a guy who can't. It's also good to see if the developer is familiar with both recursive and iterative algorithms and the pros and cons of each.
You can also ask lots of follow up like how to improve the performance of the algorithm? Since the factorial of a number is equal to the number multiplied by the factorial of the previous number, you can cache those values instead of recalculating them, this will impress your interviewer a bit. See the solution for a full code example.
27) What is the difference between the calling start() and run() method of Thread?
You might have heard this question before, if calling the start() method calls the run() method eventually then why not just call the run() method? Well, the difference is, the start method also starts a new thread. If you call the run method directly then it will run on the same thread, not on a different thread, which is what the original intention would be.
28) Write a Program to solve the Producer-Consumer problem in Java?
A very good question to check if the candidate can write an inter-thread communication code or not. If a guy can write producer-consumer solutions by hand and point out critical sections and how to protect, how to communicate with thread then he is good enough to write and maintain your concurrent Java program.
This is the very minimum requirement for a Java developer and that's why I love this question, it also has several solutions e.g. by using concurrent collections like blocking queue, by using wait and notify, and by using other synchronizers of Java 5 e.g. semaphores.
29) How to find the middle element of the linked list in one pass?
Another simple problem-solving question for warm-up. In a singly linked list, you can only traverse in one direction and if you don't know the size then you cannot write a loop to exactly find out the middle element, that is the crux of the problem.
One solution is by using two pointers, fast and slow. The slower pointer moves 1 step when the faster pointer moves to 2 steps, causing slow to point to the middle when fast is pointing to the end of the list i.e. null. Check out the solution for the Java code sample.
If you want to learn more about essential data structures like arrays and linked lists in Java then I highly recommend you to check out Data Structures and Algorithms: Deep Dive Using Java course on Udemy. It's a great course to master data structure and algorithms in Java.
30) What is equals() and hashCode() contract in Java? Where does it use it?
One of the must-ask questions in the Java telephonic interview. If a guy doesn't know about equals() and hashCode() then he is probably not worth pursuing further because it's the core of the Java fundamentals.
The key point of the contract is that if two objects are equal by the equals() method then they must have the same hashcode, but unequal objects can also have the same hashcode, which is the cause of collision on the hash table based collection e.g HashMap. When you override equals() you must remember to override the hashCode() method to keep the contract valid.
31) Why wait and notify methods are declared in the Object class?
This question is more to find out how much experience you really have and what is your thinking about Java API and its design decision. A similar question is why String is immutable in Java? Well, a true answer can only be given by Java designers but you can reason something.
For example, wait and notify methods are associated with locks that are owned by the object, not thread, and that's why it makes sense to keep those methods on java.lang.Object class. See the detailed answer for more discussion and reasoning.
32) How does HashSet works in Java?
HashSet is internally implemented using HashMap in Java and this is what your interviewer wants to hear. He could then quiz you with some common sense-based questions e.g. how can you use HashMap because it needs two object keys and value? what is the value in the case of HashSet?
Well, in the case of HashSet a dummy object is used as a value and key objects are the actual element on Set point of view. Since HashMap doesn't allow duplicate keys it also follows the contract of set data structure to not allow duplicates. See detailed answers for more analysis and explanation.
33) What is the difference between synchronized and concurrent Collection in Java?
There was a time, before Java 1.5 when you only have synchronized collections if you need them in a multi-threaded Java program. Those classes were plagued with several issues most importantly performance because they lock the whole collection or map whenever a thread reads or writes. To address those issues, Java released a couple of Concurrent collection classes e.g. ConcurrentHashMap, CopyOnWriteArrayList, and BlockingQueue to provide more scalability and performance.
34) What is the difference between Iterator and Enumeration in Java?
The main difference is that Iterator was introduced in place of Enumeration. It also allows you to remove elements from the collection while traversing which was not possible with Enumeration.
The methods of Iterator e.g. hasNext() and next() are also more concise then corresponding methods in Enumeration e.g. hasMoreElements(). You should always use Iterator in your Java code as Enumeration may get deprecated and removed in future Java releases.
35) What is the difference between Overloading and Overriding in Java?
Another frequently asked question from the telephonic round of Java interviews. Though both overloading and overriding are related with methods of the same names they have different characteristics e.g.overloaded methods must have a different method signature than the original method but the overridden method must have the same signature. Also, overloaded methods are resolved at a compiled time while overridden methods are resolved at runtime. See the detailed answer for more analysis and differences.
36) Difference between static and dynamic binding in Java?
This is usually asked as a follow-up of the previous question, static binding is related to an overloaded method and dynamic binding is related to the overridden method. A method like private, final, and static are resolved using static binding at compile time but virtual methods that can be overridden are resolved using dynamic binding at runtime.
37) Difference between Comparator and Comparable in Java?
This is one more basic concept, I expect every Java candidate to know. You will deal with them on every Java project. Several core classes in Java e.g. String, Integer implement Comparable to define their natural sorting order and if you define a value class or a domain object then you should also implement Comparable and define the natural ordering of your object.
The main difference between these two is that you could create multiple Comparators to define multiple sorting orders based upon different attributes of an object.
Also, In order to implement Comparable, you must have access to the class or code, but you can use Comparator without having the source code of a class, all you need is the JAR file of a particular object. That's why Comparator is very powerful to implement custom sorting order and from Java 8 you can do it even more elegantly, as seen here.
38) How do you sort ArrayList in descending order?
You can use Collections.sort() method with reverse Comparator, which can sort elements in the reverse order of their natural order e.g.
List<String> listOfString = Arrays.asList("London", "Tokyo", "NewYork");Collections.sort(listOfString, Collections.reverseOrder());System.out.println(listOfString); //[Tokyo, NewYork, London]
39) What is the difference between PATH and CLASSPATH in Java?
PATH is an environment variable that points to Java binary which is used to run Java programs. class path is another environment variable that points to Java class files or JAR files. If a class is not found in CLASSPATH then Java throws ClassNotFoundException.
40) What is the difference between Checked and Unchecked Exception in Java?
Checked exception ensures that handling of the exception is provided and it's verified by compiler also, while for throwing unchecked exception no special provision is needed e.g. throws clause. A method can throw unchecked exceptions without any throw clause.
Tags:
java