Gernar
Frontend DeveloperJavaScript, React и инструменты

Интервью-вопрос

Какие библиотеки часто используешь

Хороший ответ не должен быть списком модных пакетов. Лучше показать, какие задачи вы решали библиотеками, почему выбирали их и где видите ограничения.

Добавлен
Редакция

Подготовьте короткий ответ и пару деталей на случай уточняющих вопросов.

🐰0
🥚0

Мини-квиз

Проверка перед разбором

Несколько быстрых вопросов перед разбором. Так проще поймать места, которые только кажутся понятными.

Вопрос 1 из 60 правильно

Как лучше начать ответ?

Вы хотите звучать уверенно, но не превращать ответ в длинный список пакетов.

Варианты ответа

Разбор

Разобраться, а не зазубрить

Дальше разбираем суть, типичные уточнения и места, где легко сказать лишнее или перепутать термины.

Базовая идея

Не отвечайте на этот вопрос как на инвентаризацию package.json. Сильнее звучит ответ, где вы показываете свой набор инструментов и объясняете, зачем каждый из них появлялся в проекте.

Удобная структура такая: категория, библиотека, задача, ограничение. Например, для форм я использовал React Hook Form, потому что он хорошо работает с неконтролируемыми полями и снижает лишние рендеры. Но схему валидации и сообщения об ошибках нужно согласовывать с backend-контрактом. Иначе пользователь увидит разные правила на клиенте и сервере.

Так вы показываете не только знакомство с названиями. Вы показываете, что умеете принимать технические решения.

Как построить короткий ответ

Начните с 4-6 категорий, которые реально встречались в вашем опыте. Не называйте все библиотеки, которые вы видели в статьях или документации. Если опыта с инструментом мало, лучше сказать это прямо и связать его с похожей задачей.

Пример ответа, который можно адаптировать:

Чаще всего я работал с React и экосистемой вокруг него. Для запросов использовал fetch или Axios. Для сложного состояния брал Redux Toolkit. Для серверного состояния использовал TanStack Query. Для форм работал с React Hook Form. Для тестов использовал Jest, Vitest, React Testing Library и иногда Playwright. В выборе смотрю не только на удобство API, но и на поддержку, размер, TypeScript, SSR и то, насколько инструмент понятен команде.

Замените список на свой. Если вы не использовали TanStack Query, Zustand или Playwright, не добавляйте их только ради впечатления.

Как выбрать формулировку

1Нужно ответить коротко?
Назовите 4-6 категорий и по одной библиотеке в каждой. Обязательно добавьте причину выбора.
2Есть релевантный опыт проекта?
Свяжите библиотеку с задачей: загрузка данных, формы, кеш, тесты, дизайн-система.
3Не уверены, что стек компании совпадает?
Скажите, что можете работать с альтернативами и выбираете инструмент под командный контекст.
4Хотите усилить ответ?
Добавьте trade-off: размер, поддержка, boilerplate, SSR, безопасность или сложность миграции.

Что именно стоит назвать

Хорошо, если ваш ответ покрывает разные части frontend-разработки. Но в каждой части важно показать практический смысл.

Например, про HTTP не ограничивайтесь фразой про Axios. Добавьте, как обрабатываете ошибки, отмену запроса, повторную загрузку, авторизацию, одинаковый формат ответа и устаревшие ответы при быстром переключении фильтров или страниц. Про тесты скажите, какие сценарии проверяли, а не только название раннера.

Если называете UI-kit, markdown-рендерер или библиотеку для rich text, добавьте проверку безопасности и доступности. Нельзя бездумно отключать экранирование или прокидывать внешний HTML в интерфейс. Это может привести к XSS и краже токенов из доступного клиенту окружения.

Какие категории раскрыть в ответе

Запросы и кешfetch, Axios, TanStack Query

Объясните, где достаточно простого запроса, а где нужны кеш, повторные загрузки, invalidation, отмена запроса и защита от устаревших данных в UI.

СостояниеRedux Toolkit, Zustand, Context

Покажите границу. Глобальные данные и сложные сценарии живут отдельно, локальное UI-состояние отдельно.

ФормыReact Hook Form, Zod, Yup

Объясните, как библиотека снижает лишние рендеры, валидирует данные, показывает ошибки у полей и не ломает отправку при backend-ошибке.

ТестыVitest, Jest, RTL, Playwright

Назовите уровень проверки: unit, component, e2e. Без этого ответ звучит как список названий без практики.

Стили и UICSS Modules, Sass, Tailwind, UI kit

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

Как говорить про выбор, а не про вкусы

На интервью опасно звучит позиция, что вы всегда берете один и тот же инструмент. В реальном проекте выбор зависит от команды, архитектуры, требований к скорости, SSR, доступности, безопасности клиентских данных, тестов и будущей поддержки.

Пример плохого ответа:

Я всегда ставлю Axios, Redux и styled-components, потому что мне так удобнее.

Что здесь не так: вы не показываете критерии. Интервьюер может спросить, зачем Redux для простой формы или зачем отдельный HTTP-клиент, если в проекте уже есть обертка над fetch. Такой подход ведет к лишнему bundle, лишним рендерам, разным правилам обработки ошибок и более дорогим обновлениям. Безопаснее сказать, что у вас есть привычные инструменты, но вы выбираете их под задачу и правила команды.

Пример технического нюанса

Если вы упоминаете fetch или Axios, полезно знать базовую ловушку обработки ошибок. fetch не считает HTTP-статусы 400 и 500 ошибкой промиса. Ошибкой будет, например, сетевая проблема.

// Плохо: 404 или 500 попадут в обычный путь выполнения.
const response = await fetch("/api/profile");
const data = await response.json();

Что сломается в UI: компонент может показать пустой профиль как успешную загрузку, оставить старые данные после ошибки или не перевести экран в error state. Если пользователь быстро сменит страницу или фильтр, старый ответ может перетереть новые данные.

Более безопасный вариант:

const response = await fetch("/api/profile");

if (!response.ok) {
  throw new Error(`Request failed: ${response.status}`);
}

const data = await response.json();

В компоненте добавьте обработку loading, error, empty state и отмену через AbortController. Можно использовать принятую в проекте обертку или библиотеку для запросов. Это не значит, что fetch хуже Axios. Это значит, что у каждого инструмента есть контракт, который нужно понимать. Такой пример хорошо усиливает ответ, потому что показывает практику, а не спор о вкусах.

Если стек компании отличается от вашего

Не пытайтесь доказать, что ваш привычный стек единственно правильный. Лучше показать переносимый опыт. Если вы работали с React Hook Form, а в компании Formik, скажите, что понимаете общие задачи форм: состояние полей, touched, ошибки, async validation, отправку, reset и связь с backend-ошибками.

Хорошая формулировка:

С Formik я работал меньше, чем с React Hook Form, но задачи понимаю: валидировать поля, показывать ошибки, не терять состояние и корректно отправлять данные. Я бы быстро посмотрел принятые в команде паттерны и не стал бы менять библиотеку без причины.

Такой ответ звучит спокойно. Он не выдумывает опыт и не обесценивает стек компании.

Практический вывод

Ваша цель не в том, чтобы назвать максимум библиотек. Цель в том, чтобы показать, что вы умеете выбирать зависимости осознанно и понимаете цену каждого инструмента.

Держите ответ в формате: использовал X для Y, потому что Z, но учитываю W. Этот формат помогает отвечать и про React-экосистему, и про тесты, и про утилиты, и про стили.

Частые ошибки

Где обычно ошибаются

Проверьте формулировки, которые звучат уверенно, но на интервью быстро выдают пробелы.

  1. 1

    Перечислять названия без задач

    Такой ответ не показывает ваш уровень. Лучше сказать: для серверного состояния я использовал TanStack Query, потому что там важны кеш, refetch и invalidation. Это сильнее, чем просто назвать библиотеку.
  2. 2

    Выдавать привычку за универсальное правило

    Фраза про то, что вы всегда используете Redux, звучит рискованно. В маленьком приложении это может быть лишняя сложность. Безопаснее объяснить критерии: размер приложения, тип состояния, требования к отладке и командные договоренности.
  3. 3

    Не учитывать цену зависимости

    Любой пакет влияет на bundle, обновления, безопасность и миграции. Если задача решается через Intl, fetch или пару функций, новая библиотека может ухудшить поддержку проекта.
  4. 4

    Сравнивать инструменты только по популярности

    Популярность помогает отсеять рискованные варианты, но не заменяет технический выбор. Проверяйте документацию, активность релизов, TypeScript-типы, SSR-совместимость и то, как библиотека ложится в архитектуру проекта.
  5. 5

    Забывать про состояния сетевого UI

    Библиотека для запросов не снимает с вас UX-решения. Нужно явно продумать loading, error, empty state, отмену запроса при размонтировании и защиту от ситуации, когда старый ответ перетирает новые данные.
  6. 6

    Скрывать отсутствие опыта

    Если вы не работали с конкретной библиотекой, не говорите обратное. Лучше честно сказать, что работали с похожим инструментом, понимаете класс задач и сможете быстро перейти на стек команды.

Follow-up

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

Короткие ответы на вопросы, которыми проверяют, как вы выбираете библиотеки и понимаете их ограничения.

Живые ответы

Видео с похожим вопросом

Если найдем публичные интервью с таким вопросом, добавим их сюда. Их удобно смотреть после теории, чтобы свериться с живыми ответами.

Пока видео нет. Когда появятся подходящие публичные интервью, добавим их в этот блок, чтобы можно было сравнить разбор с тем, как отвечают реальные кандидаты.

Содержание