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.