Ein Deadlock braucht vier Bedingungen gleichzeitig: gegenseitigen Ausschluss, Halten und Warten, keine Verdrängung und einen zirkulären Wartezustand. Brich eine davon und er kann nicht passieren. In der Praxis brichst du den zirkulären Wartezustand, indem du Locks immer in derselben globalen Reihenfolge nimmst, und du setzt Lock-Timeouts, damit eine hängende Transaktion schnell scheitert statt festzustecken. Transaktionen kurz zu halten und Zeilen in konsistenter Reihenfolge anzufassen bringt dich fast ans Ziel.
Warum Interviewer das fragen
Das prüft, ob du die Theorie kennst und sie in eine Regel übersetzen kannst, der ein Team tatsächlich folgen kann. Interviewer wollen die Einsicht zum zirkulären Warten und den Fix über die Reihenfolge, dazu die Erkenntnis, dass Deadlocks in Datenbanken häufig sind und nicht nur in Thread-Code. Lock-Timeouts, Retry mit Backoff und die Tatsache, dass die Datenbank ein Opfer wählt und abbricht, zu erwähnen, zeigt Produktionserfahrung.
So baust du deine Antwort auf
- Zähl die vier Bedingungen auf, die alle gelten müssen.
- Wähl die, die du in der Praxis brechen kannst: den zirkulären Wartezustand.
- Gib die Regel zur konsistenten Lock-Reihenfolge konkret an.
- Ergänz Timeouts und Retries als Sicherheitsnetz.
Beispielantwort
Ein Deadlock braucht vier Dinge zusammen, und das einzige, was ich wirklich steuern kann, ist der zirkuläre Wartezustand. Die Regel, die ich einführe, ist also, dass jeder Codepfad Locks in derselben Reihenfolge nimmt. Wenn eine Überweisung zwei Konten anfasst, sortiere ich nach Konto-id und locke das kleinere zuerst, dann ist es egal, in welche Richtung das Geld fließt, es kann kein Zyklus entstehen. Der zweite Hebel ist Zeit. Ich halte Transaktionen kurz, ich halte also nie ein Zeilen-Lock über einen Netzwerkaufruf zu einem Payment-Provider hinweg, was ein Klassiker ist, um aus einer Transaktion von hundert Millisekunden eine von fünf Sekunden zu machen. Dann setze ich ein Lock-Timeout und wiederhole mit Jitter, denn früher oder später erkennt die Datenbank einen Zyklus, wählt ein Opfer und bricht es ab, und ich hätte lieber, dass dieser Pfad behandelt wird, statt als 500 nach außen zu gehen. In Postgres nennen die Deadlock-Einträge im Log beide beteiligten Statements, und beide Male, die ich sie gebraucht habe, war der Fix die Reihenfolge.
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 esNachfragen, mit denen du rechnen solltest
- Wie erkennt die Datenbank einen Deadlock?
- Was ist Livelock und wie unterscheidet es sich?
- Würde optimistisches Locking das Problem komplett vermeiden?
Weitere Fragen für Softwareentwickler
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