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.
Implementá en Spring Boot POST /transfers con body { "fromAccount": "A", "toAccount": "B", "amount": 1500.00 } y header Idempotency-Key. Las cuentas están en Postgres con JPA y la transferencia tiene que debitar y acreditar de forma atómica.
Reintentos con la misma key y el mismo body devuelven la respuesta original sin duplicar el movimiento; con otro body, 422; si el original sigue en curso, 409. Además, dos transferencias concurrentes desde la misma cuenta no pueden dejar saldo negativo.
# requisitos
@Lock(PESSIMISTIC_WRITE)) u optimista (@Version) y justificá la elección.# si te sobra tiempo, te van a preguntar
Sin usar ExecutorService, implementá un WorkerPool con N threads que toman tareas de una cola acotada. submit(task) bloquea si la cola está llena, o falla después de un timeout configurable. Las tareas que lanzan excepción se reintentan hasta 3 veces y después van a una lista de fallidas.
El pool tiene que soportar shutdown() (no acepta nuevas tareas y termina las encoladas) y shutdownNow() (interrumpe los workers y devuelve las pendientes).
# requisitos
BlockingQueue o implementá la cola con ReentrantLock y Condition.InterruptedException.AtomicInteger o LongAdder).# si te sobra tiempo, te van a preguntar
ThreadPoolExecutor y su RejectedExecutionHandler?Implementá un OncePerRequestFilter de Spring que limite cada cliente (identificado por el header X-Api-Key) a una cantidad de requests por minuto que depende de su plan: FREE 60, PRO 600. Al excederse, respondé 429 con Retry-After.
Definí una interfaz RateLimiter con una implementación en memoria para tests y otra basada en Redis para producción, con varias instancias de la app.
# requisitos
/actuator/health.X-RateLimit-Limit y X-RateLimit-Remaining.# si te sobra tiempo, te van a preguntar
LinkedHashMap.PriorityQueue, como combinar resultados de varias particiones.HashMap y ArrayList para cumplir varias operaciones O(1) a la vez.Semaphore y CyclicBarrier, un ejercicio exigente de coordinación.JOIN, filtros y agregación condicional en una sola consulta, como un reporte de negocio real.