Какие технологии используются для запуска приложения в компании (Ktor, SQLDelight, Compose Multiplatform)?
Что проверяют
Понимаете ли вы, что эти три библиотеки вместе означают Kotlin Multiplatform: общий код для Android и iOS, а не набор модных названий. Следом спрашивают, что остаётся платформенным и где у такого стека болит.
Как отвечать
Сначала контекст. Код лежит в общем модуле с source sets commonMain, androidMain, iosMain, различия платформ закрываются через expect/actual или интерфейсы с DI, чаще всего Koin, потому что Hilt в общем коде не работает.
- Ktor Client: в мобильном приложении это HTTP-клиент, а не сервер. Код запросов пишется один раз, а под капотом платформенные движки: OkHttp на Android, Darwin на iOS. Плагины
ContentNegotiationсkotlinx.serialization,HttpTimeout,Logging,Authдля токенов, всё на корутинах; - SQLDelight: вы пишете SQL в файлах
.sq, а плагин генерирует типобезопасный Kotlin API. Запросы проверяются при сборке, миграции лежат в.sqm. Драйверы платформенные,AndroidSqliteDriverиNativeSqliteDriver, а результаты можно получать какFlowчерез расширение для корутин; - Compose Multiplatform: UI-фреймворк JetBrains на базе Jetpack Compose, позволяет делить экраны между Android, iOS и десктопом. iOS-таргет объявлен стабильным в 2025 году. Нативные экраны встраиваются через
UIKitViewиUIKitViewController.
Закончите компромиссами. Общая логика, сеть и база окупаются почти всегда, а общий UI это отдельное решение: на iOS добавляется свой рендеринг и растёт размер приложения, поведение текстовых полей, прокрутки и доступности нужно проверять руками. Для локальной базы в KMP сейчас есть и альтернатива: Room тоже стал мультиплатформенным.
Где спотыкаются
Рассказывают про Ktor как про серверный фреймворк. На мобильном собеседовании это сигнал, что с KMP вы руками не работали.
Считают, что на iOS «всё заработает само». Интервьюер ждёт, что вы знаете про платформенные вещи: жизненный цикл, навигацию, разрешения, клавиатуру, вызов suspend-функций из Swift.
Путают SQLDelight с ORM. Это генератор кода из SQL: связи вы описываете запросами, а не аннотациями, и ленивой подгрузки связанных сущностей там нет.