Interviewfrage für Backend-Entwickler

Zwei Nutzer bearbeiten denselben Datensatz gleichzeitig. Wie verhinderst du, dass einer den anderen stillschweigend überschreibt?

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

Kurzantwort

Nimm für die meisten Fälle Optimistic Locking: gib der Zeile eine Version-Spalte oder einen Timestamp, nimm den ins Update-Prädikat auf, und wenn null Zeilen aktualisiert werden, hat sich der Datensatz unter dir verändert, du gibst also einen Konflikt zurück. Nimm Pessimistic Locking, ein select for update in einer kurzen Transaktion, wenn Konflikte häufig sind oder die Operation sich nicht sicher wiederholen lässt. Das Einzige, was du nicht machen darfst, ist lesen, ändern und schreiben ganz ohne Prüfung.

Warum Interviewer das fragen

Lost Updates sind eine stille Form von Datenkorruption, die in Tests nie auftaucht. Der Interviewer will sehen, dass du die Read-Modify-Write-Falle kennst, eine Strategie nach Contention statt nach Gewohnheit wählst und die Konsequenzen für die Nutzererfahrung verstehst: Optimistic Locking heißt, jemand bekommt einen Fehler und muss mergen, Pessimistic Locking heißt, jemand wartet und du verantwortest jetzt Lock-Lebensdauer und Deadlock-Risiko.

So baust du deine Antwort auf

  • Benenn zuerst die Falle: Read Modify Write ohne Absicherung.
  • Beschreib Optimistic Locking mechanisch, inklusive der Prüfung auf null Zeilen.
  • Sag, wann Contention Pessimistic Locking rechtfertigt.
  • Geh darauf ein, was der Nutzer bei einem Konflikt sieht.

Beispielantwort

Gesprochenes Beispiel, erste Person

Der Fehler ist Read Modify Write: beide Requests laden Version eins, beide rechnen mit veralteten Daten, und der zweite Write gewinnt stillschweigend. Meine Standardlösung ist optimistisch: jede Zeile hat eine Version, das Update sagt where id gleich diese und version gleich das, was ich gelesen habe, und zählt die Version hoch. Wenn das Update null geänderte Zeilen meldet, war jemand schneller, und ich gebe eine 409 zurück, statt so zu tun, als hätte es geklappt. Das kostet nichts, solange Konflikte selten sind, und das sind sie meistens. Auf Pessimistic Locking wechsle ich, wenn Contention real ist oder ein Retry nicht akzeptabel wäre, zum Beispiel beim Dekrementieren von Beständen: da nehme ich ein select for update auf die Zeile, mache Prüfung und Write in einer kurzen Transaktion und halte keine Netzwerkaufrufe innerhalb dieser Transaktion. Am wichtigsten ist mir, was der Nutzer sieht. Ein roher Konfliktfehler ist nutzlos, deshalb haben wir bei einem Dokumenteneditor die aktuelle Version zusammen mit dem Fehler zurückgegeben, damit der Client ein Diff zeigen konnte, statt die Arbeit einfach zu verlieren.

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 würdest du einen Konflikt über deine HTTP-API abbilden?
  • Welche Risiken hat es, ein select for update über einen Service-Aufruf hinweg zu halten?
  • Wie hängt ein ETag mit if-match mit Optimistic Locking zusammen?

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