~/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[x]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 con EF CoreQue sepas usar EF Core de forma eficiente, entendiendo qué se ejecuta en la base y qué en memoria.45 min

Tenemos las entidades Customer, Order y OrderItem en EF Core. GET /orders?status=Paid&pageSize=20&cursor=... tiene que devolver cada orden con el nombre del cliente, la cantidad de ítems y el total, en el formato { "items": [...], "nextCursor": "..." }.

La versión actual hace ToListAsync() de todas las órdenes y después filtra y calcula en memoria. Reescribila para que el filtrado, el cálculo y la paginación ocurran en la base.

# requisitos

  • -Proyectá a un DTO con Select en vez de cargar entidades con Include.
  • -Usá AsNoTracking y explicá qué ganás.
  • -Implementá paginación por cursor sobre CreatedAt e Id, no con Skip/Take.
  • -Pasá el CancellationToken del request hasta la query.
  • -Validá pageSize entre 1 y 100.

# si te sobra tiempo, te van a preguntar

  • -¿Cómo ves el SQL que genera EF Core y cómo detectarías evaluación en el cliente?
  • -¿Qué índices crearías para esta query?
  • -¿Cuándo usarías Dapper o SQL crudo en vez de EF Core?
02Cola de emails en background con reintentosTu manejo de async, DI y procesamiento en background en .NET, incluyendo lifetimes y cancelación.45 min

Un endpoint POST /signup tiene que responder rápido, pero también mandar un email de bienvenida que tarda hasta 3 segundos y a veces falla. Implementá una cola en memoria con System.Threading.Channels y un BackgroundService que la consuma.

Los envíos fallidos se reintentan con backoff exponencial (1 s, 2 s, 4 s) hasta 3 veces; después se loguean como error con el id del usuario.

# requisitos

  • -Usá un Channel acotado y definí qué pasa cuando se llena (BoundedChannelFullMode).
  • -El BackgroundService procesa hasta 4 emails en paralelo.
  • -El servicio de email es Scoped y el BackgroundService es singleton: resolvé el scope con IServiceScopeFactory.
  • -Respetá el CancellationToken del host para un apagado ordenado.
  • -Usá ILogger con logging estructurado.

# si te sobra tiempo, te van a preguntar

  • -¿Qué perdés si la app se reinicia con emails en la cola y cómo lo resolverías (outbox, Hangfire, una cola externa)?
  • -¿Cómo usarías Polly para los reintentos en vez de hacerlo a mano?
  • -¿Cómo testearías el BackgroundService?
03Cache con expiración y deduplicación de llamadasQue entiendas async/await y concurrencia en .NET lo suficiente como para evitar condiciones de carrera y llamadas duplicadas.45 min

Un servicio llama a GetExchangeRateAsync(string currency), que consulta una API externa lenta. Escribí un CachedExchangeRateService que envuelva al original (patrón decorator) y cachee cada cotización por 60 segundos.

Si llegan 200 requests simultáneos para USD cuando el valor no está en cache, la API externa tiene que llamarse una sola vez y todos tienen que recibir el mismo resultado.

# requisitos

  • -El decorator implementa la misma interfaz que el servicio original y se registra en DI sin cambiar a los consumidores.
  • -Usá IMemoryCache o un ConcurrentDictionary propio y justificá la elección.
  • -La deduplicación de llamadas concurrentes usa Lazy<Task<T>>, SemaphoreSlim o algo equivalente.
  • -Un error de la API no queda cacheado.
  • -No uses .Result ni .Wait() en ningún lado.

# si te sobra tiempo, te van a preguntar

  • -¿Por qué GetOrCreateAsync de IMemoryCache no evita por sí solo las llamadas duplicadas?
  • -¿Cuándo pasarías a IDistributedCache con Redis o a HybridCache?
  • -¿Qué riesgo de deadlock tiene .Result en código async?

# leetcode recomendado (Backend · .NET · Semi-senior)

MediumLongest Consecutive SequenceUsar un HashSet para lograr O(n) donde lo obvio es ordenar, un salto de razonamiento muy evaluado.
MediumDaily TemperaturesIntroduce la pila monótona, útil para resolver "el próximo mayor" sobre series de datos.
MediumEvaluate Reverse Polish NotationEvaluar expresiones con una pila, la base de cualquier parser o motor de reglas simple.
MediumMy Calendar IDetectar superposición de reservas es un problema de negocio real; podés usar SortedSet o búsqueda binaria.
EasyPrint in OrderPrimer contacto con sincronización entre threads en C# con ManualResetEventSlim o SemaphoreSlim.
MediumPrint Zero Even OddCoordinar tres threads que se pasan el turno, buen ejercicio para entender semáforos.
MediumMonthly Transactions IAgregación por mes con conteos condicionales, el tipo de query de reportes que pide cualquier negocio.
$ progreso --live-codingBackend · .NET · 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