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.
En un proyecto Django tenemos los modelos Customer(name, email), Order(customer, created_at, status) y OrderItem(order, product_name, quantity, unit_price). El endpoint GET /api/orders devuelve cada orden con el nombre del cliente, sus ítems y el total, y hoy tarda varios segundos.
Reescribí la vista (podés usar Django REST Framework) para que soporte ?status=paid&page_size=20&cursor=... y que la cantidad de queries no dependa de cuántas órdenes devuelve.
# requisitos
select_related y prefetch_related donde corresponda y explicá la diferencia.annotate con Sum y F), no en Python.created_at descendente.page_size entre 1 y 100.assertNumQueries o django_assert_num_queries).# si te sobra tiempo, te van a preguntar
EXPLAIN?values() en vez de instancias completas de modelos?Escribí un decorador @ttl_cache(seconds=60, maxsize=1000) que cachee el resultado de una función según sus argumentos y lo invalide pasado el TTL. Tiene que funcionar tanto con funciones normales como con async def.
Por ejemplo, si decorás async def get_user(user_id: int), dos llamadas con user_id=1 dentro del mismo minuto ejecutan la función una sola vez.
# requisitos
functools.wraps para conservar el nombre y el docstring de la función.maxsize, se descarta la entrada menos usada recientemente (podés usar OrderedDict).cache_clear() en la función decorada.# si te sobra tiempo, te van a preguntar
functools.lru_cache?asyncio en un caso de I/O real: límites de concurrencia, timeouts y aislamiento de errores.45 minTenemos una lista de 5.000 URLs de webhooks de clientes y queremos saber cuáles responden. Escribí async def check_urls(urls: list[str], max_concurrency: int = 50) -> dict[str, int | str] que haga un GET a cada una y devuelva el status code o el tipo de error.
Por ejemplo: { "https://a.com/hook": 200, "https://b.com/hook": "timeout", "https://c.com/hook": 503 }. Podés usar httpx o aiohttp.
# requisitos
max_concurrency requests en vuelo; usá asyncio.Semaphore o un pool de workers con asyncio.Queue.asyncio encaja mejor que threads o procesos para este caso.# si te sobra tiempo, te van a preguntar
requests.get?concurrent.futures.ThreadPoolExecutor y qué cambia?Counter con heapq, el patrón para rankings y reportes de "los más usados".threading.Event o Lock.