~/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

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

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

01Salida estructurada con validación y reintentosQue trates la salida del modelo como input no confiable y sepas validarla y recuperarte de errores de forma acotada.45 min

Tenés una función callModel(prompt: string): Promise<string> que simula un LLM: devuelve texto que debería ser un JSON con la forma { "sentiment": "positive" | "negative" | "neutral", "confidence": number }, donde confidence va de 0 a 1. A veces el modelo devuelve el JSON envuelto en un bloque de código, con texto antes ("Claro, acá va:") o directamente inválido.

Implementá classifySentiment(text: string): Promise<Result> que arme el prompt, llame al modelo, extraiga el JSON, lo valide contra el schema y, si falla, reintente hasta 3 veces incluyendo en el nuevo prompt el error de validación. Para probarlo, armá un mock de callModel que devuelva en orden: Claro: {sentiment: positive}, {"sentiment": "happy", "confidence": 0.9} y {"sentiment": "positive", "confidence": 0.92}; tu función tiene que terminar devolviendo el tercer resultado.

# requisitos

  • -Extraer el primer objeto JSON del texto aunque venga rodeado de prosa o de un bloque de código.
  • -Validar tipos y rangos con un schema explícito (Zod, Pydantic o validación manual).
  • -Reintentar como máximo 3 veces, pasando el error concreto en el prompt del reintento.
  • -Si se agotan los reintentos, lanzar un error tipado que incluya la última respuesta cruda.
  • -Escribir al menos un test con el mock que cubra el camino feliz y el agotamiento de reintentos.

# si te sobra tiempo, te van a preguntar

  • -¿Cómo cambiaría la solución si el proveedor soporta structured outputs o JSON mode nativo?
  • -¿Qué loguearías de cada intento para poder depurar en producción sin filtrar datos sensibles?
  • -¿Cuándo conviene caer a un valor por defecto en vez de lanzar un error?
02Chunking y retrieval con similitud cosenoQue entiendas las piezas básicas de un pipeline de RAG y puedas implementarlas sin depender de un framework.45 min

Recibís una lista de documentos { id: string, text: string }[] y una función mock embed(text: string): number[] que devuelve un vector de dimensión fija (para el ejercicio podés implementarla como un bag of words sobre un vocabulario chico, así es determinística).

Implementá chunk(text, size, overlap) que parta cada documento en fragmentos de como máximo size palabras con overlap palabras compartidas entre fragmentos consecutivos, y search(query, k) que devuelva los k chunks más similares a la query por similitud coseno, con su docId, el texto y el score. Ejemplo: con size = 4 y overlap = 1, el texto "a b c d e f g" produce ["a b c d", "d e f g"].

# requisitos

  • -Validar que overlap < size y manejar textos más cortos que size.
  • -Implementar la similitud coseno a mano, cuidando el caso de vectores con norma cero.
  • -Calcular los embeddings de los chunks una sola vez, no en cada búsqueda.
  • -Devolver los resultados ordenados por score descendente y con empates resueltos de forma determinística.
  • -Incluir tests con el ejemplo del enunciado y con una query que no matchea nada.

# si te sobra tiempo, te van a preguntar

  • -¿Qué complejidad tiene la búsqueda y cómo escalaría a un millón de chunks?
  • -¿Por qué partir por palabras puede ser peor que partir por oraciones o por tokens?
  • -¿Cómo combinarías esto con una búsqueda por keywords (hybrid search)?
03Estimador de tokens y costo por requestQue manejes con soltura agregaciones simples y tengas incorporado que el costo por token es una restricción real de los productos con LLMs.30 min

Tenés un log de llamadas a un modelo como un array de { model: string, inputTokens: number, outputTokens: number, userId: string } y una tabla de precios { [model]: { inputPerMillion: number, outputPerMillion: number } } en dólares.

Implementá costReport(calls, prices) que devuelva el costo total, el costo por usuario y el top 3 de usuarios que más gastan. Ejemplo: con un modelo a 3 USD por millón de input y 15 USD por millón de output, una llamada con 2.000 tokens de input y 500 de output cuesta 0.0135 USD.

# requisitos

  • -Calcular el costo por llamada separando input y output.
  • -Agregar por usuario con un hash map en una sola pasada.
  • -Si una llamada usa un modelo sin precio, no romper: reportarla aparte como desconocida.
  • -Redondear solo al presentar el resultado, no en los cálculos intermedios.

# si te sobra tiempo, te van a preguntar

  • -¿Cómo agregarías un límite de gasto diario por usuario que corte las llamadas?
  • -¿Cómo cambiaría el cálculo con prompt caching, donde los tokens cacheados cuestan menos?

# leetcode recomendado (AI engineering · Junior)

EasyValid AnagramEntrena contar caracteres con un hash map, la base de cualquier normalización y comparación de texto.
EasyFirst Unique Character in a StringPractica conteo de frecuencias en dos pasadas, un patrón que se repite al procesar tokens y vocabularios.
EasyRansom NoteRefuerza comparar multisets de caracteres, útil para razonar sobre conteos de tokens y presupuestos.
EasyLongest Common PrefixIntroduce el razonamiento sobre prefijos compartidos, la idea detrás de los tries y del prompt caching.
EasyWord PatternEntrena mapeos biyectivos entre palabras y símbolos, parecido a construir vocabularios y tokenizers simples.
$ progreso --live-codingAI engineering · Junior

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