enunciados + leetcode
Enunciados como los de una entrevista real para resolver por tu cuenta, con el tiempo que te darían, y problemas de LeetCode recomendados para cada tecnología y seniority. Nada se corrige acá: resolvelo en tu editor, en voz alta, y marcá lo que ya practicaste.
Diseñá e implementá POST /payments en NestJS. El cliente manda el header Idempotency-Key y un body { amount: number, currency: string, customerId: string }. El endpoint llama a un PaymentProvider.charge() externo que puede tardar varios segundos o hacer timeout.
Si el cliente reintenta con la misma key y el mismo body, tiene que recibir exactamente la misma respuesta sin cobrar dos veces. Si reintenta con la misma key y un body distinto, respondé 422. Si llega un reintento mientras el primer request todavía se está procesando, respondé 409.
# requisitos
processing, completed o failed, hash del body y respuesta guardada.INSERT ... ON CONFLICT, no un SELECT seguido de INSERT.processing.# si te sobra tiempo, te van a preguntar
Implementá en TypeScript una JobQueue en memoria. Se registran handlers con queue.process(type, handler, { concurrency }) y se encolan jobs con queue.add(type, payload, { maxAttempts, backoffMs }). Un handler es (payload) => Promise<void>.
La cola tiene que ejecutar como máximo concurrency jobs del mismo tipo en paralelo, reintentar los fallidos con backoff exponencial hasta maxAttempts y, cuando se agotan, moverlos a una dead letter queue consultable con queue.failed().
# requisitos
queue.close() que deja de tomar jobs nuevos y espera a que terminen los que están corriendo (graceful shutdown).completed y failed con EventEmitter.# si te sobra tiempo, te van a preguntar
SELECT ... FOR UPDATE SKIP LOCKED?Escribí un middleware de Express que limite cada API key a N requests por ventana de W segundos. La key viene en el header X-Api-Key. Cuando se excede el límite, respondé 429 con el header Retry-After indicando cuántos segundos faltan.
Primero implementalo con un store en memoria detrás de una interfaz RateLimitStore, y después explicá o esbozá la implementación con Redis para que funcione con varias instancias del servicio.
# requisitos
X-RateLimit-Limit y X-RateLimit-Remaining en todas las respuestas.MULTI).# si te sobra tiempo, te van a preguntar
JOIN, filtros y agregación condicional, como las que escribís para reportes de negocio.