Préparation d'entretien 100% Gratuit angularforall.com

Entretien Node.js Débutant — Modules, NPM et Callbacks

Node-Js Debutant Quiz-Nodejs-Debutant Nodejs-Modules Commonjs Esm Npm-Scripts Callbacks Eventemitter Questions-Entretien-Nodejs Qcm-Nodejs Backend-Javascript Nodejs-Runtime V8-Engine
Débutant 🔀 Mixte 20 questions ⏱ 15 min
📝

Entretien Node.js Débutant — Modules, NPM et Callbacks

20 questions sur les bases de Node.js : modules CommonJS/ESM, NPM, scripts, callbacks, événements (EventEmitter) et le runtime JavaScript côté serveur. Idéal pour un premier entretien backend.

20 questions ⏱ ~15 min Niveau Débutant

Partager

Banque de révision : les 25 questions corrigées

Voici l'intégralité des 25 questions de « Entretien Node.js Débutant — Modules, NPM et Callbacks », chacune avec sa bonne réponse et son explication. Le quiz interactif ci-dessus en tire une sélection aléatoire à chaque tentative — utilisez cette liste complète pour réviser.

  • Un environnement d'exécution JavaScript côté serveur basé sur le moteur V8 de Chrome (bonne réponse)
  • Un framework front-end comme React
  • Une base de données NoSQL
  • Un langage de programmation
Explication : Node.js est un environnement d'exécution JavaScript construit sur le moteur JavaScript V8 de Chrome. Il permet d'exécuter JavaScript côté serveur, en dehors du navigateur.
Node.js a été créé par Ryan Dahl en 2009. Il utilise un modèle asynchrone et piloté par les événements.

  • node --version
  • node -v
  • node version
  • Les deux réponses A et B sont correctes (bonne réponse)
Explication : Les deux commandes fonctionnent : node --version et node -v affichent la version de Node.js installée sur votre système.
Utilisez node -v pour la forme courte, ou npm -v pour vérifier la version de npm (Node Package Manager).

  • node app.js (bonne réponse)
  • npm app.js
  • node run app.js
  • javascript app.js
Explication : La commande node app.js exécute le fichier JavaScript avec Node.js. Node.js compile et exécute le code contenu dans le fichier.
Assurez-vous d'être dans le bon répertoire contenant le fichier avant d'exécuter la commande.

  • Le gestionnaire de paquets officiel pour Node.js (bonne réponse)
  • Un framework Node.js
  • Un moteur de base de données
  • Un langage de template
Explication : npm est le gestionnaire de paquets par défaut pour Node.js. Il permet d'installer, gérer et partager des bibliothèques et des outils JavaScript. C'est le plus grand registre de paquets au monde.
npm est automatiquement installé avec Node.js. Utilisez npm init pour créer un nouveau projet.

  • npm init (bonne réponse)
  • npm create
  • node init
  • npm start
Explication : La commande npm init crée un fichier package.json interactif. Pour une création rapide avec les valeurs par défaut, utilisez npm init -y.
Le fichier package.json est essentiel : il contient les métadonnées du projet, les dépendances, et les scripts.

  • npm install express --save (bonne réponse)
  • npm install express
  • npm add express
  • npm get express
Explication : npm install express --save installe express et l'ajoute à la section dependencies du package.json. Depuis npm 5, npm install express fait la même chose par défaut, mais --save est explicite.
Utilisez --save-dev (ou -D) pour les dépendances de développement (testing, linting, etc.).

  • Le dossier contenant toutes les dépendances installées du projet (bonne réponse)
  • Le fichier de configuration principal de Node.js
  • Le fichier des modules natifs
  • Le dossier des logs
Explication : Le dossier node_modules contient toutes les bibliothèques et dépendances installées via npm. Il est généralement exclu du contrôle de version (dans .gitignore) car il peut être régénéré avec npm install.
Ne modifiez jamais manuellement les fichiers dans node_modules. Utilisez npm pour gérer les dépendances.

  • const fs = require("fs");
  • import fs from "fs"; (avec ES modules)
  • include fs from "fs";
  • Les deux réponses A et B sont correctes selon la configuration des modules (bonne réponse)
Explication : Node.js supporte deux systèmes de modules : CommonJS (require()) et ES modules (import). Par défaut, les anciens projets utilisent require(), les nouveaux peuvent utiliser import avec "type": "module" dans package.json.
Le module fs (file system) permet de lire, écrire et manipuler des fichiers.

  • Un module pour créer des serveurs HTTP et faire des requêtes HTTP (bonne réponse)
  • Un module pour les requêtes HTTPS uniquement
  • Un framework web comme Express
  • Un module pour la compression HTTP
Explication : Le module http permet de créer des serveurs HTTP et d'effectuer des requêtes HTTP. C'est la base sur laquelle des frameworks comme Express sont construits.
Exemple minimal : http.createServer((req, res) => res.end("Hello")).listen(3000);

  • Une fonction passée en argument à une autre fonction, exécutée après une opération asynchrone (bonne réponse)
  • Une fonction qui retourne une promesse
  • Une fonction synchrone
  • Une méthode de débogage
Explication : Les callbacks sont des fonctions passées en paramètre qui sont exécutées plus tard, généralement après qu'une opération asynchrone soit terminée (lecture de fichier, requête réseau, etc.).
Le pattern classique : fs.readFile("fichier.txt", (err, data) => { if (err) throw err; console.log(data); });

  • Les opérations d'entrée/sortie (fichiers, réseau) n'empêchent pas l'exécution du reste du code (bonne réponse)
  • Node.js exécute tout en parallèle sur plusieurs threads
  • Node.js met en pause l'exécution pendant les opérations lentes
  • Node.js est synchrone par défaut
Explication : Node.js utilise une boucle d'événements (event loop). Quand une opération d'E/S est lancée, Node.js continue d'exécuter d'autres code et revient quand l'opération est terminée. Cela évite de bloquer le thread principal.
C'est ce qui rend Node.js très performant pour les applications I/O intensives (API, chat, streaming).

  • fs.readFile("fichier.txt", "utf8", (err, data) => { ... }) (bonne réponse)
  • fs.readFileSync("fichier.txt", "utf8")
  • fs.read("fichier.txt")
  • fs.readFileAsync("fichier.txt")
Explication : fs.readFile() est la version asynchrone. Elle prend un callback qui sera appelé avec les données (ou une erreur). La version synchrone est fs.readFileSync().
Préférez les versions asynchrones dans les applications serveur pour ne pas bloquer l'event loop.

  • Un tableau contenant les arguments de la ligne de commande passés au script (bonne réponse)
  • Les variables d'environnement du processus
  • La liste des modules chargés
  • Les paramètres de configuration Node.js
Explication : process.argv est un tableau contenant les arguments de ligne de commande. process.argv[0] est le chemin de Node.js, process.argv[1] est le chemin du script, et les arguments suivants sont dans process.argv[2], etc.
Exemple : node monScript.js arg1 arg2process.argv[2] === "arg1"

  • const server = http.createServer((req, res) => { res.end("Hello"); }); server.listen(3000); (bonne réponse)
  • const server = new http.Server(); server.start(3000);
  • http.serve(3000, () => console.log("running"));
  • node --server 3000
Explication : La méthode http.createServer() prend un callback avec les objets request et response. server.listen(port) démarre le serveur sur le port spécifié.
Pour des applications réelles, utilisez Express qui simplifie grandement le routage et la gestion des requêtes.

  • L'objet global, similaire à window dans le navigateur, contenant les variables globales (bonne réponse)
  • Une variable de configuration
  • Un module pour les variables d'environnement
  • Une fonction utilitaire
Explication : global est l'objet global dans Node.js. Les variables déclarées sans var, let ou const deviennent des propriétés de global, mais c'est une mauvaise pratique.
Contrairement aux navigateurs, les variables déclarées avec var dans un module ne sont pas ajoutées à global. Chaque module a sa propre portée.

  • process.env.NOM_VARIABLE (bonne réponse)
  • environment.NOM_VARIABLE
  • global.env.NOM_VARIABLE
  • process.argv.NOM_VARIABLE
Explication : Les variables d'environnement sont accessibles via l'objet process.env. Exemple : const port = process.env.PORT || 3000;
Utilisez le package dotenv pour charger des variables d'environnement depuis un fichier .env.

  • npm install met à jour les dépendances selon package.json ; npm ci utilise exactement package-lock.json pour une installation reproductible et plus rapide (bonne réponse)
  • npm ci installe les dépendances globales
  • npm install est plus rapide que npm ci
  • Ils font la même chose
Explication : npm ci (Continuous Integration) est conçu pour les environnements CI/CD. Il efface node_modules, utilise le package-lock.json exactement, et échoue si les versions ne correspondent pas. C'est plus rapide et reproductible.
Utilisez npm ci dans vos pipelines CI/CD et npm install en développement.

  • Un module utilitaire pour manipuler les chemins de fichiers et dossiers (bonne réponse)
  • Un module pour les requêtes réseau
  • Un module pour les chemins d'URL
  • Un module de logging
Explication : Le module path fournit des méthodes pour travailler avec les chemins de fichiers : path.join(), path.resolve(), path.basename(), path.dirname(), path.extname(), etc.
Utilisez path.join(__dirname, "dossier", "fichier.txt") pour construire des chemins cross-platform.

  • Contient le chemin absolu du répertoire contenant le fichier en cours d'exécution (bonne réponse)
  • Contient le chemin du fichier en cours d'exécution
  • Contient le répertoire de travail courant
  • Contient le répertoire d'installation de Node.js
Explication : __dirname est une variable globale qui représente le chemin absolu du répertoire contenant le module actuel. Très utile pour construire des chemins relatifs aux fichiers.
__filename donne le chemin complet du fichier, y compris son nom.

  • process.exit(code) (bonne réponse)
  • exit(code)
  • process.kill(code)
  • node.exit(code)
Explication : process.exit(code) termine le processus Node.js avec le code de sortie spécifié. 0 signifie succès, tout autre code (1, 2, etc.) indique une erreur.
Laissez le processus se terminer naturellement quand c'est possible. Utilisez process.exit() seulement pour les erreurs fatales.

  • Une situation où les callbacks imbriqués rendent le code difficile à lire et maintenir (bonne réponse)
  • Une erreur fatale de Node.js
  • Un type particulier de callback
  • Un outil de débogage
Explication : Le "callback hell" se produit quand de nombreuses opérations asynchrones sont imbriquées les unes dans les autres, créant une structure pyramidale difficile à lire, déboguer et maintenir.
Solutions : utiliser des Promises (then()/catch()), async/await, ou des bibliothèques comme async.js.

  • Utiliser fs.promises.readFile() qui retourne une Promise
  • Wrapper fs.readFile() avec util.promisify()
  • Les deux méthodes sont valides (bonne réponse)
  • async/await ne fonctionne pas avec fs
Explication : Depuis Node.js 10, fs.promises fournit des versions Promise de toutes les méthodes fs. Sinon, util.promisify(fs.readFile) convertit une fonction callback en Promise.
Exemple : const data = await fs.promises.readFile("file.txt", "utf8");

  • Un mécanisme qui permet à Node.js d'effectuer des opérations non-bloquantes malgré son architecture mono-thread (bonne réponse)
  • Une boucle infinie qui bloque le programme
  • Une fonction qui itère sur des tableaux
  • Un système de gestion d'erreurs
Explication : L'Event Loop est le cœur de Node.js. Il permet de gérer les opérations asynchrones sans avoir besoin de threads multiples. Il surveille la file d'attente des événements et exécute les callbacks quand ils sont prêts.
Les opérations lourdes (calcul CPU intensif) peuvent bloquer l'event loop. Utilisez des Worker Threads pour ces cas.

  • Vérifier le premier paramètre du callback (error-first callback) : if (err) { handleError(err); } (bonne réponse)
  • Utiliser try/catch autour de l'appel asynchrone
  • Les erreurs sont automatiquement gérées
  • Node.js ignore les erreurs silencieusement
Explication : Le pattern "error-first callback" est standard en Node.js. Le premier argument du callback est réservé à l'erreur (ou null s'il n'y a pas d'erreur). Exemple : fs.readFile(file, (err, data) => { if (err) { console.error(err); return; } });
Avec les Promises et async/await, utilisez try/catch pour les erreurs asynchrones.

  • npm start exécute le script "start" défini dans package.json ; node app.js exécute directement le fichier (bonne réponse)
  • npm start ne peut pas exécuter de fichiers JavaScript
  • Ils font exactement la même chose
  • node app.js est plus rapide
Explication : npm start exécute la commande définie dans la section "scripts": { "start": "node app.js" } du package.json. Par défaut, npm start exécute node server.js. node app.js exécute directement le fichier.
Les scripts npm sont très utiles pour standardiser les commandes : npm run dev, npm test, etc.