Skip to content

Latest commit

 

History

History
130 lines (102 loc) · 13.1 KB

File metadata and controls

130 lines (102 loc) · 13.1 KB

План подготовки

Принципы, без которых план не работает

  1. Говорить вслух, а не читать. Каждая тема считается закрытой, когда вы можете 3 минуты говорить о ней вслух с примером из своего проекта, назвать трейд-офф и границы применимости. Записывайте себя на диктофон — это неприятно и очень эффективно.
  2. Один якорный проект. Заведите (или возьмите свой) проект, на котором вы физически делаете то, что учите: baseline profile, offline-first синк, распил на модули, скриншот-тесты. Истории «я это делал» на интервью весят в разы больше, чем «я читал, что так можно».
  3. Соотношение 40/40/20. 40 % времени — глубина по Compose/корутинам/архитектуре, 40 % — system design и алгоритмы, 20 % — истории и коммуникация. Большинство кандидатов делают 90/10/0 и заваливают именно то, на чём принимается решение по грейду.
  4. Ошибки — в один файл. Заведите mistakes.md и складывайте туда каждый вопрос, на котором поплыли. За 3 дня до интервью перечитываете только его.

Kotlin и корутины на уровне компилятора

Цель: перестать отвечать «корутина — это лёгкий поток».

  • 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а «Синхронизация» банка вопросов.

Flow и реактивность

  • 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 «Тестирование» банка вопросов.

Jetpack Compose: внутренности

  • Три фазы, 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 и сборка там же, отдельного блока в банке нет).

Данные, offline-first, платформа

  • 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 «Тестирование» банка вопросов.

System Design и алгоритмы

  • Отработать фреймворк из 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» у вас есть мнение, которое вы способны защитить и честно назвать его слабые места. Неправильного выбора здесь нет — есть выбор, который вы не можете обосновать.