Resolución activa de problemas
Prompts de Práctica
Inténtalo antes de revelar. Cada prompt de código y diseño de sistema se desarrolla por etapas — enfoque, luego solución — para que practiques recuperación, no reconocimiento. Marca lo que resolviste; revisita el resto.
- CódigoMid
Debounce de un Flow (entrada de búsqueda)
flowcoroutinesoperatorsDado un
Flow<String>de texto de caja de búsqueda, produce un stream que solo emite después de que el usuario pausa la escritura por 300ms y omite consultas consecutivas duplicadas. Luego explica por quéflatMapLatestes la forma correcta de ejecutar la búsqueda real.próximo: nuevo - CódigoSenior
Retry de coroutine con backoff exponencial
coroutinesresilienceEscribe un
suspend fun <T> retry(times, initialDelay, maxDelay, factor, block)genérico que reintente unblocksuspend en fallo con backoff exponencial, se rinda después detimesintentos, y nunca trague cancelación.próximo: nuevo - CódigoSenior
LRU cache thread-safe en Kotlin
kotlindata-structuresconcurrencyImplementa un LRU cache de capacidad fija con get/put O(1). Hazlo seguro para acceso concurrente de coroutines. ¿Qué evita, y cómo mantienes O(1)?
próximo: nuevo - CódigoSenior
Reducer MVI con un Intent sealed
mvistatekotlinModela una pantalla de contador con MVI: un
UiStateinmutable, unIntentsealed, y unreduce(state, intent): statepuro. Muestra por qué la pureza e inmutabilidad ayudan al testing.próximo: nuevo - CódigoMid
ViewModel con StateFlow que sobrevive muerte del proceso
viewmodelsavedstatehandlestateEscribe un ViewModel que exponga un contador como
StateFlow<Int>que sobreviva tanto rotación como muerte del proceso, con increment/decrement. ¿Qué APIs garantizan cada uno?próximo: nuevo - CódigoSenior
Repository offline-first (Room + red)
architectureroomflowImplementa un repository donde la UI observa Room (fuente de verdad) y un
refresh()lo actualiza desde la red. ¿Por qué esto da stale-while-revalidate gratis?próximo: nuevo - CódigoMid
Parsing seguro de JSON con kotlinx.serialization
kotlinserializationerror-handlingParsea una respuesta de API en un modelo tipado con
kotlinx.serialization, tolerando campos desconocidos/extras, y retorna unResulten lugar de lanzar a la UI. ¿Por qué validar en el límite?próximo: nuevo - CódigoSenior
Modifier Compose personalizado: offset de lectura diferida
composeperformancemodifierAnimas la posición horizontal de un elemento desde un estado que cambia rápido. Muestra la versión que se recomposición cada frame y la que no, y explica por qué.
próximo: nuevo - DiseñoSenior
Diseña una funcionalidad de chat en tiempo real
architecturereal-timeoffline-firstDiseña chat 1:1: entrega en tiempo real, historial de mensajes, envío offline, y acuses de lectura. Cubre transporte, capa de datos, ordenamiento, y compensaciones.
próximo: nuevo - DiseñoSenior
Diseña subida de imágenes confiable con una cola offline
workmanagerofflineresilienceLos usuarios seleccionan fotos que deben subirse de forma confiable incluso si la app se mata o está offline. Diseña la cola, reintentos, progreso, y restricciones.
próximo: nuevo - DiseñoArquitecto
Diseña un sistema de feature flags / experimentos
architectureexperimentationreleaseDiseña feature flags de lado cliente y experimentos A/B: cómo se obtienen, cachean, evalúan, y mantienen consistentes — además de kill switches y analíticas. ¿Compensaciones?
próximo: nuevo - DiseñoSenior
Diseña analíticas / seguimiento de eventos en el cliente
architectureanalyticsbatchingDiseña un pipeline de analíticas del cliente: capturar eventos, agruparlos, sobrevivir offline y muerte del proceso, y evitar bloquear la UI o agotar la batería. ¿Compensaciones?
próximo: nuevo - DiseñoMid
Diseña un limitador de tasa de token-bucket para llamadas API
concurrencyresiliencekotlinDebes limitar las solicitudes salientes a N por segundo en toda la app, seguro para coroutines. Diseña un token-bucket y cómo se integra con OkHttp/coroutines. ¿Compensaciones vs limitación del lado del servidor?
próximo: nuevo