it-swarm.com.de

Ist es nur ich oder ist das eine verblüffende Frage zum technischen Interview?

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 und B gleich C und A gleich C ist.

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

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

Ich weiß von niemand anderem, aber das scheint mir eine dumme Frage zu sein. Ich fragte erneut: "Suche ich nach einem Wert?". Nee. Einfach "durchqueren".

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

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

OK, warum bitten Sie mich nicht einfach, eine rekursive Funktion zu schreiben? 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 sehr 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.

154
Matt Cashatt

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 entsprechenden Versuche, die Aussage 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" einwirkt, ist meiner Meinung nach nicht eindeutig. Wenn Sie das Word-Objekt durch verschiedene Substantive ersetzen, wird schnell klar, dass das Durchqueren eines Objekts nur für eine kleine Teilmenge des Universums von Dingen von Bedeutung ist, die Objekte sind.

Es ist sinnvoll, die Knoten eines "Binärbaums" zu "durchqueren". Es macht keinen Sinn, einen "Clown" zu "durchqueren". Ein Objekt kann jedoch genauso leicht einen "Clown" darstellen wie einen "Binärbaum".

307
Matt

Ich kann hier drei Möglichkeiten sehen.

  1. Sie war völlig inkompetent. Dazu gibt es nicht viel mehr zu sagen.
  2. Sie machte es absichtlich mehrdeutig, um 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 wollte, dass Sie eingestellt wurden, und stellte eine Frage, die als gegeben unbeantwortbar war. 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 vollständig ratlos - nicht." Ich habe nicht einmal eine Ahnung, wie ich anfangen soll. Offensichtlich ist er grob inkompetent! Wir sollten nicht einmal in Betracht ziehen, ihn einzustellen. "
40
Jerry Coffin

Dies ist nur eine wilde Vermutung, aber vorausgesetzt, der Interviewer spricht von Zeigerreferenzen (und es ist eine Trickfrage), lautet die Antwort: Es gibt nichts zu durchqueren, 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 bedeuten würde, dass er über einen Baum spricht.

32
Robert Harvey

Obwohl ich nicht für diesen bestimmten Interviewer sprechen kann, habe ich ähnliche Fragen in einem Front-End-Interview mit Entwicklern gesehen. Die Sprache, die ich in diesem Beispiel verwenden werde, ist JavaScript.

Gegeben:

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

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

'value1'
2
[Object object]

Während ich ein rekursives Beispiel codiere, das alle Ebenen durchquert, erwähne ich Dinge wie:

  • Umgang mit Rundschreiben
  • Umgang mit Arrays (sollten sie auch rekursiv durchlaufen werden?)
  • Sollten Funktionen ausgewertet und ihr Rückgabewert verarbeitet werden?
  • Für JavaScript: Sollte der Prototyp übereinstimmen und sollten auch geerbte Eigenschaften verglichen werden?

Die "Lösung", die der Interviewer vermutlich anstrebte, bestand darin, ein Gespräch über eine scheinbar einfache Frage zu beginnen, die viele fortgeschrittene Themen enthält - Rekursivität, Hinweise/Referenzen, Erwartungen usw.

15
WSkid

Einige Interviewer versuchen speziell, Fragen zu stellen, um festzustellen, ob der Kandidat klug und ehrlich genug ist, um eine dieser beiden 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 und die Zeit ihres Arbeitgebers verschwendet und dafür bezahlt, dass er versucht, sie umzusetzen.

9
hotpaw2

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

Wenn dies eine Frage mit verknüpfter Liste war, haben Sie (in diesem Fall) eine einfach verknüpfte Liste, bei der der Endknoten auf das andere Ende zeigt (obwohl, wenn er so formuliert wurde, wie Sie sagen, er möglicherweise doppelt verknüpft ist, wenn A auf zeigt B und C - aber eine Klarstellung seitens des Interviewers würde dazu beitragen).

A -> B -> C -> A.

Außerdem (und das passiert die ganze Zeit) hat der Interviewer diese Frage möglicherweise gelesen, dachte, es sei eine „gute“ Frage, wusste aber die Antwort selbst nicht (oder sogar was sie bedeutete).

7
Maich

Ein Teil der Herausforderung besteht darin, mehr Details zu erhalten, indem bestimmte Fragen gestellt werden, um herauszufinden, dass es eine Baumstruktur gibt und welche Komponenten bei einer Durchquerung beteiligt sind. 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.

5
JB King

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

3
BenjaminB

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 würden 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 vorbereiten, und ihnen dann gesagt, 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.

3
Jim

Obwohl die Frage schlecht formuliert war und der Interviewer eindeutig nicht hilfreich war, um eine Richtung anzugeben, sehe ich das, was gefragt wurde, etwas anders.

Ich denke, der Interviewer suchte nach einer Lösung, die die Objektstruktur mit einer Art Reflexion durchquerte. Die Information, dass die drei Objekte gleich waren, sollte zu einer Konversation des Objektidentitätsvergleichs (A == B bedeutet, dass die Objekte tatsächlich dasselbe Objekt im Speicher sind) oder des Objektgleichheitsvergleichs (A == B bedeutet, dass die Werte der Objekte sind) veranlasst haben das Gleiche).

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

2
Lucas

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

Schreiben Sie einen Algorithmus, um ein Array zu durchlaufen und zu bestimmen, dass A ist gleich B und B ist gleich C und A ist gleich C, in dieser Reihenfolge.

Dann wäre die richtige Antwort ein rekursiver Algorithmus.

2
pgthew

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 und B gleich C und A gleich C ist.

Das betreffende object 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 C können Sie feststellen, 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 stellen.

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

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

Der richtige Wortlaut sollte gewesen sein.

Schreiben Sie einen Algorithmus, um die Teile einer Sammlung zu überprüfen, um festzustellen, ob sie alle gleich sind. Es muss darauf geachtet werden, nicht in einer Endlosschleife hängen zu bleiben. Zum Beispiel; Wenn Teile A gleich B sind und B gleich C ist und A gleich C ist, kann dies zu Problemen führen.


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

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

EDIT : Nach einigem Nachdenken. Nein, es ist nicht möglich, mithilfe einer rekursiven Funktion zu überprüfen, ob eine Sammlung alle gleichen Teile enthält.

Die effizienteste Lösung ist 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 und die falsche Antwort zu erwarten. Da wurde diese Frage vor einem Jahr gestellt. Ich hoffe wirklich, dass Sie woanders gearbeitet haben. Es würde mich interessieren, vom ursprünglichen Beitrag zu hören, wie sich die Dinge für ihn/sie entwickeln.

1
Reactgular

War dies eine Java Interviewfrage, wenn ja, könnte er Ihre Fähigkeiten mit überschreibendem "Hashcode" und "gleich" testen wollen.

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

Ohne Überschreiben ergibt Ihr Vergleich für "Objekt" A zu B, A zu C und A zu A alle wahr, aber nach dem Überschreiben nur dann, wenn Objekt A im Vergleich zu Objekt A wahr zurückgibt, während andere Vergleiche falsch zurückgeben.

0
rpatali