Skip to content

Kapitel 15: Interviewfragen

🎯 Lernziele

In diesem Kapitel lernen Sie:

  • ✅ Grundlegende Konzepte (Node.js Definition, Vorteile)
  • ✅ Kernmechanismen (Event Loop, Non-blocking I/O)
  • ✅ Praxisszenarien (Server erstellen, Schnittstellen)
  • ✅ Häufige Fehlerquellen
  • ✅ Framework-bezogene Fragen (Express)
  • ✅ Interviewtechniken

15.1 Grundlegende Konzeptfragen

❓ Frage 1: Was ist Node.js?

Antwort:

Node.js ist eine JavaScript-Laufzeitumgebung, die auf der Chrome V8 Engine basiert. Sie ermöglicht die Ausführung von JavaScript außerhalb des Browsers (auf der Serverseite).

Wichtigste Punkte:

  • ✅ Basierend auf Chrome V8 Engine
  • ✅ Serverseitige Ausführung von JavaScript
  • ✅ Event-gesteuert und nicht-blockierend

❓ Frage 2: Nennen Sie die Hauptvorteile von Node.js.

Antwort:

  1. Non-blocking I/O - Hochleistungsfähig bei I/O-intensiven Anwendungen
  2. Event-driven - Effiziente Ressourcennutzung
  3. Plattformübergreifend - Windows, macOS, Linux
  4. Großes Ökosystem - Über 2 Millionen Pakete auf npm
  5. Full-Stack JavaScript - Frontend und Backend mit derselben Sprache

❓ Frage 3: Was ist der Unterschied zwischen Node.js und Browser-JavaScript?

AspektBrowserNode.js
Globale Objektwindowglobal
ZugriffsrechteEingeschränkt (Sandbox)Vollzugriff (Dateisystem, Netzwerk)
ModuleES Modules (import/export)CommonJS (require/module.exports)
DOMVerfügbarNicht verfügbar
DateisystemNicht zugänglichVollzugriff (fs-Modul)

15.2 Kernmechanismusfragen

❓ Frage 4: Was ist der Event Loop?

Antwort:

Der Event Loop ist der Mechanismus, der es Node.js ermöglicht, nicht-blockierende asynchrone Operationen durchzuführen. Er verwaltet die Ausführung von Callbacks, Promises und anderen asynchronen Aufgaben.

Visualisierung:

Event Loop:
┌─────────────────────────────────┐
│  Timers (setTimeout, setInterval)  │
├─────────────────────────────────┤
│  Pending Callbacks                 │
├─────────────────────────────────┤
│  Idle, Prepare                      │
├─────────────────────────────────┤
│  Poll (I/O Events)                │
├─────────────────────────────────┤
│  Check (setImmediate)             │
├─────────────────────────────────┤
│  Close Callbacks                   │
└─────────────────────────────────┘

❓ Frage 5: Was ist Non-blocking I/O?

Antwort:

Non-blocking I/O bedeutet, dass asynchrone Operationen (wie Datei lesen oder Datenbankabfragen) nicht den Event Loop blockieren. Node.js kann andere Aufgaben ausführen, während es auf das Ergebnis der Operation wartet.

Code-Beispiel:

javascript
// ❌ Blockierend (Schlecht!)
const daten = fs.readFileSync('datei.txt');  // Blockiert!
console.log('Dies wird erst NACH dem Lesen ausgeführt');

// ✅ Nicht-blockierend (Gut!)
fs.readFile('datei.txt', (err, daten) => {
  console.log('Daten:', daten);
});
console.log('Dies wird SOFORT ausgeführt!');  // Blockiert nicht!

❓ Frage 6: Erklären Sie das Modulsystem von Node.js.

Antwort: Node.js verwendet zwei Modulsysteme:

1. CommonJS (Standard):

javascript
// Modul exportieren
module.exports = function gruesse() { ... };

// Modul importieren
const gruesse = require('./gruesse');

2. ES Modules (Modern):

javascript
// package.json: "type": "module"
export function gruesse() { ... }

import { gruesse } from './gruesse.js';

15.3 Praxisszenarienfragen

❓ Frage 7: Wie erstellen Sie einen einfachen HTTP-Server?

Antwort:

javascript
const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
  res.end('Hallo von Node.js Server!');
});

server.listen(3000, () => {
  console.log('🚀 Server läuft auf http://localhost:3000');
});

❓ Frage 8: Wie erstellen Sie eine GET-Schnittstelle?

Antwort (mit Express):

javascript
const express = require('express');
const app = express();
const port = 3000;

// GET-Schnittstelle
app.get('/api/users', (req, res) => {
  const users = [
    { id: 1, name: 'Max' },
    { id: 2, name: 'Anna' }
  ];
  
  res.json({ success: true, data: users });
});

app.listen(port, () => {
  console.log(`🚀 Server läuft auf http://localhost:${port}`);
});

❓ Frage 9: Wie lesen Sie Dateiinhalte?

Antwort:

javascript
const fs = require('fs').promises;

// Asynchrones Lesen (Empfohlen!)
async function dateiLesen() {
  try {
    const inhalt = await fs.readFile('datei.txt', 'utf8');
    console.log('Inhalt:', inhalt);
  } catch (err) {
    console.error('Fehler:', err.message);
  }
}

dateiLesen();

15.4 Häufige Fehlerquellen

❓ Frage 10: Was ist "Callback Hell" und wie vermeidet man es?

Antwort:

Callback Hell bezeichnet das Phänomen, wenn zu viele verschachtelte Callbacks den Code unlesbar machen.

Beispiel (❌ Schlecht):

javascript
fs.readFile('datei1.txt', (err1, daten1) => {
  if (err1) throw err1;
  fs.readFile('datei2.txt', (err2, daten2) => {
    if (err2) throw err2;
    fs.readFile('datei3.txt', (err3, daten3) => {
      if (err3) throw err3;
      console.log(daten1, daten2, daten3);
      // Noch mehr Callbacks... 😱
    });
  });
});

Lösung (✅ Gut - mit async/await):

javascript
async function alleDateienLesen() {
  try {
    const daten1 = await fs.promises.readFile('datei1.txt', 'utf8');
    const daten2 = await fs.promises.readFile('datei2.txt', 'utf8');
    const daten3 = await fs.promises.readFile('datei3.txt', 'utf8');
    
    console.log(daten1, daten2, daten3);
  } catch (err) {
    console.error('Fehler:', err.message);
  }
}

alleDateienLesen();

❓ Frage 11: Warum funktioniert require() nicht für ES Modules?

Antwort:

  • require() ist Teil von CommonJS
  • ES Modules verwenden import/export
  • Sie müssen "type": "module" in package.json hinzufügen, um ES Modules zu verwenden

Lösung:

json
// package.json
{
  "name": "mein-projekt",
  "version": "1.0.0",
  "type": "module"
}

❓ Frage 12: Was ist das CORS-Problem und wie löst man es?

Antwort:

CORS (Cross-Origin Resource Sharing) verhindert, dass eine Webanwendung Ressourcen von einer anderen Domain (oder Port) abruft.

Lösung (mit Express):

javascript
const express = require('express');
const app = express();

// CORS-Header setzen
app.use((req, res, next) => {
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
  next();
});

app.get('/api/daten', (req, res) => {
  res.json({ nachricht: 'CORS funktioniert!' });
});

app.listen(3000);

15.5 Framework-bezogene Fragen

❓ Frage 13: Was ist Express und was sind seine Hauptvorteile?

Antwort:

Express.js ist ein minimalistisches Web-Framework für Node.js. Es vereinfacht die Erstellung von Webservern und APIs drastisch.

Hauptvorteile:

  1. Einfach - Weniger Code für gleiche Funktionalität
  2. Flexibel - Unzählige Middleware verfügbar
  3. Performant - Minimaler Overhead
  4. Beliebt - Über 20 Millionen Downloads/Woche

❓ Frage 14: Was ist Middleware in Express?

Antwort:

Middleware sind Funktionen, die zwischen Request und Response ausgeführt werden. Sie können den Request verarbeiten, die Antwort modifizieren oder die Ausführung beenden.

Beispiel:

javascript
const express = require('express');
const app = express();

// Eigene Middleware
function loggingMiddleware(req, res, next) {
  console.log(`${new Date().toISOString()} - ${req.method} ${req.url}`);
  next();  // Wichtig: next() aufrufen!
}

// Middleware anwenden
app.use(loggingMiddleware);

app.get('/', (req, res) => {
  res.send('Startseite');
});

app.listen(3000);

❓ Frage 15: Was sind die wichtigsten Express-Methoden?

Antwort:

javascript
const express = require('express');
const app = express();

// Routing-Methoden
app.get('/users', (req, res) => { ... });    // GET
app.post('/users', (req, res) => { ... });   // POST
app.put('/users/:id', (req, res) => { ... });  // PUT
app.delete('/users/:id', (req, res) => { ... }); // DELETE

// Middleware-Methoden
app.use(express.json());          // JSON-Body parsen
app.use(express.static('public')); // Statische Dateien

app.listen(3000);

15.6 Interviewtechniken

💡 Tipp 1: Kernkonzepte schnell memorieren

Merkblatt:

Node.js Kernkonzepte:
├── Event Loop (Event-gesteuert)
├── Non-blocking I/O (Nicht-blockierend)
├── Modulsystem (CommonJS / ES Modules)
└── CORS (Cross-Origin Resource Sharing)

💡 Tipp 2: Code-Beispiele vorbereiten

Wichtige Beispiele:

  1. HTTP-Server erstellen (http.createServer())
  2. Express-Routing (app.get(), app.post())
  3. Dateioperationen (fs.readFile())
  4. Asynchrone Programmierung (async/await)

💡 Tipp 3: Häufige Fehler kennen

Wichtig:

  • await in async-Funktionen verwenden
  • try/catch für Fehlerbehandlung
  • next() in Middleware nicht vergessen
  • ✅ CORS-Header für Cross-Origin-Anfragen setzen

💡 Tipp 4: Fragen strukturiert beantworten

STAR-Methode:

  1. Situation (Situation) - Kontext beschreiben
  2. Task (Aufgabe) - Was war zu tun?
  3. Action (Aktion) - Was haben Sie getan?
  4. Result (Ergebnis) - Was war das Ergebnis?

📝 Zusammenfassung

In diesem Kapitel haben Sie gelernt:

  • ✅ Grundlegende Konzeptfragen (Node.js Definition, Vorteile)
  • ✅ Kernmechanismen (Event Loop, Non-blocking I/O)
  • ✅ Praxisszenarien (Server erstellen, Schnittstellen)
  • ✅ Häufige Fehlerquellen (Callback Hell, CORS)
  • ✅ Framework-bezogene Fragen (Express Middleware)
  • ✅ Interviewtechniken (Merkblatt, Code-Beispiele)

📚 Weiterführende Ressourcen


🎉 Kapitel 15 abgeschlossen! Weiter zu Kapitel 16: Erweiterte Lernswege

Frei für alle Anfänger