Interviewfrage für Python-Entwickler

Wie würdest du einen Python-Service profilen, der nach einem Release langsamer wurde?

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

Kurzantwort

Grenz erst ein, wo die Zeit hingeht, bevor du Code anfasst. Vergleich das Release-Diff, schau in Tracing oder Timing-Metriken, um den langsamen Endpunkt zu finden, und profile dann diesen Pfad mit cProfile oder py-spy, das einen laufenden Prozess ohne Neustart samplen kann. Achte auf kumulative Zeit, um den verantwortlichen Aufruf zu finden, bilde eine Hypothese, ändere eine Sache und miss erneut.

Warum Interviewer das fragen

Performance-Fragen trennen Leute, die messen, von Leuten, die raten. Der Interviewer sucht eine Methode: reproduzieren, messen, isolieren, eine Variable ändern, verifizieren. Er will außerdem Werkzeugroutine sehen, insbesondere einen Sampling-Profiler, der sich an einen laufenden Produktionsprozess hängen kann, und das Urteilsvermögen zu wissen, dass die meiste Python-Langsamkeit sich als Datenbank- oder Netzwerkarbeit entpuppt und nicht als Interpreter.

So baust du deine Antwort auf

  • Kläre, was sich geändert hat und wohin die Zeit geht.
  • Nenn den Profiler, den du anhängen würdest, und warum.
  • Lies kumulative Zeit, nicht nur Self Time.
  • Ändere eine Sache und miss den Unterschied.

Beispielantwort

Gesprochenes Beispiel, erste Person

Erste Frage ist, was sich tatsächlich geändert hat, denn ein Release gibt mir eine kurze Verdächtigenliste. Dann will ich Zahlen und keine Meinungen, also sagen mir Tracing-Spans oder Timing pro Endpunkt, welche Route regressiert ist und ob die Zeit in der Datenbank, in einem Upstream-Aufruf oder im Prozess selbst steckt. Steckt sie im Prozess, greife ich zuerst zu py-spy, weil es sich an einen laufenden Container hängt und ohne Neustart sampelt, sodass ich die echte Produktionslast profile und keine synthetische. Ein Flame Graph macht es meist offensichtlich. Für einen reproduzierbaren lokalen Fall nehme ich cProfile und sortiere nach kumulativer Zeit, denn Self Time versteckt den Aufrufer, der wirklich verantwortlich ist. Eine Warnung: Profiling verändert das Timing, ich traue also nie den absoluten Zahlen daraus, nur der relativen Form. Dann ändere ich exakt eine Sache und messe erneut. Beim letzten Mal war der Übeltäter ein neuer Serializer, der pro Zeile eine Deep Copy gemacht hat, und das Entfernen dieser Kopie hat den Endpunkt von vierhundert Millisekunden zurück auf neunzig gebracht.

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 unterscheidet sich py-spy von cProfile?
  • Wie würdest du Speicher statt Zeit profilen?
  • Was, wenn die Regression nur unter Last auftritt?

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