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.
Con ASP.NET Core (Minimal APIs o controllers, como prefieras) armá una API de tareas guardadas en memoria. Una tarea es record TodoItem(int Id, string Title, bool IsDone, DateTime CreatedAt).
Implementá POST /todos que devuelve 201 Created con la ubicación del recurso, GET /todos con filtro opcional ?done=true, GET /todos/{id} y PUT /todos/{id}. Los errores de validación se devuelven como 400 con un ProblemDetails.
# requisitos
Title es obligatorio y tiene entre 1 y 100 caracteres.Singleton, Scoped o Transient).ConcurrentDictionary o un lock).id inexistente devuelve 404 con Results.NotFound() o NotFound().async aunque el store sea en memoria, para que el contrato no cambie al pasar a EF Core.# si te sobra tiempo, te van a preguntar
Scoped?WebApplicationFactory?DbContext?Tenés una List<Sale> donde record Sale(string Seller, string Region, decimal Amount, DateOnly Date). Escribí métodos que devuelvan: el total vendido por región ordenado de mayor a menor, el mejor vendedor de cada mes y los vendedores que no vendieron nada en un mes dado, partiendo de una lista de todos los vendedores.
Por ejemplo, el primero devuelve algo como [("Norte", 15000m), ("Sur", 9800m)].
# requisitos
GroupBy, Sum, OrderByDescending, Except o equivalentes).decimal para los montos.Max y First sobre secuencias vacías.# si te sobra tiempo, te van a preguntar
IEnumerable e IQueryable si esto viniera de EF Core?FirstOrDefault y cuándo Single?Escribí Dictionary<string, string> ParseConfig(string content) que reciba el contenido de un archivo con líneas como db.host = localhost, comentarios que empiezan con # y líneas vacías.
Por ejemplo, para el texto con las líneas # base, db.host = localhost, db.port=5432 y invalida, devuelve { "db.host": "localhost", "db.port": "5432" } y reporta que la línea 4 es inválida.
# requisitos
# si te sobra tiempo, te van a preguntar
GetInt(key) que falle con un mensaje claro si el valor no es numérico?TryParse o excepciones para los errores de formato? ¿Por qué?IConfiguration)?Dictionary para pasar de O(n²) a O(n), base de muchas preguntas.Dictionary, un patrón que se repite en cualquier agregación.Dictionary.SELECT con filtros combinados para empezar con SQL, que en backend siempre se evalúa.DISTINCT y ORDER BY, detalles que en una entrevista se olvidan fácil.