Nimm eine Hash Map, wenn du nur Lookups, Inserts und Deletes per Key brauchst und im Schnitt konstante Zeit willst. Nimm einen balancierten Baum, wenn du Ordnung brauchst: Range Scans, den nächstgelegenen Key oder sortiertes Iterieren, alles in logarithmischer Zeit. Bäume geben dir außerdem vorhersagbares Worst-Case-Verhalten, während eine Hash Map bei schlechtem Hashing übel degradieren oder im falschen Moment auf einem Resize hängen kann.
Warum Interviewer das fragen
Das ist ein Indikator dafür, ob du Datenstrukturen bewusst wählst oder reflexhaft zum Dictionary greifst. Der Interviewer will hören, dass du das Zugriffsmuster mit der Struktur verbindest, dass du weißt, dass Hash-Map-Performance ein Durchschnitt und keine Garantie ist, und dass du erkennst, wann Ordnung, Range Queries oder eine begrenzte Worst-Case-Latenz für den Baum sprechen.
So baust du deine Antwort auf
- Sag, in welchen Operationen jede Struktur wirklich gut ist.
- Verknüpf die Wahl mit dem Zugriffsmuster aus der Frage.
- Erwähn das Worst-Case-Verhalten, nicht nur den Durchschnitt.
- Gib ein Beispiel, wo du von der einen zur anderen gewechselt bist.
Beispielantwort
Mein Default ist eine Hash Map, weil ich meistens Punkt-Lookups per id mache und konstante Durchschnittszeit schwer zu schlagen ist. Sobald die Anforderung aber Ordnung enthält, wechsle ich. Alles in Richtung gib mir alle Events zwischen zwei Timestamps oder finde den nächsten Key nach diesem ist eine Range Query, und die kann eine Hash Map nur beantworten, indem sie alles durchgeht. Dafür will ich einen Baum, in der Praxis oft eine sortierte Struktur mit Binärsuche. Ich denke außerdem an den Tail. Hash-Lookups sind im Schnitt konstant, aber eine schlechte Hashfunktion oder ein Rehash kann ausschlagen, und innerhalb eines Latenzbudgets interessiert mich das. Bei einem Leaderboard-Feature haben wir mit einem Dictionary von User auf Score angefangen und mussten dann bei jedem Read das Ganze sortieren. Nach dem Umzug auf ein Sorted Set in Redis waren die Reads logarithmisch, und der Endpoint ist zu Spitzenzeiten nicht mehr umgefallen. Gleiche Daten, anderes Zugriffsmuster, andere Struktur.
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 esNachfragen, mit denen du rechnen solltest
- Was passiert mit einer Hash Map, wenn viele Keys kollidieren?
- Wie würdest du einen Least-Recently-Used-Cache implementieren?
- Wann passt ein Trie besser als beide?
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