Вопрос на собеседовании · Android-разработчик

Как работают корутины Kotlin и что такое structured concurrency?

Короткий ответ, ключевые тезисы и ошибки, которых стоит избежать на интервью.

Обновлено 19 августа 2026 г.Встречается почти всегда
Android-разработчикПрофессии и разделы
Короткий ответ

Корутина выполняется внутри CoroutineScope, который задаёт её Job, dispatcher и срок жизни. Structured concurrency означает, что дочерние задачи принадлежат родительскому scope: родитель ждёт их завершения, а его отмена распространяется вниз. Поэтому работа, запущенная в viewModelScope, не должна продолжать обновлять уже закрытый экран.

Обычный coroutineScope передаёт ошибку дочерней задачи всему scope; supervisorScope изолирует сбой одного ребёнка, когда остальные результаты всё ещё полезны. Отмена кооперативна: suspend-функции и явные проверки isActive должны дать задаче завершиться, а CancellationException нельзя бездумно превращать в экранную ошибку.

01 · Структура ответа

Что важно сказать интервьюеру

Начните с определения, затем объясните механизм и закончите примером из практики. Для полного ответа раскройте эти тезисы:

Scope задаёт жизненный цикл и context корутины.
Отмена родителя отменяет дочерние задачи.
coroutineScope и supervisorScope по-разному распространяют ошибки.
CancellationException обычно пробрасывают дальше.

02 · Пример

Как объяснить на практике

Экран профиля запускает параллельно запрос пользователя и рекомендаций в viewModelScope. Если рекомендация необязательна, её оборачивают в supervisorScope и показывают частичный экран; при очистке ViewModel оба запроса отменяются и не пишут состояние после закрытия экрана.

Не заучивайте формулировку дословно. Свяжите принцип с задачей из собственного проекта — интервьюер почти наверняка попросит уточнить детали реализации и компромиссы.

03 · Ошибки

Чего избегать в ответе

Запускать работу в GlobalScope и терять её жизненный цикл.
Ловить все Throwable и скрывать отмену как ошибку.
Считать supervisorScope универсальным способом игнорировать сбои.

04 · Углубление

Что могут спросить следом

  1. Чем launch отличается от async?
  2. Когда нужен SupervisorJob?
  3. Как тестировать корутины ViewModel?

Практика ответа

Ответьте вслух, а не про себя

Откроем тренировку сразу на этом вопросе. Выберите грейд, сформулируйте ответ и сравните его с подсказкой.

Потренировать ответ