web-dev-qa-db-fra.com

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

Contexte

On m'a simplement demandé dans une interview technique 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. Voilà toutes les informations qui m'ont été données.

J'ai demandé à l'enquêteur quel était le but 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 stupide. J'ai demandé à nouveau, "est-ce que je recherche une valeur?". Nan. Il suffit de le "traverser".

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

Le réponse selon l'intervieweur é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 que je pourrais manquer? Peut-être que je réfléchis trop à résoudre des problèmes du monde réel. J'ai réussi à coder depuis longtemps, mais ce processus d'entrevue technique me donne l'impression de ne rien savoir.

154
Matt Cashatt

C'est une question d'entrevue déroutante et invalide. L'enquêteur n'a pas pu exprimer clairement ce qu'il cherchait et s'attendait à ce que vous lisez dans son esprit au lieu de répondre 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 à substituer une variété de noms différents à l'objet Word 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'il peut représenter un "arbre binaire".

307
Matt

Je peux voir trois possibilités ici.

  1. Elle était complètement incompétente. Pas grand chose de plus à dire là-dessus.
  2. Elle le rendait délibérément ambigu, pour voir à quel point vous feriez bien de poser des questions pour comprendre 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ée, alors elle a posé une question qui était sans réponse, car elle avait été donnée. Lorsqu'elle était interrogée sur vos compétences, elle sautait cette partie et disait quelque chose comme: "Je lui ai demandé comment parcourir un graphique à trois nœuds, et il était complètement perplexe - didn ' Je n'ai même pas la moindre idée de comment commencer. De toute évidence, il est grossièrement incompétent! Nous ne devrions même pas envisager de l'embaucher. "
40
Jerry Coffin

C'est juste une supposition 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.

32
Robert Harvey

Bien que je ne puisse pas parler pour cet intervieweur spécifique, j'ai vu des questions similaires dans une interview de position de développeur front-end, donc le langage que j'utiliserai dans cet exemple sera 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]

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

  • Gestion des références circulaires
  • Comment gérer les tableaux (doivent-ils également être parcourus récursivement?)
  • Les fonctions doivent-elles être évaluées et leur valeur de retour traitée?
  • Pour JavaScript: le prototype doit-il correspondre et les propriétés héritées doivent-elles également être comparées?

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

15
WSkid

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

Je ne sais pas.

ou peut-être:

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

Ils ne veulent pas d'un candidat qui acceptera le BS pur comme spécification, et perdra le temps et l'argent de son employeur à essayer de le mettre en œuvre.

9
hotpaw2

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 l'on voulait dire (car la réponse serait certainement différente d'une autre ci-dessus, c'est-à-dire qu'elles sont toutes des références au même objet).

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

A -> B -> C -> A

De plus (et cela arrive tout le temps), l'intervieweur a peut-être lu cette question, pensait que c'était une "bonne" question, mais ne connaissait pas la réponse lui-même (ni même ce que cela signifiait).

7
Maich

Une partie du défi ici consiste à obtenir plus de détails en posant des questions spécifiques pour savoir s'il existe une structure arborescente et quels sont les composants impliqués dans la réalisation d'une traversée. Il peut y avoir eu l'hypothèse qu'il n'y a pas beaucoup d'autres structures de données que l'on traverse en dehors des arbres, mais c'est un peu un saut dans mon esprit.

5
JB King

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

3
BenjaminB

Écrivez 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 pointeurs, mais ils pourraient tout aussi bien être des clowns. (Ou des membres de la classe des clowns.) Ou ils pourraient être des noms de clowns. (Ou des noms de classe. Ou des sous-classes de la classe clown.)

J'aurais retourné la situation et demandé si c'est ainsi qu'ils préparent généralement les spécifications de développement, puis leur ai expliqué comment je pouvais les aider à l'étape de développement des spécifications des exigences. Une mauvaise communication des attentes conduit à un mauvais produit de travail. Soit ils l'obtiendraient, soit ils ne le feraient pas. S'ils ne l'obtenaient pas, je m'en irais.

3
Jim

Bien que la question soit mal formulée et que l'intervieweur n'ait manifestement pas aidé à fournir une orientation, j'ai une vision légèrement différente de ce qui était demandé.

Je pense que l'intervieweur cherchait une solution qui traverserait la structure de l'objet en utilisant un certain type de réflexion. Les informations selon lesquelles les trois objets étaient égaux auraient dû déclencher une conversation de comparaison d'identité d'objet (A == B signifie que les objets sont vraiment le même objet en mémoire), ou de comparaison d'égalité d'objet (A == B signifie que les valeurs des objets sont le même).

Le fait que l'intervieweur ait déclaré que la réponse était une fonction "récursive" indiquait probablement qu'une discussion sur la copie profonde et superficielle et la comparaison était attendue.

2
Lucas

Arrivant très tard à cette fête, mais je pense que l'intervieweur a incorrectement posé cette question:

Écrivez 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 bonne réponse serait alors un algorithme récursif.

2
pgthew

On m'a simplement demandé dans une interview technique 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.

Le object en question est composé des parties A,B and C, et il forme un triangle. La personne demande simplement si l'objet (une collection) contient toutes les parties égales.

L'intervieweur veut savoir si des pièces lui sont présentées A, B and C pouvez-vous dire s'ils sont tous égaux sans être coincé dans une boucle infinie. Cette question est stupidement simple à comprendre et ils ont quand même réussi à la foutre en la posant.

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

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

La formulation correcte aurait dû être.

Écrivez 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, cela pourrait causer des problèmes.


Selon l'intervieweur, la réponse était que j'aurais dû écrire une fonction récursive.

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

MODIFIER : 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 dans la programmation et demander à quelqu'un d'écrire un algorithme pour tester une collection est parfaitement normal. Selon le 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 à une mauvaise réponse n'est pas normal. Depuis 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 dans le message original comment les choses se passent pour lui.

1
Reactgular

S'agissait-il d'une Java, si oui, peut-être voulait-il tester vos compétences en remplaçant "hashcode" et "equals".

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

Sans redéfinition, votre comparaison pour les "objets" A à B, A à C et A à A résultera tous en vrai, mais après redéfinition, uniquement lorsque l'objet A par rapport à l'objet A renverra vrai alors que les autres comparaisons renverront faux.

0
rpatali