Таблица на миллион строк
Вопрос
Спроектируй таблицу с сортировкой, фильтрами и выделением на миллионе записей.
Веди разговор вслух, как на секции. Начинать с решения - главная ошибка: первые полторы минуты только вопросы.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
уточнил, где сортировка и фильтрация - на клиенте или на сервере
на миллионе строк - только на сервере, клиент их даже не получает
виртуализация строк, а при широкой таблице и колонок
фиксированная шапка и закреплённые колонки без ломания виртуализации
фильтры и сортировка - в адресной строке, чтобы ссылка воспроизводилась
выделение хранится множеством идентификаторов, а не массивом строк
«выделить всё» - это фильтр, а не список из миллиона элементов
экспорт и массовые действия уходят на сервер задачей
Что могут спросить следом
- Как сделать изменяемую высоту строк при виртуализации?
- Что делать, если бэкенд не умеет серверную сортировку?
- Как реализовать «выделить всё по фильтру»?
Разбор
Первый вопрос, который решает всё: где считается сортировка и фильтр. На миллионе строк ответ один - на сервере; клиенту незачем получать больше страницы. Если собеседник настаивает на клиентской фильтрации, надо назвать цену: несколько десятков мегабайт JSON и заморозка вкладки на разборе.
Дальше виртуализация: в DOM живёт окно видимых строк. Закреплённая шапка и левые колонки делаются отдельными слоями, чтобы не выпадать из окна.
Состояние выделения - самая частая ловушка. Хранить массив выделенных строк нельзя: при «выделить всё» это миллион объектов. Хранится множество идентификаторов, а «всё» - это признак «выделен текущий фильтр» плюс список исключений.
Фильтры и сортировка живут в адресе: таблицами делятся ссылками, и кнопка «назад» должна работать.
Экспорт и массовые операции не делаются в браузере - это серверная задача со статусом и уведомлением.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.