Interviewfrage für Softwareentwickler

Wodurch entsteht eine Race Condition, und wie findest du eine, die nur in Produktion auftaucht?

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

Kurzantwort

Eine Race Condition entsteht, wenn zwei Threads oder Requests geteilten veränderlichen State anfassen und das Ergebnis vom Timing abhängt. Die klassische Form ist read, modify, write, ohne über alle drei Schritte hinweg ein Lock zu halten. Um eine in Produktion zu finden, such nach State, der geprüft und dann verwendet wird, ergänz korrelierte Logs rund um diese Sequenz, reproduzier unter echter Nebenläufigkeit statt in einem Unit Test, und lass Datenbank-Constraints die Verletzung abfangen.

Warum Interviewer das fragen

Diese Bugs sind teuer, und die Art zu debuggen trennt erfahrene Entwickler vom Rest. Interviewer wollen, dass du das Read-Modify-Write-Muster benennst, dass du verstehst, dass ein Lock nicht automatisch korrekt ist, wenn der Scope falsch ist, und dass dein Vorgehen akzeptiert, dass man einen Timing-Bug nicht durch lokales Herumklicken reproduziert. Die Invariante in die Datenbank zu schieben ist die Antwort, auf die sie hoffen.

So baust du deine Antwort auf

  • Definier die Race als geteilten veränderlichen State plus Timing.
  • Benenne das Read-Modify-Write-Muster explizit.
  • Beschreib, wie du es unter Nebenläufigkeit reproduzieren würdest.
  • Biete einen Fix an, der die Invariante in die Datenbank verlegt.

Beispielantwort

Gesprochenes Beispiel, erste Person

Eine Race braucht zwei Dinge: geteilten veränderlichen State und zwei Pfade, die ihn gleichzeitig erreichen. Fast jede, die ich debuggt habe, hat dieselbe Form, eine Prüfung gefolgt von einer Aktion, mit einer Lücke dazwischen. Saldo lesen, entscheiden dass er reicht, neuen Saldo schreiben. Zwei Requests verschränken sich und die Zahl stimmt nicht. Sie in Produktion zu finden heißt vor allem zu akzeptieren, dass du dich nicht zu einer Reproduktion klicken kannst. Ich schreibe ein Skript, das denselben Request ein paar hundert Mal gleichzeitig abfeuert, weil das Fenster vielleicht zwei Millisekunden breit ist. Dann logge ich mit einer Request-id vor und nach dem Read und dem Write, damit ich die Verschränkung in der Zeitachse sehe. Für den Fix versuche ich, die Invariante in die Datenbank zu verlegen statt in die App: ein Update mit einer where-Klausel auf den erwarteten Wert oder ein Unique Constraint, damit die Datenbank es durchsetzt. Locks auf Anwendungsebene funktionieren nur, wenn jeder Writer durch deinen Code geht, und irgendwann tut es einer nicht.

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 verändert ein verteiltes Lock deine Antwort?
  • Was ist der Unterschied zwischen einer Race Condition und einem Data Race?
  • Wie würdest du einen Test schreiben, der das in der CI abfängt?

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

Ü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