Interviewfrage für Java-Entwickler

Requests auf einen Endpoint hängen ewig, während der Rest des Service in Ordnung ist. Wie diagnostizierst du das?

Worauf der Interviewer abzielt, wie du deine Antwort aufbaust und ein gesprochenes Beispiel zum Anpassen.

Kurzantwort

Zieh einen Thread Dump mit jstack oder jcmd, idealerweise zwei im Abstand von ein paar Sekunden, und schau dir die hängenden Threads an. Die JVM erkennt Lock-Zyklen und druckt direkt einen Abschnitt zu Java Level Deadlock. Gibt es keinen Zyklus, hängen die Threads wahrscheinlich an einer Ressource wie einem Connection Pool oder einem Socket-Read ohne Timeout. Behebe es, indem du Locks konsistent ordnest, den kritischen Abschnitt verkleinerst oder Timeouts ergänzt.

Warum Interviewer das fragen

Der Interviewer will wissen, ob du eine laufende JVM debuggen kannst und nicht nur Code lesen. Sofort zum Thread Dump zu greifen und zu wissen, dass die JVM den Deadlock für dich benennt, ist das Glaubwürdigkeitssignal. Sie fragen außerdem nach Prävention: konsistente Lock-Reihenfolge, tryLock mit Timeout und niemals einen Remote-Call machen, während man ein Lock hält, denn so entstehen die meisten echten Deadlocks.

So baust du deine Antwort auf

  • Zieh mehrere Thread Dumps und vergleich, was hängt.
  • Such den Deadlock-Abschnitt, dann die Zustände blocked und waiting.
  • Unterscheid einen Lock-Zyklus von Ressourcenhunger oder einem fehlenden Timeout.
  • Nenn die Präventionsregeln, die du im Code anwendest.

Beispielantwort

Gesprochenes Beispiel, erste Person

Das Erste ist ein Thread Dump, und ich ziehe zwei oder drei im Abstand von ein paar Sekunden, damit ich unterscheiden kann, was wirklich hängt und was nur beschäftigt ist. Die JVM nimmt mir hier viel ab: halten zwei Threads gegenseitig ihre Monitore, druckt sie einen Abschnitt zu Java Level Deadlock, der beide Threads und beide Locks benennt, und die Stacktraces sagen mir dann genau, welche Methoden ich anschauen muss. Gibt es keinen Zyklus, sieht das Muster meist anders aus: Dutzende Threads warten auf denselben Connection Pool, was bedeutet, dass irgendetwas Verbindungen festhält statt eines klassischen Deadlocks, oder Threads hängen in einem Socket-Read ohne konfiguriertes Timeout, was unendlich blockiert, wenn die Gegenstelle nicht mehr antwortet. Zur Prävention habe ich ein paar Regeln. Locks werden in konsistenter Reihenfolge geholt, und ich dokumentiere diese Reihenfolge, wenn es zwei gibt. Ich halte den kritischen Abschnitt so klein wie möglich und mache nie einen Netzwerkaufruf und veröffentliche nie eine Nachricht, während ich ein Lock halte. Und wo das Design es erlaubt, nutze ich tryLock mit Timeout, damit Contention zu einem behandelten Fehler degradiert statt zu einem Hänger.

Steht dieses Vorstellungsgespräch bald an? GhostPilot hört bei deinem Live-Call mit, erkennt die Frage in dem Moment, in dem sie gestellt wird, und bringt dir eine strukturierte Antwort in Echtzeit auf den Bildschirm. Probier es im nächsten Mock aus, oder hol dir einen $29 Session Pass, kein Abo, für den Ernstfall.

So funktioniert es

Nachfragen, mit denen du rechnen solltest

  • Wie bekommst du einen Thread Dump aus einem Container ohne Shell?
  • Was ist der Unterschied zwischen blocked, waiting und timed waiting in einem Dump?
  • Wie würdest du einen vermuteten Deadlock in einem Test reproduzieren?

Weitere Fragen für Java-Entwickler

Dein Interviewer stellt seine eigene Version davon. Kopier deine echte Stellenbeschreibung in den kostenlosen Question Predictor und bekomm die 20 Fragen, die diese Rolle am wahrscheinlichsten stellt, samt dem, worauf jede wirklich abzielt.

Meine Fragen vorhersagen

Üb die harten Fragen, bevor sie gestellt werden

Trainier mit einem Live-Copiloten und geh dann vorbereitet rein. Ein $29 Session Pass bringt dich durch das Vorstellungsgespräch, ohne Abo und ohne Bindung.

GhostPilot holen