enunciados + leetcode
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.
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
Select en vez de cargar entidades con Include.AsNoTracking y explicá qué ganás.CreatedAt e Id, no con Skip/Take.CancellationToken del request hasta la query.pageSize entre 1 y 100.# si te sobra tiempo, te van a preguntar
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
Channel acotado y definí qué pasa cuando se llena (BoundedChannelFullMode).BackgroundService procesa hasta 4 emails en paralelo.Scoped y el BackgroundService es singleton: resolvé el scope con IServiceScopeFactory.CancellationToken del host para un apagado ordenado.ILogger con logging estructurado.# si te sobra tiempo, te van a preguntar
BackgroundService?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
IMemoryCache o un ConcurrentDictionary propio y justificá la elección.Lazy<Task<T>>, SemaphoreSlim o algo equivalente..Result ni .Wait() en ningún lado.# si te sobra tiempo, te van a preguntar
GetOrCreateAsync de IMemoryCache no evita por sí solo las llamadas duplicadas?IDistributedCache con Redis o a HybridCache?.Result en código async?HashSet para lograr O(n) donde lo obvio es ordenar, un salto de razonamiento muy evaluado.SortedSet o búsqueda binaria.ManualResetEventSlim o SemaphoreSlim.