Вернуться в видеотеку

Реальное собеседование Android уровня Middle. Даниил Черняев / Мобильный разработчик

Развёрнутое Android-собеседование уровня Middle с разбором MVI, реактивных потоков, слоёв приложения и DI. Во второй половине обсуждаются конкурентный доступ к корзине, Kotlin-инструменты, Android-компоненты и garbage collector.

Источник: Алексей Гладков

Открыть на YouTube

Таймлайн

Коротко о видео

Публичное техническое собеседование Android-разработчика Даниила: он рассказывает о полутора годах коммерческого опыта, недавних проектах и выборе Android из-за сочетания UI, многопоточности, сети и работы с данными. Основная часть посвящена MVI, состояниям загрузки, RxJava, DI, слоям приложения и use cases. Затем собеседующий разбирает многопоточность на примере синхронизации общей корзины, Kotlin/Flow/Coroutines, Jetpack Compose, push-уведомления, deep links, Service и сборку мусора в Android; в отдельных ответах кандидат прямо оговаривает, что может не помнить актуальные детали реализации.

Затронутые темы

Что взять на заметку

  • На вводных вопросах стоит связно объяснить реальный коммерческий опыт, выбор платформы и проекты, не раскрывая закрытые детали банковских или иных NDA-проектов.
  • Для MVI нужно уметь описать однонаправленный поток: пользовательское событие приходит в presentation-слой, данные преобразуются функциями-редьюсерами, а UI получает единый актуальный State.
  • Для списка и пагинации полезно отделять состояние ресурса — загрузка, ошибка, успех — от UI-модели; при нескольких запросах можно показывать ошибку только в затронутой части экрана.
  • Нужно различать семантику RxJava-операторов: кандидат предлагает CombineLatest, когда экран должен получать последнее значение из нескольких источников, а не механически выбирать zip или concat.
  • Одноразовые эффекты, диалоги, Toast и навигацию нужно уметь обосновать отдельно от постоянного состояния экрана; обсуждаются единый State, реакция на действие пользователя и стратегии Moxy при смене конфигурации.
  • Вопросы по архитектуре включают выбор Dagger/Toothpick, компромисс code generation и reflection, а также преобразование сетевых DTO в доменные и presentation-модели через use cases.
  • Для задач с общей корзиной нужно назвать deadlock, race condition и инверсию приоритетов, а затем рассмотреть локальные изменения, повторную загрузку серверной корзины, merge и риск рассинхронизации между устройствами.

Рекомендуем посмотреть