- Говорить вслух, а не читать. Каждая тема считается закрытой, когда вы можете 3 минуты говорить о ней вслух с примером из своего проекта, назвать трейд-офф и границы применимости. Записывайте себя на диктофон — это неприятно и очень эффективно.
- Один якорный проект. Заведите (или возьмите свой) проект, на котором вы физически делаете то, что учите: baseline profile, offline-first синк, распил на модули, скриншот-тесты. Истории «я это делал» на интервью весят в разы больше, чем «я читал, что так можно».
- Соотношение 40/40/20. 40 % времени — глубина по Compose/корутинам/архитектуре, 40 % — system design и алгоритмы, 20 % — истории и коммуникация. Большинство кандидатов делают 90/10/0 и заваливают именно то, на чём принимается решение по грейду.
- Ошибки — в один файл. Заведите
mistakes.mdи складывайте туда каждый вопрос, на котором поплыли. За 3 дня до интервью перечитываете только его.
Цель: перестать отвечать «корутина — это лёгкий поток».
- Kotlin: обобщения и вариантность, inline,
value class, делегаты, sealed-иерархии, что генерирует компилятор. - Корутины: CPS-трансформация и
Continuation, structured concurrency,Job, отмена,SupervisorJob, где действительно работаетCoroutineExceptionHandler. - Диспетчеры и
withContext,limitedParallelism. - Слой под корутинами: happens-before,
@Volatile, CAS, безопасная публикация, почемуMutex— неsynchronized. - Практика: декомпилируйте
suspend-функцию (Tools → Kotlin → Show Kotlin Bytecode → Decompile) и разберите state machine руками. - Практика: напишите пул задач с ограничением параллелизма и ретраем с экспоненциальным backoff.
- Материал:
Kotlin_Senior_Android_Guide.markdownразделы 1–14,11-concurrency-deep.mdразделы 1–6 и 12. - Самопроверка: блоки 1 «Kotlin», 2 «Корутины и Flow» и 2а «Синхронизация» банка вопросов.
- Cold/hot,
StateFlow,SharedFlow,Channel, моделирование одноразовых событий. stateIn/shareIn,WhileSubscribed(5000),repeatOnLifecycle.- Операторы слияния и backpressure:
flatMapLatest,combine,buffer,conflate,collectLatest. flowOnи context preservation.- Практика: переведите один экран своего проекта на «один
StateFlow<UiState>» и объясните вслух, почему именно так. - Практика: тесты на Flow через Turbine +
MainDispatcherRule. - Материал:
Kotlin_Senior_Android_Guide.markdownраздел 13,08-coroutines-android.mdцеликом. - Самопроверка: блоки 2 «Корутины и Flow» и 9 «Тестирование» банка вопросов.
- Три фазы, snapshot-система, slot table, что такое рекомпозиция и как компилятор решает пропустить.
- Стабильность, strong skipping,
@Immutable/@Stable, immutable-коллекции. remember/rememberSaveable/derivedStateOf/produceState/rememberUpdatedState.- Side effects и ключи эффектов.
LazyColumn:key,contentType, диагностика jank и мигания.- Практика: включите Compose compiler metrics, найдите в своём проекте нестабильные параметры и почините хотя бы три.
- Практика: Layout Inspector с подсчётом рекомпозиций на самом «тяжёлом» экране.
- Первое мок-интервью (можно с коллегой): 45 минут по Compose и корутинам.
- Материал:
Jetpack_Compose_Senior_Android_Guide.markdownкак основной,07-compose-deep.mdдля повтора. - Самопроверка: блок 3 «Jetpack Compose» банка вопросов (вопросы 39–59).
- MVVM vs MVI vs UDF, дизайн UI State, одноразовые события.
- Process death,
SavedStateHandle, что восстанавливать. - Repository, single source of truth, границы слоёв, нужен ли UseCase.
- Модуляризация: api/impl, convention plugins, навигация между фичами без взаимных зависимостей.
- DI: Hilt vs Koin vs Metro, скоупы, стоимость для сборки и старта.
- Практика: нарисуйте на бумаге модульную схему своего текущего приложения и обоснуйте каждую границу.
- Практика: замерьте инкрементальную сборку до/после одного улучшения (KSP, configuration cache, вынос модуля).
- Самопроверка: блок 5 «Архитектура» банка вопросов (вопросы 66–80 — DI и сборка там же, отдельного блока в банке нет).
- Room, миграции, транзакции; outbox-паттерн; WorkManager и его гарантии.
- Конфликты синхронизации, идемпотентность, оптимистичные апдейты.
- Пагинация cursor vs offset, Paging 3 +
RemoteMediator. - OkHttp/Retrofit: интерцепторы, обновление токена без гонок, кэш.
- Платформа: лайфциклы, Doze, ограничения FGS на Android 15, требования Android 16 / API 36 (edge-to-edge, predictive back) и ломающие изменения Android 17 / API 37 (адаптивность без opt-out,
static finalи рефлексия,ACCESS_LOCAL_NETWORK, аудио из фона). - Практика: реализуйте офлайн-создание сущности с синком через WorkManager и статусами PENDING/SYNCED.
- Материал:
10-android-sdk-deep.md(разделы 6, 9, 10, 13 — фон, разрешения, хранилища, версии). - Самопроверка: блоки 6 «Данные, сеть, offline-first», 7 «Платформа» и 7а «Платформа: свежие изменения» банка вопросов.
- Cold start, TTID/TTFD, Baseline Profiles и Startup Profiles, Macrobenchmark.
- Perfetto: прочитать один реальный трейс старта до конца.
- Утечки и ANR: LeakCanary, чтение ANR-трейса, типовые причины.
- Тесты: пирамида, fakes vs mocks, Compose UI-тесты через Robolectric, скриншот-тесты (Paparazzi/Roborazzi).
- Практика: сгенерируйте baseline profile для своего проекта и замерьте разницу через Macrobenchmark с разными
CompilationMode. Цифра из своего замера — сильный аргумент на интервью. - Второе мок-интервью: 45 минут по перформансу и «дебаг-сценариям».
- Материал:
09-jvm-memory-deep.mdцеликом (память, GC, утечки, OOM, JIT/AOT). - Самопроверка: блоки 8 «Производительность», 8а «Память, GC и рантайм» и 9 «Тестирование» банка вопросов.
- Отработать фреймворк из
04-system-design.mdдо автоматизма. - Разобрать 5 канонических задач письменно: лента, чат, офлайн-заметки с синком, загрузка медиа, трекинг геолокации.
- Выбрать 2 поверхности, которыми вы реально владели, и отрепетировать по ним deep dive: каждое решение, каждая альтернатива, каждый counterfactual.
- Алгоритмы: 20–25 задач LeetCode Medium по темам из блока 14 чеклиста, вслух, с проговариванием сложности. Паттерны и разбор — в
Algorithms_LeetCode_Easy_Medium_Senior_Android_Guide.markdown(разделы 4–25), порядок прохождения — там же в разделе 28. - Третье мок-интервью: полноценный system design на час.
- Собрать 6–8 STAR-историй по
05-behavioral.mdи проговорить каждую по 2 минуты. - Пройти
mistakes.mdцеликом. - Перечитать чеклист и добить оставшиеся 🔴-пункты.
- Подготовить вопросы работодателю и рассказ о себе на 2 минуты.
- Четвёртое мок-интервью: полный loop за один день, если получится.
- За день до интервью: ничего нового не учить, поспать.
Для тех, у кого уже есть 5+ лет коммерческого опыта и оффер-процесс уже запущен.
- корутины и Flow до уровня внутренностей + Compose (рекомпозиция, стабильность, эффекты). Мок-интервью в конце недели.
- архитектура, модуляризация, offline-first, WorkManager, пагинация. Разбор двух своих поверхностей для deep dive.
- system design (5 задач письменно + 1 мок), производительность (baseline profiles, ANR, старт), алгоритмы (15 задач Medium).
- STAR-истории,
mistakes.md, полный мок-loop, шлифовка 🔴-пунктов.
Что осознанно отбрасывается: KMP-глубина, on-device AI, безопасность за пределами базовой гигиены. Об этих темах достаточно уметь говорить на уровне «знаю статус и трейд-офы».
Navigation 3 в этот список больше не входит: он стабилен с ноября 2025, и вопрос «Nav2 или Nav3
в новом проекте» стал обычным. Полчаса на понимание модели (back stack — ваш SnapshotStateList,
NavDisplay, SceneStrategy) и на аргументы за/против миграции — обязательный минимум.
- На любой 🔴-пункт чеклиста вы говорите 3 минуты без подготовки и без «ну, в общем».
- В system design вы выдаёте содержательный senior-сигнал примерно раз в 3–4 минуты во второй половине разговора, а не рисуете коробочки.
- У вас есть 6–8 отрепетированных историй, и вы не путаетесь в деталях при уточняющих вопросах.
- Вы можете назвать цифры из своих замеров: сколько было и стало, на чём измеряли.
- На вопрос «Compose или Views / MVVM или MVI / Hilt или Koin» у вас есть мнение, которое вы способны защитить и честно назвать его слабые места. Неправильного выбора здесь нет — есть выбор, который вы не можете обосновать.