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.
- CódigoMid
Endpoint REST paginado con validación + auth
NestJSvalidationguardsConstruye
GET /users?page=1&limit=20que 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 - CódigoSenior
RolesGuard personalizado con Reflector
NestJSauthRBACImplementa un decorador
@Roles('admin')y unRolesGuardque lea los roles requeridos de los metadatos de ruta y los compare conrequest.user.roles. Haz que los roles de nivel de método sobreescriban los de nivel de clase.próximo: nuevo - CódigoSenior
Reintentos con backoff exponencial + jitter
NoderesilienceEscribe
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 - CódigoMid
Caché LRU en memoria (O(1))
Nodedata structuresImplementa una caché LRU con
getysetde O(1) y una capacidad máxima que elimine la entrada menos recientemente usada.próximo: nuevo - CódigoSenior
Pool asíncrono con límite de concurrencia
NodeasyncProcesa 10,000 elementos ejecutando un
worker(item)asíncrono con como máximo N en vuelo a la vez (unPromise.allacotado). ¿Por qué no simplementePromise.all(items.map(worker))?próximo: nuevo - CódigoMid
TransformInterceptor con envoltura de respuesta
NestJSinterceptorsRxJSEscribe un interceptor que envuelva cada respuesta exitosa en
{ data, timestamp }sin que cada manejador se entere.próximo: nuevo - CódigoSenior
Stream de un archivo grande con backpressure
NodestreamsSirve un archivo de varios GB como descarga gzipped sin cargarlo en memoria, y asegúrate de manejar errores y recursos correctamente.
próximo: nuevo - CódigoSenior
Rate limiter de token bucket con Redis
NodeRedisrate limitingImplementa 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 - CódigoSenior
Corregir N+1 en GraphQL con DataLoader
NestJSGraphQLperformanceUn resolver de campo
Post.authorejecuta 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 - CódigoSenior
Apagado graceful para un servicio Nest
NestJSopsImplementa un apagado graceful para que un SIGTERM (k8s rollout) drene las requests en curso y cierre recursos antes de salir.
próximo: nuevo - DiseñoArquitecto
Diseñar una API SaaS multi-tenant
architecturemulti-tenancyDiseñ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 - DiseñoArquitecto
Diseñar un pipeline de órdenes basado en eventos
architecturemicroservicesmessagingUna 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 - DiseñoArquitecto
Diseñar auth a través de un API gateway + microservicios
architectureauthmicroservicesTienes 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 - DiseñoSenior
Diseñar caché para un endpoint de lectura intensiva
architecturecachingperformanceUn 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 - DiseñoArquitecto
Diseñar procesamiento de pagos idempotente
architectureresilienceLos 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 - DiseñoSenior
Diseñar observabilidad para un servicio Nest
architectureobservabilityEstá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 - CódigoSenior
Implementar Promise.all desde cero
NodeasyncpromisesReimplementa
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 - CódigoSenior
Implementar un EventEmitter personalizado
NodeeventspatternsConstruye un
EventEmitterconon,off,onceyemit. Un listeneroncese dispara exactamente una vez y luego se elimina. ¿Qué se rompe si un listener llama aoffduranteemit?próximo: nuevo - CódigoSenior
Implementar un pool de promesas (límite de concurrencia)
NodeasyncconcurrencyEscribe
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 - CódigoSenior
Implementar una caché LRU con un Map
Nodedata structurescachingImplementa un caché LRU de O(1) (
get/put, capacidad fija) usando solo unMapde JS — sin linked list hecha a mano. ¿Cómo te daMapel orden de recencia gratis?próximo: nuevo - CódigoSenior
Implementar un limitador de token bucket en proceso
Noderate limitingalgorithmsConstruye un limitador de token bucket: capacidad C, tasa de recarga R tokens/sec,
tryRemove()devuelve true (permitir) o false (→ 429). SinsetInterval. ¿Cómo se recarga sin un timer?próximo: nuevo - CódigoSenior
Implementar reintentos con backoff + jitter
NoderesilienceasyncEscribe
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 - CódigoSenior
Implementar debounce y throttle
NodeasyncpatternsImplementa
debounce(fn, wait)ythrottle(fn, wait). Explica la diferencia y asegúrate de que ambas preserventhisy los argumentos.próximo: nuevo - DiseñoSenior
Diseñar una cola de trabajos con reintentos + dead-letter
architecturemessagingresilienceDiseñ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 - DiseñoSenior
Diseñar un sistema de notificaciones multicanal
architecturemessagingscalabilityDiseñ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 - DiseñoSenior
Diseñar un rate limiter distribuido
architecturerate limitingRedisDiseñ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-Aftercuando se exceda.próximo: nuevo