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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python15 974
  • Облачные технологии12 746
  • QA вакансии3 431
  • Backend вакансии1 983
  • Инженер данных1 590
  • Продакт-менеджер1 097

Разработка

  • Android1 792
  • iOS1 660
  • AI вакансии924
  • Fullstack вакансии835
  • Frontend вакансии702
  • Mobile вакансии36

По стеку

  • Go8 484
  • Java5 803
  • Node.js1 814
  • Kotlin1 510
  • .NET1 432
  • Rust1 405
  • PHP591
  • C#500
  • C++450

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

  • Kubernetes7 088
  • DevOps вакансии5 330
  • Linux-инфраструктура5 148
  • Terraform / IaC3 908
  • CI/CD2 190
  • Мониторинг и Observability1 724
  • SRE539
  • Кибербезопасность367

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

  • Data Scientist977
  • Бизнес-аналитик828
  • Аналитик данных809
  • Системный аналитик111

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

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

По регионам

  • Вакансии в США44 024
  • Вакансии в Европе19 966
  • Вакансии в Канаде4 349
  • Работа в России3 875

По формату

  • Удалённые вакансии72 075
  • Релокация в США44 024
  • Гибридная работа10 789
  • Офисная работа6 889

По уровню

  • Senior вакансии39 966
  • Middle вакансии19 556
  • Junior вакансии6 496

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

Все компании
  • Wise194 вакансии
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab134 вакансии
  • Celonis45 вакансий
  • Spotify37 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

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

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

Как понять, что команда использует Kotlin идиоматично, а не переносит привычки из другого языка?

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

Идиоматичный Kotlin виден в коде: extension functions вместо utility-классов, sealed/data classes вместо if-instanceof, корутины с правильным scope, отсутствие !! в production-коде.

1. API-дизайн с extension functions

Команда не создаёт XxxUtils и XxxHelper классы — вместо этого расширяет существующие типы:

// Не идиоматично: Utils-класс
object DateUtils {
    fun formatForDisplay(date: LocalDate): String = date.format(DateTimeFormatter.ISO_LOCAL_DATE)
}

// Идиоматично: extension function на типе
fun LocalDate.toDisplayString(): String = format(DateTimeFormatter.ISO_LOCAL_DATE)
fun LocalDate.isWeekend(): Boolean = dayOfWeek in setOf(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY)

Сигналы идиоматичного Kotlin

2. Sealed classes вместо enum + when-else

// Не идиоматично: String/enum с magic values
enum class Status { LOADING, SUCCESS, ERROR }
var errorMessage: String? = null  // отдельное поле, связь неявная

// Идиоматично: sealed class несёт данные
sealed class UiState {
    object Loading : UiState()
    data class Success(val jobs: List<Job>) : UiState()
    data class Error(val message: String, val retryable: Boolean) : UiState()
}

// Компилятор проверяет exhaustiveness:
when (state) {
    is UiState.Loading -> showSpinner()
    is UiState.Success -> showJobs(state.jobs)
    is UiState.Error -> showError(state.message)
}

3. Scope functions по назначению

// Не идиоматично: цепочка временных переменных
val builder = AlertDialog.Builder(context)
builder.setTitle("Confirm")
builder.setMessage("Delete?")
builder.show()

// Идиоматично: apply для конфигурации с side effect
AlertDialog.Builder(context).apply {
    setTitle("Confirm")
    setMessage("Delete?")
}.show()

// let — для nullable pipeline
user?.email?.let { sendNotification(it) }

// run — для вычисления значения в блоке
val greeting = run {
    val hour = LocalTime.now().hour
    if (hour < 12) "Good morning" else "Good afternoon"
}

4. Корутины с правильным scope и cancellation

// Не идиоматично: GlobalScope, игнорирование отмены
GlobalScope.launch { loadData() }

// Идиоматично: scope привязан к lifecycle, отмена автоматическая
class JobViewModel : ViewModel() {
    private val _jobs = MutableStateFlow<UiState>(UiState.Loading)
    val jobs: StateFlow<UiState> = _jobs.asStateFlow()

    init {
        viewModelScope.launch {
            repository.getJobs()
                .catch { e -> _jobs.value = UiState.Error(e.message ?: "Unknown", true) }
                .collect { _jobs.value = UiState.Success(it) }
        }
    }
}

5. Отсутствие !! в production-коде

Grep по !! в production-коде — быстрый аудит. Исключение: тесты, где NPE — корректный сигнал о провале.

6. Иммутабельные data classes с copy()

// Не идиоматично: mutable state
class Job {
    var title: String = ""
    var salary: Int = 0
}

// Идиоматично: val + copy для изменений
data class Job(val title: String, val salary: Int)
val updated = job.copy(salary = job.salary + 1000)

Подводные камни при аудите команды

  • Наличие run { ... } как замена if-блока без явной причины — overengineering, признак неопытности.
  • Везде apply вместо also/let — команда не различает receiver-based и argument-based scope functions.
  • Data class с var полями — нарушение immutability, часто перенесено из Java.
  • Отсутствие flowOn в репозитории и явный withContext в ViewModel — нарушение разделения ответственности.
  • Companion object с тяжёлой логикой вместо top-level функций — Java-static мышление.
  • when с else -> throw для sealed class — компилятор уже проверяет exhaustiveness, else избыточен.
  • Использование @JvmStatic и @JvmField там, где нет Java-interop — признак Java-to-Kotlin механического перевода.
  • Лямбды с многострочным телом вместо вынесенной именованной функции снижают читаемость — идиоматичный Kotlin не боится named functions.

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

  • Сразу обвинять Kotlin, не проверив соседние слои системы
  • Чинить симптом без минимального воспроизведения и evidence
  • Не учитывать версии, конфигурацию, окружение и recent changes

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

  • Умеет локализовать проблему вокруг Kotlin
  • Двигается от симптома к гипотезам и проверкам
  • Отличает баг инструмента от ошибки использования или окружения

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

Проверить себя по теме Kotlin →
←Предыдущий вопросКакие особенности runtime, type system или memory model Kotlin реально влияют на архитектуру приложения?Следующий вопрос→Какие ошибки делают разработчики, переходящие на Kotlin с другого языка или стека?

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

KotlinDebuggingtechnical-communicationtechnology-selectiontrade-off-analysis

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

Kotlin вакансии
  • Staff Software Engineer, Fullstack (Card Experiences)
  • Senior Software Engineer, Marketing Technology
  • Android Developer + Kotlin Multiplatform
  • Android Developer with Java Backend Experience
  • Software Engineer I (Remote Eligible)

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

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