Interviewfrage für Java-Entwickler

Wie profilst du einen Java-Service in Produktion, ohne ihn offline zu nehmen?

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

Kurzantwort

Nimm Flight Recorder, der in der JVM eingebaut und für dauerhafte Aufzeichnung mit geringem Overhead ausgelegt ist. Starte ihn mit jcmd auf einem laufenden Prozess, nimm ein Fenster auf und öffne die Aufzeichnung in Mission Control, um heiße Methoden, Allokation nach Ort, Lock Contention, Garbage Collection und Exception-Raten zu sehen. Für Flame Graphs, die native und Java-Frames zusammen zeigen, ist ein Async Profiler der übliche Begleiter, und für Leaks bleiben Heap Dumps das Werkzeug.

Warum Interviewer das fragen

Der Interviewer prüft, ob du ein laufendes System mit echtem Werkzeug untersuchen kannst, statt Timing-Logs einzubauen und neu zu deployen. Zu wissen, dass Flight Recorder mitgeliefert wird und in Produktion sicher läuft, und dass die interessanten Ansichten Allokation und Lock Contention sind statt nur CPU, ist der Unterschied. Es öffnet außerdem die Diskussion über ehrliches Profiling, denn ein Benchmark auf einem warmen JIT ist nicht dasselbe wie Produktion.

So baust du deine Antwort auf

  • Nenn das eingebaute Werkzeug und warum es in Produktion sicher ist.
  • Beschreib, wie du eine Aufzeichnung auf einem laufenden Prozess startest.
  • Sag, welche Ansichten du dir in welcher Reihenfolge anschaust.
  • Ergänze begleitende Werkzeuge für Leaks und Flame Graphs.

Beispielantwort

Gesprochenes Beispiel, erste Person

Zuerst Flight Recorder, weil er mit der JVM kommt und das Standardprofil geringen genug Overhead hat, um dauerhaft zu laufen. Ich hänge mich mit jcmd an den laufenden Prozess, zeichne ein paar Minuten auf, in denen das langsame Verhalten vorkommt, dumpe das und öffne es in Mission Control. Die Reihenfolge, in der ich schaue, hängt vom Symptom ab. Bei CPU gehe ich auf heiße Methoden, bei Latenz lerne ich aber meist mehr aus der Allokation nach Aufrufort, denn übermäßige Allokation treibt die Sammelpausen, und aus der Lock Contention, wo ein synchronized-Block in einem heißen Pfad sofort auffällt. Garbage Collection und Exception-Raten liegen in derselben Aufzeichnung, ich kann also korrelieren statt zu raten. Will ich einen Flame Graph, der native Frames neben Java zeigt, nehme ich einen Async Profiler, der außerdem den Safepoint-Bias vermeidet, den ältere Sampling-Profiler hatten. Für Memory Leaks ist das Werkzeug ein Heap Dump und ein Dominator Tree, denn ein Profil zeigt mir Allokation, nicht Retention. Und ich vergleiche immer gegen eine Baseline-Aufzeichnung aus einer gesunden Phase, denn ein Profil allein hat kein Gefühl dafür, was normal ist.

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

  • Welchen Overhead fügt das Standardprofil von Flight Recorder hinzu?
  • Was ist Safepoint-Bias, und warum ist er für Profiler wichtig?
  • Wie würdest du ein Startup-Problem statt eines Dauerbetriebsproblems profilen?

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