Reads thread dumps and heap dumps
The skill that separates a Java developer from a Spring developer. When the service stops responding, this is the evidence.
Java and Spring Boot, at the scale where the interesting problems are operational. Connection pools, garbage collection pauses, retry storms and a monolith that four teams deploy into. The language is the easy part.
Java problems in a running business are usually about resources rather than algorithms: a pool that is too small, a timeout that is too long, a retry that made an outage worse.
The skill that separates a Java developer from a Spring developer. When the service stops responding, this is the evidence.
Defaults are chosen for a demo. In production they are how one slow dependency takes down four healthy services.
Splitting a monolith badly gives you a distributed monolith, which is the same thing with network calls between the parts.
Annotations are convenient until nobody can say what is actually wired together at startup.
Java 8 to 17 or 21 is a real project with real breakages, and the performance improvement is usually worth it.
Nobody on the bench knows all of this. We shortlist against what your problem actually needs, and tell you where the gaps are.
No algorithm puzzles. Every exercise below is a task this role does in a normal week, and we watch the method more than the answer.
A real dump from a service that stopped responding. We want the blocked threads found and the cause named.
A Kafka consumer that must survive redelivery. The answer reveals whether they have operated a queue or only read about one.
A described monolith. Which seam first, and how do you keep both running during the move.
Four services in a chain, each with a default timeout. Explain what happens when the last one is slow.
You interview every candidate we put forward, so these are yours to use. They separate somebody who has run this in production from somebody who interviews well.
Suspects thread exhaustion or a lock, and goes for a thread dump. Knows that idle CPU with no responses usually means everything is waiting on the same thing.
Restarts it and moves on. It comes back, and it comes back at a worse time.
From the downstream capacity and the request rate, not from a number in a blog post. Knows that a larger pool often makes throughput worse rather than better.
Says bigger is better. This is how one struggling database gets finished off by its own clients retrying.
Exponential backoff with jitter, a cap, and a circuit breaker. Can explain why fixed-interval retries across many clients synchronise into a thundering herd.
Retries three times immediately. Under load this is not recovery, it is an amplifier pointed at whatever is already failing.
Along business capability, one seam at a time, with both paths running until the old one is cold. Asks about transactions that currently span the proposed boundary.
By technical layer or by database table. Both produce services that cannot be deployed independently, which was the entire point.
Both, and it is worth asking. A developer who only knows Spring can be helpless when the problem is below the framework, which in production it frequently is.
Many do, and on the JVM the transition is genuinely small. If your codebase is Kotlin, say so and we will shortlist accordingly rather than assume.
Yes. Oracle-specific experience is worth naming up front because the tuning, the licensing implications and the dialect differences are all real, and they matter more than they should.
Thirty minutes, and a shortlist within a day. If a java developer is the wrong hire for what you described, you will hear that instead.
Either one reaches Umer directly. No forms sitting in a queue.