Sind Algorithmusfragen gute Interviewfragen? [geschlossen]

25

Ich hatte kürzlich einen Streit mit einem anderen Programmierer. Er hat ein Interview für eine neue Position geführt und folgende Frage gestellt:

Geben Sie eine Folge von Zahlen an, die mit X beginnen und mit Y enden, wobei jedoch ein Element fehlt, sodass N YX-1 ist. Suchen Sie das fehlende Element in O (N) oder besser.

Nun ist die Antwort hier irrelevant (aber interessant). Dies löste eine Diskussion darüber aus, ob dies überhaupt eine gute Frage war, die während eines Interviews gestellt werden sollte.

Eine Seite: Algorithmen sind ein fester Bestandteil der Programmierung, und die Fähigkeit des Kandidaten, diese Frage zu beantworten, unterstützt ihn dabei, ein guter Programmierer zu sein, größere Probleme zu lösen und die meisten Programmieraufgaben zu bewältigen, die letztendlich leicht zu verstehen und zu beantworten sind.

Andere Seite: Das Schreiben von Algorithmen von Grund auf wird in der modernen Programmierung selten verwendet und spielt daher bei der größeren Frage, ob die Person ein guter Programmierer sein wird, keine Rolle. Eine Person konnte diese Frage erfolgreich beantworten, war jedoch noch nicht in der Lage, häufigere Programmieraufgaben auszuführen.

Ihre Gedanken? Gute Interviewfrage oder nicht?

MBonig
quelle
Es tut mir leid, aber ich kann nicht verstehen, find the missing element in O(N) or betterwas in diesem Zusammenhang "oder besser" bedeutet . Es scheint die Art von Dingen zu sein, die mit einer einfachen while-Schleife gelöst würden, aber ich verstehe es trotzdem nicht - es ist entweder gelöst oder nicht gelöst , oder?
Camilo Martin
Das "oder besser" bezieht sich auf die Leistung - eine O (ln (n)) - Lösung wäre besser.
Ethel Evans
Algorithmusfragen sind in der Tat eine der erwarteten Fragen in einem Programmier- oder technischen Vorstellungsgespräch. Gayle Laakmaan McDowell hat ein Buch mit dem Titel "Cracking the Coding Interview" geschrieben, das einen eigenen Abschnitt über Algorithmen enthält.
Hagubear

Antworten:

20

Ich bin damit einverstanden, eine Algorithmusfrage zu stellen, aber ich bin nicht einverstanden, auf einem bestimmten Big-O-Qualitätsniveau zu bestehen.

Diese Art von Frage zu stellen ist interessant, um zu sehen, wie sich die Person dem Problem nähert und welche Fallstricke sie bei ihrem Versuch berücksichtigt, aber wenn sie nicht etwas wahnsinnig Falsches oder Ineffizientes schreibt, ist das tatsächliche Detail von dem, was sie schreibt, nicht so aussagekräftig wie die Tatsache, dass sie es tut Gehen Sie die Schritte zur Problemlösung / -gestaltung auf kohärente Weise durch.

Ich stelle eine ähnliche Frage, aber die Leute, mit denen ich nach der Einstellung das beste Glück hatte, waren die, die fehlerhafte Antworten gaben, aber die richtige Idee in ihrer Herangehensweise hatten.

Rechnung
quelle
9

Ich würde der Idee nicht zustimmen, dass die Fähigkeit, Algorithmen zu schreiben, für die größere Frage, ob die Person ein guter Programmierer sein wird, irrelevant ist. Auch wenn er es nie benutzen muss (was zweifelhaft ist), zeigt es immer noch, ob er die mentale Flexibilität hat, um eine logische Lösung für ein Problem zu finden, das komplizierter ist als ein einfacher Satz von Anforderungen, die bereits geschrieben und ausgelegt sind im Detail durch den Kunden.

Ich möchte auf keinen Fall jemanden einstellen, der nicht weiß, wie man denkt und analysiert. Das ist der Unterschied zwischen einem Code-Affen und einem Computerprogrammierer.

Mason Wheeler
quelle
6

Ich muss hier zugeben, dass ich einer derjenigen bin, die gerne Algorithmusfragen in Interviews stellen, aber ich muss betonen, dass die tatsächliche Antwort auf die Frage absolut irrelevant ist. Es ist mir egal, ob der Befragte die Antwort kennt oder nicht. Stattdessen zielt diese Frage für mich auf verschiedene Aspekte ab, wie zum Beispiel die folgenden - in der Reihenfolge ihrer Wichtigkeit:

Bedarf

Solche Fragen werden bewusst unterbewertet. In Ihrem Beispiel sind keine weiteren Details zu der Sequenz angegeben. Wenn Sie einen Befragten haben, der Sie fragt, ob diese Nummern tatsächlich sortiert sind, dann ist das ein gutes Zeichen. Er hat die richtige Einstellung, um Kunden nach weiteren Details zu fragen, die helfen, in kürzerer Zeit zu einer besseren Lösung zu gelangen. Der Kandidat kann auch mit der Idee spielen, O (n) -Raum zu verwenden, um ein Array von N Zahlen zu speichern, aber er sollte dies nicht tun, ohne nach weiteren Details zu X und Y zu fragen. Nehmen wir an, dass X und Y zwischen 1 und 1000 liegen Starten Sie dann eine Array-basierte Lösung. Aber wenn ich Ihnen sage, dass das Intervall 1 und 1 Milliarde beträgt, wird das Problem ein völlig anderes. Lassen Sie mich noch einmal betonen, dass mir die Lösung egal ist.

Standardtechniken

Ich möchte keinen Programmierer einstellen, der nicht einmal weiß, was O (n) bedeutet. Das ist ein absolutes Muss, wenn Sie in diesem Bereich eine anständige Ausbildung hatten. Es ist aber auch wichtig, nicht nur zu wissen, was es bedeutet, sondern dieses Wissen auch tatsächlich anzuwenden. In Ihrem Beispiel möchte ich, dass ein Kandidat erkennt, dass er die Daten nicht sortieren darf (ohne weitere Fragen zu stellen, die auf die Option einer Bucket-Sortierung oder anderer O (n) -Sortierungsansätze abzielen), da eine Sortierung erforderlich ist. O (n log n) im Allgemeinen.

In ähnlicher Weise zielen andere Algorithmusfragen auf Standardtechniken wie Baum- oder Graphendurchquerung oder Rekursion ab. Ein Kandidat kann an einer dieser Techniken ausrutschen, was keinen guten Eindruck hinterlässt. In solchen Fällen möchte ich jedoch genauer untersuchen, ob der Kandidat überhaupt einen CS-Hintergrund hat. Natürlich hängt es von der Zielposition ab, aber in der Regel ist ein Entwickler, der weder mit der Komplexität der Laufzeit noch mit typischen Datenstrukturen und deren Durchläufen vertraut ist, keine Hilfe.

Problembehandlung

Nachdem Sie die Frage gestellt haben, überwachen Sie den Kandidaten genau. Wie reagiert er / sie? Sie erhalten die besten Ergebnisse hier von Kandidaten , die absolut keine Ahnung haben, wie das Problem zu lösen , auf den ersten . In diesem Zusammenhang wird geprüft, was passieren kann, wenn später am Arbeitsplatz eine ähnliche Situation eintritt. Möglicherweise stoßen Sie während Ihrer Entwicklung auf ein solches Problem, und es ist gut zu wissen, wie Ihr Kandidat mit diesen Problemen umgeht, auch wenn er nicht in der Lage ist, alles selbst zu lösen.

Beispiel: Sie möchten nicht, dass Ihr Kandidat für die nächste halbe Stunde in den lautlosen Modus wechselt! Überprüfen Sie, ob er mit intelligenten Fragen aufwarten kann (siehe Anforderungen). Überprüfen Sie, ob er über den Tellerrand hinaus denkt, sobald er feststellt, dass er dies nicht kann. Sogar eine "lustige" Gegenfrage wie "Darf ich die Option" Telefon an Mitarbeiter "verwenden?" ist ein gutes Zeichen.

Wie antworte ich?

Im Allgemeinen sind die besten Antworten, die Sie auf diese Art von Fragen geben können, Gegenfragen! Eine Antwort sofort zu sagen scheitert im Grunde genommen an der ganzen Sache und ist in der Tat überhaupt keine gute Antwort, da all diese Fragen auf Kompromisse hindeuten, die Ihre Antwort impliziert, ohne dass Sie die erforderlichen Informationen haben, um dies intelligent zu machen Abtausch. Natürlich variiert die Qualität der Gegenfragen zwischen den Kandidaten.

Genereller Hinweis zu Interviewfragen: Gegenfragen sind selten eine schlechte Sache. In einem meiner eigenen Interviews wurde ich zum Beispiel gefragt: "Wenn Sie X implementieren müssten, würden Sie dafür C ++ oder Java wählen und warum?" - Ich habe einfach mit "Bin ich auf diese beiden beschränkt?" Kontert. Erraten Sie selbst, welche Reaktion Sie von einem Interviewer auf eine solche Gegenfrage erhalten - und wie einfach es Ihnen fällt, dem Interviewer tatsächlich zu zeigen, wozu Sie in der Lage sind.

Frank
quelle
Warum ist "Darf ich die Option" Telefonisch mitarbeiten "verwenden?" ein gutes zeichen? Zeigt dies nicht, dass der Befragte nicht weiß, wie er Probleme angehen soll, und immer um Hilfe bittet?
Uooo
Es wird immer eine Frage geben, die der Befragte einfach nicht beantworten kann. In diesem Fall ist es ein gutes Zeichen, aber natürlich sollte der Befragte dieses Verhalten bei mehreren Fragen nicht wiederholen. Die schwierige Aufgabe besteht darin, herauszufinden, ob Sie nur diesen einen Sweet Spot erreicht haben, in dem der Kandidat keine Kenntnisse hat (was akzeptabel ist), oder ob er versucht, sich aus schwierigen Problemen im Allgemeinen herauszuwinden (was nicht ist).
Frank
Jemand hat mir einmal gesagt, dass der Unterschied zwischen einem Junior-Entwickler und einem Senior-Entwickler darin besteht, dass der Senior-Entwickler früher um Hilfe bittet. Telefonist ist eine wichtige Fähigkeit. Es gibt viele Egos in dieser Branche und "Ich weiß nicht" zu sagen ist ein gutes Zeichen. Einige der besten Codes, die ich je entworfen / geschrieben habe, stammen aus der Arbeit mit Menschen, nicht nur aus meinen eigenen Ideen.
MBonig
5

Wenn Sie keine Fragen zu Algorithmen / Formeln stellen, die der Kandidat für den Job wissen muss (z. B. Fluiddynamik, wenn die Position dies erfordert), sehe ich deren Wert nicht. Der Kandidat macht sich wahrscheinlich schon Sorgen darüber, wie er sich anzieht, wie er spricht usw. Ob er eine mathematische Frage vor Ort beantworten kann, beweist nichts anderes, als vielleicht, wie es ihm in einer TV-Spielshow ergeht.

Wenn ich interviewe, stelle ich nicht einmal "Programmier" -Fragen per se. Ich habe den Kandidaten ihre vergangenen Projekte beschreiben lassen, wie ihr Code Ziele erreicht hat, wie ihre Ansätze sind, etc. Daraus kann ich ziemlich schnell ersehen, ob der Kandidat weiß, was er tut oder ob er ein Poser ist.

GroßmeisterB
quelle
4

Ich stimme zu, dass Programmierer Algorithmen auch mit ausgefallenen neuen Frameworks sehr gut kennen müssen, aber ich bin nicht ganz überzeugt von einem Rätsel in einem Interview. Meine größte Sorge wäre, dass Sie in einer realen Umgebung Algorithmen unter sehr unterschiedlichen Bedingungen schreiben. aka, nicht unter Druck mit jemandem, der Sie jeden Federstrich beobachtet, mit mindestens einigen Minuten, um es in Ruhe zu überlegen. Wie lange geben Sie der Person, die sich für diese Bewertungsmethode einsetzt, im Allgemeinen Zeit, um sie zu lösen? Ich glaube, bei Code geht es nicht so sehr darum, eine Lösung in einem fieberhaften 3-Minuten-Terror herauszubekommen. Überzeugen Sie mich daher, dass dies tatsächlich eine gute Möglichkeit ist, um zu sehen, wie jemand eine alltägliche Aufgabe bewältigt.

Morgan Herlocker
quelle
2

Das Problem mit dieser spezifischen Frage ist, dass es fast eine Trickfrage ist. Mit einer bestimmten Einsicht werden Sie leicht auf O (n) kommen, andernfalls werden Sie Schwierigkeiten haben, besser zu werden als O (n log n). Es reduziert sich fast auf "Hast du das schon mal gesehen?"

Ich bin nicht sicher, ob es gute algorithmische Fragen gibt. Wenn Sie eine Frage stellen, die auf der Graphentheorie basiert, hängt dies davon ab, wie vertraut der Befragte mit der Graphentheorie ist. Wenn Sie ihn oder sie einstellen, ist er oder sie möglicherweise relativ schnell mit der Graphentheorie vertraut. Wieder sind wir zurück zu "Waren Sie schon einmal damit konfrontiert?"

In einem regelmäßigen Interview bleibt keine Zeit, um ernsthafte Probleme zu lösen, und ich gehe die Dinge anders an, wenn ich mich hinsetzen, Wikipedia verwenden und im Allgemeinen etwas Zeit in Anspruch nehmen kann, um die Dinge herauszufinden. Wahrscheinlich hat der Interviewer keine Zeit, sorgfältig zu diskutieren, was der Interviewte im Detail weiß, und eine geeignete algorithmische Frage auszuwählen.

David Thornley
quelle
1
Was ist die besondere Einsicht, um zu sehen, dass es O (n) ist? Ich sehe "das Durchsuchen einer sortierten Liste von N aufeinanderfolgenden Werten nach einem fehlenden" als inhärent ein O (n) -Problem. Wie konntest du es so schreiben, dass es schlimmer war? (Ehrlich gesagt bin ich neugierig und verstehe nicht, wie die O (n) -Lösung nicht offensichtlich ist, und selbst die O (log n) -Lösung scheint mir offensichtlich zu sein.)
dash-tom-bang
@ dash-tom-bang: Ich habe mir die Liste nicht als sortiert vorgestellt (habe ich etwas falsch verstanden?), also wäre die Lösung von O (n log n) Sortieren und Scannen, während O (n) die Summe der Zahlen ist oben.
David Thornley
ah- ok das könnte der Fall sein- ich hatte nicht gedacht, dass die Liste unsortiert sein würde. :) ("Die Liste beginnt bei X und endet bei Y.")
dash-tom-bang
2
Auch hier funktioniert eine Variante der Schnellauswahl. Wenn Sie auf (oben + unten) / 2 drehen, können Sie leicht erkennen, welche Hälfte des fehlenden Eintrags vorhanden ist, da Sie wissen, wie groß jede Hälfte sein sollte. Wiederholen Sie diesen Vorgang, bis Sie das fehlende Element gefunden haben.
Paul Hankin
1
Ich denke, da sich die Frage auf eine Sequenz bezieht (und nicht auf eine Menge usw.), die bei X beginnt und bei Y endet, bedeutet dies, dass die Elemente sortiert sind. Es scheint eine eher triviale Frage zu sein.
FinnNk
1

Ich habe mehrere algorithmische Fragen, die ich regelmäßig verwende, von denen einige sehr schwierig sind. Ich benutze sie, um zu sehen, wie sie ein Problem mental angreifen und um zu sehen, ob sie bestimmte Konzepte verstehen. (Ich habe viel zu viele Entwicklerkandidaten gesehen, die Zeiger einfach nicht verstehen.)

John Franklin
quelle
Zeiger wie der Hund, richtig? :)
JoshD
1

Sie möchten eine Frage, die Ihnen einen Einblick in den Kandidaten gibt. Eine Algorithmusfrage kann eine gute Antwort geben oder auch nicht. Und ich beziehe mich nicht darauf, dass sie es beantworten können oder nicht. Wenn sie es durcharbeiten und Sie ihre Überlegungen verstehen und befolgen, ist das ein guter Indikator. Wenn sie nur da sitzen, keine wirkliche Antwort, scheinen nicht einmal zu wissen, wo sie anfangen sollen, das ist ein schlechter Indikator (vielleicht). Das Problem ist, dass manche Leute einfrieren und es schwierig sein kann, das Einfrieren von den fehlenden Fähigkeiten zum Lösen von Problemen zu unterscheiden.

Die Leute werden sich aus verschiedenen Gründen darüber beschweren, in Interviews so ziemlich alles gefragt zu haben. Der Antragsteller kann einfrieren, der Antragsteller könnte diese Frage gerade nachgeschlagen haben, der Antragsteller kann dieses bestimmte Stück Trivia / Technik / was auch immer nicht kennen. All dies ist wahr, aber ein Interview muss noch stattfinden, und viele von uns in diesem Beruf hassen das. Wir hassen die Vorstellung, dass jemand über uns sitzt. Wir beschwören sofort Gründe, warum wir unfair beurteilt werden könnten oder wie der Test gefälscht oder gespielt werden könnte. Unterm Strich ist es egal.

Was Sie wirklich wollen, ist ein Interviewer mit der Fähigkeit, Fähigkeiten zu bestimmen, die möglicherweise während des Interviews präsentiert werden oder nicht. Fragen sind nur die Werkzeuge. Für mich sehen alle Hämmer gleich aus. Aber für jemanden, der sich mit ihnen auskennt, gibt es bestimmt einen Unterschied.

Jeremiah Nunn
quelle
0

Ich mag Algorithmusfragen, weil es das ist, was wir tun. Ich mag Einschränkungen, weil es das ist, was wir verwenden. Big-O ist in meiner Branche besonders relevant.

Ich möchte nicht, dass die Antworten auf diese Art von Fragen "den Code auf das Whiteboard schreiben" lauten. Der Befragte sollte in der Lage sein, intelligent über den Lösungsansatz zu sprechen und eine laufende Diskussion zu führen, wenn die Befragten die Anforderungen während der Diskussion ändern.

Die ursprüngliche Frage lautete: "Beginnen Sie am Anfang und marschieren Sie zum Ende, um das 'Loch' zu suchen." Der Interviewer sagt, das ist zu langsam, weil N gigantisch ist. Der Befragte beginnt mit der Diskussion der binären Suche. Der Interviewer sagt, dass die Daten plötzlich nicht mehr sortiert werden. Der Befragte sagt "sort then search". "Jetzt ist es zu langsam". Usw.

Dash-Tom-Bang
quelle