Ich bin ein Entwickler mit einem CS-Abschluss und habe fast 3 Jahre Berufserfahrung in einer Reihe von Sprachen.
Heute hatte ich ein Interview, insgesamt lief es ganz gut, ich habe mich auf die meisten Fragen vorbereitet und fühlte mich zu allem bereit. Am Ende des Interviews gaben sie mir EINE Programmierfrage ... ein Problem wie FizzBuzz (ohne den Druck der Teilnummer). Ich glaube, ich habe zu viele Fehler gemacht und bin damit "gescheitert". Ist alle Hoffnung für mich verloren?
Hier ist mein Code:
void FizzBuzz()
{
for(int i = 0; i <= 100; i++)
{
bool isThree = i % 3;
bool isFive = i % 5;
if (isThree)
{
print "Fizz\n";
}
else if(isFive)
{
print "Buzz\n";
}
else
{
print "FizzBuzz\n";
}
}
}
Wie Sie sehen, habe ich die Bools durcheinander gebracht, die die Syntax haben sollten. I% 3 == 0; Wenn ich mich an die richtige Frage erinnere, setze ich mit isThree && isFive auch ein else anstelle eines elseif. Ich war ziemlich gestresst, aber das ist keine Entschuldigung dafür, ein einfaches Problem zu verpassen.
Die Frage ist also, wie wichtig es ist, Arbeitscode vor Ort in Bezug auf andere Faktoren wie Erfahrung und Persönlichkeit zu erstellen. Wäre der obige Code beispielsweise ein Deal Breaker?
Antworten:
Der Zweck von FizzBuzz besteht darin, zu zeigen, dass Sie tatsächlich programmieren können , und nicht, dass Sie alle feineren Syntaxregeln der Sprache, in der Sie programmiert werden , auswendig gelernt haben (obwohl dies wichtig ist, wenn Sie wissen möchten, wie erfahren Sie sind) Sie sind in der Sprache).
Wenn Sie im Stress einer Interviewumgebung so weit gekommen sind und zeigen können, dass Sie die Fehler verstehen, die Sie gemacht haben, würde ich sagen, dass Sie bestanden haben.
quelle
Ja
Die meisten Leute, die ich befragt habe und bei denen der Code-Übungsteil aufgrund einer geringfügigen Syntax- oder Logikabweichung versagt hat, waren die besseren Angestellten.
Die Kernidee der Logik klar zu fassen (was Sie getan haben) und sie in eine anständige und prägnante Code-Sicht umzuwandeln (was Sie meiner Meinung nach am häufigsten getan haben), ist für mich weitaus wichtiger, als sie absolut perfekt zu machen.
Ich kaufe eine IDE für die Syntaxprüfung und stelle keinen Entwickler dafür ein, und Sie hätten die anderen Fehler innerhalb von Augenblicken Ihres ersten Debugs bemerkt.
Sie sind von der ersten Anforderung zu einem ersten Versuch übergegangen, ziemlich direkt und ohne etwas Schreckliches zu tun. Das ist in vielen Umgebungen wertvoller als Perfektion ohne Feedback. Wenn der Arbeitgeber die Informationen, die Sie verpasst haben, aufgehängt hat, könnte dies ohnehin ein Zeichen für die zukünftige Umgebung sein.
Wenn die Aufgabe die Drucknummernvariante wäre, würde das Fehlen des Details ein wenig schlecht aussehen, aber es würde nicht genug Gewicht haben, um meine Entscheidung zu ändern, wenn ich Sie für die Position anders mochte.
[Bearbeiten] Wie Alex betonte, gibt es auch den Aspekt der Reaktion und der Gelassenheit. Persönlich versuche ich, das aus dem Weg zu räumen, bevor ich zu den praktischen Übungen komme, indem ich versuche, den Befragten auf etwas aufmerksam zu machen, das ein wenig außerhalb ihrer Erfahrung liegt, aber manche entscheiden sich vielleicht dafür, beides zu kombinieren. Hin und wieder bin ich auf jemanden gestoßen, der nur über Lehrbuchkenntnisse verfügt und die theoretischen und Hintergrundfragen genau durchgeht, sich aber ernsthaft überlegt, wo ich mit der praktischen Übung anfangen soll. Einige können nicht einmal herausfinden, wo sie anfangen sollen.
Diese Personen sind genau das, was ich mit dieser Übung aussortieren möchte.
Wenn Sie also nicht 20 Minuten gebraucht haben, um den Interviewer über die Anforderungen zu informieren, war Ihre Lösung vermutlich mehr oder weniger Ihr erster Versuch mit möglicherweise ein paar Korrekturen. Wenn Sie in weniger als 5 Minuten das bekommen haben, was Sie oben angegeben haben, haben Sie gezeigt, dass Sie genug für meine Maßstäbe denken können.
quelle
Der obige Code wäre wahrscheinlich ein Deal Breaker für mich, wenn ich nicht noch etwas anderes zu tun hätte. Wenn sie dem Interviewstil von Microsoft folgen, wird Sie die Person, die Ihnen diese Frage gestellt hat, wahrscheinlich blockieren - und oftmals ist nur eine Frage erforderlich.
Was mich verwundert ist, dass der Interviewer Sie nicht nach diesem Code gefragt hat. Ein guter Interviewer hat genug von seinem eigenen Code gesehen, um zu wissen, dass Menschen Fehler machen - besonders wenn sie es eilig haben. Normalerweise sagen sie: "Jetzt sehen Sie etwas falsch mit diesem Code?" "Nein? Nun lass es uns testen". Sie kommen mit einigen Ergebnismengen und führen es dann durch die Funktion. Dann sagst du: "Oh Scheiße, das hat nicht funktioniert." "Ok, wie würden Sie das beheben ..." und so weiter. Wenn Sie diesen Dialog überleben, ist er beeindruckend und zeigt die Fähigkeit, kritisch zu denken, Testfälle zu entwickeln und Ihren eigenen Code zu debuggen.
Beachten Sie auch, dass sie normalerweise nicht nach "Arbeitscode" suchen. Wer produziert das schon beim ersten Versuch? Aber logisch richtig mit Fehlerbehandlung und guten Testsätzen ist ein gutes Ziel.
Darüber hinaus mag Sie das überraschen, aber Sie konkurrieren mit vielen Menschen, die noch nicht einmal mit Fizzbuzz anfangen können. Wir neigen dazu anzunehmen, dass alle anderen b + -Bäume im Schlaf durchqueren ... aber in Wirklichkeit können sie nicht einmal Vielfache von 3 und 5 herausfinden und einen Moduloperator verwenden. Sie werden vielleicht positiv überrascht sein, wie viel besser Sie waren als die anderen Kandidaten.
Mein Rat, wisch es einfach ab. Ich habe kürzlich bei großen Softwarefirmen (Microsoft, Amazon usw.) Interviews geführt, und es war das erste Mal, dass ich einen so gründlichen Interviewprozess durchlaufen habe. Ich habe mich bei einem Microsoft-Vorstellungsgespräch vor Ort vor allem wegen der Nervosität lächerlich gemacht, aber ich wusste einfach nicht, was mich erwartet oder wonach sie genau suchten. Ich habe ein Problem mit dem kürzesten Weg gefunden, nur um ein paar wirklich einfache Probleme zu lösen. Ich habe Werte vom falschen Ende eines Stapels geknallt und in einem vergessen
int atoi(char* value)
Implementierung , dassint val = value[i] - '0';
würde mir den ganzzahligen Wert des Zeichens und einige andere dumme Fehler geben. Ich habe mich größtenteils über das Interview gefreut, aber trotzdem verstanden, warum ich kein Angebot erhalten habe. Ich musste erkennen, dass dies nicht so sehr eine Reflektion meiner Fähigkeiten war, sondern vielmehr ein Indikator dafür, dass ich es einfach weiter versuchen musste, bis ich meine Nerven beherrschen konnte. Schließlich habe ich einige Interviews mit viel schwierigeren Fragen beantwortet und meinen Traumjob bekommen. Für die meisten Menschen, die tatsächlich wissen, was sie tun, geht es darum, herauszufinden, was die Interviewer wollen, sich selbst sicher zu sein und es ihnen zu geben. Es dauert eine Weile.quelle
No? Well let's test it
. Ich fordere die Kandidaten auf, in Interviews Fizz Buzz zu schreiben. Ich bringe sie auch dazu, einen Komponententest zu schreiben. Manchmal schlägt ihr Fizz-Buzz fehl, aber ihr Unit-Test erkennt dies und veranlasst sie, es zu beheben - das ist in Ordnung. Die Leute, die abgelehnt werden, sind diejenigen, die eine fehlerhafte Lösung schreiben und dann einen Test schreiben, der dies nicht erkennt. Ich frage sie, sind Sie mit diesem Test zufrieden, wenn sie es sind, dann scheitern sie.Ich würde nein sagen müssen, aber nicht aus dem Grund, den Sie angegeben haben, sondern weil Sie den FizzBuzz-Abschnitt an letzter Stelle gesetzt haben. Aufgrund der Funktionsweise Ihres Codes wird FizzBuzz nie so gedruckt, wie Sie es erwarten. Wie Lee kommentierte, wird es für jeden Wert gedruckt, der nicht durch 3 oder 5 teilbar ist.
Aber das Wichtigste ist, dass Sie daraus lernen. Ich mag die Tatsache, dass du hier fragst, wie du es besser machen könntest. Stellen Sie sicher, dass Sie einige Code-Rätsel lösen und häufig gestellte Fragen zu Vorstellungsgesprächen untersuchen. Versuchen Sie auch, das Timing selbst festzulegen oder etwas anderes zu tun, das den Druck erhöht, damit Sie versuchen können, das Gefühl nachzuahmen, das Sie in einem Interview bekommen werden. Und bereiten Sie das Interview vor, bereiten Sie es vor und bereiten Sie es vor, wenn Sie es wirklich aus dem Park werfen möchten.
quelle
i
nicht durch 3 oder 5 teilbar ist.Nein. Mit FizzBuzz können Sie feststellen, ob Sie in der Lage sind, eine grundlegende bedingte Logik zu erarbeiten, die alle Fälle abdeckt. Im Gegensatz zu den Meinungen einiger Leute handelt FizzBuzz nicht von Moduloperatoren, die ternäre Operationen oder boolesche Operanden kennen. Es ist eine einfache Übung in Bedingungen und Sie haben es nicht bestanden.
Das Problem ist so strukturiert, dass der gesamte "elegant" aussehende Code mindestens einen Fall nicht abdeckt.
Akzeptable Antworten:
quelle
Ich gebe den Leuten triviale Programmierprobleme am Whiteboard. Ob der resultierende Code fehlerfrei ist, ist nicht der entscheidende Punkt. Stattdessen kümmere ich mich um eine Reihe von Verhaltensweisen, die beim Schreiben des Codes auftreten. Es ist interaktiv und ich lerne viel über Kandidaten, während es passiert.
Ich gehe beim "Testen" von Whiteboards während eines Interviews genauer auf Folgendes ein: legitimer Weg, um Ihren (Whiteboard-) Code zu sichern?
Natürlich kann Ihr Interviewer nichts wie ich sein. Aber es ist durchaus möglich, dass Sie ein Interview mit mir bestanden haben, während Sie Code erstellt haben, der ein kleines bisschen daneben liegt, und es ist durchaus möglich, dass Sie mit dem identischen Code gescheitert sind.
quelle
Wenn ich dies auswerten würde, würde ich nach den folgenden Dingen suchen:
-
Es ist schwer zu # 1 zu sagen. Ihre Frage besagt, dass Ihr Problem nicht den Teil "Drucknummer" enthielt und Ihre Lösung dies tatsächlich nicht enthält. Ich habe keine andere Wahl, als beim Wort zu bleiben, aber wenn es tatsächlich das klassische FizzBuzz-Problem war, bei dem die nicht teilbaren Zahlen gedruckt wurden, dann klingt es so, als ob Sie zu einer Lösung gesprungen sind, bevor Sie die Anforderungen vollständig verstanden haben wäre ein abschlag.
Ich würde Ihnen Teilgutschrift für # 2 und # 3 geben. Sie kannten den Moduloperator und hatten die Struktur einer funktionierenden Lösung, haben aber Teile von beiden übersehen.
Es hört sich so an, als hättest du # 4 nicht gemacht, was dich negativ beeinflussen würde. In Zukunft würde ich empfehlen, einen Schritt vom Whiteboard zurückzutreten und sich Ihre Lösung anzusehen, bevor Sie sie als erledigt bezeichnen. Ich würde auch (ohne Aufforderung) ein paar Unit-Tests für Ihre Lösung durchführen, die schnell gezeigt hätten, wo Sie Fehler gemacht haben.
Sie haben dir auf # 5 keine Chance gegeben, was bedauerlich ist. Aber der Punkt ist, ich möchte nicht jemanden, der denkt, dass jede Codezeile, die er jemals geschrieben hat, reines Gold ist, das unmöglich verbessert werden kann, sondern jemanden, der bereit ist, Feedback zu seinen Lösungen zu akzeptieren und sich über seinen Ansatz zu unterhalten .
-
Wenn ich das allein beurteilen würde, würde ich mit "No Hire" stimmen. Solche Dinge messen eher die Performance als die Programmierfähigkeit , aber wenn Sie sie beherrschen, können Sie trotzdem Karriere machen. Also meine, Empfehlungen für zukünftige Tech-Interviews wären:
Üben Sie vor dem Vorstellungsgespräch ein paar dieser Übungen kalt und verwenden Sie dabei so wenig externe Ressourcen wie möglich. Nicht um Lösungen auswendig zu lernen, sondern um sicherzugehen, dass Sie mit Ihrer bevorzugten Sprache vertraut sind
Stellen Sie Fragen zum Problem, um Ihre Annahmen zu überprüfen.
Treten Sie vom Whiteboard zurück und schauen Sie sich die Lösung an, bevor Sie sie vollständig ankündigen, und führen Sie einige einfache Testfälle durch.
quelle
Jemanden zu bitten, ein Problem zu lösen, ohne ihm die Möglichkeit zu geben, Feedback zu seiner Lösung zu erhalten, ist ein fragwürdiger Ansatz, da er sich nicht verbessern darf.
All dieser Test zeigt uns, dass Sie keine sehr guten Fähigkeiten zum Lösen von Problemen bewiesen haben.
Dies könnte eines der Elemente bei der Entscheidung sein, Sie einzustellen oder nicht, aber für mich sollte es definitiv nicht das einzige sein.
Wären Sie mit einer Unit-Test- oder Ausführungsumgebung ausgestattet worden, wären die Fehler, die Sie gemacht haben, weniger entschuldbar gewesen.
quelle