246 votes

Des questions auxquelles tout bon développeur .NET devrait pouvoir répondre ?

Mon entreprise est sur le point d'embaucher Développeurs .NET . Nous travaillons sur une variété de plateformes .NET : ASP.NET, Compact Framework, Windowsforms, Web Services. J'aimerais compiler une liste/catalogue de bonnes questions, une sorte de norme minimale pour voir si les candidats sont expérimentés. Ma question est donc la suivante :

Quelles questions pensez-vous que cela devrait être une bonne Le programmeur .NET doit pouvoir répondre ?

Je le verrais aussi comme un liste de contrôle pour moi-même, afin de voir où sont mes propres déficits. (il y en a beaucoup...) .

alt text

*MISE À JOUR : Nous tenons à préciser que nous ne testons pas uniquement les connaissances en .NET, et que les capacités de résolution de problèmes et les compétences générales en programmation sont encore plus importantes pour nous.

171voto

Juliet Points 40758

Les questions de base sont les suivantes :

Je pense qu'il est généralement utile de demander à vos candidats de réaliser un exercice de codage simple tel que :

  • Écrivez votre propre classe de liste liée sans utiliser les classes intégrées.
  • Écrivez votre propre classe de table de hachage sans utiliser les classes intégrées.
  • Ecrivez une classe qui représente un arbre binaire. Écrivez une méthode qui parcourt tous les nœuds de l'arbre.
  • Écrivez une méthode pour effectuer une recherche binaire sur un tableau sans utiliser les méthodes intégrées.
  • Dessinez un schéma de base de données pour un blog. Chaque utilisateur n'a qu'un seul blog, chaque blog a plusieurs catégories, chaque catégorie a plusieurs articles, et chaque article peut appartenir à plusieurs catégories. Demandez à votre candidat d'écrire des requêtes pour extraire des informations spécifiques.

Ensuite, recherchez un savoir-faire technique spécifique :

  • (Gestionnaires d'événements) Créer une classe avec un gestionnaire d'événements personnalisé, créer une autre classe qui s'accroche au gestionnaire d'événements personnalisé.
  • (XML) Chargez un document XML et sélectionnez tous les nœuds ayant les propriétés x, y et z.
  • (Programmation fonctionnelle) Créez une fonction qui accepte une autre fonction comme paramètre. Une fonction Map ou Fold fonctionne très bien pour cela.
  • (Reflection) Écrivez une fonction qui détermine si une classe possède un attribut particulier.
  • (Regex) Écrivez une expression régulière qui supprime toutes les balises d'un bloc de HTML.

Aucune de ces questions n'est particulièrement difficile à répondre pour un programmeur C# compétent, et elles devraient vous donner une bonne idée des points forts de votre candidat. Vous pouvez également inclure quelques questions/échantillons de code qui font appel à des modèles de conception spécifiques.

[Editer pour clarification] :

On dirait que beaucoup de gens ne comprennent pas pourquoi je pose ce genre de questions. Permettez-moi de revenir sur les commentaires de quelques personnes (je ne cite pas directement, je paraphrase plutôt) :


Q : A quand remonte la dernière fois que quelqu'un a utilisé des volatiles ou des références faibles ?

A : Lorsque je fais passer des entretiens techniques, je cherche à savoir si une personne comprend le haut niveau et les fonctionnalités de bas niveau de .NET. Les volatiles et les références faibles sont deux fonctionnalités de bas niveau fournies par .NET. Même si ces fonctionnalités ne sont pas souvent utilisées en pratique, les réponses à ces questions sont extrêmement révélatrices :

  • Une bonne compréhension des volatiles montre qu'une personne comprend comment les optimisations du compilateur modifient la correction du code, comment les threads conservent des copies locales de l'état partagé qui peuvent être désynchronisées à tout moment, et qu'elle est un minimum consciente de certaines des complexités du code multithread.

  • Une bonne compréhension des références faibles démontre qu'une personne connaît les détails intimes du ramasseur de déchets et la façon dont il décide de libérer la mémoire. Bien sûr, vous pouvez demander aux candidats "comment fonctionne un ramasse-miettes", mais si vous leur demandez de parler des références faibles, vous obtiendrez une réponse bien meilleure et plus réfléchie.

.NET est un langage assez abstrait, mais les développeurs vedettes ont presque toujours une connaissance approfondie du CLR et des détails de bas niveau du runtime de .NET.


Q : Pourquoi quelqu'un aurait-il besoin d'implémenter sa propre table de hachage ou liste chaînée ?

A : Je ne veux pas dire que la classe Dictionary est inférieure ou que les gens devraient créer leur propre table de hachage. Il s'agit d'une question de base qui teste si une personne possède une minimal la compréhension des structures de données. C'est ce que ces questions testent : une compréhension minimale.

Vous apprenez à connaître ces hashtables et ces listes liées dès le premier jour de Data Structures 101. Si quelqu'un n'est pas capable d'écrire une table de hachage ou une liste chaînée à partir de rien, alors il a un problème de structure de données. énorme des lacunes dans leurs connaissances techniques.


Q : Pourquoi ces questions sont-elles si orientées vers les crasses ?

A : Parce que le titre de ce fil de discussion est "questions que tout bon développeur .NET devrait connaître". Tous les développeurs .NET commencent leur carrière en écrivant des applications médiocres, et 90 % de tous les développements d'applications que les gens font pour gagner leur vie concernent des applications d'entreprise.

Je pense que les questions testant les connaissances d'une personne en matière d'applications professionnelles sont appropriées dans la plupart des cas, à moins que vous ne recherchiez des développeurs dans des niches très spécifiques, telles que le développement de compilateurs, de moteurs de jeux, la résolution de théorèmes, le traitement d'images, etc.

135voto

splattne Points 48126

J'ai trouvé ces listes sur Scott Hanselman 's blog :

Voici ce que je pense être les questions les plus importantes de ces posts, divisées en catégories. Je les ai éditées et réorganisées. Heureusement, pour la plupart de ces questions, il existe déjà une bonne réponse sur Stack Overflow. Il suffit de suivre les liens (Je les mettrai tous à jour dès que possible) .

Questions .NET indépendantes de la plate-forme

ASP.NET

94voto

Brian MacKay Points 10483

Ce n'est peut-être pas ce que vous voulez entendre, mais je vous recommande de ne pas vous concentrer sur des technologies étroites, mais sur des compétences générales en matière de programmation et de résolution de problèmes. Les développeurs solides peuvent apprendre rapidement tout ce que vous voulez qu'ils fassent.

Par exemple, je ne suis pas un adepte du cadre compact, et je pourrais donc échouer à votre entretien si vous alliez dans cette direction. Mais si j'avais besoin de l'utiliser, je pourrais faire quelques recherches et m'y mettre directement.

Le livre de Joel, Intelligent et efficace Il contient d'excellents conseils pour le recrutement de développeurs, ainsi que des sections très intéressantes sur le type de questions à poser. Je le recommande vivement.

66voto

Jon Skeet Points 692016

Je pense que si j'interviewais quelqu'un qui a de l'expérience avec LINQ, j'aurais peut-être juste demandez-leur d'expliquer LINQ. S'ils peuvent expliquer l'exécution différée, le streaming, les interfaces IEnumerable/IEnumerator, foreach, les blocs d'itérateurs, les arbres d'expression (pour les points bonus, de toute façon), ils peuvent probablement se débrouiller avec le reste. (Certes, ils pourraient être des développeurs "corrects" et ne pas encore "comprendre" LINQ - je pense vraiment au cas où ils ont prétendu connaître suffisamment LINQ pour que la question soit juste).

Dans le passé, j'ai posé plusieurs des questions déjà énumérées, et quelques autres :

  • Différence entre les types de référence et de valeur
  • Passer par référence ou passer par valeur
  • IDisposable et finaliseurs
  • Chaînes de caractères, immuabilité, codage des caractères
  • Point flottant
  • Délégués
  • Génériques
  • Types nuls

42voto

ChrisA Points 2991

Je suis d'accord avec les personnes qui recherchent des capacités de résolution de problèmes plutôt que le genre de choses que vous pouvez chercher et mémoriser dans les "101 questions et réponses pour les entretiens .NET".

Pour me citer en exemple, j'ai tendance à "connaître" les choses que je dois utiliser au jour le jour. J'ai tendance à oublier (et à devoir chercher à nouveau) des choses que j'utilise rarement.

Si vous vouliez me faire trébucher dans une interview, ce serait très facile.

Néanmoins, j'ai architecturé et codé une grande partie de l'infrastructure d'un système qui utilise des objets d'entreprise et des couches de données identiques pour ses incarnations WinForms et ASP.NET, et notre base de code est suffisamment robuste et réutilisable pour que nous puissions prendre en charge et développer plus de 20 versions configurées différemment du site web, ainsi qu'un nombre croissant (actuellement 5) de l'application WinForms...

... avec une équipe de développement de deux personnes.

J'ai travaillé dans une équipe en tant que responsable technique, et mon travail impliquait beaucoup de recrutement et d'entretiens. Mon erreur la plus spectaculaire a été d'engager un type qui en savait plus sur la technologie que nous utilisions que tous les autres réunis, y compris moi, et je me considérais comme un expert. Il savait tout...

... sauf comment écrire du code qui soit conforme aux exigences, ou qui puisse être compris par quelqu'un d'autre que lui-même. Lorsque j'ai fini par persuader le Premier ministre de ne pas renouveler son contrat, tout ce qu'il avait écrit a dû être réécrit.

Structurez judicieusement vos entretiens...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X