Was sind Fragen, um die SQL-Kenntnisse eines Programmierers zu testen? [geschlossen]
14
Was sind Fragen, um die SQL-Kenntnisse eines Programmierers zu testen? Wie lautet die Antwort auf die Frage? Und was würde das Fehlen einer korrekten Antwort bedeuten, um die mit der Frage verbundenen Konzepte zu verstehen?
Ich würde auf jeden Fall ein echtes Live-Beispiel geben und darum bitten, eine komplexe Anfrage zu schreiben. Bitten Sie zum Beispiel darum, den profitabelsten Monat für jedes der letzten 10 Jahre auszuwählen, wenn Sie die Tabelle der Käufe haben. ABER da du auch nach Fragen und Antworten fragst, heißt das wahrscheinlich, dass du kein Experte bist und nicht urteilen kannst. In diesem Fall können Sie einen Testdienst eines Drittanbieters ausprobieren, zumindest als ersten Filter vor dem Interview. Ich würde tests4geeks.com vorschlagen . Sie haben SQL-Test.
Dhaval Patel
Antworten:
20
Es hängt davon ab, wie schwierig es sein soll. Außerdem bin ich ein wenig vorsichtig, wenn ich Ihnen die Antwort geben soll, da die meisten SQL-Probleme mehrere akzeptable Methoden zur Ausführung von Aufgaben haben und es auch Methoden gibt, um SQL-Probleme auf schlampige Weise zu lösen, die andere Probleme verursachen. Die Person, die die Antwort "benotet", muss sie auf jeden Fall selbst lösen können.
Das heißt, hier sind ein paar, die ich mir auf den Kopf gestellt habe.
Extrem einfache Ebene:
Geben Sie eine Mitarbeitertabelle mit den Spalten EmpID, Vorname, Nachname, HireDate und TerminationDate an:
Schreiben Sie eine Abfrage, um alle Mitarbeiter, die noch für das Unternehmen tätig sind, mit Nachnamen zurückzugeben, die mit "Smith" beginnen, sortiert nach Nachname und Vorname.
Einfache Ebene
Ausgehend von der obigen Employee-Tabelle sowie einer neuen Tabelle "AnnualReviews" mit den Spalten EmpID und ReviewDate:
Schreiben Sie eine Abfrage, um alle Mitarbeiter zurückzugeben, die noch nie eine nach HireDate sortierte Bewertung erhalten haben.
Mittlere Ebene In
Anbetracht der obigen Mitarbeitertabelle schreiben Sie 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.
Schwierigkeitsgrad In
Anbetracht der obigen Mitarbeitertabelle schreiben Sie eine Abfrage, um den längsten Zeitraum (in Tagen) zu berechnen, den das Unternehmen ohne Einstellung oder Entlassung eines Mitarbeiters zurückgelegt hat.
Härteres Level
Schreiben Sie unter Verwendung derselben Tabellen eine Abfrage, die jeden Mitarbeiter zurückgibt, und geben Sie für jede Zeile / jeden Mitarbeiter die höchste Anzahl von Mitarbeitern an, die zu irgendeinem Zeitpunkt während ihrer Amtszeit für das Unternehmen gearbeitet haben, und das erste Datum, an dem das Maximum erreicht wurde. Zusätzliche Punkte für die Nichtbenutzung von Cursorn.
Nett, antworte - mag die Entwicklung der Fragen wirklich. Warum muss die Person, die die Fragen stellt, in der Lage sein, sie zu beantworten? Warum nicht einfach Unit-Test basierend auf Ausgabe und Laufzeit schreiben? Wie viele Konnektivwochen, um die SQL-Konzepte zu beherrschen, würde ein durchschnittlicher Programmierer benötigen, um das von Ihnen vorgegebene härteste Niveau zu erreichen? Würden Sie auch glauben, dass ein Programmierer, der in der Lage ist, die schwierigste Frage zu beantworten, in der Lage ist, eine sehr große Mehrheit von SQL-bezogenen Aufgaben effektiv zu lösen?
Fehler
3
Der Grund, warum ich möchte, dass der Fragesteller (oder zumindest der "Benoter") sie beantworten kann, ist, dass der Ansatz Ihnen möglicherweise so viel sagt wie das Ergebnis. Ich mache mir auch Sorgen, dass ein Non-Tech-Interviewer eine vorab geschriebene Antwort hat und andere möglicherweise richtige Antworten nicht akzeptiert (auf der Karte steht "Moop").
JohnFx
Ob diese Fragen die Fähigkeit zeigen, die meisten SQL-bezogenen Aufgaben zu bewältigen. Wenn ihre Aufgabe darin besteht, Anfragen zu schreiben, ist dies wahrscheinlich der Fall. Wenn Sie erwarten, dass sie einen DB-Server verwalten, müssen Sie spezielle Fragen dazu stellen.
JohnFx
Vielen Dank für die Klarstellung, der Non-Tech-Interviewer wäre in diesem Fall keine Person, sondern ein System, daher der Unit-Test und die Laufzeit. Es ist klar, dass Systeme keinen Code schreiben oder lesen, sondern Menschen, aber es gibt so viele Programmierer auf der Welt, und die Notwendigkeit, sie vor Ort zu haben, ist meiner Meinung nach bestenfalls begrenzt. Schätze, wenn eine Person den Test nicht bestanden hat, aber dachte, sie hätte Recht, könnte sie immer als korrekt markieren.
Fehler
Und ja, das Ziel für die Fragen wäre ein Programmierer, kein Datenbankadministrator.
Fehler
4
Ich nehme im Allgemeinen nur an Interviews für Datenspezialisten teil, daher sind meine Fragen in der Regel schwierig. Aber eine Sache, die ich von jedem verlangen würde, der SQL schreiben wird, ist das Wissen über Joins und wann ein linker Join oder ein innerer Join verwendet werden soll. Jeder, der das nicht versteht, hat kein Geschäft damit, eine Datenbank in irgendeiner Form abzufragen.
Eine andere Sache, die ich tun würde, ist sicherzustellen, dass sie verstehen, wie man ein GROUP BY macht und Aggregatfunktionen verwendet.
Und der Unterschied zwischen UNION und UNION ALL hat viele arme Kandidaten in meinem Job beseitigt.
Ich würde fragen: "Warum und wie sollten Sie Eingabewerte des Benutzers bereinigen, die in einer SQL-Abfrage verwendet werden?"
Dies ist erforderlich , SQL - Injektionen zu verhindern, und in der Lage sein zu beantworten , dies erfordert gute Kenntnisse über SQL - Syntax und Befehle (wie SELECT, UPDATE, DROP, DELETE, etc.), aber auch , wie diese kann durch die Verwendung von SQL - Kommentaren umgangen wird , um eine Abfrage zu brechen und injizieren, was der bösartige Benutzer tun möchte.
Ist die Antwort nicht: Niemals Eingaben bereinigen, eine vorbereitete Anweisung verwenden?
Kevin Cline
@Emmad Kareem, wer das nicht beantworten kann, sollte kein SQL schreiben.
HLGEM
@gablin, ich verstehe wirklich nicht warum das so ist. Könnten Sie etwas erklären? Wie viele SQL-Bücher behandeln dieses Thema?
NoChance
2
Ich war an der Entwicklung eines technischen Tests für Datenbankprogrammierer beteiligt. Die Fragen waren meiner Meinung nach recht einfach: Schreiben Sie die CREATE TABLE-Anweisungen für eine bestimmte Tabellenstruktur. einige einfache Abfragen machen; etc.
Die meisten Bewerber, die sich als SQL-Experten bezeichneten, haben den Test nicht bestanden. Einer sagte, dass er, obwohl er jahrelang ein SQL-Entwickler gewesen war, niemals eine CREATE TABLE-Anweisung geschrieben hatte, weil die GUI dies für ihn getan hatte.
Wir haben ähnliche Erfahrungen mit anderen technischen Tests gemacht. Für Windows-Supportmitarbeiter ähneln die Aufgaben "Erstellen eines Domänenbenutzers", "Hinzufügen eines Druckers" und "Ändern der Berechtigungen für eine Datei". Die meisten Menschen können diese Aufgaben nicht erledigen, besonders unter Druck. Wir gehen davon aus, dass Sie wahrscheinlich ziemlich kompetent sind, wenn Sie selbst einfache Dinge können.
Ich fürchte, ich bin auf der Seite des Entwicklers, der die GUI verwendet. Sie können eine ganze Karriere verbringen, ohne regelmäßig CREATE TABLE-Skripte zu schreiben. Viele Leute entwickeln Datenmodelle in CASE-Tools, die die DDL automatisch für Sie generieren. Im Allgemeinen scheue ich alle Tests, die hauptsächlich auf der Speicherung von Syntax
basieren
+1 @Barry Brown: Ich stimme zu und es ist ein interessanter Punkt.
Fehler
0
Wenn Sie offenere Fragen stellen möchten: Stellen Sie allgemeine Fragen zu den Datentypen DATE, DATETIME .... Informieren Sie sich über Unterschiede zwischen verschiedenen Herstellerimplementierungen / -produkten. Sprechen Sie über Kommandozeilen-Tools, Massenlader, hübsche Drucker ... Vielleicht können Sie während des Interviews einen neuen Trick lernen.
Antworten:
Es hängt davon ab, wie schwierig es sein soll. Außerdem bin ich ein wenig vorsichtig, wenn ich Ihnen die Antwort geben soll, da die meisten SQL-Probleme mehrere akzeptable Methoden zur Ausführung von Aufgaben haben und es auch Methoden gibt, um SQL-Probleme auf schlampige Weise zu lösen, die andere Probleme verursachen. Die Person, die die Antwort "benotet", muss sie auf jeden Fall selbst lösen können.
Das heißt, hier sind ein paar, die ich mir auf den Kopf gestellt habe.
Extrem einfache Ebene:
Geben Sie eine Mitarbeitertabelle mit den Spalten EmpID, Vorname, Nachname, HireDate und TerminationDate an:
Schreiben Sie eine Abfrage, um alle Mitarbeiter, die noch für das Unternehmen tätig sind, mit Nachnamen zurückzugeben, die mit "Smith" beginnen, sortiert nach Nachname und Vorname.
Einfache Ebene
Ausgehend von der obigen Employee-Tabelle sowie einer neuen Tabelle "AnnualReviews" mit den Spalten EmpID und ReviewDate:
Schreiben Sie eine Abfrage, um alle Mitarbeiter zurückzugeben, die noch nie eine nach HireDate sortierte Bewertung erhalten haben.
Mittlere Ebene In Anbetracht der obigen Mitarbeitertabelle schreiben Sie 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.
Schwierigkeitsgrad In
Anbetracht der obigen Mitarbeitertabelle schreiben Sie eine Abfrage, um den längsten Zeitraum (in Tagen) zu berechnen, den das Unternehmen ohne Einstellung oder Entlassung eines Mitarbeiters zurückgelegt hat.
Härteres Level
Schreiben Sie unter Verwendung derselben Tabellen eine Abfrage, die jeden Mitarbeiter zurückgibt, und geben Sie für jede Zeile / jeden Mitarbeiter die höchste Anzahl von Mitarbeitern an, die zu irgendeinem Zeitpunkt während ihrer Amtszeit für das Unternehmen gearbeitet haben, und das erste Datum, an dem das Maximum erreicht wurde. Zusätzliche Punkte für die Nichtbenutzung von Cursorn.
quelle
Ich nehme im Allgemeinen nur an Interviews für Datenspezialisten teil, daher sind meine Fragen in der Regel schwierig. Aber eine Sache, die ich von jedem verlangen würde, der SQL schreiben wird, ist das Wissen über Joins und wann ein linker Join oder ein innerer Join verwendet werden soll. Jeder, der das nicht versteht, hat kein Geschäft damit, eine Datenbank in irgendeiner Form abzufragen.
Eine andere Sache, die ich tun würde, ist sicherzustellen, dass sie verstehen, wie man ein GROUP BY macht und Aggregatfunktionen verwendet.
Und der Unterschied zwischen UNION und UNION ALL hat viele arme Kandidaten in meinem Job beseitigt.
quelle
Ich würde fragen: "Warum und wie sollten Sie Eingabewerte des Benutzers bereinigen, die in einer SQL-Abfrage verwendet werden?"
Dies ist erforderlich , SQL - Injektionen zu verhindern, und in der Lage sein zu beantworten , dies erfordert gute Kenntnisse über SQL - Syntax und Befehle (wie
SELECT
,UPDATE
,DROP
,DELETE
, etc.), aber auch , wie diese kann durch die Verwendung von SQL - Kommentaren umgangen wird , um eine Abfrage zu brechen und injizieren, was der bösartige Benutzer tun möchte.quelle
Ich war an der Entwicklung eines technischen Tests für Datenbankprogrammierer beteiligt. Die Fragen waren meiner Meinung nach recht einfach: Schreiben Sie die CREATE TABLE-Anweisungen für eine bestimmte Tabellenstruktur. einige einfache Abfragen machen; etc.
Die meisten Bewerber, die sich als SQL-Experten bezeichneten, haben den Test nicht bestanden. Einer sagte, dass er, obwohl er jahrelang ein SQL-Entwickler gewesen war, niemals eine CREATE TABLE-Anweisung geschrieben hatte, weil die GUI dies für ihn getan hatte.
Wir haben ähnliche Erfahrungen mit anderen technischen Tests gemacht. Für Windows-Supportmitarbeiter ähneln die Aufgaben "Erstellen eines Domänenbenutzers", "Hinzufügen eines Druckers" und "Ändern der Berechtigungen für eine Datei". Die meisten Menschen können diese Aufgaben nicht erledigen, besonders unter Druck. Wir gehen davon aus, dass Sie wahrscheinlich ziemlich kompetent sind, wenn Sie selbst einfache Dinge können.
quelle
Wenn Sie offenere Fragen stellen möchten: Stellen Sie allgemeine Fragen zu den Datentypen DATE, DATETIME .... Informieren Sie sich über Unterschiede zwischen verschiedenen Herstellerimplementierungen / -produkten. Sprechen Sie über Kommandozeilen-Tools, Massenlader, hübsche Drucker ... Vielleicht können Sie während des Interviews einen neuen Trick lernen.
quelle