Bin ich es nur, oder ist das eine verwirrende Frage zum Tech-Interview? [geschlossen]


153

Hintergrund

Ich wurde gerade in einem technischen Interview gebeten, einen Algorithmus zu schreiben, um ein "Objekt" zu durchlaufen (beachten Sie die Anführungszeichen), wobei A gleich B ist und B gleich C ist und A gleich C.

Das ist es. Das sind alle Informationen, die mir gegeben wurden.

Ich fragte den Interviewer, was das Ziel sei, aber anscheinend gab es keinen, nur das "Objekt" "durchqueren".

Ich kenne niemanden, aber das scheint mir eine dumme Frage zu sein. Ich fragte noch einmal, "suche ich nach einem Wert?". Nee. Einfach "durchqueren".

Warum sollte ich dieses "Objekt" jemals endlos durchlaufen wollen? Um meinen Prozessor vielleicht zum Schmelzen zu bringen ??

Die Antwort laut Interviewer war, dass ich eine rekursive Funktion hätte schreiben sollen.

OK, warum fragst du mich nicht einfach, ob ich eine rekursive Funktion schreibe? Und wer würde eine rekursive Funktion schreiben, die niemals endet?

Meine Frage:

Ist dies eine berechtigte Frage an den Rest von Ihnen und wenn ja, können Sie einen Hinweis darauf geben, was mir möglicherweise fehlt? Vielleicht denke ich zu intensiv darüber nach, Probleme der realen Welt zu lösen. Ich habe lange Zeit erfolgreich programmiert, aber bei diesem technischen Interview habe ich das Gefühl, nichts zu wissen.


197
Die einzig richtige Antwort lautet: "Ich verstehe die Frage nicht."
user16764

16
Nun, wenn sie wirklich nicht gesagt haben, was A, B und C sind (wie - sie sind Objekte) und sie setzen Objekt in Anführungszeichen, scheinen sie dort eine eigene eindeutige Terminologie zu haben. Wenn sie gefragt würden, wie ein Objektgraph zu durchlaufen ist, in dem Objekt A auf Objekt B verweist, auf Objekt C verweist, auf Objekt A, wäre es verständlich gewesen, aber warum es rekursiv sein muss, weiß ich nicht. Es muss übrigens nicht unendlich sein, wenn Sie eine Liste bereits besuchter Objekte führen. Aber ja, ich würde mir Sorgen machen, ob ich mit diesem Test für ein Unternehmen arbeiten könnte - sie scheinen verwirrt.
PSR

77
Die beschriebene Frage ist unsinnig und die Antwort auch. Entweder du erinnerst dich falsch an das, was sie fragten, oder die Person, die die Frage stellt, ist ein Idiot, und du bist wahrscheinlich besser dran, nicht mit ihm zusammenzuarbeiten.
Mason Wheeler

26
Warum müssen Entwicklerinterviews schmerzhaft sein? Können wir uns nicht alle hinsetzen und uns gegenseitig den Code ansehen und diskutieren? Die Entwickler werden auf diese Weise wissen, wo sich andere Entwickler gerade befinden, und es dauert keine 6 Stunden. Code-Tests sind die schlimmsten. Es macht mir nichts aus, zuzugeben, dass ich es nicht schaffe, optimale Lösungen zu liefern, während 3 Entwickler, die ich noch nie getroffen habe, mir beim Tippen zuschauen.
Erik Reppen

19
Ich musste Ihr Profil überprüfen, um festzustellen, ob Sie in der gleichen Gegend wie ich lebten, weil ich für kurze Zeit bei einem Job arbeitete, bei dem ein Kollege, der mich interviewte, fragte: "Sind Sie detailorientiert?" Worauf ich antwortete: "Können Sie genauer sein?" Und seine Antwort: "Ich kann es nicht erklären, aber ich kenne eine detailorientierte Person, wenn ich ihre Arbeit sehe." Liebe Mehrdeutigkeit.
Jesse C. Slicer

Antworten:


305

Es ist eine verwirrende, ungültige Interviewfrage. Der Interviewer konnte nicht klar artikulieren, wonach er / sie suchte, und erwartete, dass Sie seine / ihre Gedanken lesen, anstatt auf Ihre angemessenen Versuche, die Erklärung des Problems zu klären, sinnvoll zu reagieren. Betrachten Sie sich als glücklich, dass Sie den Job nicht bekommen haben.

Die Bedeutung des Verbs "traverse", das auf ein generisches "Objekt" angewendet wird, ist meiner Meinung nach mehrdeutig. Wenn Sie das Wort Objekt durch eine Vielzahl verschiedener Substantive ersetzen, wird schnell klar, dass das Durchlaufen eines Objekts nur für eine kleine Teilmenge des Universums der Dinge, die Objekte sind, von Bedeutung ist.

Es ist sinnvoll, die Knoten eines "binären Baumes" zu "durchlaufen". Es macht keinen Sinn, einen "Clown" zu "durchqueren". Ein Objekt kann jedoch genauso leicht einen "Clown" darstellen wie einen "binären Baum".


9
Ich habe vor kurzem begonnen, Substantive in albernen Fragen durch das Wort "Clown" zu ersetzen.
Rupjones

108
"Clown Traversal" - was für ein tolles Meme für "dumme technische Frage". Weitergeben!
Radarbob

8
Hmm, ich kann var clown = {hut: "mit
blume

37
Mein gesamtes Gebiet der theoretischen CS-Forschung umfasst das iterative Durchqueren von Clowns, du unempfindlicher Clod!

6
@ JackManey: Jeder weiß, dass Clowns rekursiv durchlaufen werden müssen .
Adam Robinson

39

Ich sehe hier drei Möglichkeiten.

  1. Sie war völlig inkompetent. Dazu gibt es nicht viel mehr zu sagen.
  2. Sie machte es absichtlich zweideutig, zu sehen, wie gut Sie Fragen stellen konnten, um herauszufinden, was Sie tun sollten und was sie wirklich wollte.
  3. Aus irgendeinem Grund hatte sie beschlossen, dass Sie nicht eingestellt werden sollten, und deshalb stellte sie eine Frage, die nicht beantwortet werden konnte. Wenn sie nach Ihren Fähigkeiten gefragt wurde, übersprang sie diesen Teil und sagte etwas wie: "Ich fragte ihn, wie man einen Drei-Knoten-Graphen durchquert, und er war völlig ratlos - hatte nicht einmal eine Ahnung, wie zu beginnen. Offensichtlich ist er grob inkompetent! Wir sollten nicht einmal in Betracht ziehen, ihn anzustellen. "

7
"Ich fragte ihn, wie man einen Drei-Knoten-Graphen durchquert, ..." Wenn der OP-Beitrag richtig ist, gibt es keine Erwähnung eines Graphen oder Knotens. nur "Objekte". Dies ist eine Form von "falschem Zeugnis". Wenn sie so etwas schreibt, kann das strafrechtlich verfolgt werden!
Emilio Garavaglia

9
Verwenden Sie normalerweise weibliche Pronomen, wenn das Geschlecht der Person nicht erwähnt wird?
Chan-Ho Suh

8
@EmilioGaravaglia: Zunächst einmal könnte es nie geschrieben werden. Zweitens, selbst wenn es aufgeschrieben wird, werden Sie zweifellos nie Zugang dazu bekommen, nur ein "Wir bedauern, Sie zu informieren ..." - Brief. Drittens, wenn Sie keine Aufzeichnung des Interviews haben, wie würden Sie beweisen, dass der Interviewer nicht die Wahrheit gesagt hat? Fazit: Theoretisch sollte man Recht haben - aber in der Realität gibt es praktisch keine Chance.
Jerry Coffin

11
@ Chan-HoSuh: Das OP erwähnt das Geschlecht in einem seiner Kommentare.
Jerry Coffin

4
@ JerryCoffin Ich entschuldige mich dann.
Chan-Ho Suh

32

Dies ist nur eine wilde Vermutung, aber wenn der Interviewer über Zeigerreferenzen spricht (und es sich um eine Trickfrage handelt), lautet die Antwort: Es gibt nichts zu durchlaufen, da alle Referenzen auf dasselbe Objekt verweisen.

Eine rekursive Funktion? Das ist zum Überqueren eines Baumes. Ich sehe in der ursprünglichen Frage nichts, was darauf schließen lässt, dass es sich um einen Baum handelt.


28
Mach weiter. Es gibt bessere Unternehmen, für die man arbeiten kann.
Shufler

7
Nein. Es ist eine verlorene Sache. Wenn der Interviewer geglaubt hätte, dass er sich geirrt hat, hätte er die Frage gar nicht erst gestellt. Ich wurde einmal gebeten, ein Muster in einer beliebigen Sprache zu schreiben. Die Person, die mich interviewt hat, ging davon aus, dass der Pseudocode eine gültige Wahl war.
Robert Harvey

8
@ Robert Harvey: Was ist los mit Pseudocode?
James

6
@Robert Harvey: Um fair zu sein, müssen die meisten Leute herausfinden, wie Sie das Problem lösen, und nicht herausfinden, ob Sie die Syntax einer bestimmten Sprache gelernt haben. Es ist durchaus üblich, dass Algorithmen im Pseudocode angegeben werden.
James

8
Was ist der Unterschied zwischen Pseudocode und Python? :)
David Robinson

15

Ich kann zwar nicht für diesen bestimmten Interviewer sprechen, habe jedoch ähnliche Fragen in einem Front-End-Vorstellungsgespräch für Entwickler gesehen. In diesem Beispiel wird daher JavaScript verwendet.

Gegeben:

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

Eine typische falsche Antwort kann nur die erste Ebene "durchlaufen" und Folgendes drucken / vergleichen:

'value1'
2
[Object object]

Während ich ein rekursives Beispiel programmiere, das alle Ebenen durchquert, würde ich folgende Dinge erwähnen:

  • Umgang mit Zirkelverweisen
  • Wie gehe ich mit Arrays um (sollten sie auch rekursiv durchlaufen werden?)
  • Sollen Funktionen ausgewertet und deren Rückgabewert verarbeitet werden?
  • Für JavaScript: Sollte der Prototyp übereinstimmen und sollten auch geerbte Eigenschaften verglichen werden?

Die "Lösung", nach der der Interviewer wohl suchte, bestand darin, ein Gespräch über eine scheinbar einfache Frage zu beginnen, die viele fortgeschrittene Themen enthält - Rekursivität, Verweise, Erwartungen usw.


5
Das macht Sinn, wie du es ausdrückst, WSKid. Leider wurde nichts davon angeboten.
Matt Cashatt

3
Das greift wirklich nach Strohhalmen. Sie hätten einen Anwendungsfall oder ein Beispiel 3 für Objekte oder etwas darstellen müssen, um einen Hinweis auf das eigentliche Problem zu geben.
WSkid

1
Ich habe dasselbe gedacht, nur für Python-Objektattribute. Zu wissen, in welcher Frage sie eine Antwort erwarteten, wäre sehr hilfreich gewesen, aber das könnte durch den Kontext der Position erwartet werden, dh Python-Entwickler, C # Entwickler, Javascript-Entwickler, PHP-Entwickler usw.
Ken

2
+1 für das Finden eines Kontexts, in dem die Frage einen Sinn ergibt!
Donal Fellows

9

Einige Interviewer versuchen speziell, Fragen zu stellen, um festzustellen, ob der Kandidat klug und ehrlich genug ist, um eine der beiden folgenden Antworten zu geben:

Ich weiß es nicht.

oder vielleicht:

Ich kann das nicht wie angegeben beantworten.

Sie wollen keinen Kandidaten, der reine BS als Spezifikation akzeptiert, die Zeit ihres Arbeitgebers verschwendet und dafür bezahlt, dass er versucht, sie umzusetzen.


6
In einem solchen Szenario wie diesem Interview sind wir unser ganzes Leben darauf konditioniert, eine Antwort auf eine Frage geben zu können. Wenn es akzeptabel war, "Ich weiß nicht" zu sagen (was ich übrigens getan habe), hätte ich das auch vorher erfahren müssen. Ein Versuch in gutem Glauben, eine Interviewfrage zu beantworten, ist nicht unbedingt gleichbedeutend damit, wie man eine unzureichende Spezifikation oder einen Satz von Anforderungen behandeln würde. Und ich denke, das ist der springende Punkt, diese Interviews sind vom Kurs abgekommen und haben in vielen Fällen den springenden Punkt verfehlt.
Matt Cashatt

So eine gute Antwort. Vergessen Sie jedoch nicht, dass es viel Erfahrung erfordert, dies sagen zu können. Persönlich kann ich sagen, dass die Erfahrung mit Interviews ein wesentlicher Bestandteil des Jobs ist. @MatthewPatrickCashatt wenn der Interviewer "Ich weiß nicht" nicht akzeptiert, dann nicht mehr viel über IMO zu diskutieren.
Arin

2
Trickfragen sind entweder Trolling oder erbärmliche Inkompetenz. So oder so, wenn ein Interviewer Trickfragen stellt, möchten Sie dort nicht arbeiten.
Ben Brocka

7

Es scheint mir, dass dies eine (schlecht artikulierte) Frage in Bezug auf eine zirkulär verknüpfte Liste ist. Ich hätte wahrscheinlich gefragt, ob das gemeint ist (denn die Antwort wäre sicherlich anders als eine andere, die besagt, dass sie alle auf dasselbe Objekt verweisen).

Wenn es sich um eine Frage mit verknüpfter Liste handelt, haben Sie (in diesem Fall) eine einfach verknüpfte Liste, bei der der Endknoten auf das andere Ende zeigt (obwohl er, wie Sie sagten, doppelt verknüpft ist, wenn A auf verweist B und C - aber eine Klarstellung seitens des Interviewers würde dazu beitragen).

A -> B -> C -> A

Auch (und das passiert die ganze Zeit), der Interviewer hat diese Frage vielleicht gelesen, dachte, es sei eine "gute" Frage, wusste aber selbst nicht, was sie bedeutete (oder was sie bedeutete).


1
Danke Maich - ich denke, dein letzter Punkt ist der wahrscheinlichste.
Matt Cashatt

5

Ein Teil der Herausforderung besteht darin, detaillierter zu werden, indem bestimmte Fragen gestellt werden, um herauszufinden, ob es eine Baumstruktur gibt und welche Komponenten beim Durchlaufen eine Rolle spielen. Es mag die Annahme gegeben haben, dass es neben Bäumen nicht viele andere Datenstrukturen gibt, die man durchquert, aber das ist für mich ein kleiner Sprung.


1
Vielen Dank, JB King. Es ist eine gute Erinnerung, Fragen zu stellen. In diesem speziellen Fall habe ich getan. Tatsächlich fragte ich sogar, ob es ein Baum sei und die Antwort war nein! Es liegt jedoch in meiner Verantwortung, so viele Informationen wie möglich zu sammeln, indem ich Fragen stelle.
Matt Cashatt

3

Vielleicht möchten sie herausfinden, wie Sie mit seltsamen Problemen umgehen. Aber in diesem Fall hat es nichts mit einem "Tech-Interview" zu tun. Es sieht eher aus wie ein psychologisches Interview.


5
Ich würde gerne ein Beispiel für eine ihrer technischen Spezifikationen für ein Softwareprojekt sehen.
Chuck D

Wenn das Interview für einen Systemanalytiker oder eine ähnliche Position bestimmt ist, ist dies völlig angemessen: Ihre Aufgabe ist es, Kunden bei der Klärung ihrer Fragen zu helfen, anstatt sie zu beantworten.
Reinierpost

1
@ reinierpost - war es nicht.
Matt Cashatt

3

Schreiben Sie einen Algorithmus, um ein "Objekt" zu durchlaufen (beachten Sie die Anführungszeichen), wobei A gleich B und B gleich C und A gleich C ist.

Es scheint, als ob die meisten Leute annehmen, dass A, B und C Zeiger sind, aber sie könnten genauso gut auch Clowns sein. (Oder Mitglieder der Clownklasse.) Oder sie könnten Clownnamen sein. (Oder Klassennamen. Oder Unterklassen der Clownklasse.)

Ich hätte den Spieß umgedreht und gefragt, ob sie auf diese Weise normalerweise Entwicklungsspezifikationen erstellen, und ihnen dann erklärt, wie ich ihnen bei der Entwicklung der Anforderungsspezifikation helfen könnte. Eine schlechte Kommunikation der Erwartungen führt zu einem schlechten Arbeitsprodukt. Entweder würden sie es bekommen oder sie würden es nicht bekommen. Wenn sie es nicht bekämen, würde ich weggehen.


2

Während die Frage schlecht formuliert war und der Interviewer eindeutig nicht hilfreich bei der Angabe von Anweisungen war, habe ich eine etwas andere Sichtweise auf das, was gefragt wurde.

Ich denke, der Interviewer suchte nach einer Lösung, die die Objektstruktur mit einer Art Reflexion durchquert. Die Information, dass die drei Objekte gleich waren, sollte eine Konversation über den Objektidentitätsvergleich (A == B bedeutet, dass die Objekte tatsächlich dasselbe Objekt im Speicher sind) oder den Objektgleichheitsvergleich (A == B bedeutet, dass die Werte der Objekte gleich sind) ausgelöst haben das Gleiche).

Die Tatsache, dass der Interviewer sagte, dass die Antwort eine "rekursive" Funktion sei, deutete wahrscheinlich darauf hin, dass eine Diskussion über tiefes versus flaches Kopieren und Vergleichen erwartet wurde.


2

Ich komme sehr spät zu dieser Party, aber ich denke, der Interviewer hat diese Frage falsch gestellt:

Schreiben Sie einen Algorithmus zum Durchlaufen eines Arrays und stellen Sie fest, dass A gleich B und B gleich C und A gleich C ist, und zwar in dieser Reihenfolge.

Dann wäre die richtige Antwort ein rekursiver Algorithmus.


1

Ich wurde gerade in einem technischen Interview gebeten, einen Algorithmus zu schreiben, um ein "Objekt" zu durchlaufen (beachten Sie die Anführungszeichen), wobei A gleich B ist und B gleich C ist und A gleich C.

Das objectfragliche besteht aus den Teilen A,B and C, und es bildet ein triangle. Die Person fragt einfach, ob das Objekt (eine Sammlung) alle gleichen Teile enthält.

Der Interviewer möchte wissen, ob Teile A, B and Cangezeigt werden, die Sie erkennen können, ob sie alle gleich sind, ohne in einer Endlosschleife hängen zu bleiben. Diese Frage ist dumm, einfach zu verstehen, und trotzdem haben sie es geschafft, sie zu beantworten, indem sie sie gestellt haben.

Sie sind alle gleich, wenn A == B && B == C && A == C, aber das kann zu gerade vereinfacht werden A == B && A == C.

Die Einfachheit der Frage führte zu Verwirrung, und es ist wirklich schlecht formuliert.

Der korrekte Wortlaut sollte gewesen sein.

Schreiben Sie einen Algorithmus, um die Teile einer Sammlung auf Gleichheit zu überprüfen. Es muss darauf geachtet werden, nicht in einer Endlosschleife hängen zu bleiben. Zum Beispiel; Wenn Teile A gleich B und B gleich C ist und A gleich C ist, können Probleme auftreten.


Die Antwort laut Interviewer war, dass ich eine rekursive Funktion hätte schreiben sollen.

Ja, Sie können die Frage are all my parts equalmit rekursiven Funktionen beantworten . Nein, das ist keine effiziente Lösung.

EDIT : Nach einigem Überlegen. Nein, es ist nicht möglich, zu überprüfen, ob eine Sammlung alle gleichen Teile enthält, indem Sie eine rekursive Funktion verwenden.

Die effizienteste Lösung lautet wie folgt.

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";

Dieses Problem tritt bei der Programmierung auf, und es ist völlig normal, jemanden zu bitten, einen Algorithmus zum Testen einer Sammlung zu schreiben. Abhängig von der Programmiersprache kann dieses Problem häufig mit nur einer Codezeile gelöst werden.

Es ist nicht normal, so zu formulieren, wie sie es taten, und die falsche Antwort zu erwarten. Da wurde diese Frage vor einem Jahr gestellt. Ich hoffe wirklich, dass Sie irgendwo anders gelandet sind. Ich würde gerne vom ursprünglichen Beitrag erfahren, wie es ihm / ihr ergeht.


2
Die Dinge sind großartig gelaufen - so schnell ich konnte und seitdem glücklich.
Matt Cashatt

0

War dies eine Java-Interview-Frage, wenn ja, wollte er vielleicht Ihre Fähigkeiten testen, indem er "Hashcode" und "Gleich" überschrieb.

Sie müssten diese beiden Methoden überschreiben und die überschriebene Methode equals verwenden, um die Rekursion zu stoppen, wenn Sie A mit A vergleichen.

Ohne Überschreiben ergibt Ihr Vergleich für "Objekt" A nach B, A nach C und A nach A alle true, aber nach dem Überschreiben wird nur dann true zurückgegeben, wenn Objekt A mit Objekt A verglichen wird, wohingegen andere Vergleiche false zurückgeben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.