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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 105
  • Облачные технологии14 068
  • QA вакансии3 460
  • Backend вакансии2 098
  • Инженер данных1 796
  • Продакт-менеджер1 248

Разработка

  • Android1 866
  • iOS1 699
  • Fullstack вакансии979
  • AI вакансии951
  • Frontend вакансии742
  • Mobile вакансии44

По стеку

  • Go8 651
  • Java6 544
  • Node.js2 018
  • .NET1 719
  • Kotlin1 623
  • Rust1 453
  • C#709
  • PHP683
  • C++571

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

  • Kubernetes7 761
  • DevOps вакансии6 057
  • Linux-инфраструктура5 492
  • Terraform / IaC4 259
  • CI/CD3 240
  • Мониторинг и Observability1 782
  • SRE565
  • Кибербезопасность450

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

  • Data Scientist1 127
  • Бизнес-аналитик925
  • Аналитик данных845
  • Системный аналитик154

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

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

По регионам

  • Вакансии в США43 686
  • Вакансии в Европе23 668
  • Вакансии в Канаде4 413
  • Работа в России3 909

По формату

  • Удалённые вакансии73 889
  • Релокация в США43 686
  • Гибридная работа12 392
  • Офисная работа7 088

По уровню

  • Senior вакансии42 236
  • Middle вакансии20 545
  • Junior вакансии6 653

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab138 вакансий
  • Celonis39 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

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

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

Что такое Kotlin Flows и как они соотносятся с RxJava?

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

Kotlin Flow — coroutine-native cold stream с поддержкой structured cancellation и suspend-операторов; RxJava строится на Observable/Flowable со своими schedulers. Flow проще интегрируется с корутинами, backpressure решается через suspension, buffer и conflate.

Kotlin Flow: основы

Flow — это cold stream: код внутри flow { } не выполняется до вызова терминального оператора (collect, toList, first). Каждый подписчик получает независимую последовательность.

import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*

fun userUpdates(userId: Long): Flow<String> = flow {
    repeat(5) { i ->
        delay(200)          // suspend — не блокирует поток
        emit("update-$i")   // отправка элемента
    }
}

fun main() = runBlocking {
    userUpdates(1L)
        .filter { it.endsWith("2") || it.endsWith("4") }
        .collect { println(it) }
    // update-2
    // update-4
}

Hot streams: SharedFlow и StateFlow

StateFlow — аналог BehaviorSubject в RxJava: хранит последнее значение и немедленно отдаёт его новым подписчикам. SharedFlow — аналог PublishSubject: без хранения, но с настраиваемым replay.

val _uiState = MutableStateFlow(UiState.Loading)
val uiState: StateFlow<UiState> = _uiState.asStateFlow()

// В ViewModel:
_uiState.value = UiState.Success(data)

// В UI (Android / Compose):
viewLifecycleOwner.lifecycleScope.launch {
    uiState.collect { state -> render(state) }
}

Backpressure: buffer, conflate, collectLatest

  • buffer(capacity) — буферизует элементы, producer и consumer работают в разных корутинах.
  • conflate() — пропускает промежуточные значения, если consumer не успевает.
  • collectLatest { } — отменяет обработку предыдущего элемента при приходе нового.
tickerFlow(50)
    .conflate()
    .collect { tick ->
        heavyRender(tick) // может занимать 200ms — промежуточные тики пропускаются
    }

Сравнение с RxJava

АспектKotlin FlowRxJava 3
ПотокиCoroutineDispatcher (IO, Default, Main)Scheduler (io(), computation(), mainThread())
Cold streamFlowObservable / Flowable
Hot streamStateFlow / SharedFlowBehaviorSubject / PublishSubject
BackpressureSuspension + buffer/conflateFlowable + BackpressureStrategy
ОтменаStructured cancellation (scope)Disposable.dispose()
Ошибкиcatch { } оператор / try-catch в suspendonError callback

Переход с RxJava на Flow

// Адаптер rxjava3-coroutines
dependencies {
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-rx3:1.9.0")
}

// Observable -> Flow
val flow: Flow<T> = observable.asFlow()

// Flow -> Observable
val observable: Observable<T> = flow.asObservable()

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

  • Утечка корутин при collect вне lifecycleScope. Вызов flow.collect в GlobalScope или без привязки к lifecycle приведёт к утечке после уничтожения Activity/Fragment.
  • Механическая замена Observable на Flow. Если в Rx-цепочке были stateful операторы (scan, window, groupBy) — у них разные семантики в Flow; нужна переработка логики.
  • StateFlow не триггерит emit при одинаковом значении. stateFlow.value = sameValue ничего не испускает — в отличие от MutableSharedFlow.
  • flowOn меняет только upstream. flowOn(Dispatchers.IO) влияет только на код выше по цепочке, но не на collect.
  • Exception transparency. Бросать исключение внутри flow { } и ловить его снаружи — нормально, но нарушение контракта (бросок внутри оператора catch) приведёт к непредсказуемому поведению.
  • Отсутствие retry в RxJava-стиле. retry { } в Flow есть, но retryWhen требует иного подхода с Flow<Throwable>.
  • SharedFlow replay и replay cache. При неправильно заданном replay новые подписчики могут получить устаревшие события или не получить ничего.
  • Многопоточная эмиссия. Эмитить из нескольких корутин в один flow { } нельзя; для этого используйте channelFlow { } или MutableSharedFlow с emit (которое suspend-safe).

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

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

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

  • Объяснять «Kotlin Flow и RxJava» только как синтаксис и не описывать поведение runtime/compiler.
  • Игнорировать важный риск: Механическая миграция Rx цепочек без пересмотра cancellation и lifecycle часто оставляет лишние подписки.
  • Давать пример без edge case: отмены, null, recomposition, platform boundary или ошибки.

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

  • Формулирует суть темы «Kotlin Flow и RxJava» своими словами и связывает ее с кодом.
  • Называет механизм: RxJava строится вокруг Observable/Single/Flowable и schedulers; Flow интегрируется с CoroutineContext, backpressure решается suspension, buffer и conflate.
  • Видит production-последствие: Механическая миграция Rx цепочек без пересмотра cancellation и lifecycle часто оставляет лишние подписки.

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

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

Источники

  • https://kotlinlang.org/docs/flow.html
←Предыдущий вопросЧто такое extension functions в Kotlin и как их определять?Следующий вопрос→Как обрабатывать исключения в Kotlin coroutines?

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

Kotlinflows-rxjava-reasoningkotlin-language

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

Kotlin вакансии
  • Software Engineer II
  • Senior Software Engineer – Web & Desktop Applications
  • Senior Android Developer - Logistics & Digital Services (f/m/x)
  • Senior Android Developer with Kotlin Multiplatform (f/m/x)
  • Engineering Lead - Send for Partners