Загрузка…
Загрузка…
frontend / middle / system_design
Формат
online
Стадия
system_design
Когда
within_quarter
Длительность
—
01
System design
Спроектируйте Едадил, а именно страницу с каталогом товаров (агрегатор скидок и акций). Требования: быстрые фильтры-табы приходят с сервера; продвинутые вложенные фильтры в шторке с подкатегориями и множеством страниц; очень большая лента карточек; добавление товара в избранное идёт запросом на сервер; список табов приходит с сервера; идеальная работа на Android 5 и старых браузерах (Opera Mini/Mobile, старый мобильный Safari); подход Mobile First.
Основная архитектурная секция для фронтенд-разработчиков в Яндексе. Кандидат разбирает: поддержку Android 5 (полифилы, транспиляция в ES5, ограничения React<=16/17 и Vue<=2, конфиг Babel + core-js 3), SEO (title/description/H1, ранжирование), SSR vs SSG (Next.js getStaticProps, ревалидация), пагинацию (offset vs keyset), структуру API, структуру компонентов и хранение фильтров в Redux/Mobx/Effector, оптимизацию (виртуализация, lazy loading, optimistic update, picture/source, webp).
02
System design
Где именно вы будете хранить записи об избранных товарах для конкретного пользователя?
Явно заданный интервьюером уточняющий вопрос по ходу проектирования. Кандидат предложил отдельную таблицу Favorites со связью user_id + product_id и join с таблицей products для проставления флага is_favorite.
Заметки
Транскрипт — разбор реальной архитектурной (system design) секции собеседования на фронтенд-разработчика в Яндекс, задача — спроектировать каталог товаров сервиса Едадил. Большая часть текста — это сольное рассуждение/решение кандидата по подтемам (поддержка старых браузеров и Android 5, SEO, SSR/SSG на Next.js, offset vs keyset пагинация, контракты API, структура компонентов и стейт-менеджмент, оптимизации). Явно обозначены как заданные интервьюером только сама задача и уточнение про хранение избранного.
Стиль интервьюера
Интервьюер задаёт уточняющие вопросы по ходу проектирования, углубляясь в детали реализации (например, где и как хранить избранные товары на стороне backend).