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.
Diseñá el repositorio de una lista de tareas que funciona sin conexión. La fuente de verdad es una base local (Room o un fake en memoria) y existe una API TasksApi con getTasks(), createTask() y updateTask().
La UI observa las tareas como Flow<List<Task>> y las ve al instante aunque no haya red. Las tareas creadas o editadas offline se marcan como pendientes de sync y se envían cuando vuelve la conexión.
# requisitos
updatedAt) y explicala.# si te sobra tiempo, te van a preguntar
Implementá suspend fun <T, R> List<T>.mapConcurrently(limit: Int, transform: suspend (T) -> R): List<R>. Ejecuta transform sobre todos los elementos en paralelo, pero con como máximo limit corriendo al mismo tiempo, y devuelve los resultados en el orden original.
Caso de uso: subir 50 fotos a un servidor que no acepta más de 4 uploads simultáneos. Si una falla, el resto se cancela y el error se propaga al llamador.
# requisitos
coroutineScope.Semaphore (o un pool de workers con Channel).limit tareas activas.# si te sobra tiempo, te van a preguntar
coroutineScope y supervisorScope acá?Armá la pantalla de una conversación de chat. Los mensajes llegan desde fun messages(chatId: String): Flow<List<Message>>, donde Message es data class Message(val id: String, val text: String, val fromMe: Boolean, val sentAt: Instant, val status: Status). El fake emite un mensaje nuevo cada 2 segundos y la conversación ya tiene 2.000 mensajes.
Los mensajes nuevos aparecen abajo. Si el usuario está leyendo más arriba, no se lo debe mover; en su lugar aparece un botón de nuevos mensajes. Abajo hay un input para enviar.
# requisitos
LazyColumn con reverseLayout = true, keys estables y contentType por tipo de burbuja.imePadding.# si te sobra tiempo, te van a preguntar
LruCache para imágenes.