Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 412новых вакансий за сутки·55 411вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 671
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 396 кандидатов открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python8 728
  • Облачные технологии6 606
  • QA вакансии2 165
  • Android1 317
  • Инженер данных878
  • Продакт-менеджер314

Разработка

  • iOS1 229
  • Backend вакансии1 210
  • AI вакансии545
  • Fullstack вакансии500
  • Frontend вакансии422
  • Mobile вакансии28

По стеку

  • Go5 192
  • Java3 112
  • Kotlin1 085
  • Node.js992
  • Rust846
  • .NET660
  • PHP319
  • C++266
  • C#208

DevOps и инфраструктура

  • Kubernetes3 904
  • Linux-инфраструктура2 843
  • DevOps вакансии2 684
  • Terraform / IaC2 162
  • Мониторинг и Observability1 062
  • CI/CD921
  • SRE303
  • Кибербезопасность31

Аналитика и данные

  • Аналитик данных537
  • Data Scientist445
  • Бизнес-аналитик402
  • Системный аналитик68

Другие направления

  • Проджект-менеджер103
  • UI/UX дизайн70
  • Ручное тестирование14

По регионам

  • Вакансии в США26 186
  • Вакансии в Европе10 369
  • Работа в России3 628
  • Вакансии в Канаде2 306

По формату

  • Удалённые вакансии43 484
  • Релокация в США26 186
  • Гибридная работа5 597
  • Офисная работа4 383

По уровню

  • Senior вакансии22 724
  • Middle вакансии11 726
  • Junior вакансии3 874

Сейчас нанимают

Все компании
  • Rakuten189 вакансий
  • Wise186 вакансий
  • ASML164 вакансии
  • Grab135 вакансий
  • Celonis45 вакансий
  • Spotify37 вакансий
  • Infobip28 вакансий
  • Adyen26 вакансий
  • Monzo19 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме Kotlin MultiplatformВсе вопросы
Kotlin MultiplatformSeniorПроектирование систем

Каковы основные сложности при внедрении KMP в существующий проект?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Начинайте с изолированного shared-модуля под один сценарий — например, слой данных. Главный риск: общий модуль без явного владельца замедляет обе команды и накапливает платформенные утечки.

Стратегия внедрения

Начинайте с одного изолированного сценария: например, слой сетевых запросов или локального кэша. Убедитесь, что shared-модуль не тянет за собой Android SDK.

// build.gradle.kts (shared-модуль)
kotlin {
    androidTarget()
    iosArm64()
    iosSimulatorArm64()

    sourceSets {
        commonMain.dependencies {
            implementation(libs.ktor.client.core)
            implementation(libs.kotlinx.coroutines.core)
        }
        androidMain.dependencies {
            implementation(libs.ktor.client.okhttp)
        }
        iosMain.dependencies {
            implementation(libs.ktor.client.darwin)
        }
    }
}

// commonMain: контракт без платформенных деталей
class TokenRepository(private val api: AuthApi, private val store: TokenStore) {
    suspend fun refreshIfNeeded(): String {
        val cached = store.read() ?: return fetchAndStore()
        return if (cached.isExpired()) fetchAndStore() else cached.value
    }
    private suspend fun fetchAndStore(): String {
        val token = api.refresh()
        store.write(token)
        return token.value
    }
}

Основные сложности при внедрении KMP

Внедрение KMP в живой проект отличается от старта с нуля: нужно сохранить работоспособность Android и iOS, не сломать CI и договориться с двумя командами об ownership общего кода. Типичные сложности делятся на технические, организационные и операционные.

Технические сложности

  • Gradle-конфигурация — добавление KMP-плагина меняет структуру source set-ов; существующие Android-модули нужно мигрировать на androidTarget() вместо com.android.library.
  • Platform-specific зависимости — библиотеки без KMP-артефактов (OkHttp, некоторые Room API) требуют expect/actual-обёрток или замены на multiplatform-аналоги (Ktor, SQLDelight).
  • Swift/ObjC interop — публичный API из commonMain транслируется через Kotlin/Native; suspend-функции, generics и sealed-классы требуют дополнительного слоя адаптеров для Swift.
  • Параллельные сборки — XCFramework нужно генерировать в CI, что увеличивает время сборки и требует macOS-агентов.

Организационные сложности

  • Ownership — без явного владельца shared-модуль деградирует: Android-команда добавляет Android-зависимости, iOS-команда не может их заменить.
  • Контракт с iOS — нужно договориться об API-стабильности до публикации XCFramework; любой breaking change требует синхронного релиза на обеих платформах.
  • Обучение — iOS-разработчики должны понимать Kotlin-идиомы (Flow, sealed class), Android-разработчики — ограничения Kotlin/Native.

Операционные сложности

  • CI должен собирать и тестировать все targets; без этого проблемы обнаруживаются только на устройстве.
  • Rollback-план: если shared-код ломает iOS, нужна возможность быстро вернуться к нативной реализации без релиза Android.
  • Observability: логи и краш-репорты должны коррелировать с версией XCFramework, а не только с версией приложения.

Подводные камни

  • Добавление Android-зависимости в commonMain вместо androidMain — компилируется, но ломает iOS-сборку в runtime.
  • Использование Dispatchers.Main в common-коде без expect/actual — на iOS Main dispatcher не инициализирован автоматически до вызова MainScope().
  • Публикация suspend-функций напрямую в Swift без обёртки — iOS-код получает нечитаемые callback-и через KotlinUnit.
  • Отсутствие hermetic-тестов для common-модуля — ошибки в бизнес-логике обнаруживаются только при запуске на устройстве.
  • Один XCFramework на весь проект — любое изменение требует пересборки и обновления SPM/CocoaPods-зависимости в iOS-проекте.
  • Игнорирование iosSimulatorArm64 при добавлении нового target — разработчики на Apple Silicon не могут запустить симулятор.
  • Shared ViewModel с Android lifecycle — ViewModel из Jetpack недоступен в commonMain; нужен KMP-совместимый аналог (decompose, moko-mvvm).
  • Миграция всего проекта сразу — резко увеличивает зону риска; iterative migration по модулям безопаснее.

Частые вопросы на собеседовании

  • Что такое структура source set: commonMain, androidMain, iosMain?
  • Какой код можно разделять между платформами, а какой должен оставаться платформо-зависимым?
  • Как структурировать KMP-проект (shared module, платформо-зависимые модули)?
  • Что такое Kotlin Multiplatform (KMP) и какие платформы он поддерживает?

Типичные ошибки

  • Объяснять «внедрение KMP в существующий проект» только как синтаксис и не описывать поведение runtime/compiler.
  • Игнорировать важный риск: Главный риск - создать общий модуль, который замедляет обе команды и не имеет ответственного владельца.
  • Давать пример без edge case: отмены, null, recomposition, platform boundary или ошибки.

Что проверяет интервьюер

  • Формулирует суть темы «внедрение KMP в существующий проект» своими словами и связывает ее с кодом.
  • Называет механизм: Нужны границы ownership, CI для всех targets, контракт с iOS-командой, observability, rollback и migration plan.
  • Видит production-последствие: Главный риск - создать общий модуль, который замедляет обе команды и не имеет ответственного владельца.

Как вы знаете этот вопрос?

Проверить себя по теме Kotlin Multiplatform →

Источники

  • https://developer.android.com/kotlin/multiplatform
  • https://kotlinlang.org/docs/multiplatform/multiplatform-share-on-platforms.html
←Предыдущий вопросЧто такое Compose Multiplatform и как он связан с KMP?Следующий вопрос→Каковы build-таргеты в KMP (jvm, android, iosArm64, iosSimulatorArm64 и др.)?

Связанные темы

Kotlin Multiplatformadopting-kmp-existing-project-reasoningplatform-boundaries