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.
quelle
Antworten:
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".
quelle
Ich sehe hier drei Möglichkeiten.
quelle
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.
quelle
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:
Eine typische falsche Antwort kann nur die erste Ebene "durchlaufen" und Folgendes drucken / vergleichen:
Während ich ein rekursives Beispiel programmiere, das alle Ebenen durchquert, würde ich folgende Dinge erwähnen:
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.
quelle
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.
quelle
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).
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
Das
object
fragliche besteht aus den TeilenA,B and C
, und es bildet eintriangle
. Die Person fragt einfach, ob das Objekt (eine Sammlung) alle gleichen Teile enthält.Der Interviewer möchte wissen, ob Teile
A, B and C
angezeigt 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 werdenA == B && A == C
.Die Einfachheit der Frage führte zu Verwirrung, und es ist wirklich schlecht formuliert.
Der korrekte Wortlaut sollte gewesen sein.
Ja, Sie können die Frageare all my parts equal
mit 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.
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.
quelle
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.
quelle