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?
quelle
find the missing element in O(N) or better
was 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?Antworten:
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.)
quelle
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.
quelle
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.
quelle