Explain the difference between HashMap, LinkedHashMap, and ConcurrentHashMap.
Follow-up: How does ConcurrentHashMap handle concurrency internally?
What is the difference between synchronized methods and synchronized blocks?
When would you use a ReentrantLock instead?
In Java 8, what’s the difference between map() and flatMap() in Streams?
Can you give a practical use case (like parsing JSON or DB rows)?
How does the JVM garbage collector decide what memory to free?
Have you tuned GC in production?
What is the difference between final, finally, and finalize in Java?