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.
Tenés que renderizar una lista de 100.000 ítems { id: number, label: string } en un contenedor de 600 px de alto sin que el navegador se trabe. No podés usar librerías de virtualización: implementá un componente VirtualList desde cero.
Asumí primero que todas las filas miden 40 px. La API del componente es <VirtualList items={items} itemHeight={40} height={600} renderItem={(item) => ...} />.
# requisitos
# si te sobra tiempo, te van a preguntar
Diseñá e implementá un hook useQuery(key, fetcher, options) parecido a una versión mínima de React Query o SWR. Devuelve { data, error, status, refetch }, donde status es "idle" | "loading" | "success" | "error".
Si dos componentes montados al mismo tiempo usan la misma key, debe hacerse un solo request y ambos reciben el resultado. Si un componente se monta con una key ya cacheada, muestra el dato al instante y revalida en segundo plano si el dato tiene más de staleTime ms.
Para probarlo, mockeá fetchUser(id) que falla el 30% de las veces y tarda entre 200 y 600 ms.
# requisitos
key.key.key, no se actualiza el state con respuestas viejas.useQuery<User> devuelve data: User | undefined.# si te sobra tiempo, te van a preguntar
useSyncExternalStore para suscribir componentes al cache?Implementá deepClone(value) sin usar structuredClone ni JSON.parse(JSON.stringify()). Tiene que soportar objetos planos, arrays, Date, Map, Set, RegExp y primitivos, y devolver una copia donde ninguna referencia mutable se comparta con el original.
También tiene que soportar referencias circulares: si const a = { name: "a" }; a.self = a;, entonces const b = deepClone(a) cumple b.self === b y b !== a.
# requisitos
WeakMap de visitados.Map y Set clonan también sus claves y valores.# si te sobra tiempo, te van a preguntar
JSON.parse(JSON.stringify()) y cuáles tiene structuredClone?Symbol como clave o no enumerables?Promise.all a mano, la pregunta asíncrona más típica de frontend senior.useMemo y React.memo.Map en O(1); aparece seguido en entrevistas senior y en caches de cliente reales.