À quelles questions dois-je m’attendre en entretien .NET ?

Par Aaron Cao · Mis à jour le

À quelles questions dois-je m’attendre en entretien .NET ?
Attendez-vous à des questions sur l’environnement d’exécution (CLR, ramasse-miettes, types valeur et référence), le langage (async et await, LINQ, génériques, records), les frameworks (middleware et injection de dépendances d’ASP.NET Core, EF Core), ainsi qu’à des scénarios comme une fuite de mémoire dans un service de longue durée ou un point de terminaison d’API lent. Les recruteurs évaluent le raisonnement.

Attendez-vous à des questions sur l’environnement d’exécution (CLR, ramasse-miettes, types valeur et référence), le langage (async et await, LINQ, génériques, records), les frameworks (middleware et injection de dépendances d’ASP.NET Core, EF Core), ainsi qu’à des scénarios comme une fuite de mémoire dans un service de longue durée ou un point de terminaison d’API lent. Les recruteurs évaluent le raisonnement.

Quelles questions sur le runtime et le langage ouvrent un entretien .NET ?

Les recruteurs commencent là où débute le framework : l’environnement d’exécution. Attendez-vous à expliquer le rôle du Common Language Runtime (chargement des assemblies, compilation juste-à-temps du langage intermédiaire, gestion de la mémoire), puis à approfondir le ramasse-miettes. La suite est prévisible : pourquoi le ramasse-miettes est générationnel, ce qui fait qu’un objet survit jusqu’à une génération ultérieure, à quoi sert le tas des grands objets, et pourquoi IDisposable et using existent alors que la mémoire est gérée. Pour cette dernière question, évoquez les ressources non managées, comme les handles de fichiers et les connexions, que le ramasse-miettes ne sait pas libérer rapidement.

  • Types valeur et types référence. Où chacun réside, ce que signifie la copie pour chacun et le coût du boxing.
  • async et await. Expliquez qu’une tâche attendue libère le thread appelant au lieu de le bloquer, pourquoi async void est réservé aux gestionnaires d’événements et de quel interblocage il est question lorsqu’on met en garde contre .Result.
  • LINQ. L’exécution différée est le piège : une requête IEnumerable s’exécute lors de son énumération, pas lors de son écriture, et une requête adressée à un fournisseur de base de données n’est traduite en SQL que pour les expressions que celui-ci comprend.
  • Génériques, interfaces et records. Les contraintes, l’intérêt des interfaces plutôt que des classes de base pour la testabilité et ce qu’apporte l’égalité par valeur d’un record.

Pour chaque sujet, donnez le mécanisme et une conséquence. Dire qu’une collecte de génération zéro est peu coûteuse parce que la plupart des objets meurent jeunes correspond au niveau attendu par les recruteurs ; se contenter de nommer les générations sans en expliquer la raison ne suffit pas.

À quoi ressemblent les questions sur ASP.NET Core et EF Core ?

Vous savez écrire des contrôleurs, mais craignez que les questions portent sur les mécanismes internes que vous manipulez rarement. Cette inquiétude est justifiée, car c’est là que se concentrent les questions sur le framework. Voici donc ces mécanismes dans l’ordre où ils sont généralement abordés, avec la relance associée à chacun.

  • Le pipeline de requêtes. Les middlewares s’exécutent dans leur ordre d’enregistrement, chaque composant choisissant d’appeler ou non le suivant. Relance : où placer l’authentification par rapport à l’autorisation, et que se passe-t-il si vous les enregistrez dans l’ordre inverse ?
  • Durées de vie de l’injection de dépendances. Un singleton vit pendant toute l’application, un service scoped pendant une requête et un service transient est créé chaque fois qu’il est résolu. Le piège classique consiste à injecter un service scoped, comme un contexte de base de données, dans un singleton ; soyez prêt à expliquer pourquoi c’est un bug.
  • Configuration et options. Les sources en couches, les substitutions selon l’environnement et le modèle des options pour les paramètres typés.
  • EF Core. Le suivi des changements et les cas où le désactiver pour les requêtes en lecture seule, le problème N+1 et la manière dont le chargement anticipé ou la projection l’évite, les migrations, ainsi que le moment où une requête écrite à la main surpasse honnêtement LINQ.
  • Tests. Comment les interfaces et le conteneur DI rendent un service testable, et ce qu’un fournisseur en mémoire démontre ou non concernant une véritable base de données.

Les meilleurs candidats relient ces sujets : un contexte scoped résolu dans un service d’arrière-plan singleton n’est pas une question anecdotique, mais un véritable bug de mémoire et de cohérence déjà livré en production par des recruteurs, qui veulent vous entendre dire que vous créeriez explicitement une portée.

Comment se déroulent les mises en situation ?

Les processus de recrutement pour les postes seniors présentent un symptôme et observent votre méthode. Exemple représentatif : un ingénieur backend candidatant à un poste senior dans une entreprise de logistique apprend que la mémoire d’une API ASP.NET Core augmente pendant des jours, jusqu’au redémarrage du conteneur. Une bonne réponse ne consiste pas à deviner. Elle commence par demander ce qui a changé, recherche des objets capturés par des caches statiques ou des abonnements durables à des événements, vérifie si des services scoped sont conservés par des singletons, examine la croissance du tas des grands objets et utilise un instantané de la mémoire avant de proposer un correctif. Le recruteur évalue l’ordre de l’enquête.

Autres scénarios récurrents : un point de terminaison qui ne ralentit que sous charge, où la réponse passe des appels synchrones à la base de données à async, à l’épuisement du pool de connexions et à la mise en cache ; une condition de concurrence dans une collection partagée et le coût des collections concurrentes et des options de verrouillage ; une requête devant appeler trois services en aval, avec la gestion des délais d’attente, des nouvelles tentatives et des échecs partiels ; et une migration devant ajouter une colonne sans interruption. Dans chaque cas, énoncez la contrainte, choisissez un mécanisme et explicitez le compromis.

Ces exercices deviennent bien plus faciles lorsque vous les avez répétés à voix haute avec des relances, ce pour quoi le mode entretien blanc a été conçu ; les autres banques par langage et par poste sont regroupées sous questions d’entretien par poste et par thème.

Un assistant d’entretien IA peut-il aider avec les questions .NET ?

Lors des entretiens conversationnels, oui, dans les limites indiquées. L’application de bureau native pour macOS et Windows de SubcueAI capture le son du système et votre microphone, puis affiche de brèves suggestions de réponse dans une surcouche locale. Ainsi, lorsque le recruteur demande pourquoi un contexte scoped dans un singleton constitue un bug, le mécanisme apparaît à l’écran pendant que vous l’expliquez avec vos propres mots. L’extension de navigateur couvre les appels effectués dans un onglet sur Chrome et Edge en capturant uniquement le son de l’onglet de réunion. Aucun bot ne rejoint l’appel et rien n’est injecté dans la page de réunion ; la configuration est présentée sur la page tutoriel.

Les limites : une évaluation surveillée, un écran enregistré, un ordinateur portable géré par l’entreprise ou un exercice de programmation en direct où vous saisissez du C# sous observation sont hors périmètre, et l’assistant est précisément moins efficace lorsque l’entretien vous demande d’écrire du code. Il est particulièrement utile pour les questions ci-dessus portant sur le runtime, le framework et les compromis. Commencez par lui fournir votre CV afin que les suggestions reflètent les systèmes que vous avez réellement conçus ; le créateur de CV héberge ce profil.

FAQ

Pourquoi le ramasse-miettes .NET comporte-t-il des générations ?

La plupart des objets meurent jeunes ; collecter fréquemment et rapidement la génération la plus récente permet donc de récupérer l’essentiel de la mémoire sans parcourir tout le tas. Les objets survivants sont promus et collectés moins souvent, ce qui réduit les pauses pour les modèles d’allocation courants.

Quelle différence entre singleton, scoped et transient dans ASP.NET Core ?

Un singleton est créé une fois pour l’application, un service scoped une fois par requête et un service transient chaque fois qu’il est résolu. Injecter un service scoped dans un singleton le conserve pendant toute la durée de vie de l’application, ce qui constitue un bug courant avec les contextes de base de données.

Que fait réellement await ?

Il enregistre la suite de la méthode comme continuation et rend le contrôle à l’appelant, libérant ainsi le thread pendant l’exécution du travail attendu. Bloquer une tâche avec .Result ou .Wait peut au contraire provoquer un interblocage dans les contextes qui doivent récupérer ce thread.

Qu’est-ce que le problème N+1 dans EF Core ?

Il consiste à charger une liste de parents, puis à exécuter une requête distincte par parent pour ses enfants. Le chargement anticipé avec Include, ou la projection des seuls champs nécessaires, ramène l’opération à une ou deux requêtes.

SubcueAI peut-il aider pendant un test de programmation .NET surveillé ?

Non. Les évaluations surveillées et enregistrées sont hors périmètre, et la programmation en direct sous observation doit être votre propre travail. SubcueAI est destiné aux entretiens conversationnels, et le mode entretien blanc permet de s’y entraîner au préalable.

Questions liées

← Plus sur Questions d’entretien par poste et par thème