Interviewfrage für Full-Stack-Entwickler

Wie würdest du eine Spalte in einer Tabelle mit 50 Millionen Zeilen ohne Downtime umbenennen?

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

Kurzantwort

Expand, Migrate, Contract. Leg die neue Spalte an, deploye Code, der beide schreibt und weiterhin die alte liest, backfille in gedrosselten Batches, schalt dann in einem separaten Deploy die Lesevorgänge auf die neue Spalte um, und lösch die alte Spalte erst, wenn nichts mehr darauf verweist. Kombinier nie eine Schemaänderung und eine Code-Umschaltung in einem Release, weil du dann nicht mehr sauber zurückrollen kannst.

Warum Interviewer das fragen

Das prüft, ob du Migrationen gegen echten Traffic ausgeliefert oder nur lokal ausgeführt hast. Der Interviewer will die Abfolge über mehrere Deploys, ein Bewusstsein für Sperrverhalten auf großen Tabellen und eine Rollback-Geschichte. Wer mit einem einzelnen ALTER antwortet, hat meist noch nie zugesehen, wie eine Migration eine exklusive Sperre nimmt und zur Spitzenzeit jeden Request auf einer Produktionsdatenbank blockiert.

So baust du deine Antwort auf

  • Nenn das Expand-and-Contract-Muster gleich zu Beginn.
  • Geh die Deploys der Reihe nach durch und was jeder tut.
  • Erklär, wie du backfillst, ohne zu sperren oder die Datenbank zu sättigen.
  • Nenn die Rollback-Position an jedem Schritt.

Beispielantwort

Gesprochenes Beispiel, erste Person

Ein Rename ist in Wahrheit eine Folge kleiner sicherer Änderungen und keine einzelne Anweisung. Der erste Deploy legt die neue Spalte als nullable an, was in Postgres billig ist, weil die Tabelle nicht neu geschrieben wird, und liefert Code aus, der in beide Spalten schreibt und weiterhin die alte liest. Dann backfille ich in Batches, vielleicht fünftausend Zeilen auf einmal mit einer kurzen Pause, mit Blick auf Replication Lag und Lock Waits, damit ich nie eine lange Transaktion halte. Der zweite Deploy schaltet die Lesevorgänge auf die neue Spalte um, mit weiterhin aktivem Dual Write, damit ich sofort zurückkann, wenn etwas nicht stimmt. Erst wenn das ein paar Tage stabil war, stoppt der dritte Deploy das Schreiben der alten Spalte und löscht sie. Der Grund, warum ich auf getrennte Deploys bestehe, ist Rollback. Gehen Schemaänderung und Codeänderung zusammen raus, hinterlässt ein Zurückrollen des Codes die Datenbank in einer Form, die der alte Code nicht lesen kann. Ich lege Indizes außerdem concurrently an und setze ein Lock-Timeout, damit eine Migration schnell scheitert, statt sich hinter einer langen Query einzureihen und Schreibvorgänge einzufrieren.

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

  • Welcher dieser Schritte nimmt in Postgres eine Sperre, und wie lange?
  • Wie würdest du prüfen, dass der Backfill korrekt ist, bevor du die Lesevorgänge umschaltest?
  • Was ist dein Rollback, wenn der Backfill zur Hälfte fertig ist?

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