Was sind einige Fragen vom Typ FizzBuzz für Web- oder SQL-Entwickler? [geschlossen]

10

Nach einer Weile stellen wir wieder ein und ich überprüfe Tests für Programmierer. Einige von ihnen sind etwas veraltet. Was sind einige der Fragen vom Typ FizzBuzz für Webentwickler und SQL? Das heißt, nicht zu trivial, aber in fünf bis zehn Minuten mit Stift und Papier und ohne Google lösbar?

Normalerweise eliminiere ich ungefähr zwei Drittel oder mehr der Kandidaten basierend auf dem Lebenslauf und dann alle bis auf ein paar wirklich gute Kandidaten in einem einstündigen Interview (das telefonisch erfolgen kann). Zu diesem Zeitpunkt schreibt der Kandidat einen Persönlichkeitstest und hat die Möglichkeit, ein bisschen FizzBuzz-ähnlichen Code zu schreiben. Ich versuche also nicht, eine Reihe von Kandidaten zu eliminieren, aber ich versuche, meine anfängliche Einschätzung zu bestätigen, dass der Kandidat einstellbar und in der Lage ist, zu codieren.

Domchi
quelle
2
Welche Fähigkeiten suchen Sie bei einem Webentwickler?
Oded
Ich denke, ich suche das Verständnis von HTML / CSS / JSON / HTTP; Wie Rachel erwähnte, eignet sich FizzBuzz zum Testen von Javascript / PHP / etc.
Domchi

Antworten:

12

Ich sehe FizzBuzz als Test, um festzustellen, ob die Leute tatsächlich wissen, was sie in ihrem Lebenslauf zu wissen behaupten. Ich würde es nicht als etwas anderes als eine Frage verwenden, um Kandidaten auszusortieren, die nicht wissen, wovon sie sprechen.

Ein geeigneter SQL-Ersatz wäre, den Kandidaten lediglich zu bitten, eine SQL-Anweisung zu schreiben, z. B. die Namensfelder zweier verbundener Tabellen auszuwählen, die mit A beginnen. Dies ist einfach und zeigt, dass der Kandidat tatsächlich über SQL-Kenntnisse verfügt.

SELECT Table1.Name, Table2.Name
FROM Table1 
INNER JOIN Table2 ON Table1.Id = Table2.Id
WHERE Table1.Name LIKE 'A%' OR Table2.Name LIKE 'A%'

Für einen Webentwickler würde ich sie einfach nach FizzBuzz fragen. Nur weil Sie für das Web programmieren, heißt das nicht, dass Sie nicht in der Lage sein sollten, grundlegende Programmierlogiken auszuführen

Wenn Sie nach aktuellen Interviewfragen suchen, gibt es viele gute Online-Fragen, die Sie mit einer schnellen Suche finden können. Ich habe mehr gefunden, als ich auflisten möchte, indem ich 10 Sekunden bei Google gebraucht habe.

Rachel
quelle
2
Joins sind eine gute Möglichkeit, die Neulinge von den fortgeschritteneren SQL-Programmierern zu trennen, da bei der SQL-Programmierung normalerweise ein anderes Denkparadigma erforderlich ist als bei der serverseitigen Programmierung, die normalerweise unerlässlich ist. Joins und Unterabfragen haben mich überrumpelt, bis ich anfing, über SQL-Anweisungen in Form von Mengen nachzudenken.
Chris C
@CCRicers Ich stimme zu. Und wenn Sie ein Interview für einen fortgeschrittenen SQL-Entwickler führen, würde ich dem tatsächlich auch eine GROUP-Anforderung hinzufügen, da ich ziemlich viel mit SQL gearbeitet habe, bevor ich vollständig verstanden habe, was Gruppen bedeuten und wie sie funktionieren
Rachel
Überlegen Sie, ob Sie einen Self-Join benötigen: "TABELLE MITARBEITER ERSTELLEN (ID-NUMMER, NAMENTEXT, MANAGER_ID-NUMMER)" und dann "Wie kann ich Mitarbeiter und deren Manager auflisten?"
Kevin Cline
Abhängig von der Art der Datenbank- / SQL-Position, für die Sie einstellen (und dem Entwicklerhintergrund / Ihrer Umgebung), können Sie eine tatsächliche Antwort auf "FizzBuzz" anfordern.
Clockwork-Muse
Und es hat den zusätzlichen Vorteil, dass es sich um eine schlechte Spezifikation handelt, sodass geprüft wird, ob der Kandidat die Anforderungen klärt, bevor er Code schreibt.
Peter Taylor
4

Hier ist eine Antwort, die ich auf eine sehr ähnliche (möglicherweise doppelte) Frage gegeben habe, die auf dieser Site geschlossen wurde .

Extrem einfache Stufe: Bei einer Mitarbeitertabelle mit den Spalten EmpID, Vorname, Nachname, Mietdatum und Kündigungsdatum: Schreiben Sie eine Abfrage, um alle Mitarbeiter zurückzugeben, die noch für das Unternehmen arbeiten. Die Nachnamen beginnen mit "Smith", sortiert nach Nachname und Vorname.

Easy Level Angesichts der obigen Mitarbeitertabelle sowie einer neuen Tabelle "AnnualReviews" mit den Spalten EmpID und ReviewDate: Schreiben Sie eine Abfrage, um alle Mitarbeiter zurückzugeben, die noch nie eine Bewertung nach HireDate sortiert hatten.

Mittelstufe
Schreiben Sie anhand der obigen Mitarbeitertabelle eine Abfrage, um die Differenz (in Tagen) zwischen dem am meisten und dem am wenigsten beschäftigten Mitarbeiter zu berechnen, der noch für das Unternehmen arbeitet.

Hard Level Schreiben Sie in der obigen Mitarbeitertabelle eine Abfrage, um den längsten Zeitraum (in Tagen) zu berechnen, den das Unternehmen ohne Einstellung oder Entlassung von Personen verbracht hat.

Schwieriger Level
Schreiben Sie erneut unter Verwendung derselben Tabellen eine Abfrage, die jeden Mitarbeiter zurückgibt und für jede Zeile / jeden Mitarbeiter die größte Anzahl von Mitarbeitern enthält, die zu einem beliebigen Zeitpunkt während ihrer Amtszeit für das Unternehmen gearbeitet haben, sowie das erste Datum, an dem das Maximum erreicht wurde. Zusätzliche Punkte, wenn Sie keine Cursor verwenden.

JohnFx
quelle
1
Interessante Frage. Das Level "Schwer" / "Härter" scheint mir jedoch sehr schwer zu sein. Selbst mit anständiger SQL-Erfahrung glaube ich, dass es in einer Interview-Situation wahrscheinlich zu schwer zu lösen ist. Vielleicht, wenn Sie den Kandidaten etwa eine halbe Stunde lang alleine lassen.
Sleske
Ich konnte sagen, dass die "schwierigere" Frage schwierig war, als mir klar wurde, dass ich nicht einmal wirklich weiß, was ein Cursor ist ... und ich jeden Tag MySQL verwendete! : - /
thesunneversets
@ Johnfx Kann diese Antworten für Ihre Probleme sehen, die ich übermorgen interviewt habe, docs.google.com/document/d/…
mr_eclair
Warum muss ich es mir ansehen? Sie können es selbst testen und sehen, ob Sie die richtige Antwort erhalten.
JohnFx
3

Wie wäre es mit Fizzbuzz selbst? Hier ist eine Oracle-Version:

select case when mod(level,35) = 0 then 'fizzbuzz'
            when mod(level,7) = 0 then 'buzz'
            when mod(level,5) = 0 then 'fizz'
            else to_char(level) end fizzbuzz
from dual connect by level <= 100

quelle
1
+1 für Großartigkeit, aber ich denke, dass virtuelle Zahlentabellen nicht oft genug auftauchen, um in der SQL-Toolbox aller zu sein. Sie
müssten
0

Ich finde, dass die Leute aus irgendeinem Grund große Probleme haben, mit der Zeit zu arbeiten, so dass dies ein guter Ort sein kann, um einen kleinen Test zu machen.

Etwas wie das:

Teil 1: Erstellen Sie eine Funktion, die den n-ten oder letzten Wochentag in einem bestimmten Monat berechnet - dh; der erste, dritte, letzte Dienstag im nächsten Monat.

Teil 2 (falls gewünscht): Entwurfstabelle (n) für zeitliche Ausdrücke für wiederkehrende Zeitpläne. Die Zeitpläne können "der n-te Wochentag eines oder mehrerer Monate" oder "der n-te Tag eines oder mehrerer Monate" oder "alle N Tage ab Datum" sein.

Beispiel: die 15 eines jeden Monats, der letzte Mittwoch eines jeden März, der letzte Tag eines jeden Monats, alle 17 Tage ab dem 2. Dezember 2008 usw.

Eli
quelle
2
-1: Mit der Zeit zu arbeiten und es richtig zu machen, ist in der Tat schwer. Ratet mal, warum Bibliotheken wie JodaTime existieren und nicht nur eine triviale Software sind.
Sebastiangeiger
@sebastiangeiger Ich stimme zu. Ich arbeite fast täglich mit SQL und obwohl ich die Datumsfunktionen von SQL effizient nutzen kann, wäre ich ohne die Hilfe von Google nicht in der Lage, so etwas schnell oder einfach zu tun. Tatsächlich musste ich dies vor einigen Monaten tun und nachdem ich einige Minuten lang versucht hatte, es in SQL herauszufinden, habe ich es einfach gegoogelt und einige Skripte erhalten, die ich mit einigen Modifikationen verwende, um meinen Anforderungen zu entsprechen.
Rachel
Ich suche keine Problembereiche; Ich bin auf der Suche nach etwas, mit dem ein durchschnittlicher Entwickler täglich arbeitet und das er sich problemlos und in einer unbekannten Umgebung (kein Computer verfügbar) erinnern kann. Ihr Beispiel ist zwar nicht so schwer, aber es ist eher ein Problem, das ich jemandem geben würde, der vor mir programmiert, um zu sehen, wie er denkt.
Domchi
1
@Eli Ich denke, FizzBuzz wird voraussichtlich entsprechend gelöst / codiert.
Aaron McIver
1
Ich denke nicht, dass Teil 2 eine gute Frage ist. Tatsächlich hat dieses Thema eine seltsame Lösung, die bei fast keinem anderen Datenbankdesignproblem in Unternehmen auftritt. Wenn Sie die Antwort nicht kennen, ist dies kein Hinweis auf schlechte SQL-Kenntnisse.
NoChance