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 JPA Customer, Order (con @ManyToOne a Customer y @OneToMany a OrderItem) y OrderItem. El endpoint GET /orders?status=PAID&page=0&size=20 devuelve cada orden con el nombre del cliente y sus ítems, y en producción dispara cientos de queries.
Reescribí el repository, el service y el DTO de respuesta para que la cantidad de queries sea constante y la respuesta sea { "content": [...], "page": 0, "size": 20, "totalElements": 1234 }.
# requisitos
Pageable de Spring Data y un DTO de salida, sin serializar entidades.@EntityGraph, JOIN FETCH o una proyección, y explicá el problema de combinar JOIN FETCH de colecciones con paginación.@Transactional(readOnly = true).size con un máximo de 100.# si te sobra tiempo, te van a preguntar
LazyInitializationException y por qué aparece con open-in-view desactivado?Implementá LruCache<K, V> con capacidad máxima y TTL por entrada. get(key) devuelve Optional<V> y actualiza el orden de uso; put(key, value) inserta y, si se supera la capacidad, desaloja la entrada usada menos recientemente.
El cache se usa desde varios threads de un servidor web al mismo tiempo, así que tiene que ser seguro ante concurrencia sin bloquear más de lo necesario.
# requisitos
LinkedHashMap con removeEldestEntry y después explicá cómo lo harías a mano con hash map y lista doblemente enlazada.ReentrantReadWriteLock, synchronized o una estructura concurrente y justificá la elección.# si te sobra tiempo, te van a preguntar
get en un LRU no es una operación de solo lectura y qué implica para el lock?@Cacheable) en vez de esto?Un comparador de vuelos consulta 5 proveedores externos con ProviderClient.search(query), que tarda entre 200 ms y 3 segundos y a veces falla. Escribí un PriceAggregator.search(query) que consulte a todos en paralelo y devuelva las ofertas combinadas, ordenadas por precio.
La respuesta total no puede tardar más de 2 segundos: lo que no llegó a tiempo se descarta y se informa qué proveedores faltaron, por ejemplo { "offers": [...], "missingProviders": ["acme"] }.
# requisitos
CompletableFuture con un Executor propio, no el common pool.orTimeout o completeOnTimeout.allOf o una alternativa equivalente.# si te sobra tiempo, te van a preguntar
PriorityQueue y te hace comparar heap contra quickselect.Semaphore o wait/notify es una pregunta de concurrencia muy común en Java.GROUP BY con HAVING sobre una relación jerárquica, típico de consultas de reportes.DENSE_RANK, LIMIT/OFFSET y el manejo de NULL cuando no hay resultado.