🎁 Jetzt registrieren und bis zu 30 Minuten Online-KI kostenlos nutzen. Keine Kreditkarte erforderlich.

Node.js Interview-Fragen und Antworten: Event Loop, Async, APIs und Skalierung

September 3, 2026
Node.js Interview-Fragen mit Antworten und Code zu Event Loop, Async-Mustern, Express, Streams, Speicherlecks, Sicherheit und Skalierung.
Node.js Interview-Fragen und Antworten: Event Loop, Async, APIs und Skalierung
node js interview questions
nodejs interview questions and answers
node event loop interview
express interview questions

Node.js-Interviews beginnen mit der Event Loop und asynchronem Code, gehen dann über zu APIs, Fehlerbehandlung, Streams, Performance und Sicherheit. Der häufigste Grund, warum Kandidaten ins Straucheln geraten, ist, dass sie die Event Loop als Magie beschreiben. Eine klare Erklärung, was wo läuft und was blockiert, ist das, worauf Interviewer achten.

Unten findest du 24 Fragen mit Antworten. Die Codebeispiele sind kurz, damit du sie aus dem Gedächtnis tippen kannst.

Event Loop und Async

1. Was ist Node.js?

Eine JavaScript-Laufzeitumgebung, die auf Chrome's V8-Engine basiert und außerhalb des Browsers läuft. Sie nutzt eine Single-Threaded-Event-Loop für JavaScript mit nicht-blockierender I/O, was sie gut darin macht, viele Verbindungen zu handhaben, die die meiste Zeit mit Warten verbringen.

2. Wie funktioniert die Event Loop?

JavaScript-Code läuft auf einem Thread. Wenn eine I/O-Operation gestartet wird, wie das Lesen einer Datei oder das Senden einer Anfrage, übergibt Node sie an das System oder einen Thread-Pool und macht weiter. Wenn die Operation abgeschlossen ist, wird ihr Callback in die Warteschlange gestellt, und die Event Loop führt ihn aus, wenn der Call Stack leer ist. Die Loop durchläuft Phasen: Timer, ausstehende Callbacks, Poll (I/O), Check (setImmediate) und Close-Callbacks.

3. Wie ist die Reihenfolge von process.nextTick, Promises, setTimeout und setImmediate?

console.log('1 sync');
setTimeout(() => console.log('4 timeout'), 0);
setImmediate(() => console.log('5 immediate'));
Promise.resolve().then(() => console.log('3 promise'));
process.nextTick(() => console.log('2 nextTick'));

Synchroner Code läuft zuerst. Dann process.nextTick-Callbacks, dann Promise-Microtasks, dann die Loop-Phasen. setTimeout(0) versus setImmediate kann im Hauptmodul variieren, aber innerhalb eines I/O-Callbacks läuft setImmediate immer zuerst. Sei bereit zu erklären, statt nur aufzusagen.

4. Was bedeutet "die Event Loop blockieren", und wie vermeidest du das?

Eine lange synchrone Aufgabe, wie ein riesiger JSON-Parse, eine große Schleife oder fs.readFileSync in einem Request-Handler, stoppt alle anderen Anfragen, bis sie fertig ist. Vermeide das, indem du Async-APIs verwendest, Arbeit in Häppchen aufteilst oder CPU-intensive Arbeit an Worker-Threads oder einen anderen Prozess auslagerst.

5. Callbacks, Promises und async/await: Was sind die Unterschiede?

Callbacks sind der ursprüngliche Stil und können tief verschachteln. Promises repräsentieren einen zukünftigen Wert und werden mit then verkettet. async/await ist Syntax auf Basis von Promises, die sich wie synchroner Code liest und mit try/catch funktioniert.

6. Wie führst du asynchrone Aufgaben parallel aus?

const [user, orders] = await Promise.all([getUser(id), getOrders(id)]);

Promise.all wird abgelehnt, wenn eine fehlschlägt. Promise.allSettled wartet auf alle und meldet jedes Ergebnis. Promise.race gibt das erste zurück, das sich auflöst. Verwende kein await in einer Schleife, wenn die Aufrufe unabhängig sind.

7. Was ist der Unterschied zwischen Worker-Threads, Child-Prozessen und Cluster?

Worker-Threads führen JavaScript in separaten Threads in einem Prozess aus und können Speicher teilen, was für CPU-intensive Arbeit geeignet ist. Child-Prozesse starten separate Programme. Das Cluster-Modul forkt mehrere Kopien der App, eine pro Kern, die sich einen Port teilen, sodass du alle CPUs für die Bearbeitung von Anfragen nutzen kannst.

Module und Tooling

8. CommonJS versus ES-Module?

CommonJS verwendet require und module.exports und lädt synchron. ES-Module verwenden import und export, sind der Standard in JavaScript und unterstützen Top-Level-Await. Node unterstützt beide, ausgewählt durch Dateiendung oder das type-Feld in package.json.

9. Was steht in package.json, und was ist der Unterschied zwischen dependencies und devDependencies?

Sie enthält Metadaten, Skripte und Abhängigkeiten. dependencies werden zur Laufzeit benötigt, devDependencies nur für Entwicklung und Tests. Eine Lock-Datei zeichnet exakte Versionen auf, damit Installationen reproduzierbar sind.

10. Wie handhabst du Umgebungskonfiguration?

Verwende Umgebungsvariablen, gelesen über process.env, mit einem validierten Konfigurationsmodul. Halte Secrets aus dem Repository heraus und verwende in der Produktion einen Secrets-Manager.

APIs und Express

11. Was ist Middleware in Express?

Eine Funktion mit Zugriff auf die Anfrage, die Antwort und next. Middleware läuft in Reihenfolge und kann die Anfrage ändern, die Antwort beenden oder die Kontrolle weitergeben. Typische Verwendungen sind Logging, Body-Parsing, Authentifizierung und Fehlerbehandlung.

app.use((req, res, next) => {
  console.log(req.method, req.url);
  next();
});

12. Wie behandelst du Fehler in einer Express-App?

Fange Fehler in Async-Handlern ab und übergib sie an next(err), dann verwende eine Fehlerbehandlungs-Middleware mit vier Argumenten (err, req, res, next), um eine konsistente Antwort zu senden. In Express 5 werden abgelehnte Promises von Handlern automatisch weitergeleitet. Bei nicht abgefangenen Ausnahmen und unbehandelten Rejections: loggen und den Prozess neu starten, statt in einem unbekannten Zustand weiterzumachen.

13. Wie würdest du einen REST-API-Endpunkt zum Erstellen einer Bestellung entwerfen?

Eingabe validieren, den Benutzer authentifizieren, Berechtigungen prüfen, die Bestellung innerhalb einer Datenbanktransaktion erstellen, 201 mit der neuen Ressource und ihrem Standort zurückgeben, Duplikate mit einem Idempotenzschlüssel behandeln und klare Fehler mit passenden Statuscodes zurückgeben.

14. Wie authentifizierst du Benutzer?

Sessions mit Cookies oder Tokens wie JWTs. Hashe Passwörter mit einem langsamen Algorithmus wie bcrypt oder argon2. Bei JWTs halte die Ablaufzeit kurz, verwende Refresh-Tokens sorgfältig und speichere keine sensiblen Daten im Token.

Streams, Dateien und Performance

15. Was sind Streams, und warum sollte man sie verwenden?

Streams verarbeiten Daten in Blöcken, anstatt alles auf einmal in den Speicher zu laden. Es gibt lesbare, schreibbare, Duplex- und Transform-Streams. Verwende sie für große Dateien, Uploads und Downloads.

const fs = require('node:fs');
const { pipeline } = require('node:stream/promises');
const zlib = require('node:zlib');
await pipeline(fs.createReadStream('in.log'), zlib.createGzip(), fs.createWriteStream('in.log.gz'));

16. Was ist Backpressure?

Wenn ein schreibbarer Stream mit einem lesbaren nicht mithalten kann, signalisiert er der Quelle, langsamer zu werden. pipeline und pipe übernehmen das für dich. Wenn du manuell schreibst, prüfe den Rückgabewert von write() und warte auf das drain-Event.

17. Wie findest du ein Speicherleck?

Beobachte den Speicher über die Zeit, erstelle Heap-Snapshots (Chrome DevTools oder --inspect) und vergleiche sie, um zu sehen, welche Objekte wachsen. Häufige Ursachen sind globale Caches, die nie ablaufen, Event-Listener, die nicht entfernt werden, und Closures, die große Objekte festhalten.

18. Wie skalierst du eine Node.js-Anwendung?

Starte mehrere Prozesse mit dem Cluster-Modul oder einem Prozessmanager, stelle sie hinter einen Load Balancer, halte die App zustandslos, indem du Sessions nach Redis oder in eine Datenbank verlagerst, nutze Caching und skaliere horizontal mit Containern. Verlage CPU-intensive Arbeit in Worker oder separate Services.

19. Wie profilierst du einen langsamen Endpunkt?

Miss zuerst mit Logs und Timings, nutze dann --prof oder --cpu-prof oder ein Flame-Graph-Tool, um heiße Funktionen zu finden. Prüfe die Datenbankabfragen, denn die Langsamkeit liegt häufiger dort als im JavaScript.

Sicherheit und Zuverlässigkeit

20. Was sind häufige Sicherheitsprobleme in Node.js?

Injection (SQL, NoSQL, Command), Cross-Site-Scripting, schwache Authentifizierung, verwundbare Abhängigkeiten, Secrets im Code, fehlendes Rate Limiting und unsichere Deserialisierung. Begegne dem mit Eingabevalidierung, parametrisierten Queries, helmet, Dependency-Audits (npm audit) und dem Prinzip der minimalen Rechte.

21. Wie fährst du eine Anwendung sauber herunter?

Bei SIGTERM hörst du auf, neue Verbindungen anzunehmen, lässt laufende Requests zu Ende laufen, schließt Datenbankverbindungen und beendest dann den Prozess, mit einem Timeout als Fallback.

process.on('SIGTERM', () => {
  server.close(() => process.exit(0));
});

22. Wie testest du Node.js-Code?

Unit-Tests mit einem Runner wie dem eingebauten node:test, Jest oder Vitest, wobei externe Aufrufe gemockt werden. Integrationstests gegen eine Testdatenbank und Tests auf HTTP-Ebene mit einem Tool wie Supertest. Halte die Tests schnell und unabhängig.

Design und Szenario

23. Deine API ist unter Last langsam. Wie gehst du bei der Untersuchung vor?

Prüfe die Metriken für Latenz und CPU. Wenn die CPU auf einem Kern hoch ist, suche nach blockierendem Code oder aufwendiger JSON-Verarbeitung. Wenn die CPU niedrig und die Latenz hoch ist, schau auf das Warten auf die Datenbank oder andere Services. Füge dann Caching, Indizes, Connection Pooling oder Batching hinzu und teste erneut unter Last.

24. Wie würdest du einen Datei-Upload-Endpunkt für große Dateien bauen?

Streame den Upload direkt in den Speicher, etwa in Object Storage mit einer Pre-Signed URL, anstatt ihn im Arbeitsspeicher zu puffern. Setze Größenlimits, validiere den Typ, scanne bei Bedarf und verarbeite die Datei anschließend in einem Hintergrundjob.

Wie du dich vorbereitest

Schreibe eine kleine API mit Authentifizierung, einer Datenbank und einer Upload-Route, profiliere sie dann mit einem Lasttool und behebe ein Problem. Übe, die Event Loop zu zeichnen und die Ausgabe eines kleinen Skripts wie dem oben zu erklären. Bereite eine echte Geschichte über das Debuggen eines Performance- oder Zuverlässigkeitsproblems vor. Für Coding-Runden sieh dir unseren Leitfaden zum Coding-Interview-Assistenten an, und für Design den System-Design-Leitfaden.

Sprich deine Antworten laut aus und lies das Transkript daraufhin durch, wo du einen Begriff verwendet hast, ohne ihn zu erklären. Befolge die Regeln des Arbeitgebers zu KI-Tools in jedem Live-Interview.

Üben Sie Node.js-Interview-Antworten mit YesToTheOffer

Führen Sie ein Mock-Technikinterview durch, erklären Sie den Event Loop laut und überprüfen Sie anschließend Ihr Transkript. 30 kostenlose Minuten, kein Abonnement.

iOS & Android — Demnächst
Preise ansehen