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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python5 973
  • Облачные технологии4 523
  • QA вакансии1 689
  • Android1 143
  • Инженер данных788
  • Продакт-менеджер308

Разработка

  • iOS1 093
  • Backend вакансии1 020
  • Fullstack вакансии448
  • AI вакансии378
  • Frontend вакансии369
  • Mobile вакансии27

По стеку

  • Go3 345
  • Java2 037
  • Kotlin908
  • Node.js746
  • Rust492
  • .NET481
  • PHP278
  • C++213
  • C#199

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

  • Kubernetes2 562
  • Linux-инфраструктура2 030
  • DevOps вакансии1 855
  • Terraform / IaC1 548
  • CI/CD876
  • Мониторинг и Observability709
  • SRE229
  • Кибербезопасность40

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

  • Аналитик данных479
  • Data Scientist443
  • Бизнес-аналитик342
  • Системный аналитик50

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

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

По регионам

  • Вакансии в США24 039
  • Вакансии в Европе9 373
  • Работа в России2 968
  • Вакансии в Канаде2 114

По формату

  • Удалённые вакансии41 595
  • Релокация в США24 039
  • Гибридная работа3 695
  • Офисная работа2 766

По уровню

  • Senior вакансии20 330
  • Middle вакансии11 778
  • Junior вакансии3 695

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

Все компании
  • Rakuten189 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Wise81 вакансия
  • Infobip28 вакансий
  • Darktrace17 вакансий
  • Spotify17 вакансий
  • Celonis14 вакансий
  • UiPath13 вакансий
  • Adyen9 вакансий

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

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

Расскажите о случае, когда особенности Kotlin повлияли на архитектурное решение, производительность или сопровождение проекта.

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

Особенности Kotlin (data class, sealed class, extension functions, корутины) регулярно влияют на архитектуру: sealed class делает конечные автоматы exhaustive, extension functions разделяют ответственность без наследования.

Кейс 1: sealed class для конечных автоматов

В проекте на Ktor требовалось моделировать состояния платёжной транзакции. Java Enum не позволял нести данные. Kotlin sealed class решил задачу элегантно:

sealed class PaymentState {
    object Pending : PaymentState()
    data class Processing(val processorId: String) : PaymentState()
    data class Success(val transactionId: String, val amount: Long) : PaymentState()
    data class Failed(val code: String, val message: String) : PaymentState()
    data class Refunded(val refundId: String) : PaymentState()
}

fun handleState(state: PaymentState): String = when (state) {
    is PaymentState.Pending -> "Ожидание"
    is PaymentState.Processing -> "Обработка через ${state.processorId}"
    is PaymentState.Success -> "Успех: ${state.transactionId}"
    is PaymentState.Failed -> "Ошибка: ${state.message}"
    is PaymentState.Refunded -> "Возврат: ${state.refundId}"
    // Компилятор требует обработки всех случаев — exhaustive when
}

Архитектурный эффект: добавление нового состояния компилятор отмечает как ошибку во всех when-блоках без else — полная безопасность при рефакторинге.

Как особенности Kotlin влияют на архитектуру

Kotlin — не просто «Java с синтаксическим сахаром». Ряд языковых особенностей напрямую определяет архитектурные решения в production-проектах.

Кейс 2: extension functions вместо наследования

Нужно было добавить метод toDomain() к сгенерированным Protobuf-классам без изменения их кода:

// Protobuf-класс из другого модуля (изменить нельзя)
// class UserProto { val id: String; val email: String }

// Extension function в domain-модуле
fun UserProto.toDomain(): User = User(
    id = UserId(this.id),
    email = Email(this.email)
)

// Extension на коллекции
fun List<UserProto>.toDomain(): List<User> = map { it.toDomain() }

Это позволило держать маппинг в domain-слое без загрязнения Protobuf-классов или создания отдельных Mapper-классов.

Кейс 3: корутины и архитектура репозитория

Kotlin Coroutines изменили интерфейс репозитория: вместо RxJava Observable или callback — suspend functions и Flow:

interface UserRepository {
    suspend fun getUser(id: UserId): User          // одноразовый запрос
    fun observeUser(id: UserId): Flow<User>        // поток изменений
    suspend fun updateUser(user: User): Unit
}

class UserRepositoryImpl(
    private val api: UserApi,
    private val dao: UserDao
) : UserRepository {

    override suspend fun getUser(id: UserId): User =
        withContext(Dispatchers.IO) {
            dao.getUser(id.value) ?: api.fetchUser(id.value).also {
                dao.insert(it)
            }
        }

    override fun observeUser(id: UserId): Flow<User> =
        dao.observeUser(id.value) // Room возвращает Flow
            .map { it.toDomain() }
            .flowOn(Dispatchers.IO)
}

Кейс 4: data class и иммутабельность

Иммутабельные data class упростили concurrent доступ к состоянию — не нужны locks для чтения:

@Immutable
data class AppConfig(
    val apiUrl: String,
    val timeoutMs: Long,
    val retries: Int
)

// Обновление через copy() — потокобезопасно для чтения
val newConfig = config.copy(timeoutMs = 10_000L)
_config.value = newConfig // атомарное обновление StateFlow

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

  • data class copy() — поверхностное копирование; вложенные List/Map всё равно изменяемы.
  • sealed class из разных модулей требует rebuild всех зависимых при добавлении subclass.
  • Extension functions не имеют доступа к private-членам — иногда нужен refactoring для тестируемости.
  • companion object инициализируется при первом обращении к классу — lazy инициализация с побочными эффектами может удивить.
  • Flow без flowOn(Dispatchers.IO) выполняется на вызывающем диспетчере — блокирует Main поток.
  • when без else для не-sealed типов компилируется без ошибки — exhaustive проверка только для sealed.
  • operator fun invoke() на object может сбить с толку — выглядит как функция, является объектом.

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

  • Что такое structured concurrency в Kotlin?
  • Для каких задач Kotlin является сильным выбором, а где лучше честно выбрать другой язык?
  • В чём разница между val и var в Kotlin?
  • В чём разница между List и MutableList в Kotlin?

Что портит ответ

  • Выдумывать опыт или говорить слишком общими фразами
  • Не объяснять свою личную роль в работе с Kotlin
  • Не показывать результат, метрики или извлечённые уроки

Что слушает интервьюер

  • Может подготовить честный пример использования Kotlin
  • Показывает свою роль, решения и результат
  • Умеет рефлексировать над trade-offs и уроками

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

Проверить себя по теме Kotlin →
←Предыдущий вопросВ чём разница между `class`, `object` и `companion object` в Kotlin?Следующий вопрос→Что такое Kotlin Multiplatform (KMP) и Compose Multiplatform?

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

Kotlinexperience-storytellingtechnical-communicationtechnology-selectiontrade-off-analysis

Вакансии с этим навыком

Kotlin вакансии
  • Java Software Engineer, Shipping Calculation Platform Group - EC Logistics Development Department (ECLD)
  • Senior Software Engineer, Communication Platform Group - Marketing Cloud Platform Department (MCPD)
  • Senior Web Application Engineer (GORA) - Life & Leisure Service Development Department (LLSD)
  • Software Engineer
  • Mid/Senior Software Engineer