Interviewfrage für Java-Entwickler

Deine Latenz im 99. Perzentil hat Spitzen, die der Anwendungscode nicht erklärt. Wie prüfst du, ob Garbage Collection dahintersteckt?

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

Kurzantwort

Schalt Garbage-Collection-Logging ein und leg die Zeitstempel der Pausen neben die langsamen Requests. Passen die Spitzen zu den Pausen, schau dir Allokationsrate, Promotion und Heap-Reserve an, bevor du irgendein Flag anfasst, denn die meisten Pausen kommen von zu viel Allokation oder einem zu kleinen Heap. Passen sie nicht, prüf die Time to Safepoint, denn ein langer Safepoint legt jeden Thread lahm und sieht exakt aus wie eine Garbage-Collection-Pause.

Warum Interviewer das fragen

Tail-Latenz zu debuggen ist eine Senior-Fähigkeit, und der Interviewer will Belege statt Raten an Flags. Pausenlogs mit Request-Traces zu korrelieren und zu wissen, dass Safepoints, Page Faults oder ein lauter Container-Nachbar dasselbe Symptom erzeugen, zeigt methodisches Denken. Es verrät außerdem, ob du die Ursache in der Anwendung behebst oder sie mit Collector-Tuning übertünchst.

So baust du deine Antwort auf

  • Hol dir die Daten: Garbage-Collection-Logs plus Zeiten pro Request.
  • Korreliere die Pausenfenster mit den langsamen Requests.
  • Untersuch Allokationsrate und Heap-Dimensionierung, bevor du Flags anfasst.
  • Zieh Ursachen außerhalb der Garbage Collection in Betracht, etwa Safepoints oder die Plattform.

Beispielantwort

Gesprochenes Beispiel, erste Person

Ich will zwei Zeitleisten. Unified Logging gibt mir jede Pause mit Ursache und Dauer, meine Traces geben mir die langsamen Requests, die erste Frage ist also schlicht, ob sich das deckt. Wenn ja, widerstehe ich dem Impuls, Flags zu ändern, und schaue nach dem Warum. Meistens alloziert der Service pro Request enorm, etwa Zwischenlisten in einer Schleife oder das Loggen eines serialisierten Payloads bei jedem Aufruf, der Fix ist also, weniger zu allozieren. Manchmal ist der Heap einfach zu knapp und es wird permanent gesammelt, oder der Code alloziert in G1 große Arrays, die zu Humongous Objects werden und sich schlecht verhalten. Erst danach würde ich einen Low-Pause-Collector erwägen, und ich würde das als Tradeoff behandeln, nicht als Gratisgewinn. Korrelieren die Pausen nicht, schaue ich woanders: die Time to Safepoint kann lang sein, selbst wenn die Sammlung selbst kurz ist, ein Thread in einer Counted Loop hält also alle auf. Ich habe auch mal einen Fall gejagt, der sich als CPU-Throttling im Container herausstellte, wo der Prozess komplett von der CPU genommen wurde und kein JVM-Tuning geholfen hätte.

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

  • Was ist ein Safepoint, und warum kann es lange dauern, einen zu erreichen?
  • Wie würdest du die Allokationsrate in einem heißen Request-Pfad senken?
  • Wie zeigt sich CPU-Throttling im Container in den JVM-Metriken?

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