~/pcn $ iniciando_

programaConNosotros

Iniciar sesiónCrear cuenta
  • programaConNosotrosprogramaConNosotrosComunidad · desde 2020
  • Inicio
  • Feed
Actividades
  • Eventos
  • Conversaciones
  • Charlas
  • Podcast
  • Desarrollo
Recursos
  • Cursos
  • Lectura
  • Videos
  • Especialidades
  • Herramientas
  • Proyectos
  • Entrevistas
Comunidad
  • Historia
  • Miembros
  • Logros
  • Galería
  • Setups
  • Partners
  • Changelog
SoporteFeedback

~/entrevistas/live-coding

enunciados + leetcode

[simulador][guías][live coding]

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.

# 1. tecnología

[ ]Frontend · React.jsweb, hooks, Next.js[ ]Frontend · iOSSwift, SwiftUI, UIKit[ ]Frontend · AndroidKotlin, Jetpack Compose[ ]Frontend · React NativeExpo, iOS y Android[ ]Backend · Node.jsExpress, NestJS[x]Backend · PythonDjango, FastAPI[ ]Backend · JavaSpring Boot[ ]Backend · .NETC#, ASP.NET Core[ ]AI engineeringconstruir agentes de IA[ ]Agentic engineeringdesarrollar con agentes[ ]Quality engineeringtesting manual y automatizado

# 2. seniority

[ ]Junior[x]Semi-senior[ ]Senior

# ejercicios (resolvelos por tu cuenta, con el tiempo que darían en la entrevista)

01Listado paginado de órdenes sin N+1Tu conocimiento del ORM más allá de lo básico: detectar y resolver N+1, empujar cálculos a la base y paginar bien.45 min

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

  • -Usá select_related y prefetch_related donde corresponda y explicá la diferencia.
  • -Calculá el total con una anotación en la base (annotate con Sum y F), no en Python.
  • -Implementá paginación por cursor ordenada por created_at descendente.
  • -Validá page_size entre 1 y 100.
  • -Mostrá cómo verificarías la cantidad de queries en un test (assertNumQueries o django_assert_num_queries).

# si te sobra tiempo, te van a preguntar

  • -¿Qué índices agregarías y cómo lo confirmarías con EXPLAIN?
  • -¿Cuándo preferís values() en vez de instancias completas de modelos?
  • -¿Cómo lo resolverías con SQLAlchemy en una app FastAPI?
02Decorador de cache con TTLQue domines decoradores, closures y la diferencia entre código sync y async en Python, con criterio sobre memoria y concurrencia.45 min

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

  • -Usá functools.wraps para conservar el nombre y el docstring de la función.
  • -La clave contempla args y kwargs; explicá qué pasa con argumentos no hasheables.
  • -Cuando se supera maxsize, se descarta la entrada menos usada recientemente (podés usar OrderedDict).
  • -Para funciones async, cacheá el resultado y no la corrutina.
  • -Exponé un método cache_clear() en la función decorada.

# si te sobra tiempo, te van a preguntar

  • -¿Es thread-safe tu implementación? ¿Qué cambiarías para usarla con varios threads?
  • -¿Cómo evitarías que 50 llamadas async simultáneas con la misma clave ejecuten la función 50 veces?
  • -¿Por qué no alcanza con functools.lru_cache?
03Chequeo concurrente de URLs con límiteTu manejo de asyncio en un caso de I/O real: límites de concurrencia, timeouts y aislamiento de errores.45 min

Tenemos 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

  • -Nunca hay más de max_concurrency requests en vuelo; usá asyncio.Semaphore o un pool de workers con asyncio.Queue.
  • -Cada request tiene timeout de 5 segundos.
  • -Un error en una URL no cancela las demás.
  • -Reusá un único cliente HTTP para todas las requests.
  • -Explicá por qué asyncio encaja mejor que threads o procesos para este caso.

# si te sobra tiempo, te van a preguntar

  • -¿Qué pasa si dentro de la corrutina llamás a requests.get?
  • -¿Cómo agregarías reintentos con backoff solo para errores de red?
  • -¿Cómo lo resolverías con concurrent.futures.ThreadPoolExecutor y qué cambia?

# leetcode recomendado (Backend · Python · Semi-senior)

MediumTop K Frequent ElementsCombina Counter con heapq, el patrón para rankings y reportes de "los más usados".
MediumProduct of Array Except SelfEntrena prefijos y sufijos acumulados, un truco que reaparece en agregaciones sobre series.
MediumInsert IntervalManejar intervalos ordenados es lo que hacés al validar reservas o turnos superpuestos.
MediumSubarray Sum Equals KSuma de prefijos con hash map, un patrón que sorprende si no lo practicaste antes.
EasyPrint in OrderPrimer contacto con sincronización entre threads usando threading.Event o Lock.
MediumPrint FooBar AlternatelyCoordinar dos threads que se turnan obliga a entender semáforos y condiciones.
MediumGame Play Analysis IVUna consulta de retención con fechas y subconsultas, típica de métricas de producto.
$ progreso --live-codingBackend · Python · Semi-senior

ejercicios0/3

leetcode0/7

$ cat guias/live-coding

Cómo encarar un live coding: el método para resolver en voz alta, complejidad, los patrones más frecuentes y cómo practicar.

leer la guía de live coding