~/pcn $ iniciando_

programaConNosotros

Iniciar sesiónCrear cuenta
  • programaConNosotrosprogramaConNosotrosComunidad · desde 2020
  • Inicio
  • Feed
Actividades
  • Eventos
  • Conversaciones
  • Charlas
  • Podcast
  • Desarrollo
Recursos
  • Cursos
  • Lectura
  • Videos
  • Especialidades
  • Herramientas
  • Proyectos
  • Entrevistas
Comunidad
  • Historia
  • Miembros
  • Logros
  • Galería
  • Setups
  • Partners
  • Changelog
SoporteFeedback

~/entrevistas/live-coding

enunciados + leetcode

[simulador][guías][live coding]

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.

# 1. tecnología

[ ]Frontend · React.jsweb, hooks, Next.js[x]Frontend · iOSSwift, SwiftUI, UIKit[ ]Frontend · AndroidKotlin, Jetpack Compose[ ]Frontend · React NativeExpo, iOS y Android[ ]Backend · Node.jsExpress, NestJS[ ]Backend · PythonDjango, FastAPI[ ]Backend · JavaSpring Boot[ ]Backend · .NETC#, ASP.NET Core[ ]AI engineeringconstruir agentes de IA[ ]Agentic engineeringdesarrollar con agentes[ ]Quality engineeringtesting manual y automatizado

# 2. seniority

[ ]Junior[ ]Semi-senior[x]Senior

# ejercicios (resolvelos por tu cuenta, con el tiempo que darían en la entrevista)

01Image loader con cache y deduplicaciónQue domines concurrencia con actores, manejo de memoria, reciclado de celdas y performance de scroll en un caso de producción.60 min

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

  • -El loader es un actor (o está correctamente sincronizado) y guarda las descargas en vuelo en un diccionario de Task.
  • -Cache en memoria con NSCache y límite de costo; opcionalmente cache en disco.
  • -La celda cancela su tarea en prepareForReuse y verifica que la imagen recibida corresponda a su URL actual.
  • -Las imágenes se decodifican o redimensionan fuera del main thread antes de mostrarse.
  • -Si una tarea se cancela y otra celda esperaba la misma URL, la otra no se ve afectada.

# si te sobra tiempo, te van a preguntar

  • -¿Cómo reaccionarías a una advertencia de memoria del sistema?
  • -¿Cómo agregarías prefetching con UICollectionViewDataSourcePrefetching?
  • -¿Qué cambiarías para usarlo desde SwiftUI?
  • -¿Cómo medirías si el scroll se mantiene a 60 o 120 fps?
02Cache LRU genérico y thread-safeQue diseñes estructuras de datos eficientes en Swift y razones sobre gestión de memoria y seguridad entre hilos.45 min

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

  • -Tanto leer como escribir son O(1), usando diccionario más lista doblemente enlazada.
  • -Se puede usar desde varios hilos sin data races (actor, lock o cola serial; justificá la elección).
  • -Leer un valor lo marca como usado recientemente.
  • -Cuidá los ciclos de retención en los nodos de la lista.
  • -Escribí tests para el orden de desalojo y para acceso concurrente.

# si te sobra tiempo, te van a preguntar

  • -¿Por qué no alcanza con NSCache si necesitás orden LRU estricto?
  • -¿Cómo agregarías expiración por tiempo?
  • -¿Qué diferencia de performance y ergonomía tiene un actor frente a un lock?
03Cliente HTTP con refresh de tokenQue resuelvas concurrencia compartida y manejo de errores en una capa de red, con diseño testeable y pensando en casos de producción.60 min

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

  • -Un solo refresh en curso a la vez, compartido por todas las requests que lo necesiten (por ejemplo un actor que guarda la Task del refresh).
  • -Cada request se reintenta como máximo una vez tras el refresh.
  • -Errores tipados que distingan red, decodificación, no autorizado y servidor.
  • -URLSession inyectada por protocolo para poder testearlo con respuestas fake.
  • -Si el refresh falla se notifica a la app para volver al login.

# si te sobra tiempo, te van a preguntar

  • -¿Cómo agregarías reintentos con backoff para errores de red o 5xx?
  • -¿Dónde y cómo guardarías los tokens?
  • -¿Cómo testearías que solo hubo un refresh con 5 requests concurrentes?
  • -¿Qué cambiaría si refrescaras el token de forma proactiva antes de que expire?

# leetcode recomendado (Frontend · iOS · Senior)

MediumLRU CacheDiccionario más lista doblemente enlazada; aparece seguido en entrevistas iOS porque se usa en caches de imágenes.
MediumMerge IntervalsOrdenar y fusionar rangos, típico para calendarios, reservas o rangos de tiempo en la UI.
MediumCourse ScheduleDetección de ciclos y orden topológico, la misma lógica que resolver dependencias entre módulos.
HardSerialize and Deserialize Binary TreeDiseñar un formato de serialización y reconstruirlo, parecido a persistir estado complejo.
HardMerge k Sorted ListsUso de un heap o divide and conquer; Swift no trae heap de serie, así que mide si podés implementarlo.
HardFind Median from Data StreamDos heaps balanceados para datos en streaming; prueba diseño de estructuras bajo restricciones de complejidad.
$ progreso --live-codingFrontend · iOS · Senior

ejercicios0/3

leetcode0/6

$ cat guias/live-coding

Cómo encarar un live coding: el método para resolver en voz alta, complejidad, los patrones más frecuentes y cómo practicar.

leer la guía de live coding