Java in 2026 is not the Java of 2022. Virtual threads are in production, records are everywhere, and interviewers expect you to know the difference between sealed and non-sealed classes without blinking. Here are the five questions that separate candidates who get the offer from those who don't.
What are virtual threads and when would you use them?
Virtual threads (Project Loom, Java 21+) are lightweight threads managed by the JVM, not the OS. They let you run millions of concurrent tasks without creating millions of OS threads.
When to use: I/O-bound workloads — HTTP handlers, database queries, message consumers. Anywhere you'd use CompletableFuture or a thread pool with blocking calls.
When NOT to use: CPU-intensive tasks. Virtual threads don't make a single computation faster — they solve concurrency, not parallelism.
ReentrantLock instead.What's the difference between a record and a class?
A record is a transparent, immutable data carrier. The compiler auto-generates the constructor, equals(), hashCode(), and toString().
Key differences:
- Records are implicitly
final— can't be extended - Components are
private final— no setters - Can't declare instance fields beyond the record components
- Can implement interfaces but not extend classes
Think of them as Data classes in Kotlin or @data in Lombok, but built into the language with proper semantics.
Explain sealed classes and their use cases
sealed classes restrict which classes can extend them. Combined with pattern matching, they give you exhaustive switch expressions — the compiler forces you to handle every case.
Use case: Domain modeling. Instead of an enum (fixed values), you get a closed hierarchy of types with different fields.
sealed interface Shape permits Circle, Rectangle, Triangle {}
// compiler error if you forget a case in switch
This eliminates instanceof chains and makes refactoring safe — adding a new subtype forces you to update every switch.
How does pattern matching for switch work?
Pattern matching combines type checking, type casting, and destructuring into one syntax:
switch (shape) {
case Circle c -> "circle with radius " + c.radius();
case Rectangle r -> "rectangle " + r.width() + "x" + r.height();
case Triangle t -> "triangle";
}
Guards: case Integer i when i > 100 — add conditions to patterns.
null handling: case null is now valid in switch — no more NullPointerException surprises.
instanceof + cast chains and makes sealed hierarchies useful.What is GraalVM and why does it matter for Java?
GraalVM is a high-performance polyglot VM. For Java, it offers two big things:
- Native Image: Compiles Java to a standalone native binary. Startup in milliseconds, low memory — perfect for serverless, CLI tools, and microservices.
- Truffle language interop: Run Java, JavaScript, Python, and R in the same process with zero-copy data exchange.
Trade-off: Native Image has a long build time and limited reflection support (you need native-image.properties configs). For traditional long-running servers, HotSpot is still fine.
Know all 5? You're ahead of 80% of candidates.
But interviewers don't stop there. Practice the exact questions companies ask — with instant AI explanations for every answer you miss.
Start practicing free →