Вопрос на собеседовании · Android-разработчик
Что вызывает recomposition в Jetpack Compose и как избежать лишней работы?
Короткий ответ, ключевые тезисы и ошибки, которых стоит избежать на интервью.
Когда composable читает наблюдаемое state, Compose запоминает эту зависимость. При изменении значения он планирует recomposition затронутой части дерева и старается пропустить вызовы со стабильными, неизменившимися параметрами. Это не равнозначно полной перерисовке экрана: конкретный результат зависит от того, какие участки действительно читают изменившееся состояние.
Оптимизация начинается с модели состояния: передавайте небольшие стабильные значения, поднимайте состояние к владельцу и не выполняйте сетевую, сортировку или тяжёлую конвертацию прямо в composition. remember хранит вычисленное значение между recomposition при тех же ключах, а derivedStateOf полезен, когда производное состояние меняется реже исходного.
01 · Структура ответа
Что важно сказать интервьюеру
Начните с определения, затем объясните механизм и закончите примером из практики. Для полного ответа раскройте эти тезисы:
02 · Пример
Как объяснить на практике
Кнопка «Наверх» зависит только от того, превысил ли список первый элемент. Вместо передачи полного scroll offset во всё дерево вычисляют showButton через derivedStateOf и передают в кнопку Boolean; сам список продолжает обновляться, но кнопка меняется только при пересечении порога.
Не заучивайте формулировку дословно. Свяжите принцип с задачей из собственного проекта — интервьюер почти наверняка попросит уточнить детали реализации и компромиссы.
03 · Ошибки
Чего избегать в ответе
04 · Углубление
Что могут спросить следом
- Чем LaunchedEffect отличается от remember?
- Что такое state hoisting?
- Как профилировать Compose UI?
Практика ответа
Ответьте вслух, а не про себя
Откроем тренировку сразу на этом вопросе. Выберите грейд, сформулируйте ответ и сравните его с подсказкой.
Mira