~/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[x]Backend · Node.jsExpress, NestJS[ ]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

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

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

01Endpoint REST de tareas con validaciónQue conozcas lo básico de HTTP y Express: rutas, status codes, validación de entrada y manejo de errores sin romper el servidor.45 min

Armá con Express y TypeScript una API mínima para una lista de tareas. Por ahora no hay base de datos: guardá todo en memoria en un array o un Map. Una tarea tiene la forma { id: string, title: string, done: boolean, createdAt: string }.

Necesitamos POST /tasks que recibe { "title": "Comprar café" } y responde 201 con la tarea creada, GET /tasks que devuelve todas, GET /tasks/:id y PATCH /tasks/:id que permite cambiar title o done. Si el body es inválido respondé 400 con { "error": "title es obligatorio" } o un mensaje equivalente.

# requisitos

  • -title es obligatorio, string, sin espacios al principio ni al final y de 1 a 120 caracteres.
  • -PATCH solo acepta title y done; cualquier otro campo se ignora o se rechaza, pero decidilo y justificalo.
  • -Un id inexistente devuelve 404, no 500.
  • -Los códigos de estado son los correctos: 201 al crear, 200 al leer y actualizar.
  • -Los errores inesperados pasan por un error handler de Express y no exponen el stack trace.

# si te sobra tiempo, te van a preguntar

  • -¿Cómo agregarías DELETE /tasks/:id y qué código devolverías?
  • -¿Usarías una librería como zod para validar? ¿Qué ganás frente a validar a mano?
  • -¿Qué pasa con los datos si el proceso se reinicia y cómo lo resolverías?
  • -¿Cómo testearías estos endpoints con supertest?
02Agrupar y resumir órdenesTu manejo de estructuras de datos básicas en JavaScript (Map, reduce, sort) y tu atención a casos borde como montos y estados.30 min

Recibís un array de órdenes con la forma { id: number, customerId: string, total: number, status: "paid" | "pending" | "cancelled" }. Escribí una función summarizeOrders(orders) que devuelva, por cada cliente, cuántas órdenes pagadas tiene y cuánto gastó en total.

Por ejemplo, para [{ id: 1, customerId: "a", total: 100, status: "paid" }, { id: 2, customerId: "a", total: 50, status: "cancelled" }, { id: 3, customerId: "b", total: 30, status: "paid" }] el resultado esperado es [{ customerId: "a", paidOrders: 1, totalSpent: 100 }, { customerId: "b", paidOrders: 1, totalSpent: 30 }], ordenado de mayor a menor totalSpent.

# requisitos

  • -Solo cuentan las órdenes con status igual a paid.
  • -Recorré el array una sola vez para agrupar (usando Map u objeto), sin filtros anidados por cliente.
  • -Tipá la entrada y la salida con interfaces o types de TypeScript.
  • -La función no muta el array original.

# si te sobra tiempo, te van a preguntar

  • -¿Qué cambia si los montos vienen como strings con decimales, por ejemplo "10.10"?
  • -¿Por qué sumar dinero con number puede dar resultados raros y cómo lo evitarías?
  • -¿Cómo lo resolverías si las órdenes vinieran de una tabla SQL en vez de un array?
03Reintentar una llamada async con backoffQue entiendas promesas, async/await y el event loop lo suficiente como para escribir un helper asíncrono correcto y tipado.30 min

Tenemos que llamar a una API externa que a veces falla con errores transitorios. Escribí una función retry(fn, { retries, baseDelayMs }) que reciba una función que devuelve una promesa y la ejecute hasta que funcione o se agoten los reintentos.

Entre intento e intento esperá un tiempo que crece exponencialmente: baseDelayMs, después baseDelayMs * 2, después baseDelayMs * 4. Si todos los intentos fallan, la promesa devuelta tiene que rechazarse con el último error.

# requisitos

  • -Usá async/await y una función sleep(ms) basada en setTimeout y Promise.
  • -Con retries: 3 la función se ejecuta como máximo 4 veces (1 intento más 3 reintentos).
  • -Si fn resuelve, devolvé su valor sin esperar de más.
  • -La firma es genérica: retry<T>(fn: () => Promise<T>, ...): Promise<T>.

# si te sobra tiempo, te van a preguntar

  • -¿Para qué sirve agregar jitter al delay?
  • -¿Cómo harías para no reintentar errores que no son transitorios, como un 400?
  • -¿Cómo testearías esto sin esperar los tiempos reales? Pensá en fake timers.

# leetcode recomendado (Backend · Node.js · Junior)

EasyTwo SumEl ejemplo clásico de usar un hash map para pasar de O(n²) a O(n), base de muchísimas preguntas.
EasyValid ParenthesesEntrena el uso de una pila, el mismo razonamiento que usás para parsear o validar estructuras anidadas.
EasyValid AnagramContar frecuencias con un objeto o Map es un patrón que vas a repetir en cualquier agregación de datos.
EasyFirst Unique Character in a StringCombina conteo de frecuencias con una segunda pasada, ideal para practicar recorridos simples y su complejidad.
EasyBest Time to Buy and Sell StockTe enseña a mantener un estado mínimo mientras recorrés un array una sola vez, muy común en primeras entrevistas.
EasyCombine Two TablesPractica LEFT JOIN, que es lo primero que te preguntan de SQL en una entrevista backend.
EasyCustomers Who Never OrderBuscar filas sin relación con LEFT JOIN ... IS NULL o NOT EXISTS es una consulta de todos los días.
$ progreso --live-codingBackend · Node.js · Junior

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