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.
Implementá un ImageLoader para una grilla de fotos en UICollectionView. Expone func image(for url: URL) async throws -> UIImage. Muchas celdas pueden pedir la misma URL al mismo tiempo y el usuario scrollea rápido.
Querés que una URL ya descargada se sirva desde memoria, que dos pedidos simultáneos de la misma URL generen una sola descarga y que las celdas recicladas nunca muestren la imagen de otra fila.
# requisitos
actor (o está correctamente sincronizado) y guarda las descargas en vuelo en un diccionario de Task.NSCache y límite de costo; opcionalmente cache en disco.prepareForReuse y verifica que la imagen recibida corresponda a su URL actual.# si te sobra tiempo, te van a preguntar
UICollectionViewDataSourcePrefetching?Implementá LRUCache<Key: Hashable, Value> con capacidad fija. Expone func value(for key: Key) -> Value? y func set(_ value: Value, for key: Key). Cuando se supera la capacidad se descarta el elemento usado hace más tiempo.
Ejemplo con capacidad 2: set(1, "a"), set(2, "b"), value(1), set(3, "c") deja en cache las claves 1 y 3, porque 2 era la menos usada.
# requisitos
# si te sobra tiempo, te van a preguntar
NSCache si necesitás orden LRU estricto?Diseñá un APIClient con func send<T: Decodable>(_ request: URLRequest) async throws -> T. Las requests llevan un access token en el header Authorization. Cuando el servidor responde 401, el cliente tiene que refrescar el token con func refreshToken() async throws -> String y reintentar la request una sola vez.
El problema real: al abrir una pantalla salen 5 requests en paralelo y todas reciben 401. Tiene que haber un solo refresh y las 5 requests tienen que reintentarse con el token nuevo. Si el refresh falla, se cierra la sesión.
# requisitos
Task del refresh).URLSession inyectada por protocolo para poder testearlo con respuestas fake.# si te sobra tiempo, te van a preguntar