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

Jetpack Compose Battle: Онлайн-собеседования Senior разработчика / Мобильный разработчик

Техническое интервью-батл по Jetpack Compose для Senior Android-разработчиков. Участники обсуждают internals Compose и разбирают производительность и архитектурные ошибки на примере списка контактов.

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

Открыть на YouTube

Таймлайн

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

Запись стрима в формате Jetpack Compose Battle: интервьюер Алексей Панов и кандидат Никита Куликов разбирают устройство Jetpack Compose — от composable-функций, Composer и композиции до рекомпозиции, стабильности типов, состояния и snapshot-механизма. Во второй части они проводят ревью учебного экрана контактов, находя проблемы с созданием объектов при рекомпозиции, списками, ключами, корутинами, лямбдами, layout и частыми обновлениями scroll state. В финале обсуждаются side effects, жизненный цикл LaunchedEffect, внутренности подписки на State и синхронизация рекомпозиции с кадрами.

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

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

  • Уметь объяснить, почему @Composable-функция вызывается только из composable-контекста: Compose Compiler добавляет служебный контекст Composer и использует его при композиции.
  • Подготовить модель фаз Compose: композиция, измерение и layout, затем drawing; отдельно понимать создание начальной композиции через setContent и назначение SubcomposeLayout.
  • Разобраться в рекомпозиции: какие параметры считаются изменившимися, как стабильность типов влияет на пропуск работы и почему контракт @Stable/@Immutable нельзя нарушать изменяемыми данными.
  • Не считать MutableState атомарным счётчиком: конкурентные операции read-modify-write требуют подходящей синхронизации или атомарных примитивов.
  • На ревью Compose-кода проверять объекты и лямбды, создаваемые при рекомпозиции: применять remember там, где это оправдано, и передавать ссылку на метод вместо новой лямбды, если сигнатура позволяет.
  • Для длинных списков знать LazyColumn, уникальные стабильные ключи и риск ключа по имени контакта; сортировку не следует без нужды выполнять при каждой рекомпозиции.
  • Для часто меняющегося scroll state выводить производное булево состояние через derivedStateOf, а для изменения только фона рассматривать перенос работы в drawBehind, чтобы не затрагивать лишние фазы.

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

2:18:30
MobileMiddle

Мок-собеседование Middle Android-разработчика: архитектура и live coding

Кандидат проектирует Android-приложение, выбирает архитектуру и библиотеки, затем реализует часть решения в live coding. Эксперт разбирает требования, границы слоёв, базу данных, ошибки и качество кода.

1 ч 49 мин
MobileJunior

Собеседование в прямом эфире. Junior Android разработчик

Запись смоделированного Junior Android-собеседования с подробным техническим разбором ответов кандидата и последующей сессией вопросов аудитории о входе в профессию. Основной акцент — на практическом владении Android и умении рассуждать, а не только воспроизводить определения.