Pro JavaScript Programmierer Interview Fragen (mit Antworten) [geschlossen]

131

Was sind gute Fragen, um festzustellen, ob der Bewerber wirklich ein Pro-JavaScript-Entwickler (Browserseite) ist?

Fragen, die unterscheiden können, ob jemand kein Ad-hoc-JavaScript-Programmierer ist, sondern wirklich professionelle JavaScript-Entwicklung durchführt, objektorientiert, wiederverwendbar und wartbar.

Bitte geben Sie Antworten , damit ein fortgeschrittener und Ad-hoc-JavaScript-Programmierer jemanden interviewen kann, der mehr Erfahrung hat. Wenn ich Antworten auf einige dieser fortgeschrittenen Fragen finde, entgeht mir dies. Bitte vermeiden Sie offene Fragen .

Bitte bewahren Sie eine Interviewfrage / -antwort pro SO-Antwort auf, um eine bessere Leseerfahrung und eine einfachere Interviewvorbereitung zu erzielen.

WooYek
quelle
21
Lassen Sie niemals einen fortgeschrittenen JS-Entwickler jemanden interviewen, der fortgeschrittener sein soll! Das ist einfach verrückt. Lassen Sie das Interview von einer qualifizierten Person durchführen.
James
22
@JP - Wenn also Ihr leitender Entwickler aufgibt, sind Sie nur beschissen?
Tvanfosson
15
@JP Ich versuche jemanden zu beschäftigen, der besser ist als ich. Es ist ein kleines Startup, also habe ich keine bessere Wahl, es sei denn, ich benutze Hilfe von außen ... aber dann müsste ich ihn interviewen;)
Janusz Skonieczny
13
@JP: Wenn Sie nur Leute einstellen, die höchstens so gut sind wie Sie, werden Sie eines Tages von dummen Idioten umgeben sein. Versuchen Sie immer, jemanden einzustellen, der besser ist als Sie.
Gumbo
1
@Nick: Das Problem ist, dass diese Frage zu weit gefasst ist und keine richtige Antwort hat (siehe die Kommentare der FAQ zu diesem Thema). Es ist gut für einen Blog-Beitrag geeignet, aber nicht so gut für dieses Q & A-Format. Früher waren wir vielleicht auf Software Engineering umgestiegen , aber nach zahlreichen Bedrohungen durch Körperverletzung durch die Programmierer-Mods mussten wir unsere Methoden ändern.
Michael Myers

Antworten:

118

Da JavaScript eine so kleine Sprache mit unglaublicher Komplexität ist, sollten Sie in der Lage sein, relativ einfache Fragen zu stellen und anhand ihrer Antworten herauszufinden, ob sie wirklich so gut sind. Zum Beispiel lautet meine erste Standardfrage, um den Rest des Interviews zu beurteilen:

Was ist in JavaScript der Unterschied zwischen var x = 1und x = 1? Beantworten Sie so viele oder so wenige Details, wie Sie möchten.

Anfänger-JS-Programmierer haben möglicherweise eine grundlegende Antwort zu Einheimischen und Globalen. Fortgeschrittene JS-Leute sollten diese Antwort auf jeden Fall haben und wahrscheinlich den Umfang auf Funktionsebene erwähnen. Jeder, der sich selbst als "fortgeschrittener" JS-Programmierer bezeichnet, sollte bereit sein, über Einheimische, implizite Globale, das windowObjekt, den Funktionsumfang, das Anheben von Deklarationen und die Umfangsketten zu sprechen . Darüber hinaus würde ich gerne davon hören [[DontDelete]], wie man Vorrang hat (Parameter vs varvs function) und undefined.

Eine weitere gute Frage besteht darin, sie zu bitten, eine sum()Funktion zu schreiben, die eine beliebige Anzahl von Argumenten akzeptiert und ihre Summe zurückgibt. Bitten Sie sie dann, diese Funktion (ohne Änderung) zu verwenden, um alle Werte in einem Array zu summieren. Sie sollten eine Funktion schreiben, die so aussieht:

function sum() {
  var i, l, result = 0;
  for (i = 0, l = arguments.length; i < l; i++) {
    result += arguments[i];
  }
  return result;
}
sum(1,2,3); // 6

Und sie sollten es auf Ihrem Array wie folgt aufrufen (Kontext für applykann alles sein, was ich normalerweise nullin diesem Fall verwende):

var data = [1,2,3];
sum.apply(null, data); // 6

Wenn sie diese Antworten haben, kennen sie wahrscheinlich ihr JavaScript. Sie sollten sie dann nach nicht JS-spezifischen Dingen wie Tests, Workflows, Versionskontrolle usw. fragen, um herauszufinden, ob sie ein guter Programmierer sind .

Bcherry
quelle
4
Gute Frage. Kleiner Trottel: Ich glaube, Sie meinen "Ergebnis zurückgeben" anstelle von "Ergebnis zurückgeben". Pro-Tipp:
Richten Sie
4
Wow, das ist ein dummer Fehler. Ich habe den größten Teil meines Codes vor dem Posten bei jsFiddle getestet, diesen aber nicht getestet. Danke :)
Bcherry
5
Die Summenfunktion sollte gegenüber Nichtzahlentypen stabil sein, ohne Fehler auszulösen. Darüber hinaus sollte es in der Lage sein, Zahlen als Zeichenfolgen für zusätzliches Guthaben zu verarbeiten.
Abadaba
2
+1 für große Erwähnung und Zurückhaltung, um herauszufinden, ob sie ein guter Programmierer sind.
Demonslay335
3
Diese Zeile: für (i = 0, l = Argumente.Länge; i <l; i ++) ist schlecht, da Argumente.Länge bei jeder Iteration ausgewertet wird. Wenn Sie vor der for-Schleife l = argument.length zuweisen, ist dies besser. Richtig?
Thomallen
94

Grundlegende JS-Programmierung

  • Scope of variable
  • Was ist Associative Array? Wie benutzen wir es?

OOPS JS

  • Difference between Classic Inheritance and Prototypical Inheritance
  • Was ist difference between private variable, public variable and static variable? Wie erreichen wir das in JS?
  • Wie man add/remove properties to objectin der Laufzeit?
  • Wie erreichen inheritance?
  • Wie geht das extend built-in objects?
  • Warum extending array is bad idea?

DOM und JS

  • Difference between browser detection and feature detection
  • DOM Event Propagation
  • Event Delegation
  • Event bubbling V/s Event Capturing

Sonstiges

  • Graceful Degradation V/s Progressive Enhancement
pramodc84
quelle
17
Dies ist für die Einstellung von JS Gurus.
Andreas
22
Seien Sie darauf vorbereitet, dass ein JS-Entwickler Folgendes sagt: JavaScript verfügt nicht über assoziative Arrays. JavaScript verfügt jedoch über Objektliterale, die wie assoziative Arrays verwendet werden können. Auf die Eigenschaften von Objekten kann auch mit Punktnotation oder eckigen Klammern und Zeichenfolgen zugegriffen werden.
Christopher Parker
8
Dies ist die Basis für jemanden, der sich selbst als "JavaScript-Entwickler" bezeichnen würde. Ich denke, die Tiefe der Antwort ist, wie Sie sie als Guru einschätzen würden oder nicht.
Ryan Ore
8
Sie meinen "Prototypal Inheritance". Häufiger Fehler.
Wizzard
4
@wizzard du meintest 'typischer Fehler': p
Nick
17

(Ich nehme an, Sie meinen browser-seitiges JavaScript)

Fragen Sie ihn, warum es trotz seiner unendlichen Kenntnisse in JavaScript immer noch eine gute Idee ist, vorhandene Frameworks wie jQuery, Mootools, Prototype usw. zu verwenden.

Antwort: Guter Code für Codierer, gute Wiederverwendung von Codierern. Tausende von Arbeitsstunden wurden in diese Bibliotheken gesteckt, um DOM-Funktionen von browserspezifischen Implementierungen zu entfernen. Es gibt keinen Grund, die verschiedenen DOM-Kopfschmerzen des Browsers selbst durchzugehen, um die Korrekturen neu zu erfinden.

Matt
quelle
5
@ Tim Down: Natürlich, aber wenn Sie ein seriöses Paket finden, wurden fast alle Teile des Pakets von fähigen Leuten überprüft. Als Benutzer eines Open Source-Pakets können Sie Korrekturen einreichen, wenn Sie Fehler finden, und Ihr Fachwissen erweitern.
PanCrit
Kennen Sie das Rad - aber verwenden Sie nicht immer die gleichen Reifen für verschiedene Terrains. Z.B. Warum die gesamte jQuery-Bibliothek verwenden, wenn Sie nur Ajax-Transport usw. (für Ihr Projekt) benötigen
Ali
1
Die Antwort auf diese Frage ist eine Frage selbst - warum verwenden wir eine IDE und keinen einfachen Notizblock zum Bearbeiten unseres Codes? :)
Navin Israni
11

Fragen Sie sie, wie sie sicherstellen, dass ihre Seiten weiterhin verwendet werden können, wenn der Benutzer JavaScript deaktiviert hat oder JavaScript nicht verfügbar ist.

Es gibt keine einzig wahre Antwort, aber Sie suchen nach einer Antwort, die über einige Strategien zur progressiven Verbesserung spricht .

Progressive Enhancement besteht aus folgenden Grundprinzipien:

  • Grundlegende Inhalte sollten für alle Browser zugänglich sein
  • Grundfunktionen sollten für alle Browser zugänglich sein
  • spärliches, semantisches Markup enthält den gesamten Inhalt
  • Das erweiterte Layout wird durch extern verknüpftes CSS bereitgestellt
  • Verbessertes Verhalten wird durch [[unauffälliges JavaScript | unauffällig]], extern verknüpftes JavaScript, bereitgestellt
  • Die Einstellungen des Endbenutzer-Browsers werden berücksichtigt
WooYek
quelle
1
Die beste Frage, um einen JS-Mann auf Architektenebene einzustellen :)
Navin Israni
Überzeugen Sie mich zunächst davon, dass es sich lohnt, in eine Person mit ausgeschaltetem JS zu investieren, die in das echte Web und nicht in das dunkle Web investiert. Diese Benutzer sind wahrscheinlich übermäßig paranoid oder ahnungslos in Bezug auf die Verwendung eines Browsers und haben JS versehentlich ausgeschaltet. In beiden Fällen sind ihre Konvertierungschancen gering bis gar nicht.
vsync
6

Fragen Sie "Welches Unit-Test-Framework verwenden Sie? Und warum?"

Sie können entscheiden, ob die tatsächliche Verwendung eines Testframeworks wirklich erforderlich ist, aber das Gespräch kann Ihnen viel darüber sagen, wie kompetent die Person ist.

tvanfosson
quelle
1
Als Referenz ist QUnit erstaunlich: docs.jquery.com/QUnit
Goyuix
0

Fortgeschrittene Programmierer sollten ihre Werkzeuge technisch beherrschen.

Wenn er die oben genannten Fragen zum Bildschirm des technischen Telefons bestanden hat, lassen Sie ihn an Ort und Stelle etwas Dummes skizzieren, wie einen Ajax-URL-Shortner. dann grillen Sie ihn auf seinem Portfolio. Kein erstaunliches Portfolio = Zwischenentwickler in diesem Bereich und nicht der Typ, den Sie für Ihr glänzendes neues Projekt verantwortlich machen möchten.

Dustin Getz
quelle
4
Portfolios sind bestenfalls eine schlechte Metrik - in der heutigen Welt ist JS ein perfekt akzeptiertes Tool in der Unternehmenswelt, in der Projekte wahrscheinlich jedes Portfolio übertreffen, das Sie vielleicht sehen, und in dem öffentliche Repos keine Rolle spielen.
Ilya Ayzenshtok
1
@IlyaAyzenshtok Dies ist Teil meines Dilemmas. Es fällt mir schwer, ein Portfolio zu präsentieren, wenn 99% meiner Arbeit proprietär / hinter einer Lohnmauer / intern ist ...
Spartacus
1
@Spartacus - Sie können Screenshots machen und dem Interviewer Ihre Regel darin und die Hürden auf dem Weg erklären. In Bezug auf Open-Source-Projekte bieten sie eine hervorragende Möglichkeit, eine Person vor einem Interview zu bewerten , um Fragen in Bezug auf die Codierungsstufe der Person in Projekten anzupassen.
vsync