Interviewfrage für Backend-Entwickler

Wie würdest du einen Endpoint mit einer großen Collection paginieren, und warum nicht einfach limit und offset?

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

Kurzantwort

Nimm bevorzugt Keyset-Pagination, auch Cursor-Pagination genannt: sortier nach einem stabilen, eindeutigen Key, gib einen opaken Cursor für die letzte Zeile zurück und frag nach den Zeilen danach. Offset-Pagination zwingt die Datenbank, jede übersprungene Zeile zu lesen und wegzuwerfen, Seite fünftausend ist also langsam, und Zeilen, die mitten im Scrollen eingefügt oder gelöscht werden, erzeugen Duplikate und Lücken. Keyset bleibt pro Seite konstant teuer und ist stabil unter Writes.

Warum Interviewer das fragen

Es ist eine kleine Designentscheidung, die Leute, die eine API im großen Maßstab betrieben haben, von denen trennt, die das nicht haben. Der Interviewer will die zwei konkreten Schwächen von Offset hören, Kosten und Instabilität, plus das Bewusstsein, dass ein Cursor eine deterministische Sortierung kodieren muss. Nachfragen zielen meistens auf die kniffligen Teile: Sortierung nach einer nicht eindeutigen Spalte, Sprung auf eine beliebige Seite und Gesamtzahlen, die teuer und oft gar nicht nötig sind.

So baust du deine Antwort auf

  • Gib zuerst die Empfehlung, dann die Begründung.
  • Nenn beide Offset-Schwächen: Kosten tiefer Seiten und verrutschende Ergebnisse.
  • Erklär, was der Cursor kodiert und warum er einen Tiebreaker braucht.
  • Steh dazu, was du verlierst, etwa den Sprung auf Seite fünfzig.

Beispielantwort

Gesprochenes Beispiel, erste Person

Mein Default ist Keyset. Der Client fragt eine Seite an, bekommt Items plus einen opaken Cursor zurück, und der nächste Request sagt gib mir die Zeilen nach diesem Cursor. Darunter ist das eine where-Klausel auf dem Sortierschlüssel, mit dem richtigen Index also ein Index Seek, und die Kosten sind auf Seite eins dieselben wie auf Seite tausend. Offset kann das nicht, weil die Datenbank weiterhin alles vor dem Offset durchläuft und wegwirft, und schlimmer noch: wird beim Scrollen eine Zeile eingefügt, verschiebt sich jede folgende Seite, und die Person sieht ein Duplikat oder verpasst ein Item komplett. Das Detail, über das Leute stolpern, ist der Tiebreaker: sortiere ich nach created_at und zwei Zeilen teilen sich einen Timestamp, ist die Reihenfolge nicht deterministisch, der Cursor kodiert also created_at plus die id, und der Vergleich läuft über das Paar. Aufgeben muss ich beliebige Seitensprünge und billige Gesamtzahlen. Bei einem Infinite-Scroll-Feed vermisst die niemand; bei einer Admin-Tabelle, die Seitenzahlen braucht, nehme ich Offset mit einem begrenzten Maximum.

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 mit einem Cursor die Sortierung nach einer selbst gewählten Spalte unterstützen?
  • Wie gibst du eine Gesamtzahl zurück, ohne die Tabelle zu scannen?
  • Was sollte im Cursor stehen, und sollten Clients ihn dekodieren können?

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