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. .
(Regex) Write a regular expression which removes all tags from a block of HTML.
- I SMELL TROUBLEJ'ai trouvé ces listes sur le blog de Scott Hanselman :
Voici ce que je pense sont les questions les plus importantes de ces messages divisés en catégories. Je les ai édités et réarrangés. Heureusement pour la plupart de ces questions, il existe déjà une bonne réponse sur Stack Overflow. Suivez simplement les liens (je les mettrai tous à jour dès que possible) .
Questions .NET indépendantes de la plateforme
a.Equals(b)
eta == b
?Assembly.LoadFrom
ouAssembly.LoadFile
serait-il approprié?Finalize()
etDispose()
? ( article externe )Debug.Write
etTrace.Write
? Quand faut-il utiliser chacun?catch (Exception e) {throw e;}
et catch(Exception e) {throw;}
?typeof(foo)
etmyFoo.GetType()
?ASP.NET
q=
sauf oùq=5
(comme danshttp://localhost/page.aspx?q=5
)?la source
Ce n'est peut-être pas ce que vous voulez entendre, mais je recommanderais de ne pas se concentrer sur les technologies étroites, mais sur les compétences générales en programmation et en 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 gars du Compact Framework, donc je pourrais échouer à votre entretien si vous aviez pris cette direction. Mais si je devais l'utiliser, je pourrais faire des recherches et me lancer.
Le livre de Joel, Smart and Gets Things Done , contient d'excellents conseils pour l'embauche de développeurs et il existe de grandes sections juteuses sur le type de questions à poser. Je le recommande fortement.
la source
Je pense que si j'interviewais quelqu'un qui avait une expérience LINQ, je lui demanderais peut - être simplement d'expliquer LINQ. S'ils peuvent expliquer l'exécution différée, le streaming, les interfaces IEnumerable / IEnumerator, foreach, les blocs d'itérateur, les arborescences d'expression (pour les points bonus, de toute façon), ils peuvent probablement faire face au reste. (Certes, ils pourraient être des développeurs "ok" et pas encore "obtenir" LINQ - je pense vraiment au cas où ils ont prétendu connaître suffisamment de LINQ pour en faire une question juste.)
Dans le passé, j'ai posé plusieurs des questions déjà énumérées, et quelques autres:
la source
Je suis avec les gars qui recherchent des capacités de résolution de problèmes plutôt que le genre de choses que vous pouvez rechercher et mémoriser à partir des 101 meilleures questions et réponses de l'interview .NET ".
Pour ne citer que l'exemple, j'ai tendance à «connaître» les choses que je dois utiliser au jour le jour. J'ai tendance à oublier (et plus tard à revoir) les 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 couches Business Objects et Data 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 20+ des versions du site Web configurées différemment, ainsi qu'un nombre croissant (actuellement 5) de l'application WinForms ...
... avec une équipe de développement de deux personnes.
J'avais l'habitude de travailler dans une équipe en tant que responsable technique, et mon travail impliquait beaucoup de recrutement et d'interview. Mon erreur la plus spectaculaire a été d'embaucher un gars qui en savait plus sur la technologie que nous utilisions que tous les autres ensemble, y compris moi, et je me considérais comme un expert. Il savait tout ...
... sauf comment écrire du code qui soit répondait aux exigences, soit pouvait être compris par n'importe qui sauf lui-même. Quand j'ai finalement persuadé le PM de ne pas renouveler son contrat, tout ce qu'il a écrit a dû être réécrit.
Structurez judicieusement vos entretiens ...
la source
Qui est Jon Skeet?
la source
Les bonnes questions qui m'ont été posées sont
Il serait intéressant de voir ce qu'un candidat proposerait et vous en apprendrez certainement beaucoup sur la façon dont il utilise le cadre.
la source
Je rechercherais toujours les compétences non techniques moi-même - sans jeu de mots. Donc, une bonne conception OO, un développement piloté par les tests, un bon arrière-plan multilingue (programmation) et une intelligence générale globale (et faire avancer les choses, je suppose!).
Un développeur intelligent ne devrait pas avoir de difficulté à apprendre les technologies individuelles que vous avez besoin de connaître, même s'il ne les a jamais examinées auparavant.Je ne m'inquiéterais donc pas trop de questions spécifiques concernant le cadre WCF / compact et autres.
Je leur demanderais d'écrire du code - la meilleure façon de savoir ce qu'ils savent et comment ils fonctionnent. N'importe qui peut mémoriser la réponse à "Quelle est la différence entre un type de référence et un type de valeur?"
la source
Honnêtement?
"Qu'est-ce que .NET?"
S'ils peuvent vous donner une réponse claire sur ce qu'est .NET et ce qu'il n'est pas, comment il est utilisé, de quels éléments il est composé, etc. S'ils peuvent vous convaincre qu'ils savent ce que c'est, alors il y a de fortes chances qu'ils le sais assez bien.
Le fait est que beaucoup de gens ne savent pas vraiment ce qu'est .NET. Même ceux qui écrivent des programmes pour cela.
la source
Aucun, vraiment. Il y a probablement des questions très simples auxquelles les gens les plus intelligents du monde ne connaissent pas les réponses. Non pas parce qu'ils sont durs, mais simplement parce qu'ils ne les ont tout simplement pas rencontrés. Vous devriez regarder l'ensemble du package et les compétences du développeur, pas s'il peut répondre à une question arbitraire.
Si la question est assez facile à répondre en une courte phrase ou deux, il est assez facile de le dire à quelqu'un qui ne le sait pas. Vous devez rechercher leur compréhension des concepts et de la capacité de raisonnement, et non leur capacité à répondre aux questions "chaque développeur .NET devrait être en mesure de répondre."
la source
Connaître la différence entre les types de référence et de valeur.
Sachez que les événements sont stockés en tant que références matérielles (c.-à-d. N'oubliez pas de désenregistrer les événements ou l'application perdra de la mémoire).
Les cordes sont immuables.
la source
Martin Fowler préfère les compétences en conception à la connaissance des plateformes . D'un autre côté, vous pouvez poser une question qui montrera la connaissance des modèles de conception et de la plateforme .NET comme ceci:
la source
Je suggère de vous renseigner sur les blogs qu'ils lisent régulièrement et sur les projets de programmation personnelle sur lesquels ils ont travaillé, car cela montrera une volonté d'apprendre et une passion pour la programmation.
la source
Voici quelques-uns que j'ai utilisés pour filtrer les programmeurs qui postulent pour des emplois en tant que programmeurs C #:
Quelle est la différence entre un type de référence et un type de valeur?
Expliquez l'interface IDisposable, quelle construction de langage C # l'exige et comment vous l'implémenteriez.
Quelle exception lèveriez-vous si un null est passé en argument à une méthode qui a un contrat qui n'autorise pas les null pour ce paramètre?
la source
"Lequel des ASP: quels contrôles utiliseriez-vous dans la production et pourquoi?"
Cela vous indiquera rapidement si votre sujet a déjà construit et entretenu un projet de grande taille assez longtemps pour être brûlé par DataGrids et LinkButtons, ou s'il est toujours dans la phase glisser / déposer "apprenez-vous en 21 jours".
(la réponse est asp: Repeater, asp: PlaceHolder, asp: Literal et asp: Content)
la source
Qu'est-ce qu'un fil?
Qu'est-ce que le GC?
la source
C'est un peu une question variable, et pas vraiment à laquelle vous devriez pouvoir répondre complètement maintenant, mais à laquelle vous devriez pouvoir répondre le cas échéant:
"Qu'est-ce que le framework .NET offre pour accomplir la tâche X?"
Ou plus précisément:
"Le framework .NET inclut-il un objet qui fait X?"
Par exemple, j'ai récemment passé quelques heures à développer un objet optimisé pour stocker un tableau de booléens et à opérer dessus, comme faire un NOT par collection, OR, XOR, AND, définir toutes les valeurs, etc. Jusqu'à ce que j'aie fini d'écrire tous mes tests unitaires et de les peaufiner pour obtenir les meilleures performances possibles, j'ai réalisé que mon objet "BoolArray" existait déjà dans le framework .NET sous le nom "BitArray".
Il peut être difficile de répondre à cette question, car la meilleure réponse à propos de quel objet / assistant utiliser est souvent celle que vous ne connaissez pas ou ne comprenez pas complètement. Que le monde .NET serait merveilleux si tout le monde connaissait même le simple StringBuilder, un outil de base qui peut augmenter considérablement les performances.
la source
Je proposerai quelques questions axées sur la compréhension des concepts de programmation utilisant dotnet comme
Quelle est la différence entre un environnement géré et non géré? Avantages et inconvénients du GC Avantages et inconvénients du JIT Si nous devons développer l'application X, pouvons-nous utiliser dotnet? Pourquoi? (cela identifiera comment il voit le dotnet)
Je suggère également d'écrire de petites méthodes et de lui demander de les réécrire avec de meilleures performances en utilisant de meilleures classes dotnet ou des méthodes standard. Écrivez également des méthodes incorrectes (en termes de toute) logique ou autre et demandez-lui de les corriger.
la source
Je suis fan des éléments suivants en plus de certaines des questions déjà mentionnées:
la source
C'est intéressant et au risque de recevoir ce vote négatif pour avoir, à mon avis, comme je suis né sourd, se voir poser une question comme celle-ci nécessiterait plus d'efforts pour communiquer personnellement mes pensées.
Pour être franc, je ne lirais vraiment pas trop les questions typiques, car le paradigme sous-jacent est « Dans quelle mesure pouvez-vous bien exprimer vos pensées et votre compréhension? ', c'est vraiment ce que recherche l'intervieweur. La communication est toujours ma plus grande faiblesse en raison de ma façon de fonctionner et peut être frustrée assez facilement.
Ce serait idéal d'avoir les connaissances et d'être du type tout savoir, mais malheureusement, il y a certaines choses que je ne sais pas, mais ne pas avoir peur si vous ne connaissez pas la réponse et l'admettre plutôt que de bluffer à travers. Si un enquêteur me posait une question comme l'une des précédentes, dont je ne serais pas sûr ou mal compris / mal interprété, je le dirais d'emblée, ce qui peut personnellement être embarrassant, mais j'ai appris à gérer cela.
Vous seriez surpris de voir combien de personnes pourraient effectivement gaucher et bluffer à travers lequel, à la fin de la journée, se faire prendre avec leur `` pantalon baissé '' métaphoriquement parlant.
Mes 2 cents, Cordialement, Tom.
la source
Un peu plus:
la source
Je ne poserais pas ces questions "savoir quelque chose du manuel", mais plutôt poser quelques trucs comme:
Ce ne sont pas sûrs à 100%, selon la personne que je peux leur demander:
Je lui demanderais également comment il / elle a appris ses trucs et ce qu'il / elle lit (quels blogs, livres).
la source
Un peu plus:
Quelles sont les limites de la récupération de place.
Connaître les finaliseurs et IDisposable.
Soyez conscient du pool de threads et quand l'utiliser.
Si vous utilisez des applications GUI, sachez que l'interface graphique de Windows est monothread.
Utilisez foreach (je vois beaucoup de gens faire MoveNext, etc.)
la source
Je pense que cela ne devrait pas être que des questions, je connais quelques gars qui sont brillants lorsque vous les interviewez, mais une fois qu'ils arrivent à la vraie chose, ils sont trop perfectionnistes, je dirais qu'ils ne parviennent pas à coder la tâche misérablement.
J'ai été interviewé une fois et j'ai un peu aimé l'approche où le premier employeur m'a donné un questionnaire technique à remplir en 30 minutes. Si l'un réussit, il sera appelé pour un entretien d'une heure couvrant les questions de jugement de personnalité et de recherche de personnage ainsi que les jargons techniques.
Ensuite, on m'a demandé de développer une application Web de trois pages en 6 heures. Les contraintes imposées dans l'application couvraient intelligemment les principaux aspects du développement d'applications comme une petite ERD, Layerd Design, la cohérence de l'interface utilisateur, contrôlent des problèmes spécifiques tels que l'utilisation des boutons radio dans GridView et la récupération et l'affichage des types d'images de la base de données sur une page Web, le développement d'un algorithme, sécurité, cryptage, hachage, représentation et manipulation des données.
Le lendemain, ils ont suivi une discussion de 30 minutes sur l'application développée couvrant les zones de goulot d'étranglement des performances et les améliorations de la conception et des algorithmes utilisés. Et test facultatif d'une heure pour améliorer votre algorithme développé à l'étape précédente avec une condition spécifique.
Cela a donc pris beaucoup de temps, mais de cette façon, vous pouvez vous assurer que la personne que vous embauchez connaît au moins les concepts qui sont essentiels pour être un bon développeur.
la source
Je préférerais lui poser un problème et lui demander de le résoudre en utilisant les fonctionnalités de .net que vous connaissez et pourquoi pensez-vous que c'est la meilleure solution.
Cela va casser presque toutes les capacités d'un candidat en termes de compétences techniques, analytiques et de résolution de problèmes ainsi que son approche pour résoudre un problème.
la source