~/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[ ]Backend · PythonDjango, FastAPI[ ]Backend · JavaSpring Boot[ ]Backend · .NETC#, ASP.NET Core[x]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)

01Loop de tool calling con límite de pasosQue entiendas qué pasa por debajo de un agente y sepas hacerlo robusto ante errores de las tools y del propio modelo.60 min

Vas a implementar el loop de un agente sin usar ningún framework. El modelo es un mock model.next(messages) que devuelve o bien { type: "tool_call", id: string, name: string, args: object } o bien { type: "final", text: string }. Tenés dos tools: getWeather({ city }), que devuelve { tempC: number }, y convert({ celsius }), que devuelve { fahrenheit: number }.

Implementá runAgent(userMessage, { maxSteps }) que agregue el mensaje del usuario, pida el siguiente paso al modelo, ejecute la tool pedida, agregue el resultado al historial con el id de la llamada y repita hasta recibir final o llegar a maxSteps. Armá un mock que, ante "¿Qué temperatura hace en Córdoba en Fahrenheit?", pida getWeather, después convert y finalmente responda.

# requisitos

  • -Cortar con un error claro si se supera maxSteps, devolviendo el historial hasta ese punto.
  • -Validar los args de cada tool antes de ejecutarla y devolverle al modelo el error de validación como resultado de la tool en vez de romper.
  • -Si el modelo pide una tool que no existe, informárselo como resultado y seguir.
  • -Capturar excepciones de las tools y convertirlas en un resultado de error para el modelo.
  • -Registrar una traza por paso con la tool, los args, el resultado y la duración.
  • -Tests que cubran el camino feliz, una tool inexistente y el corte por maxSteps.

# si te sobra tiempo, te van a preguntar

  • -¿Cómo ejecutarías en paralelo varias tool calls que el modelo pide en el mismo turno?
  • -¿Qué tools requerirían confirmación humana antes de ejecutarse y cómo lo modelarías?
  • -¿Cómo detectarías que el agente está en un loop pidiendo siempre la misma tool con los mismos args?
02Streaming de respuesta con cancelaciónQue manejes asincronía, cancelación y estado parcial, que son la base de cualquier UX con LLMs que se sienta rápida.45 min

Tenés un mock streamCompletion(prompt, signal) que devuelve un async iterable de eventos { type: "delta", text: string } emitidos cada 50 ms y que termina con { type: "done", usage: { outputTokens: number } }. El mock respeta un AbortSignal: si se aborta, deja de emitir y lanza un AbortError.

Implementá collectStream(prompt, { onDelta, timeoutMs, stopSequences }) que vaya llamando a onDelta con cada fragmento, acumule el texto completo y devuelva { text, finishReason }, donde finishReason es "done", "timeout", "stop_sequence" o "aborted". Si aparece una stop sequence, aunque quede partida entre dos deltas (por ejemplo "FI" y "N" con stop sequence "FIN"), hay que cortar el stream y no incluirla en el texto.

# requisitos

  • -Usar AbortController para cancelar el stream ante timeout o stop sequence.
  • -Detectar stop sequences que crucen el borde entre deltas sin emitir a onDelta texto que luego habría que retirar.
  • -Permitir que el caller cancele desde afuera con su propio AbortSignal.
  • -Liberar el timer en todos los caminos de salida.
  • -Devolver el texto parcial acumulado también cuando se cancela.

# si te sobra tiempo, te van a preguntar

  • -¿Cómo lo expondrías a un frontend con Server-Sent Events y qué pasa si el usuario cierra la pestaña?
  • -¿Cómo manejarías un stream que se corta por un error de red a mitad de camino?
  • -¿Qué cambia si además del texto el stream trae tool calls parciales?
03Context builder con presupuesto de tokensQue sepas razonar sobre la ventana de contexto como un recurso escaso y tomar decisiones de prioridad explícitas y testeables.45 min

Tenés que armar el contexto que se manda al modelo a partir de un system prompt, el historial de conversación { role: "user" | "assistant", content: string }[] y una lista de documentos recuperados { id, text, score }[]. Contás con countTokens(text): number (para el ejercicio, aproximá con Math.ceil(text.length / 4)).

Implementá buildContext({ system, history, docs, budget, reserveForOutput }) que respete el presupuesto total. Las prioridades son: el system prompt y el último mensaje del usuario entran siempre; después, los documentos por score descendente; después, el historial del más reciente al más viejo. Si el system más el último mensaje ya superan el presupuesto, hay que lanzar un error.

# requisitos

  • -Respetar budget - reserveForOutput como límite estricto.
  • -Mantener el historial incluido en orden cronológico aunque se seleccione de atrás hacia adelante.
  • -No partir un mensaje del historial a la mitad; un documento sí puede truncarse si es el último que entra y quedan al menos 50 tokens.
  • -Devolver además un resumen de qué quedó afuera (ids de documentos y cantidad de mensajes descartados).
  • -Tests con presupuestos justos en el límite.

# si te sobra tiempo, te van a preguntar

  • -¿Cómo reemplazarías el historial descartado por un resumen generado por el modelo?
  • -¿Qué problema tiene aproximar tokens por caracteres en idiomas distintos del inglés o con código?
  • -¿Cómo ordenarías el contexto para aprovechar prompt caching?

# leetcode recomendado (AI engineering · Semi-senior)

MediumGroup AnagramsPractica diseñar claves canónicas para agrupar textos equivalentes, como al deduplicar documentos antes de indexarlos.
MediumTop K Frequent ElementsEs el patrón de top-k con heap o bucket sort que aparece al rankear resultados de retrieval.
MediumKth Largest Element in an ArrayEntrena heaps de tamaño fijo y quickselect, lo que usás para quedarte con los k chunks de mayor score.
MediumMerge IntervalsTrabaja rangos solapados, igual que al unir chunks con overlap o resaltar spans citados en un documento.
MediumImplement Trie (Prefix Tree)El trie es la estructura detrás del autocompletado y de varios tokenizers, y es pregunta clásica en roles de texto.
$ progreso --live-codingAI engineering · Semi-senior

ejercicios0/3

leetcode0/5

$ 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