Est-ce juste moi ou est-ce une question d'entrevue technique déconcertante? [fermé]

153

Contexte

Dans une interview technique, on vient de me demander d’écrire un algorithme pour parcourir un "objet" (notez les guillemets) où A est égal à B et B est égal à C et A est égal à C.

C'est ça. C'est toute l'information qui m'a été donnée.

J'ai demandé à l'intervieweur quel était l'objectif, mais apparemment, il n'y en avait pas, il suffit de "traverser" "l'objet".

Je ne connais personne d'autre, mais cela me semble une question idiote. J'ai de nouveau demandé: "est-ce que je cherche une valeur?". Nan. Il suffit de "traverser".

Pourquoi voudrais-je jamais vouloir parcourir sans fin cet "objet" ?? Faire fondre mon processeur peut-être ??

La réponse, selon l'interviewer, était que j'aurais dû écrire une fonction récursive.

OK, alors pourquoi ne pas simplement me demander d’écrire une fonction récursive? Et qui écrirait une fonction récursive qui ne finit jamais?

Ma question:

Est-ce une question valable pour le reste d'entre vous et, dans l'affirmative, pouvez-vous donner un indice sur ce qui pourrait me manquer? Peut-être que je pense trop à la résolution des problèmes du monde réel. Je réussis à coder depuis longtemps, mais ce processus d’entrevue technique me donne l’impression de ne rien savoir.

Matt Cashatt
la source
197
La seule réponse correcte ici est "Je ne comprends pas la question."
user16764
16
Eh bien, s’ils ne disent pas vraiment ce que sont A, B et C (ce sont des objets) et mettent des guillemets entre guillemets, ils semblent avoir leur propre terminologie. S'ils ont demandé comment traverser un graphe d' objet où l'objet A fait référence à l' objet B qui fait référence à l' objet C qui référence l' objet A, il aurait été intelligible, mais je ne sais pas pourquoi il doit être récursif. Ce n'est pas nécessairement infini si vous maintenez une liste d'objets déjà visités, soit dit en passant. Mais oui, je serais préoccupé de travailler pour une entreprise utilisant ce test - ils semblent confus.
psr
77
La question telle que décrite est absurde, de même que la réponse. Soit vous vous souvenez mal de ce qu'ils ont demandé, soit la personne qui pose la question est un idiot et vous feriez probablement mieux de ne pas travailler avec lui.
Mason Wheeler
26
Pourquoi les entretiens avec les développeurs doivent-ils être douloureux? Ne pouvons-nous pas tous nous asseoir et regarder le code de chacun et discuter? En faisant cela, les développeurs sauront où sont les autres développeurs et cela ne prendra pas 6 heures. Les tests de code sont les pires. Cela ne me dérange pas d'admettre que je suis nul en termes de solutions optimales alors que 3 développeurs que je n'ai jamais rencontrés me regardent me dactylographier.
Erik Reppen
19
J'ai dû vérifier votre profil pour voir si vous habitiez dans la même région que moi, car j'ai travaillé pendant un temps limité à un travail où un collègue m'interrogeant m'a demandé: "Êtes-vous soucieux des détails?" A quoi j'ai répondu: "Pouvez-vous être plus précis?" Et sa réponse, "Je ne peux pas l'expliquer, mais je connais une personne attentive aux détails quand je vois son travail." Ambiguïté de l'amour.
Jesse C. Slicer

Réponses:

305

C'est une question d'entretien déconcertante et invalide. L'intervieweur n'a pas pu expliquer clairement ce qu'il cherchait et s'attendait à ce que vous lisiez dans ses pensées au lieu de réagir de manière significative à vos tentatives appropriées pour clarifier l'énoncé du problème. Considérez-vous chanceux de ne pas avoir obtenu le poste.

La signification du verbe "traverse" opérant sur un "objet" générique est ambigu, à mon avis. Commencez par substituer une variété de noms différents au mot objet et il devient rapidement évident que la traversée d'un objet n'a de sens que pour un petit sous-ensemble de l'univers des choses qui sont des objets.

Il est logique de "traverser" les nœuds d'un "arbre binaire". Cela n'a pas de sens de "traverser" un "clown". Pourtant, un objet peut tout aussi bien représenter un "clown" qu’un "arbre binaire".

Mat
la source
9
J'ai récemment pris l'habitude de remplacer les noms dans les questions idiotes par le mot "clown" +1 monsieur!
Rupjones
108
"Traversée de clowns" - quelle belle idée pour "question technique stupide". Passe le!
radarbob
8
Hmm, je peux traverser var clown = {chapeau: "avec fleur", cheveux: "rouge vif", nez: "boule rouge", bouche: "bouche rouge encadrée de blanc", ...};)
mplungjan
37
Tout mon domaine de recherche théorique en CS comprend le parcours itératif de clowns, votre motte insensible!
6
@JackManey: Tout le monde sait que les clowns doivent être parcourus de manière récursive .
Adam Robinson
39

Je peux voir trois possibilités ici.

  1. Elle était complètement incompétente. Pas beaucoup plus à dire sur celui-là.
  2. Elle faisait délibérément ambiguïté, pour voir si vous pouviez poser des questions avec succès pour déterminer ce que vous étiez censé faire et ce qu'elle cherchait vraiment.
  3. Pour une raison quelconque, elle avait décidé qu'elle ne voulait pas que vous soyez embauché, alors elle posa une question sans réponse. Lorsqu'on l'interrogeait sur vos compétences, elle sautait cette partie et disait quelque chose du genre: "Je lui ai demandé comment parcourir un graphe à trois nœuds, et il était complètement perplexe. pour commencer. De toute évidence, il est extrêmement incompétent! Nous ne devrions même pas envisager de l’embaucher. "
Jerry Coffin
la source
7
"Je lui ai demandé comment parcourir un graphe à trois nœuds, ..." Si le poste OP est correct, il n'y a aucune mention d'un graphe ou d'un nœud. juste des "objets". C'est une forme de "faux témoignage". Si elle écrit quelque chose comme ça peut être poursuivi!
Emilio Garavaglia
9
Utilisez-vous habituellement des pronoms féminins lorsque le sexe de la personne n'est pas mentionné?
Chan-Ho Suh
8
@ EmilioGaravaglia: Tout d'abord, cela pourrait ne jamais être écrit. Deuxièmement, même en supposant que cela soit écrit, vous n’y aurez sans doute jamais accès, mais juste une lettre "Nous regrettons de vous informer ...". Troisièmement, à moins que vous n'ayez un enregistrement de l'interview, comment prouver que l'intervieweur ne dit pas la vérité? En bout de ligne: en théorie, vous devriez avoir raison - mais en réalité, il n’ya pratiquement aucune chance.
Jerry Coffin
11
@ Chan-HoSuh: Le PO mentionne le genre dans l'un de ses commentaires.
Jerry Coffin
4
@ JerryCoffin Mes excuses alors.
Chan-Ho Suh
32

Ceci est juste une conjecture sauvage, mais en supposant que l'intervieweur parle de références de pointeur (et c'est une question piège), la réponse est: il n'y a rien à parcourir, car toutes les références pointent vers le même objet.

Une fonction récursive? C'est pour traverser un arbre. Je ne vois rien dans la question initiale qui impliquerait qu'il parle d'un arbre.

Robert Harvey
la source
28
Passez. Il existe de meilleures entreprises pour lesquelles travailler.
Shufler
7
Nah. C'est une cause perdue. Si l'intervieweur pensait qu'il avait tort, il n'aurait pas posé la question en premier lieu. On m'a demandé une fois d'écrire un échantillon dans la langue de mon choix; la personne qui m'a interrogé a supposé que le pseudocode était un choix valable.
Robert Harvey
8
@ Robert Harvey: Qu'est-ce qui ne va pas avec le pseudocode?
James
6
@ Robert Harvey: Pour être juste, tout ce que la plupart des gens veulent, c'est de trouver un moyen de résoudre le problème sans savoir si vous avez appris la syntaxe d'un langage particulier. Il est assez courant de spécifier des algorithmes en pseudocode.
James
8
Quelle est la différence entre pseudocode et Python? :)
David Robinson
15

Bien que je ne puisse pas parler pour cet interviewer spécifique, j'ai déjà vu des questions similaires lors d'une interview pour un poste de développeur front-end. Le langage que je vais utiliser dans cet exemple sera donc JavaScript.

Donné:

var A = {
    key1: 'value1',
    key2: 2,
    key3: {
        innerkey1: 'value3'
    }
}

Une mauvaise réponse typique peut "traverser" le premier niveau uniquement et imprimer / comparer:

'value1'
2
[Object object]

Ainsi, tout en codant un exemple récursif qui traverserait tous les niveaux, je mentionnerais des choses comme:

  • Traitement de référence circulaire
  • Comment gérer les tableaux (doivent-ils être aussi parcourus de manière récursive?)
  • Les fonctions doivent-elles être évaluées et leur valeur de retour traitée?
  • Pour JavaScript: le prototype et les propriétés héritées doivent-ils être comparés?

Donc, la "solution" que je suppose que l'intervieweur recherchait était de commencer la conversation sur une question apparemment simple qui comporte de nombreux sujets avancés - récursivité, pointeurs / références, attentes, etc.

WSkid
la source
5
C'est logique comme vous le dites, WSKid. Malheureusement, aucun de ce contexte n'a été offert.
Matt Cashatt
3
C’est vrai, c’est vraiment saisir. Ils auraient dû présenter un cas d'utilisation, ou un exemple 3 objets, ou quelque chose qui donne une idée du problème.
WSkid
1
Je pensais la même chose, uniquement pour les attributs d'objet Python. Il aurait été extrêmement utile de connaître la question à laquelle ils espéraient une réponse, mais le contexte de la position le permet, par exemple, python dev, c # dev, dev javascript, php dev, etc.
Ken
2
+1 pour trouver un contexte où la question a un sens!
Donal Fellows
9

Certains intervieweurs essaient spécifiquement de poser des questions pour voir si le candidat est assez intelligent et honnête pour donner l'une des deux réponses suivantes:

Je ne sais pas.

ou peut-être:

Je ne peux pas répondre à cela comme indiqué.

Ils ne veulent pas d'un candidat qui accepterait une pure BS comme une spécification et perdrait du temps à l'employeur et payerait pour la mettre en œuvre.

hotpaw2
la source
6
Toute notre vie, nous sommes conditionnés, dans un scénario tel que cet entretien, à pouvoir répondre à une question. Si dire "je ne sais pas" (ce que je faisais, soit dit en passant) était acceptable, on aurait alors dû me le dire aussi à l'avance. Essayer de bonne foi de répondre à une question de l’entrevue n’équivaut pas nécessairement à la façon de traiter une spécification ou un ensemble d’exigences inadéquats. Et je pense que c'est là le but de ces entretiens, ces entretiens ont dévié de leur sens et sont passés à côté du but dans de nombreux cas.
Matt Cashatt
Une si bonne réponse. Cependant, n'oubliez pas qu'il faut beaucoup d'expérience pour pouvoir dire cela. Personnellement, je peux dire que l'expérience avec des entretiens est une partie vitale du travail. @MatthewPatrickCashatt si l'intervieweur n'accepte pas "je ne sais pas", alors pas beaucoup plus pour discuter de l'OMI.
arin
2
Les questions pièges sont soit une traîne, soit une incompétence abjecte. De toute façon, si un intervieweur pose des questions pièges, vous ne voulez pas y travailler.
Ben Brocka
7

Il me semble qu’il s’agit d’une question (mal articulée) concernant une liste chaînée circulaire. J'aurais probablement demandé si c'était ce que cela voulait dire (parce que la réponse serait certainement différente de la réponse précédente, c'est-à-dire qu'ils font tous référence au même objet).

S'il s'agissait d'une question liée à une liste chaînée, alors vous (dans ce cas) avez une liste chaînée, où le nœud d'extrémité pointe vers l'autre extrémité (bien que si elle était libellée comme vous le dites, elle peut être doublement liée si A pointe sur B et C - mais des éclaircissements de la part de l'intervieweur pourraient aider.

A -> B -> C -> A

De plus (et cela arrive tout le temps), l'intervieweur a peut-être lu cette question, a pensé que c'était une «bonne» question, mais ne connaissait pas réellement la réponse (ou même ce que cela voulait dire).

Maich
la source
1
Merci Maich - Je pense que ton dernier point est le plus probable.
Matt Cashatt
5

Une partie du défi consiste ici à obtenir plus de détails en posant des questions spécifiques afin de déterminer la structure arborescente et les composants impliqués dans une traversée. On a peut-être supposé qu'il n'y avait pas beaucoup d'autres structures de données que l'on traverse en dehors des arbres, mais c'est un peu un saut dans l'esprit.

JB King
la source
1
Merci JB King. C'est un bon rappel de poser des questions. Dans ce cas particulier, je l'ai fait. En fait, j'ai même demandé s'il s'agissait d'un arbre et la réponse était non! Mais vous dites bien qu'il est de ma responsabilité de distiller autant d'informations que possible en posant des questions.
Matt Cashatt
3

Ils voudront peut-être essayer de comprendre comment vous gérez des problèmes étranges. Mais dans ce cas, cela n'a rien à voir avec une "interview technique". Cela ressemble plus à un entretien psychologique.

BenjaminB
la source
5
J'aimerais voir un exemple d'une de leurs spécifications techniques pour un projet de logiciel.
Chuck D
Si l'entretien est destiné à un analyste Systema ou à un poste similaire, cela est tout à fait approprié: votre travail consiste à aider les clients à clarifier leurs questions plutôt que d'y répondre.
reinierpost
1
@ reinierpost - Ce n'était pas le cas.
Matt Cashatt
3

Ecrivez un algorithme pour parcourir un "objet" (notez les guillemets) où A est égal à B et B est égal à C et A est égal à C.

Il semble que la plupart des gens supposent que A, B et C sont des indicateurs, mais ils pourraient tout aussi bien être des clowns. (Ou membres de la classe des clowns.) Ou ils pourraient être des noms de clowns. (Ou noms de classe. Ou sous-classes de la classe de clown.)

J'aurais retourné les tables et demandé si c'était comme cela qu'ils préparaient généralement les spécifications de développement, puis leur dire comment je pouvais les aider avec le stade de développement de la spécification des exigences. Une mauvaise communication des attentes conduit à un produit de travail médiocre. Ou bien ils l'obtiendraient ou ils ne l'obtiendraient pas. S'ils ne l'obtenaient pas, je partirais.

Jim
la source
2

Bien que la question soit mal formulée et que l'intervieweur ne fournisse manifestement aucune aide, je suis un peu différent de ce qui était demandé.

Je pense que l'intervieweur cherchait une solution qui traversait la structure de l'objet en utilisant un type de réflexion. L’information selon laquelle les trois objets étaient égaux aurait dû inciter une conversation de comparaison d’identité d’objet (A == B signifie que les objets sont réellement le même objet en mémoire), ou une comparaison d’égalité d’objet (A == B signifie que les valeurs des objets sont le même).

Le fait que l'intervieweur ait dit que la réponse était une fonction "récursive" indiquait probablement qu'une discussion entre une copie et une comparaison profondes et peu profondes était attendue.

Lucas
la source
2

Arriver très tard à cette soirée, mais je pense que l'intervieweur a posé cette question à tort:

Ecrivez un algorithme pour parcourir un tableau et déterminez que A est égal à B et B est égal à C et A est égal à C, dans cet ordre.

La réponse correcte serait alors un algorithme récursif.

pgthew
la source
1

Dans une interview technique, on vient de me demander d’écrire un algorithme pour parcourir un "objet" (notez les guillemets) où A est égal à B et B est égal à C et A est égal à C.

La objectquestion en question est composée des parties A,B and Cet forme un triangle. La personne demande simplement si l'objet (une collection) contient toutes les parties égales.

L'intervieweur veut savoir s'il est présenté avec des parties, A, B and Cpouvez-vous dire si elles sont toutes égales sans rester coincées dans une boucle infinie. Cette question est simplement bête à comprendre et ils ont quand même réussi à le trouver en le posant.

Ils sont tous égaux quand A == B && B == C && A == C, mais cela peut être simplifié A == B && A == C.

La simplicité de la question a créé de la confusion et elle est mal formulée.

La formulation correcte aurait dû être.

Ecrivez un algorithme pour vérifier les parties d'une collection pour voir si elles sont toutes égales les unes aux autres. Il faut veiller à ne pas rester coincé dans une boucle infinie. Par exemple; si les parties A sont égales à B et B est égal à C et A est égal à C pourrait causer des problèmes.


La réponse, selon l'interviewer, était que j'aurais dû écrire une fonction récursive.

Oui, vous pouvez répondre à la question en are all my parts equalutilisant des fonctions récursives. Non, ce n'est pas une solution efficace.

EDIT : Après réflexion. Non, il n'est pas possible de vérifier qu'une collection contient toutes les parties égales à l'aide d'une fonction récursive.

La solution la plus efficace est la suivante.

function are_all_equal(parts)
{
   for(int i=1; i < parts.length; i++)
       if parts[i] is not same as parts[0]:
           return false;
   return true;
}

print are_all_equal(parts) ? "yes" : "no";

Ce problème se produit lors de la programmation, et demander à quelqu'un d'écrire un algorithme pour tester une collection est parfaitement normal. En fonction du langage de programmation, ce problème peut souvent être résolu avec une seule ligne de code.

Formuler comme ils l'ont fait et s'attendre à la mauvaise réponse n'est pas normal. Depuis que cette question a été posée il y a un an. J'espère vraiment que vous avez fini par travailler ailleurs. Je serais intéressé à entendre du poste original comment les choses se passent pour lui / elle.

Réactionnel
la source
2
Les choses se sont bien déroulées - ont fonctionné aussi vite que possible dans cette entreprise et ont été heureuses depuis.
Matt Cashatt
0

Était-ce une question d’entretien avec Java? Dans l’affirmative, il souhaitait peut-être tester vos compétences en écrasant les mots "hashcode" et "equals".

Vous devez remplacer ces deux méthodes et utiliser la méthode égale remplacée pour arrêter la récursion lorsque vous comparez A à A.

Sans passer outre, votre comparaison pour "objet" de A à B, de A à C et de A à A aura la valeur true, mais après la substitution, ce n’est que lorsque l’objet A comparé à l’objet A retournera la valeur true, alors que les autres comparaisons renverront false.

Rpatali
la source