Hat jemand gute Fragen vom Typ FizzBuzz, die nicht das FizzBuzz-Problem sind?
Ich interviewe jemanden und FB ist relativ bekannt und nicht so schwer zu merken, also ist meine erste Station bei der Suche nach Ideen meine neue Sucht SO.
Hat jemand gute Fragen vom Typ FizzBuzz, die nicht das FizzBuzz-Problem sind?
Ich interviewe jemanden und FB ist relativ bekannt und nicht so schwer zu merken, also ist meine erste Station bei der Suche nach Ideen meine neue Sucht SO.
Antworten:
Ich habe eine kleine Liste relativ einfacher Programmierprobleme gesehen, mit denen Kandidaten ausgesondert werden, genau wie bei FizzBuzz. Hier sind einige der Probleme, die ich gesehen habe, in der Reihenfolge der zunehmenden Schwierigkeit:
Diese waren für Java und Sie konnten die Standardbibliotheken verwenden, so dass einige von ihnen extrem einfach sein können (wie 6). Aber sie funktionieren wie FizzBuzz. Wenn Sie eine Ahnung von der Programmierung haben, sollten Sie dies am schnellsten tun können. Auch wenn Sie die Sprache nicht gut kennen, sollten Sie zumindest in der Lage sein, die Idee zu vermitteln, wie man etwas macht.
Mit diesem Test sah einer meiner vorherigen Chefs alles, von Leuten, die alles ziemlich schnell geschafft hatten, über Leute, die es am schnellsten konnten, bis zu einem Mann, der nach einer halben Stunde keinen einzigen beantworten konnte.
Ich sollte auch beachten: Er ließ die Leute seinen Computer benutzen, während sie diese Aufgaben erhielten. Sie wurden speziell angewiesen , dass sie könnten Google und dergleichen verwenden.
Vielleicht beantwortet dies Ihre Frage nicht direkt, aber ich bin nicht sicher, ob Sie sich ein anderes Problem einfallen lassen müssen. Die FizzBuzz-Frage ist nicht nur "leicht zu merken", sondern auch einfach "leicht", und genau darum geht es. Wenn sich die Person, die Sie interviewen, in der Klasse der Personen befindet, für die FizzBuzz "bekannt" ist, gehört sie zur Klasse der Personen, die eine Frage vom Typ FizzBuzz nicht herausfiltern würde. Das bedeutet nicht, dass Sie sie vor Ort einstellen, aber es bedeutet, dass sie in der Lage sein sollten, sich durch das Interview zu bewegen.
Anders ausgedrückt, jeder, der sich die Zeit nimmt, Coding Horror zu lesen, ist es wert, weiter interviewt zu werden. Lassen Sie sie die Lösung einfach sehr schnell aufschreiben, sie kurz besprechen (z. B. Wie testen Sie das?) Und dann mit der nächsten Frage fortfahren. Und wie der Artikel sagt: "Es ist wirklich erstaunlich, wie viele Kandidaten nicht in der Lage sind, die einfachsten Programmieraufgaben zu erledigen."
Jeder der frühen von Project Euler wäre wahrscheinlich gut.
Beispielsweise:
Problem 25
Die Fibonacci-Sequenz wird durch die Wiederholungsrelation definiert:
Fn = Fn−1 + Fn−2, where F1 = 1 and F2 = 1.
Daher werden die ersten 12 Begriffe sein:
F1 = 1 F2 = 1 F3 = 2 F4 = 3 F5 = 5 F6 = 8 F7 = 13 F8 = 21 F9 = 34 F10 = 55 F11 = 89 F12 = 144
Der 12. Term, F12, ist der erste Term, der drei Ziffern enthält.
Was ist der Index des ersten Terms in der Fibonacci-Sequenz, der 1000 Stellen enthält?
Ich habe festgestellt, dass das Überprüfen einer Zeichenfolge, ob es sich um ein Palindrom handelt, ziemlich einfach ist und ein anständiger Jäger sein kann.
scalar(reverse 'foo') == 'foo'
.
Ich wollte eine FizzBuzz-Frage, an der der Modulo-Operator nicht beteiligt ist. Zumal ich normalerweise Webentwickler interviewe, für die der Modulo-Operator einfach nicht so oft auftaucht. Und wenn es nicht etwas ist, auf das Sie regelmäßig stoßen, ist es eines dieser Dinge, die Sie die wenigen Male nachschlagen, wenn Sie es brauchen.
(Zugegeben, es ist ein Konzept, das Sie im Idealfall irgendwo auf dem Weg in einem Mathematikkurs kennengelernt haben sollten, aber das ist ein anderes Thema.)
Also, was ich mir ausgedacht habe, ist das, was ich einfallslos Threes in Reverse nenne . Die Anweisung lautet:
Schreiben Sie ein Programm, das in umgekehrter Reihenfolge jedes Vielfache von 3 zwischen 1 und 200 ausgibt.
Machen Sie es einfach in normaler Reihenfolge: Multiplizieren Sie den Schleifenindex mit 3, bis Sie eine Zahl erreichen, die 200 überschreitet, und beenden Sie dann. Sie müssen sich keine Gedanken darüber machen, wie viele Iterationen danach beendet werden sollen. Sie müssen einfach weitermachen, bis Sie den ersten Wert erreicht haben, der zu hoch ist.
Aber wenn man rückwärts geht, muss man wissen, wo man anfangen soll. Einige könnten intuitiv erkennen, dass 198 (3 * 66) das höchste Vielfache von 3 ist, und als solches Hardcode 66 in die Schleife. Andere verwenden möglicherweise eine mathematische Operation (Integer Division oder Floor () für eine Gleitkommadivision von 200 und 3), um diese Zahl zu ermitteln, und stellen dabei etwas allgemeiner Anwendbares bereit.
Im Wesentlichen ist es das gleiche Problem wie bei FizzBuzz (Durchlaufen von Werten und Ausdrucken mit einem Dreh). Dieses Problem ist zu lösen und verwendet nichts, was so (relativ) esoterisch ist wie die Modulo-Operation.
print [x for x in xrange(3, 200, 3)][::-1]
Fibonacci, eine Zeichenfolge umkehren, die Anzahl der in einem Byte gesetzten Bits zählen, sind andere gebräuchliche. Das Projekt Euler hat auch eine große Sammlung von zunehmenden Schwierigkeiten.
Für etwas wirklich Super-Einfaches, das in 10 Sekunden erledigt werden kann, aber diejenigen Leute entfernen würde, die buchstäblich nichts programmieren können , versuchen Sie Folgendes:
Fragen Sie: Zeigen Sie mir (auf Papier, aber besser auf einem Whiteboard), wie Sie die Werte zweier Variablen austauschen würden.
Dies war nicht meine Idee, wurde aber in einem Kommentar von jemandem namens Jacob in einem Blog-Beitrag über die ursprüngliche FizzBuzz-Frage veröffentlicht.
Jacob fährt fort:
Wenn sie nicht starten können, eine dritte Variable mit dem Erstellen Sie ziemlich viel schreiben , der Person aus. Ich habe festgestellt, dass ich allein mit dieser Frage ein Drittel bis die Hälfte meiner (zu diesem Zeitpunkt noch nicht geprüften) Bewerber abschneiden kann.
Nach diesem Kommentar im ursprünglichen Blog-Beitrag gibt es eine weitere interessante Diskussion darüber, wie dieser Variablentausch durchgeführt werden kann, ohne dass eine dritte Variable erforderlich ist (Addieren / Subtrahieren, xor usw.), und natürlich, wenn Sie eine Sprache verwenden, die dies unterstützt In einer einzelnen Anweisung / Operation ist dies möglicherweise kein so guter Test.
Obwohl dies nicht meine Idee war, wollte ich dies hier posten, da es sich um eine so elegant einfache Frage handelt, die innerhalb von etwa 10 Sekunden von jemandem beantwortet werden kann (und sollte), der selbst die einfachsten Programme geschrieben hat. Es erfordert auch nicht die Verwendung von etwas scheinbar obskuren Operatoren wie dem Modulo-Operator, mit denen viele Leute, die ansonsten ziemlich anständige Programmierer sind, einfach nicht vertraut sind (was ich aus meiner eigenen Erfahrung kenne).
Bitten Sie sie, eine App zu schreiben, um die Faktoren einer bestimmten Zahl zurückzugeben. Es ist einfach und in kurzer Zeit schwer, es gut zu machen. Sie können ihren Stil und die Art und Weise, wie sie Probleme durchdenken, in kurzer Zeit sehen.
Wenn es sich um ein C / C ++ - Interview handelt, stellen Sie sicher, dass die Person über Zeiger Bescheid weiß.
Allgemein - einfacher Algorithmus ([einfach / doppelt] verknüpfte Liste). Fragen Sie nach der Komplexität des Hinzufügens in jedem Fall (am Anfang, am Ende, Optimierungen ...)?
(Allgemein) Wie finden Sie Min und Max aus einem Array (N-Größe) mit nur 3 * N / 2 Vergleichen?
C / C ++: Wie würden Sie mehrere "strcat" für einen Puffer optimieren?
Lesen Sie 6.14 in der C ++ FAQ Lite:
Wie wäre es: Ich möchte eine einzelne Ganzzahl verwenden, um mehrere Werte zu speichern. Beschreiben Sie, wie das funktionieren würde.
Wenn sie keine Ahnung von Bitmasken und Operationen haben, können sie wahrscheinlich keine anderen Probleme lösen.
Das Auffinden einer Liste von Primzahlen ist eine ziemlich häufige Frage, erfordert jedoch noch einige Überlegungen und es gibt unterschiedliche Grade an Antworten, die Menschen möglicherweise geben.
Sie wären auch überrascht, wie viele Menschen Schwierigkeiten haben, eine Datenstruktur vom Typ Map / Dictionary zu implementieren.
Ich habe meine Kandidaten gebeten, ein Programm zur Berechnung der Fakultät einer bestimmten Zahl in einer Pseudosprache ihrer Wahl zu erstellen . Es ist ein ziemlich leicht zu lösendes Problem und eignet sich gut für die natürlichen Nachfragen (die oft gestellt werden könnten) zur Rekursion.