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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 126
  • Облачные технологии14 083
  • QA вакансии3 456
  • Backend вакансии2 115
  • Инженер данных1 809
  • Продакт-менеджер1 261

Разработка

  • Android1 862
  • iOS1 700
  • Fullstack вакансии986
  • AI вакансии950
  • Frontend вакансии744
  • Mobile вакансии44

По стеку

  • Go8 688
  • Java6 537
  • Node.js2 026
  • .NET1 722
  • Kotlin1 611
  • Rust1 458
  • C#710
  • PHP682
  • C++571

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

  • Kubernetes7 772
  • DevOps вакансии6 054
  • Linux-инфраструктура5 493
  • Terraform / IaC4 275
  • CI/CD3 239
  • Мониторинг и Observability1 790
  • SRE568
  • Кибербезопасность458

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

  • Data Scientist1 143
  • Бизнес-аналитик923
  • Аналитик данных857
  • Системный аналитик152

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

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

По регионам

  • Вакансии в США44 276
  • Вакансии в Европе23 819
  • Вакансии в Канаде4 471
  • Работа в России3 904

По формату

  • Удалённые вакансии74 928
  • Релокация в США44 273
  • Гибридная работа12 388
  • Офисная работа7 083

По уровню

  • Senior вакансии42 625
  • Middle вакансии20 854
  • Junior вакансии6 721

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • 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