P
prepair.app
Пройти интервью →
EnglishУкраїнськаРусскийDeutsch
🟩

Middle Android (Kotlin)Вопросы на собеседовании Android разработчика

Middle · 2–4 года опыта

Собеседование Android-разработчика крутится вокруг идиом Kotlin, корутин и жизненного цикла платформы — большинство senior-вопросов на самом деле проверяют, понимаете ли вы, что процесс могут убить в любой момент. Ниже — вопросы, которые задают чаще всего, каждый с эталонным ответом. Middle: более глубокое понимание, оптимизацию и реальные рабочие ситуации.

Попробовать — без регистрации
Готовим вопрос…

Темы для подготовки

Возможности языка Kotlin
Корутины и Flow
Жизненный цикл Android
Jetpack Compose
Архитектура и DI
Room, Retrofit и тесты

9 вопросов уровня Middle с ответами

1

Что такое корутина и чем она отличается от потока?

Ответ

Корутина — приостанавливаемое вычисление, которое планирует рантайм Kotlin; поток планирует ОС. Приостановка освобождает поток, а не блокирует его, поэтому тысячи корутин делят небольшой пул. Отсюда следствие: блокирующий вызов внутри корутины полностью обесценивает затею — он держит тот самый поток, который должен был освободиться.

2

Что такое структурная конкурентность и что гарантирует CoroutineScope?

Ответ

Что каждая корутина, запущенная в области, становится её потомком: отмена области отменяет всех, а сама область не завершится, пока они не закончатся. На практике это viewModelScope — работа прекращается, когда ViewModel очищается. Запуск в GlobalScope от этого отказывается, и так работа переживает экран, который её начал.

3

Чем отличаются `Flow`, `StateFlow` и `SharedFlow`?

Ответ

Flow холодный: он производит значения при сборе, отдельно для каждого сборщика. StateFlow горячий, всегда держит текущее значение и отдаёт его каждому новому сборщику — именно это нужно состоянию UI. SharedFlow горячий без текущего значения и подходит событиям, которые не должны повторяться: команде навигации или снекбару.

4

Что такое рекомпозиция в Compose и отчего она случается слишком часто?

Ответ

Compose перезапускает те composable, у которых изменились входы. Слишком часто это происходит, когда лямбда или нестабильный тип пересоздаётся на каждой перерисовке родителя, или когда целый экран читает одно часто меняющееся значение. Лечится remember, поднятием состояния так, чтобы его читала только нуждающаяся часть, и стабильными типами, а счётчики рекомпозиций в Layout Inspector показывают, где именно.

5

Почему удерживаемый `Context` — частый источник утечек?

Ответ

Потому что контекст Activity привязан к экрану, и всё долгоживущее, что его держит, удерживает в памяти весь этот экран. Обычные случаи — синглтон, инициализированный Activity, статическая ссылка, слушатель, которого не отписали. Для всего, что переживает экран, нужен контекст приложения — но он не умеет надувать вью с темой, из-за чего ошибку и совершают.

6

Как искать причину долгого старта приложения?

Ответ

Сначала измерить: adb shell am start -W даёт время холодного, тёплого и горячего запуска, а системный трейс показывает, что выполняется до первого кадра. Обычные причины — работа в Application.onCreate, особенно инициализация SDK, синхронное чтение с диска или из сети и то, что делается на главном потоке, хотя могло подождать до первого кадра.

7

Чем `launch` отличается от `async`?

Ответ

launch запускает работу и возвращает Job без результата; async возвращает Deferred, который ждут через await. async берут, только когда нужно значение, и запускают обе задачи до того, как ждать любую, если нужна параллельность. async, результат которого не дождались, проглатывает своё исключение — тихий способ потерять падение.

8

`Serializable` или `Parcelable` — что и почему?

Ответ

Parcelable — андроидный: вы описываете, как объект пишется и читается, поэтому рефлексии нет и передача данных между компонентами измеримо быстрее. Serializable — маркерный интерфейс из Java: писать почти ничего не нужно, работает медленно и много аллоцирует. В Kotlin спор почти исчезает, потому что @Parcelize генерирует шаблонный код и снимает единственную реальную причину выбирать Serializable.

9

Doze, App Standby, `WorkManager` или `Service` — как выбирать?

Ответ

Doze и App Standby — это система откладывает вашу фоновую работу, когда устройство простаивает или приложением не пользуются, и именно поэтому будильник или сетевой вызов просто не происходят тогда, когда вы ждали. WorkManager — для откладываемой работы, которая обязана рано или поздно выполниться и пережить смерть процесса и перезагрузку: синхронизация, загрузка, уборка. Foreground service — для работы, о которой пользователь знает прямо сейчас, вроде воспроизведения или навигации, и он обязан показывать уведомление. Обычный фоновый сервис вместо этого — способ добиться, чтобы работа тихо перестала выполняться на современном Android.

🦎

Прочитать ответы недостаточно

На собеседовании ты говоришь вслух под давлением. Кем задаст эти же вопросы, оценит каждый ответ и покажет, что именно подтянуть.

Пройти интервью Middle Android (Kotlin) →
Бесплатно · 3 интервью в месяц

Другие уровни — Android (Kotlin)

Junior Android (Kotlin)Senior Android (Kotlin)Все вопросы Android (Kotlin)

Другие специализации

🔍Middle QA Manual🤖Middle QA AutomationMiddle Java Backend🐍Middle Python Backend🐘Middle PHP Backend🦫Middle Go Backend🟢Middle Node.js Backend💎Middle Ruby on Rails🟣Middle .NET Backend Developer🔷Middle C++