~/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[x]Semi-senior[ ]Senior

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

01Feed paginado con async/awaitQue estructures una pantalla real con concurrencia moderna, estados de UI explícitos y dependencias testeables.45 min

Implementá un feed de posts que carga de a páginas desde GET https://api.example.com/posts?page=1&limit=20, que devuelve { "items": [{ "id": 1, "title": "...", "body": "..." }], "hasMore": true }. Mockeá el cliente con un protocolo PostsService y una implementación fake con delay.

Al llegar cerca del final de la lista se pide la página siguiente. Se puede hacer pull to refresh para volver a la primera página.

# requisitos

  • -Arquitectura MVVM con un view model @Observable o ObservableObject marcado @MainActor.
  • -Estado modelado como enum o similar: cargando, cargado, vacío y error con reintento.
  • -No se dispara más de un request de paginación a la vez y no se pide más cuando hasMore es false.
  • -Pull to refresh con .refreshable.
  • -El servicio se inyecta por protocolo para poder testear el view model con un fake.

# si te sobra tiempo, te van a preguntar

  • -¿Qué pasa si el usuario hace pull to refresh mientras se está cargando la página 3?
  • -¿Cómo cachearías el feed para mostrar algo al abrir la app sin conexión?
  • -¿Cómo lo harías con UICollectionView y diffable data source?
  • -¿Cómo testearías el view model?
02Búsqueda con debounce y cancelaciónQue entiendas la cancelación cooperativa en Swift Concurrency y cómo evitar race conditions en la UI.45 min

Agregá una búsqueda de productos que consulta func search(_ query: String) async throws -> [Product] a medida que el usuario escribe. El servicio mockeado tarda un tiempo aleatorio entre 100 y 800 ms.

No querés pegarle al servicio en cada tecla, y nunca deberías mostrar resultados de un query viejo que llegó tarde.

# requisitos

  • -Debounce de 300 ms, ya sea con .task(id:) y Task.sleep o con Combine.
  • -Cada búsqueda nueva cancela la anterior y la cancelación no se muestra como error.
  • -Solo se busca a partir de 2 caracteres; con menos se limpian los resultados.
  • -Estados de cargando, sin resultados y error.

# si te sobra tiempo, te van a preguntar

  • -¿Qué diferencias hay entre resolverlo con Combine y con structured concurrency?
  • -¿Cómo verificás que una tarea fue cancelada dentro del servicio?
  • -¿Cómo lo testearías sin esperar tiempos reales?
03Extensiones genéricas sobre SequenceQue te sientas cómodo con generics, protocolos de la standard library, closures y key paths en Swift.30 min

Escribí dos extensiones genéricas. La primera, func grouped<Key: Hashable>(by key: (Element) -> Key) -> [Key: [Element]] sobre Sequence. La segunda, func uniqued<Key: Hashable>(by key: (Element) -> Key) -> [Element], que elimina duplicados conservando el primer elemento de cada clave y el orden original.

Ejemplo: con [Order(customer: "ana", total: 10), Order(customer: "beto", total: 5), Order(customer: "ana", total: 7)], grouped(by: \.customer) devuelve ["ana": [10, 7], "beto": [5]] (mostrando los totales) y uniqued(by: \.customer) devuelve los pedidos de 10 y 5.

# requisitos

  • -Las dos funciones son O(n).
  • -Funcionan con key paths gracias a que un key path se puede pasar como función.
  • -No dependen de que Element sea Hashable, solo la clave.
  • -Incluí un par de casos de prueba con XCTest o Swift Testing.

# si te sobra tiempo, te van a preguntar

  • -¿Cómo harías grouped usando Dictionary(grouping:by:)? ¿Qué cambia?
  • -¿Qué ventaja tendría que uniqued devuelva una secuencia lazy?
  • -¿Qué son los associated types y cómo se relacionan con Element?

# leetcode recomendado (Frontend · iOS · Semi-senior)

EasyBest Time to Buy and Sell StockUn recorrido con mínimo acumulado; entrena pensar en una sola pasada.
EasyMerge Sorted ArrayDos punteros trabajando desde el final del array, útil para mergear listas ordenadas en memoria.
MediumGroup AnagramsAgrupar con claves derivadas en un diccionario, lo mismo que hacés al seccionar una lista.
MediumTop K Frequent ElementsCombina conteo con bucket sort o heap; es muy común en entrevistas de nivel medio.
MediumProduct of Array Except SelfPrefijos y sufijos sin división; mide si podés optimizar espacio y tiempo.
MediumBinary Tree Level Order TraversalBFS con cola sobre árboles, el patrón para recorrer jerarquías por niveles.
MediumNumber of IslandsDFS o BFS sobre una grilla, uno de los problemas de grafos más pedidos.
$ progreso --live-codingFrontend · iOS · Semi-senior

ejercicios0/3

leetcode0/7

$ 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