Nest

Resolución activa de problemas

Prompts de Práctica

Inténtalo antes de revelar. Cada prompt de código, algoritmo y diseño de sistema se desarrolla por etapas — enfoque, luego solución — para que practiques recuperación, no reconocimiento. Marca lo que resolviste; revisita el resto.

Resueltos 0 / 26
Nivel
  1. CódigoMid

    Endpoint REST paginado con validación + auth

    NestJSvalidationguards

    Construye GET /users?page=1&limit=20 que esté protegido por JWT, valide los parámetros de query y devuelva un resultado paginado. Muestra el controlador, el query DTO y cómo se conectan el guard/pipe.

    próximo: nuevo
  2. CódigoSenior

    RolesGuard personalizado con Reflector

    NestJSauthRBAC

    Implementa un decorador @Roles('admin') y un RolesGuard que lea los roles requeridos de los metadatos de ruta y los compare con request.user.roles. Haz que los roles de nivel de método sobreescriban los de nivel de clase.

    próximo: nuevo
  3. CódigoSenior

    Reintentos con backoff exponencial + jitter

    Noderesilience

    Escribe retry(fn, { retries, baseMs }) que reintente una función asíncrona fallida con backoff exponencial y jitter, solo reintentando errores transitorios, y que abandone después de N intentos.

    próximo: nuevo
  4. CódigoMid

    Caché LRU en memoria (O(1))

    Nodedata structures

    Implementa una caché LRU con get y set de O(1) y una capacidad máxima que elimine la entrada menos recientemente usada.

    próximo: nuevo
  5. CódigoSenior

    Pool asíncrono con límite de concurrencia

    Nodeasync

    Procesa 10,000 elementos ejecutando un worker(item) asíncrono con como máximo N en vuelo a la vez (un Promise.all acotado). ¿Por qué no simplemente Promise.all(items.map(worker))?

    próximo: nuevo
  6. CódigoMid

    TransformInterceptor con envoltura de respuesta

    NestJSinterceptorsRxJS

    Escribe un interceptor que envuelva cada respuesta exitosa en { data, timestamp } sin que cada manejador se entere.

    próximo: nuevo
  7. CódigoSenior

    Stream de un archivo grande con backpressure

    Nodestreams

    Sirve un archivo de varios GB como descarga gzipped sin cargarlo en memoria, y asegúrate de manejar errores y recursos correctamente.

    próximo: nuevo
  8. CódigoSenior

    Rate limiter de token bucket con Redis

    NodeRedisrate limiting

    Implementa un limitador distribuido de token bucket (tasa de recarga R, capacidad C) que sea correcto en múltiples instancias de la aplicación. ¿Por qué debe ser atómico?

    próximo: nuevo
  9. CódigoSenior

    Corregir N+1 en GraphQL con DataLoader

    NestJSGraphQLperformance

    Un resolver de campo Post.author ejecuta una consulta por post en una lista de 50 posts (1+50 consultas). Corrígelo con DataLoader y explica los dos errores clásicos.

    próximo: nuevo
  10. CódigoSenior

    Apagado graceful para un servicio Nest

    NestJSops

    Implementa un apagado graceful para que un SIGTERM (k8s rollout) drene las requests en curso y cierre recursos antes de salir.

    próximo: nuevo
  11. DiseñoArquitecto

    Diseñar una API SaaS multi-tenant

    architecturemulti-tenancy

    Diseña el backend para un SaaS B2B donde los datos de cada tenant deban estar aislados. Cubre el modelo de aislamiento, la resolución del tenant y cómo se previene la filtración entre tenants.

    próximo: nuevo
  12. DiseñoArquitecto

    Diseñar un pipeline de órdenes basado en eventos

    architecturemicroservicesmessaging

    Una orden fluye a través de pago, inventario y envío — servicios separados. Diseñalo para confiabilidad: sin dobles cobros, sin órdenes perdidas, estado consistente.

    próximo: nuevo
  13. DiseñoArquitecto

    Diseñar auth a través de un API gateway + microservicios

    architectureauthmicroservices

    Tienes un gateway y varios servicios backend. ¿Dónde autenticas y autorizas, y cómo confían los servicios downstream en el llamador?

    próximo: nuevo
  14. DiseñoSenior

    Diseñar caché para un endpoint de lectura intensiva

    architecturecachingperformance

    Un endpoint de detalle de producto recibe 50k RPS, 99% de lecturas, los datos cambian unas pocas veces al día. Diseña la caché para que sea rápida, suficientemente fresca y sobreviva una tormenta de cache misses.

    próximo: nuevo
  15. DiseñoArquitecto

    Diseñar procesamiento de pagos idempotente

    architectureresilience

    Los clientes reintentan en timeout, por lo que una request de "cobrar tarjeta" puede llegar dos veces. Diseña el API + almacenamiento para que un cliente nunca sea cobrado doblemente.

    próximo: nuevo
  16. DiseñoSenior

    Diseñar observabilidad para un servicio Nest

    architectureobservability

    Estás de guardia para una API Nest y la latencia acaba de dispararse. Diseña la observabilidad que querrías tener para diagnosticarlo en minutos, no horas.

    próximo: nuevo
  17. CódigoSenior

    Implementar Promise.all desde cero

    Nodeasyncpromises

    Reimplementa Promise.all(promises): resuelve a un array de resultados en el orden de entrada, rechaza tan pronto como cualquier entrada rechace (fail-fast), y resuelve a [] para un array vacío. No uses la incorporada.

    próximo: nuevo
  18. CódigoSenior

    Implementar un EventEmitter personalizado

    Nodeeventspatterns

    Construye un EventEmitter con on, off, once y emit. Un listener once se dispara exactamente una vez y luego se elimina. ¿Qué se rompe si un listener llama a off durante emit?

    próximo: nuevo
  19. CódigoSenior

    Implementar un pool de promesas (límite de concurrencia)

    Nodeasyncconcurrency

    Escribe promisePool(thunks, limit) que ejecute como máximo N tareas asíncronas a la vez y devuelva resultados en el orden de entrada. Las tareas son thunks (() => Promise), no promesas — ¿por qué importa?

    próximo: nuevo
  20. CódigoSenior

    Implementar una caché LRU con un Map

    Nodedata structurescaching

    Implementa un caché LRU de O(1) (get/put, capacidad fija) usando solo un Map de JS — sin linked list hecha a mano. ¿Cómo te da Map el orden de recencia gratis?

    próximo: nuevo
  21. CódigoSenior

    Implementar un limitador de token bucket en proceso

    Noderate limitingalgorithms

    Construye un limitador de token bucket: capacidad C, tasa de recarga R tokens/sec, tryRemove() devuelve true (permitir) o false (→ 429). Sin setInterval. ¿Cómo se recarga sin un timer?

    próximo: nuevo
  22. CódigoSenior

    Implementar reintentos con backoff + jitter

    Noderesilienceasync

    Escribe retry(fn, retries, baseMs) que reintente una llamada asíncrona fallida con backoff exponencial más jitter, y relance el último error después de que se agoten los intentos.

    próximo: nuevo
  23. CódigoSenior

    Implementar debounce y throttle

    Nodeasyncpatterns

    Implementa debounce(fn, wait) y throttle(fn, wait). Explica la diferencia y asegúrate de que ambas preserven this y los argumentos.

    próximo: nuevo
  24. DiseñoSenior

    Diseñar una cola de trabajos con reintentos + dead-letter

    architecturemessagingresilience

    Diseña una cola de trabajos de background: productores encolan trabajo, workers lo procesan, fallos transitorios reintentan, y los trabajos que fallan permanentemente van a un lugar seguro en lugar de bloquear la cola.

    próximo: nuevo
  25. DiseñoSenior

    Diseñar un sistema de notificaciones multicanal

    architecturemessagingscalability

    Diseña un sistema que envíe notificaciones a través de email, SMS y push. No debe doble-enviar en reintento, debe sobrevivir a una caída del proveedor y debe abarcar un solo evento a muchos destinatarios.

    próximo: nuevo
  26. DiseñoSenior

    Diseñar un rate limiter distribuido

    architecturerate limitingRedis

    Diseña un rate limiter para un API detrás de N instancias de la app: por ej. 100 requests/min por clave API, aplicado consistentemente sin importar qué instancia golpee una request. Devuelve 429 con un Retry-After cuando se exceda.

    próximo: nuevo