1. What is the difference between JDK, JRE, and JVM?
Answer:
Component | Description | Purpose |
---|---|---|
JDK (Java Development Kit) | Includes JRE, a compiler (javac), an archiver (jar), and other tools needed for Java development. | Used to develop and compile Java applications. |
JRE (Java Runtime Environment) | Includes the JVM and standard libraries needed to run Java applications. | Provides the necessary environment to run Java applications. |
JVM (Java Virtual Machine) | An abstract machine that converts Java bytecode into machine code. | Executes Java bytecode and provides a runtime environment for Java applications. |
2. Explain the concept of Object-Oriented Programming (OOP) in Java.
Answer: OOP is a programming paradigm based on the concept of "objects", which can contain data and code. The four main principles of OOP are:
- Encapsulation: Wrapping data and methods into a single unit.
- Inheritance: Mechanism where one class acquires the properties and behaviors of a parent class.
- Polymorphism: The ability of an object to take on many forms, typically through method overriding and overloading.
- Abstraction: Hiding the complex implementation details and showing only the essential features of the object.
3. What are Java Generics? Give an example.
Answer: Generics enable types (classes and interfaces) to be parameters when defining classes, interfaces, and methods. It allows for code reusability and type safety.
public class Box<T> {
private T t;
public void set(T t) { this.t = t; }
public T get() { return t; }
}
4. Explain the difference between ‘==’ and ‘equals()’ method in Java.
Answer:
- ‘==’ operator: Compares the reference of the objects.
- ‘equals()’ method: Compares the content of the objects.
5. What is a Java String Pool?
Answer: Java String Pool is a special memory region where Java stores literal string values. When a new string is created using a literal, the JVM checks the string pool first. If the string already exists, the reference is returned; otherwise, a new string is created in the pool.
6. How does Java handle memory management?
Answer: Java uses an automatic memory management system called garbage collection. The garbage collector automatically deletes unused objects to free up memory, thus preventing memory leaks.
7. Explain the concept of Multithreading in Java.
Answer: Multithreading in Java is the process of executing multiple threads simultaneously. Java provides built-in support for multithreaded programming. It allows performing multiple operations independently in parallel, improving application performance.
8. What is the difference between ArrayList
and LinkedList
in Java?
Answer:
- ArrayList: Resizable array implementation of the List interface. It's better for storing and accessing data.
- LinkedList: Doubly-linked list implementation of the List and Deque interfaces. It's better for manipulating data, like adding or removing elements.
9. Describe the use of the transient
keyword.
Answer:
The transient
keyword in Java is used to indicate that a field should not be serialized. When an object is serialized, the fields marked as transient
are ignored and not included in the serialized representation.
10. Explain the concept of Exception Handling in Java.
Answer:
Exception Handling in Java is a powerful mechanism for handling runtime errors and maintaining the normal flow of the application. It uses try
, catch
, finally
, and throw
statements to handle exceptions gracefully.
11. What is the final
keyword in Java?
Answer:
- final variable: Its value cannot be changed once assigned.
- final method: Cannot be overridden by subclasses.
- final class: Cannot be subclassed.
12. Explain the difference between Checked and Unchecked Exceptions.
Answer:
- Checked Exceptions: Exceptions that are checked at compile-time (e.g., IOException).
- Unchecked Exceptions: Exceptions that are not checked at compile-time (e.g., ArithmeticException, NullPointerException).
13. What is the use of the synchronized
keyword?
Answer:
The synchronized
keyword in Java is used to control the access of multiple threads to any shared resource. Synchronization ensures that only one thread can access the resource at a time.
14. How does the hashCode()
method work in Java?
Answer:
The hashCode()
method returns an integer value generated by a hashing algorithm. It is used in hashing-based collections like HashMap, HashSet, and Hashtable to determine the bucket location for storing objects.
15. What are Java Annotations?
Answer:
Annotations provide metadata about the code. They are used to provide additional information to the compiler and are not part of the program logic. Examples include @Override
, @Deprecated
, and @SuppressWarnings
.
16. What is a Singleton class in Java?
Answer: A Singleton class in Java ensures that only one instance of the class is created. It provides a global point of access to the instance. It is typically implemented using a private constructor and a static method.
17. Explain the difference between wait()
, notify()
, and notifyAll()
methods.
Answer:
wait()
: Causes the current thread to wait until another thread invokesnotify()
ornotifyAll()
on the same object.notify()
: Wakes up a single thread that is waiting on the object's monitor.notifyAll()
: Wakes up all the threads that are waiting on the object's monitor.
18. What is Java Reflection API?
Answer: Java Reflection API allows the inspection and modification of the runtime behavior of applications. It can be used to inspect classes, interfaces, fields, and methods at runtime, even if they are not accessible during compile time.
19. What are Java Streams?
Answer: Java Streams are a new abstraction introduced in Java 8. They allow functional-style operations on collections of elements, such as map-reduce transformations. Streams can be sequential or parallel.
20. What is a volatile
keyword in Java?
Answer:
The volatile
keyword in Java is used to mark a variable as "stored in main memory." Every read of a volatile
variable will be read from the computer's main memory and not from the CPU cache.
21. Explain the concept of Dependency Injection.
Answer: Dependency Injection is a design pattern used to implement IoC (Inversion of Control). It allows the creation of dependent objects outside of a class and provides those objects to a class through different ways (e.g., constructor injection, setter injection).
22. What is the difference between StringBuilder
and StringBuffer
?
Answer:
- StringBuilder: Non-synchronized, faster, and used in a single-threaded environment.
- StringBuffer: Synchronized, slower, and used in a multi-threaded environment.
23. Explain the purpose of the default
keyword in Java 8 interfaces.
Answer:
The default
keyword in Java 8 allows the creation of default methods in interfaces. These methods can have a body and provide a default implementation that can be overridden by implementing classes.
24. What is the Fork/Join framework in Java?
Answer: The Fork/Join framework is designed for parallelism. It allows breaking a task into smaller tasks (forking) and then joining the results of the subtasks. It is used to exploit the multiple processors available in a system.
25. How does Java handle memory leaks?
Answer: Java handles memory leaks using garbage collection, which automatically removes unused objects from memory. However, poorly written code (e.g., holding onto references longer than necessary) can still cause memory leaks.
26. Explain the difference between Callable
and Runnable
interfaces.
Answer:
- Runnable: Represents a task that can be executed by a thread. It does not return any result and cannot throw checked exceptions.
- Callable: Similar to
Runnable
but can return a result and throw a checked exception. It is part of thejava.util.concurrent
package.
27. What is the Future
interface in Java?
Answer:
The Future
interface represents the result of an asynchronous computation. Methods provided include isDone()
, get()
, cancel()
, and isCancelled()
. It is used in conjunction with Callable
to get the result of an asynchronous task.
28. Explain the Java Memory Model (JMM).
Answer: JMM defines how threads interact through memory and what behaviors are legal in concurrent executions. It specifies the visibility of variables across threads and ordering of reads and writes to variables.
29. What are Java Atomic
classes?
Answer:
Atomic
classes (like AtomicInteger
, AtomicLong
, AtomicReference
) provide a way of updating variables atomically without using synchronization. They are part of the java.util.concurrent.atomic
package and use low-level concurrency primitives.
30. How does the volatile
keyword differ from synchronized
?
Answer:
- volatile: Ensures visibility of changes to variables across threads but does not provide atomicity or mutual exclusion.
- synchronized: Provides both mutual exclusion and visibility, ensuring that only one thread can access a block of code or method at a time.
31. Explain what a ThreadLocal
variable is.
Answer:
ThreadLocal
provides thread-local variables. Each thread accessing such a variable has its own independent copy of the variable. It is useful for maintaining per-thread context.
32. What is the use of Phaser
in Java?
Answer:
Phaser
is a more flexible and reusable synchronization barrier that supports adjustable phases, where threads can wait for others to reach a common barrier point. It's part of java.util.concurrent
.
33. How does Java implement polymorphism?
Answer: Polymorphism in Java is implemented through method overriding (runtime polymorphism) and method overloading (compile-time polymorphism). It allows objects to be treated as instances of their parent class or interface.
34. Explain Java's Stream API
and its benefits.
Answer:
The Stream API
, introduced in Java 8, allows for functional-style operations on streams of elements. Benefits include cleaner and more readable code, ease of parallel processing, and powerful operations like map, filter, and reduce.
35. What is the difference between HashMap
and ConcurrentHashMap
?
Answer:
- HashMap: Not thread-safe and can be used in a single-threaded environment.
- ConcurrentHashMap: Thread-safe and allows concurrent read and write operations. It divides the map into segments to reduce contention.
36. How does the CompletableFuture
class enhance concurrency in Java?
Answer:
CompletableFuture
in Java 8 enhances concurrency by providing a way to write non-blocking, asynchronous code. It supports combinatory operations like thenApply()
, thenAccept()
, and thenCombine()
for chaining multiple async tasks.
37. What is the difference between yield()
, sleep()
, and wait()
?
Answer:
- yield(): Hints the thread scheduler to give other threads of the same priority a chance to run.
- sleep(): Pauses the thread execution for a specified period.
- wait(): Causes the current thread to wait until another thread invokes
notify()
ornotifyAll()
on the same object.
38. Explain the concept of ReentrantLock
.
Answer:
ReentrantLock
is a lock implementation that allows the same thread to acquire the lock multiple times. It provides more flexibility than synchronized
blocks, including timed lock waits, and interruptible lock acquisition.
39. What is the ForkJoinPool
in Java?
Answer:
ForkJoinPool
is a specialized implementation of the ExecutorService
that supports the creation and processing of tasks using the fork/join paradigm, where tasks can be recursively split into smaller sub-tasks.
40. Explain the purpose of the CountDownLatch
.
Answer:
CountDownLatch
is a synchronization aid that allows one or more threads to wait until a set of operations being performed in other threads completes. It works by having a counter that threads decrement and wait on.
41. What are SoftReference
, WeakReference
, and PhantomReference
?
Answer:
- SoftReference: References that are cleared at the discretion of the garbage collector in response to memory demand.
- WeakReference: References that are cleared as soon as the garbage collector detects they are only weakly reachable.
- PhantomReference: References that are used to track the garbage collection process. They are enqueued after the collector determines that an object is phantom reachable.
42. Describe the Optional
class introduced in Java 8.
Answer:
Optional
is a container object which may or may not contain a non-null value. It provides methods to check for the presence of a value, return a value if present, or return a default value otherwise. It helps avoid null checks and NullPointerException.
43. How does try-with-resources
statement work in Java?
Answer:
The try-with-resources
statement ensures that each resource declared within it is closed at the end of the statement. It works with any object that implements the AutoCloseable
interface.
44. What is the role of the Default
method in interfaces?
Answer: Default methods, introduced in Java 8, allow methods to have a body in interfaces. They enable interfaces to evolve by adding new methods without breaking existing implementations.
45. Explain the concept of Functional Interfaces
in Java.
Answer:
A functional interface is an interface with exactly one abstract method. They can be implemented using lambda expressions, method references, or constructor references. Examples include Runnable
, Callable
, and custom interfaces annotated with @FunctionalInterface
.
46. What is the purpose of the Collectors
class in Java Streams?
Answer:
Collectors
provides a series of utility methods for accumulating elements of streams into collections, summarizing statistics, and concatenating strings. It supports common operations like toList(), toSet(), groupingBy(), and partitioningBy().
47. Explain the concept of immutable
classes in Java.
Answer:
Immutable classes are classes whose instances cannot be modified after creation. All fields are final and private, and no setters are provided. Examples include String
and wrapper classes like Integer
and Double
.
48. What is the difference between wait()
and sleep()
?
Answer:
- wait(): Releases the lock held by the thread and puts the thread into waiting state until another thread invokes
notify()
ornotifyAll()
on the same object. - sleep(): Puts the thread into a sleeping state for a specified duration without releasing the lock.
49. Explain what a java.util.concurrent.Executor
is.
Answer:
Executor
is an interface that represents an object which executes submitted Runnable
tasks. It provides a way to decouple task submission from the details of how each task will be run, including thread use and scheduling.
50. How does Deadlock
occur and how can it be avoided?
Answer: Deadlock occurs when two or more threads are blocked forever, waiting for each other to release resources. It can be avoided by following practices like acquiring locks in a consistent order, using timeout for lock acquisition, and avoiding unnecessary locks.
Conclusion
These 50 questions cover a wide range of topics and concepts that are essential for a Java developer with 5 years of experience. Make sure to understand the underlying principles and be ready to provide examples or elaborate further if needed. Good luck with your interview preparation!
Comments
Post a Comment
Leave Comment