Est-ce une mauvaise pratique d'entretien de demander aux candidats de rédiger une implémentation de liste chaînée? [fermé]


43

En lisant ce site et SO, j'ai vu beaucoup d'histoires de questions d'entrevue et de réponses disant qu'un candidat devait mettre en place une liste chaînée à partir de zéro. En général, c’est un exercice de "gimme" pour les candidats à un rôle de programmation, comme écrire FizzBuzz. L'idée est que si le candidat ne peut pas faire cela, il ne peut pas programmer et devrait être rejeté presque immédiatement.

Cependant, je ne peux pas m'empêcher de penser que cela pourrait être une mauvaise pratique pour les raisons suivantes:

  • Les langages modernes de niveau supérieur tels que C # et Python utilisent nativement les listes de manière intensive; écrire votre propre objet lié à une liste de liens ne serait requis que dans des circonstances inhabituelles et même alors probablement peu judicieux.
  • Les langages de niveau inférieur tels que C ++ ont des bibliothèques standard avec des objets et des conteneurs de listes / itérateurs.
  • À la lumière des deux premiers points, les codeurs peuvent passer des années sans même penser à mettre en place eux-mêmes une liste (liée, double liaison, etc.). Certains peuvent même pas vraiment voir de telles choses depuis le collège.
  • La puissance de calcul n’est pas non plus le facteur qu’elle était il ya des années, de sorte que l’efficacité au moyen de pointeurs n’est plus le problème qu’elle était (en général).
  • Une simple recherche sur le Web sur quelque chose du genre "exemple de liste chaînée" ferait apparaître de nombreux exemples de code qui pourraient simplement être mémorisés et rediffusés, sans indiquer vraiment la véritable compétence du demandeur.

Je devrais dire que l'utilisation d'une liste chaînée pour mener à des questions ouvertes / discussions sur les capacités des candidats à la résolution de problèmes / à la pensée critique est probablement une très bonne pratique d'entretien. De toute façon, un intervieweur peut vraiment voir à quoi ressemble un candidat et en quoi son opinion est extrêmement bénéfique.

Je pense que cette approche binaire "pas de code de liste lié, pas de travail" pour les programmeurs travaillant sur une application de bureau ou Web est un peu dépassée. Cela pourrait aussi être très dangereux; un candidat qui ne sait pas comment travailler correctement avec le tête de liste peut être par ailleurs un excellent codeur et collègue et se perdre dans le mélange. Pensées?

EDIT : Il y a beaucoup de (bons) commentaires qui suggèrent que le fait de poser cette question soit bon ou mauvais dépend du contexte du travail. Je suis tout à fait d’accord, alors permettez-moi de reformuler cette question: La mise en œuvre d’une liste chaînée est une question d’entrevue courante pour un large éventail d’emplois de codage, similaire aux questions telles que FizzBuzz ou l’écriture d’une fonction récursive pour le calcul des factoriels. Cette question est-elle suffisamment utile pour être utilisée couramment pour évaluer les candidats à la programmation dans l’ensemble? Ou devrait-on considérer une mauvaise question à poser, à l’exception des postes de "Développeur senior, Équipe de listes chaînées incorporées"?


11
Pour quelle position est-ce? Quel type de travail est-ce? Dans quel domaine est-ce?
Thomas Owens

1
Je vois vos modifications, mais quand même - de quel type de travail s'agit-il? Est-ce un stage? Un travail de débutant? Un travail intermédiaire? Cherchez-vous à engager un programmeur, un ingénieur ou un scientifique? Dans quel domaine est-ce? Seraient-ils jamais dans une position telle qu'ils auraient besoin de lancer leurs propres algorithmes ou structures de données pour une raison quelconque?
Thomas Owens

3
'C # (...) utilise de manière native les listes' et 'l'efficacité via les pointeurs n'est plus le problème qu'il était': vous savez que ces listes natives ne sont pas des listes chaînées, mais plutôt des listes basées sur des tableaux? Les tableaux ont tendance à mieux fonctionner en raison de la mise en cache. En fait, le framework .NET de l'IIRC n'avait même pas de listes chaînées avant la version 2.0. Je suis à peu près sûr que la majorité des programmes C # n'utilisent pas de listes chaînées.
Alex ten Brink

1
@AlextenBrink Fait intéressant, je pense que cela signifie que la connaissance des listes chaînées est encore moins importante pour C #. Pourquoi implémenter vous-même une structure de données (avec d'éventuels bogues) quand je peux utiliser une meilleure structure intégrée directement dans le langage?
joshin4colours

La question que je me pose est la suivante: «Pourquoi même envisager d’utiliser une structure de données qui, dans à peu près tous les cas, est inférieure à une autre structure de données»? Les listes chaînées sont plus lentes pour la plupart des opérations que les listes basées sur des tableaux; la seule chose à quoi les listes chaînées sont bonnes est la suppression en temps constant, mais il existe très peu de situations dans lesquelles cela est nécessaire. Notez que je ne parle pas de savoir si ce serait une bonne structure de données pour une question d’entrevue: les concepts en question pourraient être un bon test, je ne sais pas.
Alex ten Brink

Réponses:


52

Si répondre à la question vous dit ce que vous voulez savoir sur un candidat, c'est une bonne question pour l'entretien. Si ça ne vous dit pas ça, c'est une mauvaise question.

Des questions simples comme FizzBuzz ont un objectif spécifique. Si un candidat ne peut pas coder FizzBuzz, il ne peut tout simplement pas coder et vous pouvez mettre fin à l'entretien plus tôt. Je dirais que l'implémentation d'une liste chaînée est légèrement plus difficile, mais cela peut déclencher une conversation sur les structures de données en général qui en révélera beaucoup.

Rappelez-vous simplement qu'aucune question d'entrevue ne vous dira tout ce que vous voulez savoir. Vous devez vraiment avoir un groupe de questions prêt. Vous devez poser les questions dans l'ordre, du plus facile au plus difficile, afin de pouvoir déterminer les limites de ce que le candidat sait. Si vous posez une question et qu’ils y répondent, vous ne savez toujours pas quoi d’autre ils savent ou ne savent pas.


En ce qui concerne votre édition:

Cette question est-elle suffisamment utile pour être utilisée couramment pour évaluer les candidats à la programmation dans l’ensemble? Ou devrait-on considérer une mauvaise question à poser, à l’exception des postes de "Développeur senior, Équipe de listes chaînées incorporées"?

Je pense que c'est une bonne question d'ordre général qui pourrait être utilisée pour évaluer pratiquement n'importe quel candidat à la programmation. Cela doit simplement faire partie d'un groupe plus vaste de questions. Ce serait un bon moyen de briser la glace pour de nombreux types de poste (même si le candidat ne peut pas mettre en place une liste chaînée à partir de rien, il peut peut-être expliquer comment il l’a déjà utilisée et quelles sont les fonctions clés), ou le début de la liste. une longue séquence de questions plus avancées pour le poste "Développeur senior, équipe de listes chaînées incorporées".


19
Votre premier paragraphe est la moitié de l'histoire. L’autre moitié est la suivante: si on vous pose la question, le candidat voudra travailler pour vous, c’est une bonne question pour l’entretien. Si le candidat ne veut pas travailler pour vous, c'est une mauvaise question.
Ruakh

5
Vous ne pouvez pas trouver la limite de ce que le candidat sait de cette façon, car vous n'avez aucun moyen d'affirmer que ce que vous considérez comme "compliqué" et "de base" s'applique dans le même ordre à votre candidat. LinkedList est probablement une base pour un programmeur universitaire, mais un programmeur autodidacte n'a probablement jamais eu à l'écrire. Après tout, il a probablement écrit "LinkedList <string> ..." chaque fois qu'il en avait besoin. Cela signifie-t-il que ses connaissances sont rattachées au niveau "linkedList"? Il pourrait être un expert dans des sujets plus complexes et être capable d'apprendre des LL en 5min dans Google.
Sylverdrag

1
@Sylverdrag C'est pourquoi j'ai dit que vous aviez besoin de plus d'une question. Une fois que vous avez trouvé la limite de leurs connaissances sur les listes chaînées, passez à un autre sujet.
Bill the Lizard

@ruakh Cela joue certainement un rôle. Si chaque question que l'on me pose lors d'une interview concerne des aspects banals des applications CRUD (je ne pense pas pouvoir apprendre quelque chose de nouveau dans cette entreprise), cela ne m'encouragera pas à y travailler.
Bill the Lizard

34

J'ai raté des emplois uniquement parce que mon esprit était masqué par de simples énigmes comme celle-ci. J'ai également brillamment travaillé sur de tels casse-tête dans d'autres interviews - je sais comment mettre en place une liste chaînée dans un environnement sans pression. Je n'ai jamais eu à me plaindre de mes capacités de la part de quelqu'un avec qui j'ai travaillé, alors peut-être que je ne devrais pas penser que j'ai manqué un emploi, je devrais penser qu'ils m'ont manqué.

Alors oui, je pense que c'est au mieux une pratique discutable, mais je la comprends. J'ai également envisagé la possibilité que ce ne soit pas la faute de la question, mais le questionneur, pour en faire une situation de haute pression.

Personnellement, je préfère poser des questions ouvertes sur un problème que le candidat a déjà résolu - récemment, si possible, et couvrant à la fois des problèmes de codage et de processus. S'ils peuvent apporter des échantillons de code, c'est fantastique.


Ils doivent demander quelque chose, que ce soit un puzzle ou quoi que ce soit d'autre. Toute question peut amener la personne à blanc.
Inscrivez

2
@pdr - "S'ils peuvent apporter des échantillons de code, c'est fantastique." S'ils ont écrit les échantillons de code qu'ils ont apportés, ils n'ont pas de prix.
robrambusch

4
Si quelqu'un manque de persévérance dans la mise en œuvre d'une liste chaînée et qu'il ne peut pas y remédier avec un peu d'inspiration ou se frustrer facilement, je pense que ce serait une personne que je ne voudrais pas perdre à l'écart.
Bill K

1
@pdr - "Et si vous ne pouvez pas, combien de temps pensez-vous avoir le travail?" - Aussi longtemps qu'il faudra pour les licencier, quel que soit le régime des RH que vous subissez. Ensuite, il y a le coût supplémentaire de redémarrer votre recherche de candidat. De plus, le coût d'opportunité inhérent au fait que la personne suivante que vous auriez interrogée pourrait devenir le pivot technique de l'ensemble de votre département. Mais bien sûr, ils ne sont plus disponibles, car vous avez embauché la mauvaise personne et ils ont trouvé un autre emploi.
robrambusch

1
@robrambusch: Il a démontré d'excellentes compétences en résolution de problèmes et a bien parlé de la structure de classe. Mais il n'a pas écrit de code. En ce qui concerne la rédaction de code dans une interview, oui, cela peut être utile, mais je maintiens que je peux en apprendre davantage sur vous en une heure à vous parler des problèmes que vous avez résolus plutôt que de vous donner un seul problème artificiel prenant une heure à résoudre.
pdr

25

Il faut définir le type de travail de programmation. Si vous développez des compilateurs et des algorithmes, vous devez vous poser des questions à ce sujet. Si vous êtes dans des applications de type métier et que vous vous attendez à ce que le candidat fasse des applications CRUD, la connaissance du concept (sans avoir à écrire un programme) peut alors être suffisante. Aujourd'hui, la connaissance des différentes technologies requises pour effectuer le travail spécialement dans les applications de type métier remplace le besoin d'algorithmes soignés.


Exactement. L'année dernière, j'ai écrit un composant de tri génétique à usage général qui utilisait également un peu de recuit simulé (pour créer des planifications de classe) et plusieurs structures de données "avancées" pour le rendre performant. Je n'avais pas besoin de coder un seul. Si le framework .Net n'avait pas ce dont j'avais besoin, j'utilisais C5 ou Power Collections.
ElGringoGrande

4
D'accord, j'écris des applications métier toute la journée, j'ai déjà mis en œuvre des implémentations de listes chaînées ... au collège ... en COBOL. Je pourrais le refaire, mais pourquoi? Beaucoup de développeurs LOB compétents n'en ont probablement jamais écrit et n'en auront jamais besoin.
CaffGeek

1
D'accord en général, mais une liste chaînée n'est rien d'exotique, vraiment. Ce sont les bases, juste un niveau après FizzBuzz.
Francesco De Vittori

1
@FrancescoDeVittori: N'est-ce pas parfois le problème? Quelqu'un vous donne un problème à résoudre. Cela semble assez simple, mais vous ne l'avez jamais fait auparavant, alors votre cerveau commence à s'emballer, à essayer de trouver les pièges, la chose qui va vous coûter l'entretien si vous n'y pensez pas. Et ce n'est pas là, mais cela vous empêche de résoudre le problème actuel.
pdr

@FrancescoDeVittori: Pouvez-vous donner quelques exemples de questions d'entrevue non élémentaires? J'ai besoin de ça pour m'améliorer. Merci.
Den

9

Ma réponse est "ça dépend". Je voudrais poser cette question si un candidat a inscrit C ou C ++ sur son CV. Demander l’implémentation d’une liste chaînée constitue un bon test pour comprendre les pointeurs, ce qui est absolument essentiel pour un programmeur C ou C ++.

Par contre, si un candidat ne prétend pas connaître le C ou C ++, je ne lui demanderais pas de mettre en place une liste chaînée, mais j’envisagerais de poser des questions à ce sujet. Expliquez à un niveau élevé comment fonctionne une liste chaînée. Quelle est la complexité d'ajouter un élément à la tête de la liste? La queue de la liste? Insérer un élément au milieu de la liste? Quand utiliseriez-vous une liste plutôt qu'un tableau? Ce sont des concepts fondamentaux de structure de données que, à mon humble avis, tout programmeur devrait connaître.


7

Je ne considérerais pas cela comme une mauvaise question d’entrevue. Une bonne partie de la compréhension de la structure de données et de la programmation commence par une très bonne compréhension des listes chaînées. Cela dit, il y a des mises en garde:

1) C'est une question de type fizz-buzz. Vous ne faites que valider quelque chose de très fondamental: la personne comprend-elle une liste chaînée? Demandez-le et passez à autre chose.

2) Les listes chaînées posent un problème: les langues qui sont parfaitement adaptées pour montrer votre compréhension des concepts de liste chaînée (par exemple, C) peuvent ne pas être identiques à la langue avec laquelle elles travailleront. Vous pouvez démontrer une compréhension de base dans n'importe quelle langue avec des structures, bien sûr, mais demander à un candidat de réimplémenter une liste chaînée dans Erlang sans utiliser [] n'est pas le même défi et ne vous dira pas la même chose à propos de la compréhension du candidat. en leur demandant de le faire en C. Leur demander de le faire en C si le travail est autour de Java manque également quelque peu.

3) Dans cet esprit et face aux défis généraux de la "programmation par tableau blanc", si je posais ce type de question, j'accepterais les pseudocodes ou les diagrammes, à condition qu'ils démontrent une compréhension des principes fondamentaux. Je ne demande pas aux gens d'écrire du code sur un tableau blanc qui est syntaxiquement et logiquement parfait, en particulier s'ils peuvent ensuite se retourner et identifier les problèmes logiques lorsqu'ils sont invités à le relire. YMMV.


6

Lorsque je donnais des interviews, on me demandait souvent des implémentations de listes chaînées et certains algorithmes centrés sur des listes chaînées. J'ai résolu la plupart d'entre eux, et certains d'entre eux m'ont demandé d'exercer un peu mes neurones.

Si je passais un entretien, je choisirais une implémentation de la liste chaînée, non pas pour tester la qualité de la codification, mais pour vérifier le degré d'attention accordée aux détails par une personne. Tout le monde peut écrire une liste chaînée, mais ce ne sont pas tous les bons programmeurs qui échouent. Ne lui demandez pas: Write a code for linked list in C/C++. Demandez-lui d'écrire une liste générique de liens en C (pas C ++), etc.

Tournez le problème et mettez d'autres conditions sur la liste des liens, et vous aurez une bonne question à poser. Certaines personnes sont alors tenues de faire des erreurs.


2
Une liste chaînée générique
n'existe pas

1
Sérieusement? Je pensais que les voidpointeurs n'étaient là que pour ça ... :) Le premier lien que j'ai trouvé sur Google pour "liste générique liée en c" était: daniweb.com/software-development/c/threads/109260 et un autre était un entretien technique. .com /… Je pensais que tout le monde le savait!
c0da

Je n’ai pas testé ces codes, mais j’ai eu ce type de liste chaînée plus tôt, et cela a très bien fonctionné ...
c0da

Même écrire une liste générique liée en C # a un ou deux "pièges" (par exemple, comparer des éléments de type T n’est pas évident; c’est-à-dire que (T v1, T v2) => {return v1 == v2;} ne sera pas compilé. sauf si vous avez des contraintes de classe ou utilisez l'opérateur d'égalité par défaut)
Steven Evers

@ c0da À mon avis, une liste qui utilise des voidpointeurs n'est pas générique, mais juste générale pour tout moment. Ils peuvent contenir n'importe quel type de contenu et même les mélanger comme bon leur semble, ce qui le rend non générique pour moi. C'est comme utiliser le type de base objectdans les langages orientés objet…
poke le

5

Au cours de mes 10 années environ de programmation professionnelle (et environ 10 ans en tant que passe-temps), je ne pense pas avoir jamais eu besoin de mettre en place une liste chaînée. Si quelqu'un me demandait de le faire lors d'une entrevue, je pourrais peut-être par contre demander si c'est quelque chose que je ferais régulièrement au travail.

Bien sûr, il y a certainement des emplois là où vous aurez besoin d'écrire des implémentations plus ou moins d'algorithmes cleanroom communément connus - comme mettre en œuvre une liste chaînée à partir de zéro. Mais pour la plupart des emplois en programmation, quelle valeur spécifique a-t-il pour l'entreprise qu'un candidat peut le faire pendant une interview? Est-il vraiment si important dans un tel contexte que le candidat fournisse une mise en œuvre parfaite, qui gère correctement les cas critiques, signale les échecs selon les pratiques courantes dans le langage ou le cadre, etc.? Ou pouvez-vous oublier cela et vous concentrer sur la façon dont ils abordent réellement un problème auquel ils ne sont peut-être pas confrontés depuis 10 ou 20 ans?

Lorsque j'ai interviewé pour mon poste actuel, j'avais très peu d'expérience de la pile technologique utilisée dans l'entreprise. Quelques années plus tard, des collègues viennent régulièrement me voir et me posent des questions non seulement sur les produits, leur mise en oeuvre et les normes qu’ils appliquent, mais aussi sur des problèmes de programmation beaucoup plus généraux (on me demandait hier seulement les implications impliquaient une dépendance circulaire dans une contrainte par défaut dans SQL Server dans le contexte d'une table particulière et son utilisation dans notre cas - en raisonnant à travers elle, il s'est avéré qu'il n'y avait aucune implication dans ce cas particulier). Je n'ai pas eu besoin non plus d'une nouvelle implémentation de liste chaînée pour cela.

Posez des questions pertinentes pour le travail que le candidat est susceptible d’être affectéet essayez de vous faire une idée de ce qu’ils pensent de la collecte de nouvelles connaissances. Comment pourraient-ils s'y prendre pour comprendre le sens d'une obscure syntaxe qu'ils n'ont jamais vue? (Si vous êtes un magasin C, par exemple, vous pouvez alors essayer une question impliquant des trigrammes.) Pour un poste de programmation, lisent-ils ou contribuent-ils régulièrement à des forums tels que Stack Overflow? Si on leur demandait d'exécuter certaines tâches dans un langage ou un cadre de programmation avec lequel ils avaient peu ou pas d'expérience (disons, si vous êtes principalement un magasin Java, qu'en est-il de Clojure ou .NET?), Comment aborderont-ils le problème? Peut-être prenez-vous un véritable bogue dans votre traqueur de bogues (il pourrait même en être un qui a été résolu depuis longtemps) et demandez-leur comment, en termes généraux, le résoudre, et soyez prêt à expliquer les parties pertinentes du produit en question.

Si le candidat est capable de gérer des types de problèmes pertinents pour les affaires et a une bonne attitude vis-à-vis de l’apprentissage de nouvelles choses, c’est probablement un bien meilleur indicateur de son aptitude à occuper ce poste que de pouvoir fournir des réponses précises aux questions bien connues, à savoir: les questions portent sur FizzBuzz, des listes chaînées ou autre chose. Indiquez à quel point le candidat s’intègre bien dans l’équipe et je penserais que vous êtes sur un terrain relativement sûr.


4

Bien sûr, la plupart des gens n'auraient jamais besoin d'implémenter une liste chaînée, mais pour les implémenter à partir de zéro, il faudra probablement gérer les pointeurs correctement. Leur idée est alors qu'avoir formé un modèle mental cohérent pour les pointeurs est en corrélation avec la maîtrise de la langue, la compréhension de ce qui se passe à un niveau de machine (abstrait) et la capacité d'abstraction en général.

Je ne dis pas que ce serait nécessairement la meilleure mesure, mais seulement qu'il existe une certaine corrélation.


4

Vous commencez par dire qu’il s’agit de questions «donne-moi», mais ensuite, vous indiquez que les gens ne pourront naturellement pas les poser. Je suis confus.

Voici comment j'y pense:

  • Comme vous le dites, il est rarement nécessaire d’en écrire un pour que les gens l'oublient facilement.
  • Ils ne sont pas incroyablement difficiles à écrire.
  • Les concepts utilisés pour les écrire peuvent être considérés comme fondamentaux.
  • Ils sont utilisés très souvent (même si vous ne le savez pas).

Je pense que cela fait de bonnes questions à poser. Si vous craignez qu'ils ne se préparent à l'entrevue, lancez-en une liste. Demandez-leur de l'écrire et demandez-leur quelle est la durée asymptotique de leur mise en œuvre. Ou demandez-leur d'écrire une autre structure de données commune et / ou rapide ... Un arbre de recherche binaire? Une file d'attente (FIFO)? Une pile (FILO)? Une O(n)file d'attente prioritaire naïve ( )? Beaucoup de gens que je connais pensent qu'une BST, c'est O(log n) simplement parce que c'est un arbre .

Si vous recherchez quelqu'un qui travaillera dans le métal et qui a besoin d'une base très solide dans les structures de données, il peut même être beaucoup trop trivial pour les candidats que vous souhaitez embaucher.

Ceci suppose, bien entendu, que vous souhaitiez un développeur possédant les bases / bases des structures de données et dont la position bénéficierait de ces bases. Si vous souhaitez que quelqu'un puisse créer ensemble une page asp en quelques secondes, interviewez pour cela. Le but n'est pas de choisir une question d'entrevue parce que tout le monde le fait, mais d'en choisir une qui mesure les compétences que vous recherchez. Personnellement, je pense que les questions sur les structures de données sont bonnes, liste chaînée ou non.


Ce n'est pas déroutant dans la pratique. FizzBuzz est une question encore plus facile et pourtant, les candidats ne peuvent même pas commencer à y répondre. Il en va de même avec les listes chaînées. C'est un mystère du monde de la programmation.
joshin4colours

@ joshin4colours: Non, je suis confus sur la question. Au début, le PO indique que les questions de niveau L sont de la plus haute importance, puis il énumère ensuite les raisons pour lesquelles un développeur qualifié échouera à la question.
Steven Evers

3

Cette question est-elle suffisamment utile pour être utilisée couramment pour évaluer les candidats à la programmation dans l’ensemble?

Non, absolument pas. En fonction de la manière dont elle est formulée, les réponses vont de "ce candidat sait comment concevoir une liste chaînée" à "ce candidat peut programmer une liste chaînée en langue X". Si vous demandez un pseudo-code, il tendra davantage vers le premier. Si vous demandez une implémentation dans un langage particulier, vous approfondirez leur compréhension du langage (en particulier en C et C ++, où vous pouvez gérer des pointeurs, des références et des structures).

J'irais même jusqu'à dire qu'il n'est pas possible d'évaluer tous les candidats en utilisant les mêmes questions. Vous devez adapter vos questions d'entrevue pour évaluer les compétences que vous recherchez dans le poste.

Si la personne va être en mesure d'écrire du code, je penserais à inclure un algorithme et / ou une question sur la structure de données, pour autant que cela soit pertinent pour le poste. J'essayerais de choisir quelque chose qui aurait pu être discuté ou utilisé auparavant. Je me concentrerais également sur des choses autres que la simple implémentation desdits algorithmes et structures de données, telles que le temps d'exécution et la consommation de mémoire (des choses comme la notation big-O). Ces concepts sont pertinents non seulement pour la création de la structure de données, mais également pour le choix de la mise en œuvre la mieux adaptée (telle qu'une ArrayListcomparaison, LinkedListpar exemple).


3

Je ne pense pas que, pour un poste de programmeur régulier, une question élimine un candidat. Mais c'est un bon moyen de voir si vous avez affaire à un programmeur vraiment expérimenté ou à quelqu'un qui n'a fait que coder des formulaires avec du singe pendant de nombreuses années. Et même ainsi, cela ne devrait pas être un critère fondamental pour choisir un programmeur. Peut-être est-ce un bon programmeur avec une mémoire insuffisante et qui n'a pas lu les mots "liste chaînée" pendant des années (ou ne se souvient pas du nom) mais qui peut toujours faire de bonnes applications.

Donc, comme certains l’ont dit, s’il s’agit d’un travail qui nécessite de travailler avec une liste chaînée et de nombreux algorithmes sophistiqués, etc., alors ok. Est-ce que si pour les données d'entrée habituelles sur un formulaire, valider et afficher est un peu inutile et injuste.


2

Je pense que c'est un mauvais exemple de question d'entrevue, mais pour une raison différente. Une liste chaînée est un concept tellement simple que savoir ce que c'est de savoir comment le mettre en œuvre. Si la personne ne sait pas ce qu'est une liste chaînée, vous devez expliquer comment cela fonctionne. Vous donnez ainsi la réponse sans découvrir quoi que ce soit sans savoir s'ils savent ou non résoudre les problèmes . La question se résume donc à "savez-vous déjà ce qu'est une liste chaînée et comment ça marche?", Ce qui ne vous dit rien d'utile sur leur pertinence en tant que programmeur.


2
Les questions populaires sont également soumises au jeu par des personnes qui savent mémoriser.
Paul Nathan

1
Si vous devez expliquer le fonctionnement d'une liste chaînée à un candidat, vous ne devriez probablement pas l'embaucher pour faire de la programmation ...
Dima

2

Écrire une implémentation de liste chaînée est une bonne question d’entrevue, car elle en dira beaucoup sur la manière dont le candidat a codé:

  • Sait-il ce qu'est une API? Peut-il utiliser le code d'autres personnes? Peut-il écrire du code pour que d'autres personnes puissent l'utiliser?

  • Sait-il ce qu'est une liste chaînée? Connaît-il des collections, des structures de données, des algorithmes?

S'il ne sait même pas quelles méthodes une liste chaînée doit offrir, vous savez qu'il n'a probablement jamais utilisé une de ces listes ou ne sait pas quand en utiliser une.

  • Comment gère-t-il le problème? Commence-t-il d'abord par une analyse, une petite spécification, des tests au préalable? Ou commence-t-il simplement à s'amuser?

  • Est-ce qu'il gère les cas de bord? Qu'en est-il de supprimer le dernier nœud de la liste liée? Et si quelqu'un essayait d'ajouter une référence à la liste liée elle-même à la liste liée, puis supprimait le tout?

  • Est-ce qu'il gère les exceptions? Chaque langage de programmation a ses propres conventions pour la gestion des exceptions: en Java, vous vous attendez à ce que LinkedList lève une exception NoSuchElementException lorsque vous faites un getFirst () sur une liste vide. D'autres langues peuvent renvoyer indéfini, -1 ou une constante.


Dans un exercice de codage d’entrevue, à moins que cela ne soit spécifiquement demandé, j’ignorerais toutes sortes de procédures de traitement des cas, de gestion des erreurs, etc., au-delà de ce qui est nécessaire pour une preuve de concept. MAIS je voudrais aussi préciser que c'est un choix que je fais. Les contraintes lors d’une interview d’une heure ou même de quelques heures sont très différentes de la situation dans laquelle vous travaillez réellement sur quelque chose qui sera réellement utile.
un CVn
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.