Interviewfrage für Full-Stack-Entwickler

Erklär mir Schritt für Schritt, was in der Event Loop tatsächlich passiert, wenn du in einem Click-Handler await aufrufst.

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

Kurzantwort

Der Handler läuft synchron, bis er auf await trifft, gibt dann die Kontrolle an den Browser zurück und plant den Rest der Funktion als Microtask ein. Sobald das erwartete Promise abgeschlossen ist, landet diese Fortsetzung in der Microtask-Queue, die nach der aktuellen Task und vor dem nächsten Timer oder Paint komplett geleert wird. await blockiert den Main Thread also nie; es teilt die Funktion in zwei Teile.

Warum Interviewer das fragen

Bei Async haben viele Entwickler ein unscharfes mentales Modell. Der Interviewer will wissen, ob dir klar ist, dass JavaScript single threaded und kooperativ ist und nicht auf magische Weise parallel, denn genau dieses Verständnis hält dich davon ab, einen Handler zu schreiben, der das Rendern aushungert, oder eine Schleife, die zweihundert sequenzielle Requests feuert. Es sagt außerdem voraus, wie gut du später über Race Conditions, Cancellation und veralteten State nachdenkst.

So baust du deine Antwort auf

  • Sag, dass JavaScript immer nur einen Call Stack gleichzeitig ausführt.
  • Beschreib, wie await die Funktion aussetzt und den Thread zurückgibt.
  • Trenn die Microtask-Queue von der Task-Queue.
  • Schließ mit einer praktischen Konsequenz, etwa await in einer Schleife.

Beispielantwort

Gesprochenes Beispiel, erste Person

Klar. Der Handler startet wie jede andere Funktion auf dem Main Thread, und alles bis zum ersten await läuft synchron. Beim await wird die Funktion ausgesetzt und gibt ein Promise an ihren Aufrufer zurück, der Browser bekommt also den Thread zurück und kann painten. Wenn das erwartete Promise auflöst, wird der Rest der Funktion in die Microtask-Queue geschoben, nicht in die Task-Queue. Das ist wichtig, weil Microtasks vollständig geleert werden, bevor der Browser den nächsten Timer oder den nächsten Frame nimmt, eine lange Kette von Promise-Auflösungen kann das Rendern also blockieren, obwohl technisch nichts synchron ist. Die praktische Variante hat mich auf einem Dashboard erwischt, an dem ich gearbeitet habe. Wir haben in einer for-Schleife über rund 300 Zeilen awaitet, jeder Request hat also auf den vorherigen gewartet und die Seite brauchte 12 Sekunden. Der Wechsel auf Promise.all mit einem kleinen Concurrency-Limit hat es unter eine Sekunde gedrückt. Gleicher Code, gleicher Thread, komplett anderes Verhalten.

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

  • Wo sitzen requestAnimationFrame-Callbacks relativ zu Microtasks?
  • Wie würdest du diese laufende Arbeit abbrechen, wenn die Komponente unmountet?
  • Was passiert, wenn eines dieser erwarteten Promises rejected und niemand es fängt?

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