Что такое RecyclerView в Android и зачем он нужен
Что проверяют
Понимаете ли вы идею переиспользования представлений и знаете ли современные практики (DiffUtil, ListAdapter).
Как отвечать
RecyclerView показывает длинные списки, создавая представления только для видимых элементов и переиспользуя их при прокрутке. Без этого список из тысячи элементов создал бы тысячу вложенных иерархий и съел бы память.
Части: адаптер (создаёт и заполняет холдеры), ViewHolder (кэш найденных findViewById), менеджер раскладки (линейный, сетка, свой), а также декорации, аниматор изменений и пул переиспользования.
Как работает переиспользование: элемент ушёл за экран, его холдер попадает в пул, и при появлении нового элемента вызывается onBindViewHolder на уже существующем представлении. Отсюда правило: в onBindViewHolder нельзя ничего накапливать, только полностью задавать состояние. Иначе на переиспользованном холдере остаются данные предыдущего элемента, и это самый частый баг: чужие картинки и не сброшенные флажки.
Современные практики: ListAdapter с DiffUtil вместо notifyDataSetChanged, чтобы обновлялись только изменившиеся элементы и работали анимации; стабильные идентификаторы; Paging 3 для постраничной подгрузки; ViewBinding вместо ручного поиска представлений.
Полезно добавить, что в Compose эту роль играют LazyColumn и LazyRow, где переиспользование встроено, а ключи задаются параметром key.
Где спотыкаются
Не сбрасывают состояние в onBindViewHolder и получают перепутанные данные при прокрутке.
Зовут notifyDataSetChanged на каждое изменение и теряют анимации и производительность.
Держат в холдере ссылку на контекст активности.
Вкладывают RecyclerView в ScrollView и ломают переиспользование целиком.