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.
Tenemos un endpoint GET /products en NestJS o Express que hoy devuelve los 50.000 productos de una vez. Modificalo para que acepte ?limit=20&cursor=<cursor>&category=books&minPrice=10 y responda { data: Product[], nextCursor: string | null }. Un producto es { id: number, name: string, category: string, price: number, createdAt: string }.
Para el ejercicio podés simular la base con un array ordenado por createdAt descendente y id como desempate, pero escribí la consulta SQL equivalente que usarías en Postgres.
# requisitos
OFFSET; el cursor codifica createdAt e id del último elemento.limit entre 1 y 100 con default 20, minPrice numérico; si son inválidos respondé 400.nextCursor es null cuando no hay más resultados.# si te sobra tiempo, te van a preguntar
OFFSET se degrada con tablas grandes y qué problema tiene si se insertan filas mientras paginás?price sin romper el cursor?Un servicio llama muchas veces por segundo a getExchangeRate(currency), que consulta una API lenta. Escribí una clase TtlCache<K, V> con get(key, loader) que devuelva el valor cacheado si no venció o, si no, llame a loader() (async), lo guarde con un TTL configurable y lo devuelva.
Además, si llegan 100 llamadas simultáneas para la misma key mientras el valor no está en cache, loader tiene que ejecutarse una sola vez y todas las llamadas tienen que recibir el mismo resultado.
# requisitos
setInterval por cada clave.loader falla, el error se propaga a todos los que esperaban y no se cachea.delete(key) y clear().# si te sobra tiempo, te van a preguntar
Tenemos un archivo de access logs de 5 GB donde cada línea tiene el formato 2024-05-01T10:00:00Z GET /api/users 200 123ms. Escribí un script en Node que lo lea y devuelva, por cada endpoint (método más path), la cantidad de requests, el porcentaje de respuestas 5xx y la latencia p95.
La salida esperada es un array como [{ endpoint: "GET /api/users", count: 1520, errorRate: 0.02, p95Ms: 340 }] ordenado por count descendente.
# requisitos
fs.createReadStream con readline o similar)./api/users/42 pasa a /api/users/:id.# si te sobra tiempo, te van a preguntar
worker_threads o varios procesos?JOIN con subconsultas o funciones de ventana para quedarte con el máximo por grupo.