Finde heraus, wie die Laufzeit mit der Eingabe wächst, und wirf dann Konstanten und Terme niedrigerer Ordnung weg. Lies die Struktur des Codes: sequentielle Blöcke addieren sich, verschachtelte Schleifen multiplizieren sich, und rekursive Aufrufe folgen der Rekurrenz. Speicher ist alles, was du zusätzlich zur Eingabe allokierst, inklusive Call Stack. Nenn standardmäßig den Worst Case und sprich den Average Case separat an, wenn sich beide deutlich unterscheiden.
Warum Interviewer das fragen
Komplexitätsanalyse ist das gemeinsame Vokabular, um über Performance zu reden. Der Interviewer will also wissen, ob du über Skalierung nachdenken kannst, bevor du Code schreibst, und nicht erst nach dem Profiling in Produktion. Er prüft, ob du die Wachstumsrate von Mikrooptimierungen trennst, ob du an Speicher genauso denkst wie an Zeit, und ob du versteckte Kosten erkennst, etwa Sortieren innerhalb einer Schleife oder das Kopieren einer Liste in jeder Iteration.
So baust du deine Antwort auf
- Benenne die Eingabe und sag, was n tatsächlich misst.
- Geh den Code von oben nach unten durch, addiere sequentielle Arbeit und multipliziere verschachtelte.
- Nenn Zeit und Speicher getrennt und lass Konstanten weg.
- Zeig den Worst Case und die Eingabe, die ihn auslöst.
Beispielantwort
Ich fange damit an, n zu benennen, weil die halbe Verwirrung in solchen Gesprächen daher kommt, dass zwei Leute unterschiedliche Dinge messen. Danach lese ich den Code strukturell. Sequentielle Blöcke addieren sich, der größte gewinnt also; verschachtelte Schleifen multiplizieren sich; ein rekursiver Aufruf wird zu einer Rekurrenz, die ich entweder ausrolle oder wiedererkenne. Beim Speicher zähle ich alles, was ich zusätzlich zur Eingabe allokiere, und ich rechne immer den Call Stack mit, den Teil vergessen die Leute bei Rekursion. Ein konkretes Beispiel: Ich hatte eine Funktion, die linear aussah, weil sie eine Schleife über eine Liste von Bestellungen war, aber darin haben wir einen Helper aufgerufen, der einen Datensatz per id in einer Liste gesucht hat. Dieses Lookup war linear, also waren die echten Kosten quadratisch, und aufgefallen ist es erst, als ein Kunde bei rund vierzigtausend Bestellungen lag. Wir haben die Liste durch ein Dictionary mit id als Key ersetzt, und der Endpoint ging von etwa neun Sekunden auf unter zweihundert Millisekunden. Meine Regel ist also, in jeden Aufruf hineinzuschauen, nicht nur auf die Schleifen, die ich sehe.
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
- Wie ist die Komplexität, wenn die Eingabe schon sortiert ist?
- Wie würde amortisierte Analyse deine Antwort bei einem dynamischen Array verändern?
- Wann würdest du ein schlechteres Big O für eine bessere Konstante in der Praxis akzeptieren?
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