~/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[ ]Frontend · iOSSwift, SwiftUI, UIKit[x]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)

01Lista paginada con UiStateQue modeles estados de UI completos, manejes concurrencia con coroutines y estructures una pantalla real con arquitectura recomendada.45 min

Implementá una pantalla de noticias que carga de a páginas desde un repositorio interface NewsRepository { suspend fun getPage(page: Int): List<Article> }. Hacé un fake que tarda 700 ms, devuelve 20 artículos por página, se queda sin datos en la página 5 y falla aleatoriamente un 20% de las veces.

Cuando el usuario llega cerca del final se carga la página siguiente. Si falla, se muestra un ítem al final con un botón para reintentar, sin perder lo ya cargado.

# requisitos

  • -El ViewModel expone un único StateFlow<NewsUiState> modelado con una sealed interface o un data class.
  • -No se piden dos páginas a la vez ni se sigue pidiendo cuando no hay más datos.
  • -Distinguí error de la primera carga (pantalla completa) de error de paginación (ítem al final).
  • -Detectá el final de la lista a partir del LazyListState.
  • -El repositorio se inyecta (Hilt o constructor) para poder testear con el fake.

# si te sobra tiempo, te van a preguntar

  • -¿Qué te daría Paging 3 y cuándo no lo usarías?
  • -¿Cómo agregarías pull to refresh?
  • -¿Cómo evitarías recomposiciones innecesarias de toda la lista al agregar una página?
  • -¿Cómo testearías el ViewModel con runTest y un dispatcher de test?
02Búsqueda reactiva con FlowQue domines Flow y sus operadores para resolver casos reactivos reales con cancelación correcta.45 min

Implementá una búsqueda de películas que consulta suspend fun search(query: String): List<Movie> a medida que el usuario escribe. El fake tarda entre 100 y 800 ms de forma aleatoria.

El texto del input llega al ViewModel como MutableStateFlow<String>. Armá con operadores de Flow el StateFlow de resultados que consume la UI, sin que nunca se muestren resultados de un query anterior.

# requisitos

  • -Debounce de 300 ms y distinctUntilChanged.
  • -Cada query nuevo cancela el anterior con flatMapLatest o mapLatest.
  • -Con menos de 2 caracteres no se busca y se muestran resultados vacíos.
  • -Los errores se manejan sin cortar el flow, de modo que la búsqueda siga funcionando después de un fallo.
  • -El resultado se expone con stateIn usando SharingStarted.WhileSubscribed(5_000).

# si te sobra tiempo, te van a preguntar

  • -¿Por qué WhileSubscribed(5_000) y no Eagerly?
  • -¿Qué diferencia hay entre StateFlow y SharedFlow?
  • -¿Cómo testearías el debounce con Turbine y tiempo virtual?
03Función retry con backoff exponencialQue entiendas coroutines, cancelación cooperativa y funciones de orden superior con lambdas suspendidas en Kotlin.30 min

Implementá suspend fun <T> retry(times: Int = 3, initialDelayMs: Long = 500, factor: Double = 2.0, shouldRetry: (Throwable) -> Boolean = { true }, block: suspend () -> T): T.

Ejecuta block y, si falla con un error que shouldRetry acepta, espera y vuelve a intentar con un delay que crece de forma exponencial: 500 ms, 1000 ms, 2000 ms. Si se agotan los intentos, propaga el último error.

# requisitos

  • -Usá delay, no Thread.sleep.
  • -Una CancellationException nunca se reintenta y siempre se propaga.
  • -Respetá shouldRetry para no reintentar, por ejemplo, un error 400.
  • -Testeala con runTest verificando la cantidad de intentos y los delays.

# si te sobra tiempo, te van a preguntar

  • -¿Para qué sirve agregar jitter al delay?
  • -¿Qué pasa si no relanzás la CancellationException?
  • -¿Cómo lo expresarías como operador de Flow con retryWhen?

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

EasyRansom NoteConteo de frecuencias con un array o mapa, rápido para calentar en la entrevista.
EasyIsomorphic StringsMapeos biyectivos con dos mapas; entrena detectar casos borde.
MediumLongest Substring Without Repeating CharactersEl ejemplo más pedido de sliding window con hash map.
MediumMin StackDiseñar una clase con invariantes en O(1), parecido a lo que piden en preguntas de diseño de componentes.
MediumDecode StringPilas anidadas o recursión para parsear, muy frecuente en entrevistas Android.
MediumDaily TemperaturesMonotonic stack, un patrón que resuelve muchos problemas de siguiente mayor o menor.
MediumKth Largest Element in an ArrayUso de PriorityQueue o quickselect; mide si conocés las estructuras de la standard library.
$ progreso --live-codingFrontend · Android · 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