Ответ вслух Middle System design на фронте обновлено

Спроектируй каталог с фильтрами

Вопрос

Спроектируй страницу каталога маркетплейса: фильтры (цена, бренд, размер), сортировка, сетка товаров, нужна индексация поисковиками. Пройди этапы: требования, оценка нагрузки, API, данные, компоненты, узкие места.

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

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

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

Коротко

Требования: фильтры по цене, бренду, размеру, сортировка, поисковики должны видеть каталог, ссылкой с фильтрами можно поделиться. Масштаб: товаров миллионы, у фасетов тысячи значений, пользователь кликает фильтры часто.

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

  • Требования: фильтры, сортировка, пагинация, SEO, шаринг ссылки, мобильная версия, быстрый первый экран

  • Оценка: миллионы товаров, десятки фасетов, тысячи значений бренда, частые изменения фильтров

  • API: GET /catalog с фильтрами, сортировкой и курсором или страницей, ответ с товарами и счётчиками фасетов

  • Данные: состояние фильтров в URL, серверные данные в кеше по ключу фильтров

  • Компоненты: FiltersPanel, ProductGrid, ProductCard, Pagination; SSR или ISR для популярных комбинаций

  • Узкие места: SEO и канонические URL для комбинаций, дебаунс ползунка цены, отмена запросов, картинки, CLS от скелетонов

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

  • Пагинация или бесконечный скролл для каталога и почему?
  • Как не плодить дубли страниц в поиске?

Разбор

Требования: фильтры по цене, бренду, размеру, сортировка, поисковики должны видеть каталог, ссылкой с фильтрами можно поделиться. Масштаб: товаров миллионы, у фасетов тысячи значений, пользователь кликает фильтры часто. API: один GET с фильтрами и сортировкой, ответ содержит товары и количество по каждому значению фасета, чтобы показывать «Nike (124)». Данные: весь выбор фильтров живёт в URL, это источник правды, а серверный ответ кешируется по ключу из этих параметров. Рендеринг: первая выдача SSR или ISR для популярных категорий, дальше переходы на клиенте. Для каталога выбираю обычную пагинацию или «показать ещё» с номером страницы в URL: так проще SEO и возврат к позиции. Узкие места: дебаунс ползунка цены, отмена устаревших запросов, канонические URL и noindex для бесконечных комбинаций фильтров, фиксированные размеры карточек против CLS, адаптивные картинки.

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

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