Вопросы на собеседовании по Kotlin 2026: корутины, Android и KMP
Разбор сложных вопросов для Senior Kotlin разработчиков в 2026 году. Глубокое погружение в Coroutines, Compose Multiplatform и архитектуру KMP.
Разбор сложных вопросов по Kotlin 2.1+: K2 compiler, Context Receivers, корутины и управление памятью. Подготовка для Middle и Senior.
С выходом Kotlin 2.1 и стабилизацией компилятора K2 требования к разработчикам изменились. Если раньше достаточно было знать разницу между val и var, то сегодня на собеседованиях в топ-тех компании (Авито, Т-Банк, Ozon) спрашивают про фазы компиляции, работу IR (Intermediate Representation) и влияние Context Parameters на архитектуру приложений.
Вопрос о inline функциях стал сложнее. Теперь интервьюеры просят объяснить не только экономию на создании объектов лямбд, но и влияние на размер бинарного файла в крупных проектах. В 2026 году при использовании Compose Multiplatform чрезмерный инлайнинг может привести к раздуванию кэша компиляции. Нужно понимать разницу между inline, noinline и crossinline в контексте нелокальных возвратов (non-local returns).
С развитием проекта Valhalla в JVM, Kotlin-разработчики должны уметь использовать value class для исключения аллокаций в куче. На Backend-собеседованиях часто просят спроектировать систему обработки финансовых транзакций, где id и суммы обернуты в value-классы, и объяснить, в каких случаях произойдет боксинг (например, при использовании в Generic-типах).
Стандартный вопрос про CoroutineScope теперь дополняется сценариями утечек памяти в Android-фрагментах или зависанием запросов в Ktor/Spring Boot. Важно понимать работу Job и SupervisorJob. Ошибка в иерархии джобов — классический способ завалить секцию Live Coding.
В Android-разработке 2026 года StateFlow полностью вытеснил LiveData. На собеседовании могут спросить:
1. Почему StateFlow требует начальное значение, а SharedFlow нет?
2. Как работает replay и зачем нужен BufferOverflow.DROP_OLDEST в системах событийного маркетинга.
3. В чем разница между collect и collectLatest при обработке быстрых потоков данных от сенсоров.
Если вы претендуете на Senior-позицию, знание KMP обязательно. Основные темы:
— Механизм expect/actual и его альтернативы через DI (Dependency Injection).
— Управление памятью в Kotlin/Native (актуальные изменения после отказа от старой модели памяти).
— Организация общей бизнес-логики между Android, iOS и Backend на базе Ktor Client и Serialization.
В 2026 году Kotlin в бэкенде — это не только Spring Boot, но и активное использование Ktor 3.0. Вопросы часто касаются:
— Coroutines на JVM: как они соотносятся с Virtual Threads (Project Loom).
— Exposed или SQLDelight: выбор ORM/Query builder для типобезопасной работы с БД.
— Context Receivers (Context Parameters): как они упрощают внедрение зависимостей без тяжелых DI-фреймворков.
Jetpack Compose стал безальтернативным. На интервью проверяют понимание фаз композиции:
1. Composition: построение дерева.
2. Layout: расчет координат.
3. Drawing: отрисовка.
Критически важно уметь объяснять концепцию Stability и использование аннотаций @Stable и @Immutable для предотвращения лишних рекомпозиций.
CoroutineDispatcher — это абстракция, которая решает, на каком ресурсе выполнять корутину. Thread Pool — это набор физических потоков ОС. Одна корутина может начать выполнение на одном потоке и после приостановки (suspend) продолжить на другом, если используется Dispatchers.Default. Это позволяет эффективно использовать ресурсы без блокировки потоков.
K2 использует новую унифицированную архитектуру и IR (Intermediate Representation). Он исключает дублирование фаз анализа для разных платформ в KMP и быстрее обрабатывает сложные типы данных. В проектах на 500+ модулей скорость компиляции в 2026 году выросла на 30-50% по сравнению с версиями 1.9.
Они позволяют передавать зависимости в функции неявно, не загромождая список аргументов и не используя расширения (extensions) там, где это логически неоправданно. Это чистая альтернатива ThreadLocal и упрощенный способ реализации паттерна Cake или DI на уровне языка.
Cold Flow (обычный flow) начинает работу только при появлении терминального оператора (collect) и создает новый поток данных для каждого подписчика. Hot Flow (StateFlow, SharedFlow) вещает данные независимо от наличия подписчиков и хранит состояние или историю событий.
Нужно использовать lifecycle-aware области видимости, такие как lifecycleScope или viewModelScope. Они автоматически отменяют все запущенные корутины при уничтожении Activity/Fragment или очистке ViewModel, предотвращая удержание ссылок на контекст.
Узнайте актуальные зарплаты мобильных разработчиков
Смотреть зарплаты