Question d'entretien pour Ingénieur logiciel

Expliquez-moi comment vous analyseriez la complexité en temps et en espace d'un bout de code.

Ce que le recruteur cherche à évaluer, comment structurer votre réponse et un exemple parlé à adapter.

Réponse rapide

Déterminez comment le temps d'exécution croît quand l'entrée croît, puis laissez tomber les constantes et les termes d'ordre inférieur. Lisez la structure du code : les blocs séquentiels s'additionnent, les boucles imbriquées se multiplient, et les appels récursifs suivent la récurrence. L'espace, c'est la mémoire supplémentaire que vous allouez au-delà de l'entrée, pile d'appels comprise. Énoncez le pire cas par défaut, et signalez le cas moyen séparément s'ils diffèrent vraiment.

Pourquoi les recruteurs posent cette question

L'analyse de complexité est le vocabulaire commun pour parler de performance, donc le recruteur veut savoir si vous raisonnez sur le passage à l'échelle avant d'écrire du code plutôt qu'après un profilage en production. Il vérifie que vous séparez le taux de croissance des micro-optimisations, que vous n'oubliez pas l'espace en plus du temps, et que vous repérez le coût caché de choses comme un tri à l'intérieur d'une boucle ou la copie d'une liste à chaque itération.

Comment structurer votre réponse

  • Nommez l'entrée et dites ce que n mesure réellement.
  • Parcourez le code de haut en bas, en additionnant le travail séquentiel et en multipliant le travail imbriqué.
  • Énoncez le temps et l'espace séparément, en laissant tomber les constantes.
  • Signalez le pire cas et l'entrée qui le déclenche.

Exemple de réponse

Exemple parlé, à la première personne

Je commence par nommer n, parce que la moitié de la confusion dans ces conversations vient de deux personnes qui mesurent des choses différentes. Ensuite je lis le code structurellement. Les blocs séquentiels s'additionnent, donc le plus gros l'emporte ; les boucles imbriquées se multiplient ; un appel récursif devient une récurrence que je peux développer ou reconnaître. Pour l'espace, je compte tout ce que j'alloue au-delà de l'entrée, et j'inclus toujours la pile d'appels, la partie que les gens oublient avec la récursion. Un exemple concret : j'avais une fonction qui semblait linéaire parce que c'était une boucle sur une liste de commandes, mais dedans on appelait un utilitaire qui cherchait un enregistrement par id dans une liste. Cette recherche était linéaire, donc le vrai coût était quadratique, et ça n'est apparu que quand un client a atteint environ quarante mille commandes. On a remplacé la liste par un dictionnaire indexé par id et l'endpoint est passé d'environ neuf secondes à moins de deux cents millisecondes. Ma règle, c'est donc de regarder dans chaque appel, pas seulement dans les boucles visibles.

Vous passez cet entretien bientôt ? GhostPilot écoute votre appel en direct, repère la question dès qu'elle est posée et affiche une réponse structurée à l'écran en temps réel. Essayez-le lors de votre prochain entretien blanc, ou prenez un Session Pass à $29, sans abonnement, pour le jour J.

Voir comment ça marche

Questions de relance à prévoir

  • Quelle est la complexité si l'entrée est déjà triée ?
  • En quoi une analyse amortie changerait-elle votre réponse pour un tableau dynamique ?
  • Quand accepteriez-vous un moins bon grand O en échange d'une meilleure constante réelle ?

Autres questions pour Ingénieur logiciel

Votre recruteur posera sa propre version de celle-ci. Collez votre véritable fiche de poste dans le Question Predictor gratuit et obtenez les 20 questions que ce poste a le plus de chances de poser, avec ce que chacune cherche vraiment à sonder.

Prédire mes questions

Répétez les questions difficiles avant qu'on vous les pose

Entraînez-vous avec un copilote en direct, puis présentez-vous prêt. Un Session Pass à $29 vous accompagne pendant l'entretien, sans abonnement et sans engagement.

Obtenir GhostPilot