Entrevistas Senior — TypeScript / Node.js / Microservicios
Guía de preparación para entrevistas técnicas de nivel Senior. Cada pregunta incluye una respuesta resumen (lo que dirías en 30–60 segundos) y una respuesta detallada con código TypeScript realista, trade-offs, errores comunes y qué espera oír el entrevistador. Los [CASO] son análisis de problemas de producción con escenario, diagnóstico paso a paso, herramientas, solución y prevención.
🎓 ¿Te faltan bases para responder esto? El curso TypeScript / Node senior enseña exactamente lo necesario, con laboratorios y autoevaluación. Ver también: índice completo · plan de estudio · glosario · inicio
| Archivo | Contenido | Preguntas |
|---|---|---|
| 01-typescript-avanzado.md | Sistema de tipos avanzado, tsconfig, monorepos, validación runtime | 16 |
| 02-node-y-microservicios.md | Event loop, NestJS, mensajería, patrones de resiliencia, observabilidad | 16 |
| 03-casos-y-problemas.md | Casos reales de producción (todos [CASO]) | 16 |
Total: 48 preguntas.
- ¿Qué son los conditional types y cómo funciona
infer? - Distributividad de conditional types: ¿por qué
Excludefunciona y cuándo hay que desactivarla? - Mapped types: key remapping con
asy modificadores+/- - Template literal types: rutas y eventos tipados
- Varianza: covarianza, contravarianza,
strictFunctionTypesy bivarianza de métodos - Type narrowing: type guards con
is, discriminated unions,assertsy exhaustividad connever - Branded types: tipado nominal sobre un sistema estructural
satisfiesvs anotación de tipo vsas: ¿cuándo usar cada uno?- Generics avanzados: constraints, defaults, inferencia parcial y sobre-genericidad
- Structural typing: excess property checks y compatibilidad accidental
unknownvsanyvsnever: fronteras de API y manejo de errores- Declaration merging y module augmentation: extender Express Request y tipos globales
- tsconfig estricto para servicios Node modernos: qué flags activar y por qué
- Monorepos TypeScript: project references, builds incrementales y Turborepo/Nx
- Decoradores: legacy (
experimentalDecorators) vs estándar TC39 — y por qué NestJS sigue en legacy - Validación runtime con Zod: los tipos se borran, las fronteras no se defienden solas
- Explica las fases del event loop de Node.js y qué se ejecuta en cada una
- [CASO] Un servicio deja de responder a health checks aunque el proceso sigue vivo: starvation de microtasks
- Worker threads vs cluster vs child_process: ¿cuándo usarías cada uno?
- Streams y backpressure: ¿cómo procesarías un archivo de 10 GB de pedidos sin tumbar el servicio?
- Inyección de dependencias en NestJS: providers, scopes y su coste
- Guards, interceptors, pipes y exception filters en NestJS: orden de ejecución y casos de uso
- REST vs gRPC entre microservicios con TypeScript: ¿cuándo eliges cada uno?
- Kafka vs RabbitMQ vs BullMQ: ¿cómo eliges la tecnología de mensajería?
- Patrón Saga: coreografía vs orquestación en un flujo de pedidos y pagos
- Patrón Outbox e idempotencia: ¿cómo consigues “exactly-once efectivo” entre base de datos y broker?
- [CASO] Al desplegar en Kubernetes se pierden peticiones y quedan jobs a medias: diseña el graceful shutdown
- Manejo de errores async en Node: unhandled rejections, captureRejections y por qué no “tragar” errores
- Observabilidad con OpenTelemetry en Node: trazas distribuidas, propagación de contexto y correlación
- Estrategia de testing en microservicios: unit, integración con Testcontainers y contract testing
- [CASO] La latencia p99 de tu API se dispara con ciertos payloads: ¿cómo detectas y evitas el bloqueo del event loop?
- Manejo de JSON grande en Node: streaming parsers, NDJSON y alternativas binarias
03 — Casos y Problemas Reales (todos [CASO])
Sección titulada «03 — Casos y Problemas Reales (todos [CASO])»- Memory leak: el heap crece hasta OOM
- Event loop bloqueado: p99 disparado por código CPU-bound
- OOM procesando archivos grandes: readFile vs streams
- Unhandled promise rejection tumbando pods en cascada
- Fuga de conexiones a Postgres: pool agotado
- Cola con lag creciente: consumidores que no dan abasto
- Race condition: doble descuento de stock en operaciones concurrentes
- Hot reload de configuración sin reiniciar el servicio
- Migración JS→TS incremental en un servicio grande
- Timeout en cascada entre servicios: A→B→C
- DNS y keep-alive con axios/undici en alta concurrencia
- Degradación por GC: pausas largas y sawtooth agresivo
- Pérdida de eventos: mensajes que “desaparecen”
- Duplicación de jobs/mensajes: el mismo evento procesado dos veces
- Hot path degradado: CPU throttling en Kubernetes distorsionando latencias
- Graceful shutdown roto: 502s en cada deploy
Herramientas de diagnóstico recurrentes en los casos: clinic.js (doctor/flame/heapprofiler), heap snapshots en Chrome DevTools (node --inspect), flamegraphs (0x), perf_hooks.monitorEventLoopDelay, process.memoryUsage(), --trace-gc, y métricas/trazas con OpenTelemetry y Prometheus.