Les questions de base comprennent:
Je pense qu'il est généralement utile de demander à vos candidats d'effectuer un simple exercice de codage 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.
- Écrivez une classe qui représente un arbre binaire. Écrivez une méthode qui traverse tous les nœuds de l'arbre.
- Écrivez une méthode pour effectuer une recherche binaire sur un tableau sans utiliser de 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 de nombreux 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éez une classe avec un gestionnaire d'événements personnalisé, créez une autre classe qui se connecte 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 vraiment bien pour cela.
- (Réflexion) Écrivez une fonction qui détermine si une classe a 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 forces particulières de vos candidats. Vous pouvez également vouloir travailler dans quelques questions / exemple de code qui utilisent des modèles de conception spécifiques.
[Modifier pour clarification] :
Il semble que beaucoup de gens ne comprennent pas pourquoi je poserais ce type de questions. Permettez-moi de revenir sur les commentaires de quelques personnes (je ne cite pas directement, mais je paraphrase à la place):
Q: À quand remonte la dernière fois que quelqu'un a utilisé des références volatiles ou faibles?
R: Lorsque je donne des entretiens techniques, je cherche à voir si une personne comprend les fonctionnalités de haut niveau et de bas niveau de .NET. Les éléments volatils 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 dans la pratique, les réponses à ces questions sont extrêmement révélatrices:
Une bonne compréhension des volatiles démontre qu'une personne comprend comment les optimisations du compilateur modifient l'exactitude du code, comment les threads conservent des copies locales de l'état partagé qui peuvent être désynchronisées à un moment donné, et connaît au minimum 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 ramasse-miettes et comment elle décide quand libérer de la mémoire. Bien sûr, vous pourriez demander aux candidats «comment fonctionne un ramasse-miettes», mais poser des questions sur les références faibles obtient 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 de l'exécution de .NET.
Q: Pourquoi quelqu'un aurait-il besoin d'implémenter sa propre table de hachage ou liste de liens?
R: Je n'implique pas que la classe Dictionary est inférieure ou que les gens devraient lancer leur propre table de hachage. Il s'agit d'une question fondamentale qui teste si une personne a une compréhension minimale des infrastructures de données. C'est ce que ces questions testent: compréhension minimale.
Vous en apprendrez davantage sur ces tables de hachage et listes liées le premier jour de Data Structures 101. Si quelqu'un ne peut pas écrire une table de hachage ou une liste liée à partir de zéro, alors il a un énorme fossé dans ses connaissances techniques.
Q: Pourquoi ces questions sont-elles si grossières?
R: Parce que le titre de ce fil est "questions que tout bon développeur .NET devrait savoir". Chaque développeur .NET commence sa carrière en écrivant des applications crud, et 90% de toutes les personnes chargées du développement d'applications dans la vie se préoccupent des applications métier.
Je pense que les questions testant les connaissances d'une personne sur les applications métier 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, le développement de moteurs de jeux, la démonstration de théorèmes, le traitement d'images, etc. .