Ответ вслух Middle System design на фронте спрашивают часто обновлено

Таблица на миллион строк

Вопрос

Спроектируй таблицу с сортировкой, фильтрами и выделением на миллионе записей.

Веди разговор вслух, как на секции. Начинать с решения - главная ошибка: первые полторы минуты только вопросы.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Первый вопрос, который решает всё: где считается сортировка и фильтр. На миллионе строк ответ один - на сервере; клиенту незачем получать больше страницы.

Что должно прозвучать в ответе

  • уточнил, где сортировка и фильтрация - на клиенте или на сервере

  • на миллионе строк - только на сервере, клиент их даже не получает

  • виртуализация строк, а при широкой таблице и колонок

  • фиксированная шапка и закреплённые колонки без ломания виртуализации

  • фильтры и сортировка - в адресной строке, чтобы ссылка воспроизводилась

  • выделение хранится множеством идентификаторов, а не массивом строк

  • «выделить всё» - это фильтр, а не список из миллиона элементов

  • экспорт и массовые действия уходят на сервер задачей

Что могут спросить следом

  • Как сделать изменяемую высоту строк при виртуализации?
  • Что делать, если бэкенд не умеет серверную сортировку?
  • Как реализовать «выделить всё по фильтру»?

Разбор

Первый вопрос, который решает всё: где считается сортировка и фильтр. На миллионе строк ответ один - на сервере; клиенту незачем получать больше страницы. Если собеседник настаивает на клиентской фильтрации, надо назвать цену: несколько десятков мегабайт JSON и заморозка вкладки на разборе.

Дальше виртуализация: в DOM живёт окно видимых строк. Закреплённая шапка и левые колонки делаются отдельными слоями, чтобы не выпадать из окна.

Состояние выделения - самая частая ловушка. Хранить массив выделенных строк нельзя: при «выделить всё» это миллион объектов. Хранится множество идентификаторов, а «всё» - это признак «выделен текущий фильтр» плюс список исключений.

Фильтры и сортировка живут в адресе: таблицами делятся ссылками, и кнопка «назад» должна работать.

Экспорт и массовые операции не делаются в браузере - это серверная задача со статусом и уведомлением.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.