Spaces:
Runtime error
Runtime error
| ### Java Platform | |
| Why is Java so popular? | |
| Java’s popularity stems from platform independence, robust libraries, scalability, and strong community support, making it ideal for enterprise, web, and mobile applications. | |
| What is platform independence? | |
| Platform independence means Java code runs on any device with a JVM, achieved through bytecode compilation, not tied to specific hardware or OS. | |
| What is bytecode? | |
| Bytecode is an intermediate, platform-independent representation of a Java program, generated by the compiler and executed by the JVM. | |
| Compare JDK vs JVM vs JRE. | |
| - JDK: Java Development Kit, includes JRE, compiler, and tools for development. | |
| - JVM: Java Virtual Machine, executes bytecode, platform-specific. | |
| - JRE: Java Runtime Environment, includes JVM and libraries for running Java apps. | |
| What are the important differences between C++ and Java? | |
| - Java is platform-independent; C++ is platform-specific. | |
| - Java uses automatic garbage collection; C++ requires manual memory management. | |
| - Java doesn’t support pointers or multiple inheritance; C++ does. | |
| What is the role for a classloader in Java? | |
| The classloader loads class files into memory, verifies bytecode, and initializes classes for JVM execution. | |
| ### Wrapper Classes | |
| What are Wrapper classes? | |
| Wrapper classes (e.g., Integer, Double) encapsulate primitive types, providing methods and object functionality. | |
| Why do we need Wrapper classes in Java? | |
| Wrapper classes enable primitives to be used in collections, provide utility methods, and support object-oriented operations. | |
| What are the different ways of creating Wrapper class instances? | |
| - Using constructors, e.g., `Integer i = new Integer(10);` | |
| - Using `valueOf()`, e.g., `Integer i = Integer.valueOf(10);` | |
| What are differences in the two ways of creating Wrapper classes? | |
| - Constructors create new objects; `valueOf()` reuses cached objects for efficiency. | |
| - `valueOf()` is preferred for performance and memory optimization. | |
| What is auto boxing? | |
| Auto boxing automatically converts primitives to their wrapper class, e.g., `int` to `Integer`. | |
| What are the advantages of auto boxing? | |
| Simplifies code, improves readability, and enables seamless use of primitives in collections. | |
| What is casting? | |
| Casting converts a variable from one type to another, e.g., `int` to `double`. | |
| What is implicit casting? | |
| Implicit casting automatically converts a smaller type to a larger type, e.g., `int i = 10; double d = i;`. | |
| What is explicit casting? | |
| Explicit casting manually converts a larger type to a smaller type, e.g., `double d = 10.5; int i = (int) d;`. | |
| ### Strings | |
| Are all String’s immutable? | |
| Yes, String objects are immutable; their values cannot be changed after creation. | |
| Where are String values stored in memory? | |
| String literals are stored in the String Pool (Heap); new String objects are in the Heap. | |
| Why should you be careful about String concatenation (+) operator in loops? | |
| The `+` operator creates new String objects per iteration, causing memory overhead and performance issues. | |
| How do you solve above problem? | |
| Use `StringBuilder` or `StringBuffer` for concatenation in loops to avoid creating multiple objects. | |
| What are differences between String and StringBuffer? | |
| - String is immutable; StringBuffer is mutable. | |
| - StringBuffer is thread-safe; String is not inherently thread-safe. | |
| What are differences between StringBuilder and StringBuffer? | |
| - StringBuilder is not thread-safe, faster; StringBuffer is thread-safe, slower. | |
| - StringBuilder is preferred for single-threaded applications. | |
| Can you give examples of different utility methods in String class? | |
| - `length()`: Returns string length. | |
| - `substring(int, int)`: Extracts a substring. | |
| - `toUpperCase()`: Converts to uppercase. | |
| - `indexOf(String)`: Finds substring position. | |
| ### Object-Oriented Programming Basics | |
| What is a class? | |
| A class is a blueprint defining properties and behaviors for creating objects. | |
| What is an object? | |
| An object is an instance of a class, representing a specific entity with state and behavior. | |
| What is state of an object? | |
| State is the data (fields) of an object, e.g., a `Car`’s color and speed. | |
| What is behavior of an object? | |
| Behavior is the methods defining what an object can do, e.g., `Car`’s `drive()` method. | |
| What is the super class of every class in Java? | |
| `Object` is the superclass of all classes in Java. | |
| Explain about toString method? | |
| `toString()` returns a string representation of an object, often overridden for meaningful output. | |
| What is the use of equals method in Java? | |
| `equals()` compares two objects for equality based on their content, not reference. | |
| What are the important things to consider when implementing equals method? | |
| - Reflexive, symmetric, transitive, consistent. | |
| - Handle null checks and type compatibility. | |
| What is the Hashcode method used for in Java? | |
| `hashCode()` generates an integer for objects, used in hash-based collections like HashMap. | |
| Explain inheritance with examples. | |
| Inheritance allows a class to inherit properties/methods from another, e.g., `class Dog extends Animal {}` inherits `eat()`. | |
| What is method overloading? | |
| Method overloading defines multiple methods with the same name but different parameters. | |
| What is method overriding? | |
| Method overriding redefines a superclass method in a subclass with the same signature. | |
| Can super class reference variable can hold an object of sub class? | |
| Yes, e.g., `Animal a = new Dog();` (polymorphism). | |
| Is multiple inheritance allowed in Java? | |
| No, Java supports single inheritance for classes but allows multiple interfaces. | |
| What is an interface? | |
| An interface defines a contract of methods that implementing classes must provide. | |
| How do you define an interface? | |
| `interface MyInterface { void myMethod(); }` | |
| How do you implement an interface? | |
| `class MyClass implements MyInterface { public void myMethod() {} }` | |
| Can you explain a few tricky things about interfaces? | |
| - Methods are implicitly public/abstract (pre-Java 8). | |
| - Default/static methods (Java 8+) can have implementations. | |
| - Cannot instantiate interfaces. | |
| Can you extend an interface? | |
| Yes, e.g., `interface Child extends Parent {}`. | |
| Can a class extend multiple interfaces? | |
| Yes, e.g., `class MyClass implements Interface1, Interface2 {}`. | |
| What is an abstract class? | |
| An abstract class cannot be instantiated and may contain abstract methods. | |
| When do you use an abstract class? | |
| Use for shared code among related classes, e.g., `abstract class Vehicle` for `Car` and `Bike`. | |
| How do you define an abstract method? | |
| `abstract void myMethod();` in an abstract class. | |
| Compare abstract class vs interface? | |
| - Abstract classes can have state and implementations; interfaces (pre-Java 8) cannot. | |
| - Classes can implement multiple interfaces, but inherit one abstract class. | |
| What is a constructor? | |
| A constructor initializes an object when created, with the same name as the class. | |
| What is a default constructor? | |
| A default constructor is a no-argument constructor automatically provided if none is defined. | |
| Will this code compile? | |
| Please provide the code to evaluate. | |
| How do you call a super class constructor from a constructor? | |
| Use `super(args)` as the first statement in a subclass constructor. | |
| Will this code compile? | |
| Please provide the code to evaluate. | |
| What is the use of this()? | |
| `this()` calls another constructor in the same class, used for constructor chaining. | |
| Can a constructor be called directly from a method? | |
| No, constructors are called only during object creation with `new`. | |
| Is a super class constructor called even when there is no explicit call from a sub class constructor? | |
| Yes, the superclass’s no-arg constructor is called implicitly if no `super()` is specified. | |
| ### Advanced Object-Oriented Concepts | |
| What is polymorphism? | |
| Polymorphism allows objects to be treated as their superclass type or behave differently based on subtype, e.g., method overriding. | |
| What is the use of instanceof operator in Java? | |
| `instanceof` checks if an object is an instance of a class or interface, e.g., `obj instanceof String`. | |
| What is coupling? | |
| Coupling is the dependency between classes; low coupling improves modularity. | |
| What is cohesion? | |
| Cohesion is how well a class’s methods and data work together for a single purpose; high cohesion is desirable. | |
| What is encapsulation? | |
| Encapsulation hides data and exposes methods to control access, using private fields and public getters/setters. | |
| What is an inner class? | |
| An inner class is defined inside another class, accessing its enclosing class’s members. | |
| What is a static inner class? | |
| A static inner class is a nested class declared `static`, not tied to an instance of the outer class. | |
| Can you create an inner class inside a method? | |
| Yes, a local inner class can be defined inside a method. | |
| What is an anonymous class? | |
| An anonymous class is an unnamed class defined inline, often for one-time use, e.g., `new Runnable() {}`. | |
| ### Modifiers | |
| What is default class modifier? | |
| Default (package-private) restricts class access to the same package if no modifier is specified. | |
| What is private access modifier? | |
| Private restricts access to the class itself, e.g., private fields or methods. | |
| What is default or package access modifier? | |
| Default allows access within the same package if no modifier is specified. | |
| What is protected access modifier? | |
| Protected allows access within the same package and subclasses in different packages. | |
| What is public access modifier? | |
| Public allows access from everywhere. | |
| What access types of variables can be accessed from a class in same package? | |
| Public, protected, and default variables can be accessed. | |
| What access types of variables can be accessed from a class in different package? | |
| Only public variables can be accessed. | |
| What access types of variables can be accessed from a sub class in same package? | |
| Public, protected, and default variables are accessible. | |
| What access types of variables can be accessed from a sub class in different package? | |
| Public and protected variables are accessible. | |
| What is the use of a final modifier on a class? | |
| `final` prevents a class from being subclassed, e.g., `final class MyClass`. | |
| What is the use of a final modifier on a method? | |
| `final` prevents a method from being overridden in subclasses. | |
| What is a final variable? | |
| A `final` variable cannot be reassigned after initialization. | |
| What is a final argument? | |
| A `final` argument cannot be modified within a method. | |
| What happens when a variable is marked as volatile? | |
| `volatile` ensures visibility of variable changes across threads, preventing caching. | |
| What is a static variable? | |
| A `static` variable belongs to the class, shared across all instances. | |
| ### Conditions & Loops | |
| Why should you always use blocks around if statement? | |
| Blocks `{}` ensure clarity and prevent errors when adding statements to single-line `if`. | |
| Guess the output. | |
| Please provide the code to evaluate. | |
| Guess the output. | |
| Please provide the code to evaluate. | |
| Guess the output of this switch block. | |
| Please provide the switch block code to evaluate. | |
| Guess the output of this switch block? | |
| Please provide the switch block code to evaluate. | |
| Should default be the last case in a switch statement? | |
| Yes, `default` is typically last, but it can be anywhere; it executes if no cases match. | |
| Can a switch statement be used around a String? | |
| Yes, since Java 7, `switch` supports String objects. | |
| Guess the output of this for loop. | |
| Please provide the for loop code to evaluate. | |
| What is an enhanced for loop? | |
| An enhanced for loop (`for-each`) iterates over arrays/collections, e.g., `for (int i : array)`. | |
| What is the output of the for loop below? | |
| Please provide the for loop code to evaluate. | |
| What is the output of the program below? | |
| Please provide the program code to evaluate. | |
| What is the output of the program below? | |
| Please provide the program code to evaluate. | |
| ### Exception Handling | |
| Why is exception handling important? | |
| Exception handling ensures robust programs by managing errors gracefully, preventing crashes. | |
| What design pattern is used to implement exception handling features in most languages? | |
| The Chain of Responsibility pattern is used, passing exceptions up the call stack. | |
| What is the need for finally block? | |
| The `finally` block executes cleanup code (e.g., closing resources) regardless of exception. | |
| In what scenarios is code in finally not executed? | |
| `finally` is skipped if the JVM exits, `System.exit()` is called, or the thread is interrupted. | |
| Will finally be executed in the program below? | |
| Please provide the code to evaluate. | |
| Is try without a catch is allowed? | |
| Yes, `try` can be used with `finally` without `catch`. | |
| Is try without catch and finally allowed? | |
| No, `try` requires either `catch` or `finally`. | |
| Can you explain the hierarchy of exception handling classes? | |
| `Throwable` is the root, with `Error` (system issues) and `Exception` (program issues, checked/unchecked). | |
| What is the difference between error and exception? | |
| Errors are severe (e.g., OutOfMemoryError); exceptions are recoverable (e.g., IOException). | |
| What is the difference between checked exceptions and unchecked exceptions? | |
| Checked exceptions (e.g., IOException) require handling; unchecked (e.g., NullPointerException) do not. | |
| How do you throw an exception from a method? | |
| Use `throw new ExceptionType("message");`. | |
| What happens when you throw a checked exception from a method? | |
| It must be declared with `throws` in the method signature or handled in a `try-catch`. | |
| What are the options you have to eliminate compilation errors when handling checked exceptions? | |
| - Use `try-catch` to handle the exception. | |
| - Declare with `throws` to pass it up. | |
| How do you create a custom exception? | |
| Extend `Exception` or `RuntimeException`, e.g., `class MyException extends Exception {}`. | |
| How do you handle multiple exception types with same exception handling block? | |
| Use multi-catch, e.g., `catch (IOException | SQLException e)`. | |
| Can you explain about try with resources? | |
| `try-with-resources` automatically closes resources implementing `AutoCloseable`, e.g., `try (FileReader fr = new FileReader("file")) {}`. | |
| How does try with resources work? | |
| Resources declared in `try()` are closed automatically after execution, even if exceptions occur. | |
| Can you explain a few exception handling best practices? | |
| - Catch specific exceptions. | |
| - Use `try-with-resources` for resource management. | |
| - Log exceptions for debugging. | |
| - Avoid empty catch blocks. | |
| ### Miscellaneous Topics | |
| What are the default values in an array? | |
| Primitives: 0 (numbers), `false` (boolean); objects: `null`. | |
| How do you loop around an array using enhanced for loop? | |
| `for (Type element : array) { System.out.println(element); }` | |
| How do you print the content of an array? | |
| Use `Arrays.toString(array)` or loop through elements. | |
| How do you compare two arrays? | |
| Use `Arrays.equals(array1, array2)` for content comparison. | |
| What is an enum? | |
| An `enum` defines a fixed set of constants, e.g., `enum Day { MONDAY, TUESDAY }`. | |
| Can you use a switch statement around an enum? | |
| Yes, `switch` works with enums, e.g., `switch (day) { case MONDAY: ... }`. | |
| What are variable arguments or varargs? | |
| Varargs (`Type... args`) allow a method to accept variable numbers of arguments. | |
| What are asserts used for? | |
| Asserts validate assumptions during development, throwing `AssertionError` if false. | |
| When should asserts be used? | |
| Use in testing/development to catch logical errors, not in production. | |
| What is garbage collection? | |
| Garbage collection reclaims memory from unused objects automatically. | |
| Can you explain garbage collection with an example? | |
| `Object obj = new Object(); obj = null;` makes the object eligible for garbage collection. | |
| When is garbage collection run? | |
| It runs automatically when memory is low or during idle periods. | |
| What are best practices on garbage collection? | |
| - Avoid unnecessary object creation. | |
| - Null out references when done. | |
| - Use weak references for caches. | |
| What are initialization blocks? | |
| Initialization blocks are code blocks for initializing instance/static variables. | |
| What is a static initializer? | |
| A `static {}` block initializes static variables when a class is loaded. | |
| What is an instance initializer block? | |
| An `{}` block initializes instance variables before constructors. | |
| What is tokenizing? | |
| Tokenizing splits a string into smaller parts (tokens) based on delimiters. | |
| Can you give an example of tokenizing? | |
| `StringTokenizer st = new StringTokenizer("a,b,c", ",");` splits into "a", "b", "c". | |
| What is serialization? | |
| Serialization converts an object to a byte stream for storage or transmission. | |
| How do you serialize an object using serializable interface? | |
| Implement `Serializable` and use `ObjectOutputStream` to write the object. | |
| How do you de-serialize in Java? | |
| Use `ObjectInputStream` to read a serialized object back into memory. | |
| What do you do if only parts of the object have to be serialized? | |
| Use `transient` to exclude fields from serialization. | |
| How do you serialize a hierarchy of objects? | |
| Ensure all classes in the hierarchy implement `Serializable`. | |
| Are the constructors in an object invoked when it is de-serialized? | |
| No, constructors are not called during deserialization. | |
| Are the values of static variables stored when an object is serialized? | |
| No, static variables are not serialized as they belong to the class. | |
| ### Collections | |
| Why do we need collections in Java? | |
| Collections provide dynamic, flexible data structures for storing and manipulating data. | |
| What are the important interfaces in the collection hierarchy? | |
| `Collection`, `List`, `Set`, `Map`, `Queue`, `Deque`. | |
| What are the important methods that are declared in the collection interface? | |
| `add()`, `remove()`, `size()`, `contains()`, `iterator()`. | |
| Can you explain briefly about the List interface? | |
| `List` is an ordered, index-based collection allowing duplicates, e.g., `ArrayList`. | |
| Explain about ArrayList with an example? | |
| `ArrayList list = new ArrayList(); list.add("item");` – dynamic, resizable list. | |
| Can an ArrayList have duplicate elements? | |
| Yes, `ArrayList` allows duplicates. | |
| How do you iterate around an ArrayList using iterator? | |
| `Iterator<String> it = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); }` | |
| How do you sort an ArrayList? | |
| Use `Collections.sort(list)` or `list.sort(Comparator)`. | |
| How do you sort elements in an ArrayList using comparable interface? | |
| Implement `Comparable` in the class and use `Collections.sort(list)`. | |
| How do you sort elements in an ArrayList using comparator interface? | |
| Use `Collections.sort(list, new Comparator<Type>() { ... })` or `list.sort(comparator)`. | |
| What is vector class? How is it different from an ArrayList? | |
| `Vector` is synchronized; `ArrayList` is not, making `ArrayList` faster for single-threaded use. | |
| What is linkedList? What interfaces does it implement? How is it different from an ArrayList? | |
| `LinkedList` implements `List` and `Deque`; it’s a doubly-linked list, better for insertions/deletions than `ArrayList`. | |
| Can you briefly explain about the Set interface? | |
| `Set` is a collection with no duplicates, e.g., `HashSet`, `TreeSet`. | |
| What are the important interfaces related to the Set interface? | |
| `SortedSet`, `NavigableSet`. | |
| What is the difference between Set and sortedSet interfaces? | |
| `SortedSet` maintains sorted order; `Set` does not. | |
| Can you give examples of classes that implement the Set interface? | |
| `HashSet`, `LinkedHashSet`, `TreeSet`. | |
| What is a HashSet? | |
| `HashSet` is an unordered set with fast lookup, no duplicates. | |
| What is a linkedHashSet? How is different from a HashSet? | |
| `LinkedHashSet` maintains insertion order; `HashSet` does not. | |
| What is a TreeSet? How is different from a HashSet? | |
| `TreeSet` is sorted; `HashSet` is unordered, faster for lookups. | |
| Can you give examples of implementations of navigableSet? | |
| `TreeSet`, `ConcurrentSkipListSet`. | |
| Explain briefly about Queue interface? | |
| `Queue` supports FIFO operations, e.g., `add()`, `poll()`. | |
| What are the important interfaces related to the Queue interface? | |
| `Deque`, `BlockingQueue`. | |
| Explain about the Deque interface? | |
| `Deque` (double-ended queue) supports adding/removing from both ends. | |
| Explain the BlockingQueue interface? | |
| `BlockingQueue` supports thread-safe queuing with blocking operations for full/empty queues. | |
| What is a priorityQueue? | |
| `PriorityQueue` orders elements based on priority (natural or custom). | |
| Can you give example implementations of the BlockingQueue interface? | |
| `ArrayBlockingQueue`, `LinkedBlockingQueue`, `PriorityBlockingQueue`. | |
| Can you briefly explain about the Map interface? | |
| `Map` stores key-value pairs, e.g., `HashMap`, no duplicate keys. | |
| What is difference between Map and sortedMap? | |
| `SortedMap` maintains sorted keys; `Map` does not. | |
| What is a HashMap? | |
| `HashMap` is an unordered key-value store with fast lookups. | |
| What are the different methods in a Hash Map? | |
| `put()`, `get()`, `remove()`, `containsKey()`, `keySet()`. | |
| What is a TreeMap? How is different from a HashMap? | |
| `TreeMap` is sorted by keys; `HashMap` is unordered, faster. | |
| Can you give an example of implementation of navigableMap interface? | |
| `TreeMap`, `ConcurrentSkipListMap`. | |
| What are the static methods present in the collections class? | |
| `sort()`, `reverse()`, `shuffle()`, `max()`, `min()`. | |
| ### Advanced Collections | |
| What is the difference between synchronized and concurrent collections in Java? | |
| Synchronized collections (e.g., `Vector`) lock fully; concurrent collections (e.g., `ConcurrentHashMap`) allow partial concurrency, improving performance. | |
| Explain about the new concurrent collections in Java? | |
| `ConcurrentHashMap`, `CopyOnWriteArrayList`, `BlockingQueue` support thread-safe operations with better concurrency. | |
| Explain about copyonwrite concurrent collections approach? | |
| `CopyOnWriteArrayList` creates a new copy on write operations, ideal for read-heavy scenarios. | |
| What is compareandswap approach? | |
| Compare-and-swap atomically updates a value if it matches an expected value, used in concurrent collections. | |
| What is a lock? How is it different from using synchronized approach? | |
| A `Lock` (e.g., `ReentrantLock`) offers flexible locking; `synchronized` is simpler but less configurable. | |
| What is initial capacity of a Java collection? | |
| Initial capacity is the starting size of a collection, e.g., `new ArrayList(10)`. | |
| What is load factor? | |
| Load factor determines when a collection (e.g., `HashMap`) resizes, typically 0.75. | |
| When does a Java collection throw UnsupportedOperationException? | |
| When an unmodifiable collection (e.g., `Collections.unmodifiableList()`) is modified. | |
| What is difference between fail-safe and fail-fast iterators? | |
| Fail-fast throws `ConcurrentModificationException` on modification; fail-safe (e.g., `CopyOnWriteArrayList`) works on a snapshot. | |
| What are atomic operations in Java? | |
| Atomic operations (e.g., `AtomicInteger.incrementAndGet()`) are thread-safe without locks. | |
| What is BlockingQueue in Java? | |
| `BlockingQueue` is a thread-safe queue with blocking operations for full/empty states. | |
| ### Generics | |
| What are Generics? | |
| Generics enable type-safe collections and methods, e.g., `List<String>`. | |
| Why do we need Generics? Can you give an example of how Generics make a program more flexible? | |
| Generics ensure type safety and eliminate casting. Example: `List<String> list = new ArrayList<>();` avoids runtime type errors. | |
| How do you declare a generic class? | |
| `class MyClass<T> { T field; }` | |
| What are the restrictions in using generic type that is declared in a class declaration? | |
| Cannot use primitive types or create instances of the generic type (`new T()`). | |
| How can we restrict Generics to a subclass of particular class? | |
| Use `extends`, e.g., `class MyClass<T extends Number>`. | |
| How can we restrict Generics to a super class of particular class? | |
| Use `super`, e.g., `class MyClass<T super Integer>` (rare, used in wildcards). | |
| Can you give an example of a generic method? | |
| `<T> void print(T item) { System.out.println(item); }` | |
| ### Multi Threading | |
| What is the need for threads in Java? | |
| Threads enable concurrent execution, improving performance for tasks like I/O or computations. | |
| How do you create a thread? | |
| Extend `Thread` or implement `Runnable` and pass to a `Thread` object. | |
| How do you create a thread by extending thread class? | |
| `class MyThread extends Thread { public void run() { ... } }` | |
| How do you create a thread by implementing runnable interface? | |
| `class MyRunnable implements Runnable { public void run() { ... } } Thread t = new Thread(new MyRunnable());` | |
| How do you run a thread in Java? | |
| Call `thread.start()` to execute the `run()` method in a new thread. | |
| What are the different states of a thread? | |
| New, Runnable, Blocked, Waiting, Timed Waiting, Terminated. | |
| What is priority of a thread? How do you change the priority of a thread? | |
| Priority (1-10) affects thread scheduling; set with `thread.setPriority(Thread.MAX_PRIORITY)`. | |
| What is executorservice? | |
| `ExecutorService` manages a pool of threads for task execution. | |
| Can you give an example for executorservice? | |
| `ExecutorService es = Executors.newFixedThreadPool(2); es.submit(() -> System.out.println("Task"));` | |
| Explain different ways of creating executor services. | |
| - `Executors.newFixedThreadPool(n)`: Fixed-size thread pool. | |
| - `Executors.newCachedThreadPool()`: Dynamic thread pool. | |
| - `Executors.newSingleThreadExecutor()`: Single-thread executor. | |
| How do you check whether an executionservice task executed successfully? | |
| Use `Future.get()` to retrieve results or catch exceptions. | |
| What is callable? How do you execute a callable from executionservice? | |
| `Callable` returns a value; submit with `Future result = es.submit(new Callable<Type>() { ... });`. | |
| What is synchronization of threads? | |
| Synchronization ensures thread-safe access to shared resources using locks. | |
| Can you give an example of a synchronized block? | |
| `synchronized(obj) { // critical section }` | |
| Can a static method be synchronized? | |
| Yes, using `synchronized static void method()` or `synchronized(ClassName.class)`. | |
| What is the use of join method in threads? | |
| `join()` makes a thread wait for another thread to complete. | |
| Describe a few other important methods in threads? | |
| `sleep()`, `yield()`, `interrupt()`, `isAlive()`. | |
| What is a deadlock? | |
| A deadlock occurs when threads hold resources each other needs, causing a standstill. | |
| What are the important methods in Java for inter-thread communication? | |
| `wait()`, `notify()`, `notifyAll()`. | |
| What is the use of wait method? | |
| `wait()` makes a thread wait until notified, releasing the lock. | |
| What is the use of notify method? | |
| `notify()` wakes one waiting thread holding the same lock. | |
| What is the use of notifyall method? | |
| `notifyAll()` wakes all waiting threads holding the same lock. | |
| Can you write a synchronized program with wait and notify methods? | |
| ```java | |
| class Shared { | |
| synchronized void produce() throws InterruptedException { | |
| wait(); | |
| System.out.println("Produced"); | |
| } | |
| synchronized void consume() throws InterruptedException { | |
| notify(); | |
| System.out.println("Consumed"); | |
| } | |
| } | |
| ``` | |
| ### Functional Programming - Lambda Expressions and Streams | |
| What is functional programming? | |
| Functional programming emphasizes immutable data, pure functions, and declarative style. | |
| Can you give an example of functional programming? | |
| `list.stream().filter(x -> x > 5).map(x -> x * 2).forEach(System.out::println);` | |
| What is a stream? | |
| A stream is a sequence of elements for processing in a functional style. | |
| Explain about streams with an example? | |
| `List<Integer> list = Arrays.asList(1, 2, 3); list.stream().map(x -> x * 2).collect(Collectors.toList());` doubles each element. | |
| What are intermediate operations in streams? | |
| Intermediate operations (e.g., `filter`, `map`) transform streams and are lazy. | |
| What are terminal operations in streams? | |
| Terminal operations (e.g., `collect`, `forEach`) produce results and close streams. | |
| What are method references? | |
| Method references (`Class::method`) are shorthand for lambda expressions calling methods. | |
| What are lambda expressions? | |
| Lambda expressions (`x -> x * 2`) are anonymous functions for functional interfaces. | |
| Can you give an example of lambda expression? | |
| `Function<Integer, Integer> doubleIt = x -> x * 2;` | |
| Can you explain the relationship between lambda expression and functional interfaces? | |
| Lambda expressions implement functional interfaces (one abstract method), e.g., `Runnable`, `Function`. | |
| What is a predicate? | |
| A `Predicate` is a functional interface testing a condition, e.g., `Predicate<Integer> isEven = x -> x % 2 == 0`. | |
| What is the functional interface - function? | |
| `Function<T, R>` takes an input and returns an output, e.g., `Function<Integer, String> toString = String::valueOf`. | |
| What is a consumer? | |
| A `Consumer` takes an input and performs an action, e.g., `Consumer<String> print = System.out::println`. | |
| Can you give examples of functional interfaces with multiple arguments? | |
| `BiFunction<Integer, Integer, Integer> sum = (a, b) -> a + b;` | |
| ### New Features | |
| What are the new features in Java 5? | |
| Generics, enhanced for loop, autoboxing, enums, varargs, annotations. | |
| What are the new features in Java 6? | |
| Scripting engine, JDBC 4.0, improved garbage collection. | |
| What are the new features in Java 7? | |
| Try-with-resources, switch with String, diamond operator, multi-catch. | |
| What are the new features in Java 8? | |
| Lambda expressions, streams, functional interfaces, default methods, Optional class. |