BACKEND30 preguntas • ~12 min
Quiz de Fundamentos de Node.js
Pon a prueba tus conocimientos sobre event loop, asincronía y arquitectura de Node.js.
Quiz de Fundamentos de Node.js
Pon a prueba tus conocimientos sobre event loop, asincronía y arquitectura de Node.js.
1. Node.js se describe como 'single-threaded'. ¿Qué significa esto principalmente en el contexto de la ejecución de JavaScript?
- Solo puede procesar una solicitud HTTP a la vez
- El código JavaScript se ejecuta en una única pila de llamadas en un solo hilo
- Utiliza solo un núcleo de CPU para todas las operaciones
- No puede ejecutar múltiples procesos de Node.js en la misma máquina
2. ¿Qué hace `require('fs')` en un módulo de Node.js?
- Descarga el paquete 'fs' desde el registro de npm en tiempo de ejecución
- Carga y almacena en caché el módulo nativo de sistema de archivos, devolviendo su objeto exports
- Crea una nueva instancia del sistema de archivos únicamente para el módulo actual
- Registra un escuchador de eventos del sistema de archivos en el objeto process
3. ¿Qué campo en `package.json` especifica el archivo de punto de entrada que Node.js carga cuando tu paquete es importado con `require()`?
- start
- index
- main
- entry
4. ¿Cuál es la principal diferencia entre `fs.readFileSync()` y `fs.readFile()` en Node.js?
- `readFileSync` lee archivos más grandes; `readFile` está limitado a 1 MB
- `readFileSync` bloquea el event loop hasta leer el archivo; `readFile` no es bloqueante y utiliza un callback
- `readFile` está obsoleto; `readFileSync` es la API moderna
- Son idénticos: el sufijo 'Sync' es puramente cosmético
5. En Node.js, ¿qué es un callback?
- Un tipo de error nativo para fallos asíncronos
- Una función pasada como argumento a otra función, invocada cuando se completa una operación asíncrona
- Un contenedor síncrono alrededor de una Promise
- Un método especial en la clase EventEmitter
6. ¿Cómo se lee una variable de entorno llamada `PORT` en un proceso de Node.js?
- `env.get('PORT')`
- `process.env.PORT`
- `os.env('PORT')`
- `global.PORT`
7. ¿Qué módulo nativo de Node.js usarías para unir dos segmentos de ruta de manera segura y multiplataforma?
- `fs`
- `url`
- `path`
- `os`
8. ¿Qué ejecuta el comando `npm run build`?
- Descarga e instala todos los paquetes listados en `dependencies`
- Ejecuta el script `build` definido bajo la clave `scripts` en `package.json`
- Compila todos los archivos `.ts` a `.js` usando el compilador nativo de Node
- Crea un paquete de producción y lo sube a npm
9. En una traza de pila (stack trace) de Node.js, ¿qué indica la línea `at Object.<anonymous> (app.js:42:15)`?
- Se exportó un objeto anónimo desde `app.js`
- El error se originó en la línea 42, columna 15 de `app.js`
- El archivo `app.js` tiene 42 exportaciones
- El uso de memoria del proceso en el momento del error
10. ¿Cuál de los siguientes elementos está disponible en el entorno JavaScript de un navegador, pero NO en Node.js por defecto?
- `setTimeout`
- `Promise`
- `window`
- `Array.prototype.map`
11. ¿Cuál es el orden correcto de ejecución para el siguiente código? ```js setTimeout(() => console.log('A'), 0); setImmediate(() => console.log('B')); process.nextTick(() => console.log('C')); console.log('D'); ```
- D → A → B → C
- D → C → A → B
- D → C → B → A
- A → B → C → D
12. ¿En qué fase del event loop de Node.js se ejecuta `setImmediate()`?
- Fase de timers
- Fase de poll
- Fase de check
- Fase de close callbacks
13. ¿Cuál de las siguientes opciones tiene la mayor prioridad de ejecución en la planificación asíncrona de Node.js?
- `setTimeout(fn, 0)`
- `setImmediate(fn)`
- `process.nextTick(fn)`
- Callbacks de `.then()` en una `Promise` resuelta
14. ¿Qué tipo de stream de Node.js usarías para leer y escribir datos Y transformar los datos en tránsito (por ejemplo, un compresor gzip)?
- Stream Readable
- Stream Writable
- Stream Duplex
- Stream Transform
15. ¿Cuál es el propósito principal del módulo `cluster` en Node.js?
- Distribuir paquetes de npm entre múltiples máquinas
- Crear múltiples procesos worker que comparten el mismo puerto de servidor, aprovechando múltiples núcleos de CPU
- Lanzar procesos secundarios que ejecutan scripts independientes sin estado compartido
- Crear grupos de hilos para tareas síncronas con uso intensivo de CPU
16. ¿En qué se diferencia `worker_threads` de `child_process` en Node.js?
- `worker_threads` comparten memoria mediante `SharedArrayBuffer`; `child_process` inicia procesos de sistema operativo totalmente aislados
- `child_process` es más rápido para tareas de CPU porque usa hilos nativos
- `worker_threads` no puede comunicarse con el hilo principal
- Son intercambiables: los nombres son simplemente alias
17. ¿Para qué se utiliza el 'New Space' (Generación Joven) en la distribución de la heap de V8?
- Almacenar código máquina compilado para funciones optimizadas por JIT
- Objetos de vida corta que se espera sean recolectados rápidamente
- Objetos grandes de más de 1 MB que no caben en páginas normales
- La pila de llamadas y los marcos de variables locales
18. ¿Qué sucede cuando un módulo de Node.js se importa con `require()` por segunda vez?
- El archivo del módulo se vuelve a leer del disco y se reejecuta
- Se lanza un error para prevenir inicializaciones duplicadas
- El objeto `exports` almacenado en caché desde la primera carga se devuelve de inmediato
- Se crea una nueva instancia aislada del módulo
19. ¿Qué método de `EventEmitter` registra un escuchador que se ejecuta solo una vez y se elimina automáticamente después?
- `emitter.on(event, listener)`
- `emitter.once(event, listener)`
- `emitter.addOnceListener(event, listener)`
- `emitter.emit(event, { once: true })`
20. ¿Cuál es la función de libuv en Node.js?
- Es el motor de JavaScript que compila y ejecuta código JS
- Proporciona el event loop de E/S asíncrona multiplataforma, el grupo de hilos y la capa de abstracción del sistema operativo
- Gestiona las descargas y el almacenamiento en caché de paquetes npm
- Implementa el protocolo HTTP/2 para el módulo `http2` de Node
21. ¿Qué algoritmo de recolección de basura (garbage collection) utiliza V8 para la Generación Joven (New Space)?
- Mark-Sweep
- Mark-Compact
- Scavenge (copia semi-space de Cheney)
- Conteo de referencias
22. ¿Por qué un ciclo completo de GC Mark-Compact puede provocar picos de latencia notables en un servidor Node.js?
- Duplica temporalmente el uso de memoria al copiar toda la heap
- Ejecuta pausas Stop-The-World mientras compacta el Old Space, bloqueando el event loop
- Recompila todas las funciones optimizadas por JIT para liberar memoria de la caché de código
- Vacía el grupo de hilos de libuv y reinicia todas las operaciones de E/S pendientes
23. Ejecutas `node --prof app.js` y luego `node --prof-process isolate-*.log`. ¿Qué tipo de salida genera esto?
- Una instantánea de la heap en formato JSON compatible con Chrome DevTools
- Un perfil estadístico de CPU legible que muestra las funciones más activas y sus porcentajes de llamada
- Una cronología de todas las pausas de GC con sus duraciones en milisegundos
- Un diagrama de cascada de red de todas las solicitudes HTTP realizadas durante la ejecución
24. ¿Cuál de los siguientes patrones es la causa más común de fugas de memoria en servidores Node.js de larga duración?
- Usar `const` en lugar de `let` para variables a nivel de módulo
- Acumular listeners en un EventEmitter sin llamar nunca a `removeListener`
- Llamar a `JSON.parse` repetidamente sobre strings grandes
- Usar `async/await` en lugar de callbacks directos
25. ¿Qué controla la opción de Node.js `--max-old-space-size=4096`?
- El número máximo de archivos abiertos simultáneamente
- El tamaño del grupo de hilos de libuv en megabytes
- El límite superior de la heap Old Space de V8 en megabytes antes de lanzar un error de falta de memoria
- El tamaño máximo permitido para un payload JSON procesado con `JSON.parse`
26. Un bucle síncrono con uso intensivo de CPU que tarda 2 segundos se incluye accidentalmente en un manejador de solicitudes HTTP. ¿Cuál es la descripción más precisa del impacto?
- Solo se retrasa esa solicitud específica; las demás continúan con normalidad
- La fase de poll del event loop queda bloqueada durante 2 segundos, paralizando TODAS las demás solicitudes entrantes y temporizadores
- Node delega automáticamente el bucle al grupo de hilos de libuv para evitar el bloqueo
- El proceso maestro del cluster detecta el bloqueo y reinicia el worker
27. ¿Qué es la contrapresión (back-pressure) en streams de Node.js y qué rol cumple `highWaterMark`?
- La contrapresión es un límite de tasa HTTP; `highWaterMark` fija el techo de solicitudes por segundo
- La contrapresión es la señal de que el buffer de un stream writable está lleno; `highWaterMark` define el umbral de tamaño del buffer en el que `write()` devuelve `false`
- La contrapresión es una pausa de GC de V8; `highWaterMark` activa un GC anticipado cuando la heap supera esa proporción
- La contrapresión no se usa en streams de Node.js; solo aplica a sockets TCP
28. ¿Cuál es la principal ventaja de N-API (ahora Node-API) sobre las interfaces previas de complementos nativos (addons)?
- Permite escribir addons nativos en Python en lugar de C/C++
- Proporciona una interfaz estable a nivel de ABI, por lo que los addons nativos no necesitan recompilarse con cada nueva versión de Node.js
- Otorga a los addons nativos acceso directo al recolector de basura de V8 para gestionar su propia memoria
- Paraleliza automáticamente la ejecución de addons nativos en todos los núcleos de CPU
29. ¿Cómo mejoran el rendimiento de los objetos JavaScript las clases ocultas de V8 ('hidden classes', también llamadas 'shapes' o 'maps')?
- Comprimen las claves de los objetos usando un diccionario para reducir memoria por objeto
- Permiten que V8 genere código máquina optimizado rastreando la distribución de propiedades de los objetos y reutilizándola en instancias con la misma estructura
- Ocultan campos de clase privados del recolector de basura para evitar su recolección prematura
- Preasignan una página fija de heap por cada función constructora
30. Al usar PM2 para lograr reinicios sin tiempo de inactividad (`pm2 reload`), ¿qué mecanismo utiliza PM2?
- Pausa el balanceador de carga, reinicia todos los workers simultáneamente y luego reanuda el tráfico
- Crea un nuevo worker, espera que emita señal de disponibilidad, le dirige el tráfico y luego finaliza de forma controlada el worker antiguo: uno por uno
- Aplica parches en el proceso en ejecución en memoria sin lanzar uno nuevo
- Se apoya en la función de live-patching del kernel del SO para cambiar páginas de código atómicamente
Sobre este quiz
Este quiz interactivo está diseñado para ofrecer una experiencia dinámica, rápida y entretenida. Las opciones se ordenan de manera aleatoria y tu resultado se calcula al instante al finalizar. ¡Puedes repetirlo cuantas veces quieras y compartirlo con tus amigos!
Puntos clave:
- ✓100% gratis y sin registro
- ✓Preguntas dinámicas con retroalimentación instantánea
- ✓Descarga tu card personalizado y comparte en redes
Preguntas frecuentes
Al responder cada pregunta, el sistema procesa tus elecciones para determinar tu resultado de forma inmediata y precisa.