Entrevistas Senior — TypeScript / Node.js / Microservicios
This content is not available in your language yet.
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.