Interviewfrage für Backend-Entwickler

Ein Service wird alle paar Tage wegen Speichermangel gekillt. Wie untersuchst du das?

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

Kurzantwort

Bestätige zuerst das Muster über die Metriken: stetiges Wachstum deutet auf ein Leck oder einen unbegrenzten Cache, ein steiler Ausschlag auf einen einzelnen Request, der zu viel auf einmal lädt. Nimm ein Heap-Profil vor und nach einer Wachstumsphase und vergleich die gehaltenen Allokationen. Die üblichen Ursachen sind Caches ohne Eviction, wachsende Collections, die an langlebigen Objekten hängen, nicht geschlossene Ressourcen und Endpoints, die ein ganzes Result Set in den Speicher laden.

Warum Interviewer das fragen

Der Interviewer will eine Methode statt einer Vermutung, plus einen Beleg, dass du einen Profiler im Ernstfall benutzt hast. Allmähliches Wachstum von Ausschlägen zu unterscheiden ist die zentrale diagnostische Weiche, und sie ändert, wo du suchst. Er prüft außerdem, ob du Neustarts und ein höheres Speicherlimit als dauerhafte Antwort nimmst, was das Problem nur versteckt, bis sich der Traffic verdoppelt.

So baust du deine Antwort auf

  • Trenn stetiges Wachstum von stoßweiser Allokation anhand der Metriken.
  • Nimm Heap-Profile über ein Wachstumsfenster und vergleich sie.
  • Zähl die üblichen Ursachen auf und prüf die jüngsten Änderungen.
  • Bau ein Schutzgeländer ein, damit es nicht still wiederkommt.

Beispielantwort

Gesprochenes Beispiel, erste Person

Die Form des Graphen sagt mir, wo ich suchen muss. Ein langsamer Anstieg über Tage, der ruhige Phasen übersteht, ist ein Leck oder ein Cache ohne Grenze. Ein Sägezahn, der bei bestimmten Requests ausschlägt, heißt, irgendetwas lädt zu viel auf einmal. Für den ersten Fall nehme ich Heap-Profile im Abstand von ein paar Stunden bei ähnlichem Traffic und diffe sie nach gehaltener Größe, dann schaue ich, was die größten Objekte hält. In der Praxis war es meistens etwas Langweiliges: eine Map als Cache ohne Eviction und ohne Maximum, ein Metrik-Label aus einem nutzergelieferten Wert, dessen Kardinalität ewig wuchs, oder Listener, die an einem langlebigen Objekt registriert und nie entfernt wurden. Bei Ausschlägen suche ich nach Endpoints, die eine ganze Tabelle in eine Liste lesen statt zu streamen, oder nach einem Batch-Job, der alle Zeilen lädt, bevor er schreibt. Genau das hatte ich bei einem CSV-Export, der eine Million Zeilen materialisiert hat; seitenweises Streaming hat den Speicher flach gemacht. Danach lege ich einen Alert auf den Speichertrend statt nur auf den Crash, damit ich davon höre, bevor es der Neustart tut.

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 entscheidest du, ob es ein Leck ist oder einfach ein großes Working Set?
  • Was würdest du deckeln, damit ein unbegrenzter Cache nicht wieder wächst?
  • Wie verändern Garbage-Collector-Einstellungen das, was du hier siehst?

Weitere Fragen für Backend-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