Перейти к основному содержимому

Вопросы на собеседовании

Вопросы на собеседовании Frontend-разработчика

25 вопросов на собеседовании Frontend-разработчика: JavaScript и TypeScript, React, CSS и вёрстка, Core Web Vitals, доступность и поведенческие вопросы.

Мои ответы на эти вопросы — за 30 секунд

Без резюме: опыт и последнее место работы. 25 вопросов в ваших словах, первые три — бесплатно.

Типовые вопросы и подсказки к ответам

Откройте подсказку под вопросом — и тут же проговорите ответ: разбор ИИ придёт в мини-собеседовании.

HR-вопрос

Вопрос 1Для всех уровней

Почему вы выбрали frontend-разработку?

Как отвечать ▾

Как отвечать: Свяжите мотивацию с видимым результатом работы, интересом к UX или инженерным задачам клиентской стороны; подкрепите примером проекта, который подтверждает выбор.

Пример сильного ответа

Мне нравится, что результат работы frontend-разработчика виден сразу: пользователь нажимает кнопку — интерфейс тут же откликается. Начиналось всё с вёрстки лендингов на фрилансе, и меня затянуло: сначала было интересно повторить чужой дизайн, потом — сделать так, чтобы всё летало. Дальше появился интерес к архитектуре: компоненты, состояние, доступность. Сейчас больше всего ценно, что моя работа напрямую влияет на то, как человек взаимодействует с продуктом, и это видно по метрикам: после оптимизации загрузки основной страницы время до интерактивности сократилось примерно на 40%.

  • Искренний интерес к интерфейсам, а не к модной профессии
  • Есть конкретный результат с цифрой
  • Видна эволюция от вёрстки к архитектуре

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 2Для всех уровней

Почему вы хотите работать Frontend-разработчиком именно в нашей компании?

Как отвечать ▾

Как отвечать: Соедините продукт и стек компании с вашим опытом, покажите, что изучили вакансию и сайт, и назовите конкретный вклад, который сможете дать команде.

Пример сильного ответа

Мне важно, чтобы продукт реально использовали люди и чтобы качество интерфейса считалось частью продукта, а не отделкой. По задачам и тому, как здесь обсуждают решения, видно: есть code review, дизайн-система, метрики, тесты — значит, инженерные решения аргументируют, а не спускают сверху. Плюс формат работы: мне комфортно, когда сочетаются самостоятельность и обмен опытом внутри команды из восьми человек, где я сейчас отвечаю за несколько крупных разделов. Хочу расти в сторону сложных интерфейсов и производительности — в такой среде это получается быстрее.

  • Ответ про среду и задачи, а не про зарплату
  • Интерес подтверждён фактами о процессе
  • Показано, что выбор сделан осознанно

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Бесплатно, без регистрации

Мини-собеседование: Frontend-разработчик

Прочитать вопросы мало — на интервью придётся говорить. Ответьте на один вопрос своими словами, 2–3 предложений хватит, и ИИ разберёт ответ по четырём критериям: структура, конкретика, релевантность, убедительность.

123
HR-вопросДля всех уровней

Почему вы выбрали frontend-разработку?

2–3 предложения достаточно · ещё 20 симв.

Технический вопрос

Вопрос 1Junior

Чем var, let и const отличаются друг от друга и как работает hoisting?

Как отвечать ▾

Как отвечать: Разведите область видимости (функция против блока), временную мёртвую зону и возможность переприсваивания; приведите пример, где var приводит к багу в цикле.

Пример сильного ответа

var имеет функциональную область видимости, let и const — блочную. var всплывает и до присваивания даёт undefined; let и const тоже формально поднимаются, но до инициализации находятся в так называемой временной мёртвой зоне, и обращение к ним раньше объявления — ошибка. const запрещает переприсваивание, но объект или массив, на который ссылается переменная, менять можно. В команде на код-ревью мы держим правило: var не используем вообще, для неизменяемых значений — const, для счётчиков и накопления — let. После такой миграции вычистили около 120 объявлений и убрали класс ошибок из-за случайного всплытия.

  • Определения точные и без воды
  • Показано практическое следствие для команды
  • Есть правило и измеримый результат

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 2Middle

Что такое замыкание и где вы использовали его на практике?

Как отвечать ▾

Как отвечать: Объясните доступ внутренней функции к переменным внешней области; назовите примеры: каррирование, приватное состояние, обработчики событий с контекстом.

Пример сильного ответа

Замыкание — это когда функция запоминает переменные из внешней области видимости и сохраняет к ним доступ даже после того, как внешняя функция завершилась. На практике функция-фильтр, реализованная через замыкание, держит внутри кэш ранее вычисленных результатов: на каталоге из 4 000 позиций пересчёт ускорился примерно вдвое. Второй случай — обработчики в цикле: там, где нужен снимок значения, применяется отдельная фабрика, чтобы каждое замыкание держало своё значение, а не одно общее. Это убирает баг с одинаковым индексом.

  • Определение дано своими словами
  • Два разных практических примера
  • Есть эффект, а не только теория

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 3Middle

Как работает event loop: чем микрозадачи отличаются от макрозадач?

Как отвечать ▾

Как отвечать: Расскажите про стек вызовов, очереди микрозадач (Promise) и макрозадач (setTimeout), порядок выполнения и приведите пример вывода console.log.

Пример сильного ответа

Event loop — это механизм, который позволяет одному потоку выполнять асинхронный код: сначала синхронный код в стеке, потом всё, что накопилось в очередях. Микрозадачи — это промисы, queueMicrotask, наблюдения за мутациями; макрозадачи — таймеры, события, сетевые ответы. Ключевое отличие: после каждой макрозадачи движок полностью опустошает очередь микрозадач и только потом берёт следующую макрозадачу и при необходимости перерисовывает кадр. Поэтому длинная цепочка промисов способна задержать отрисовку, а бесконечная рекурсия микрозадач блокирует страницу. Мне приходилось разбивать тяжёлый расчёт на порции через setTimeout: время отклика на список из 5 000 строк уменьшилось до десятых долей секунды.

  • Верно описана последовательность очередей
  • Отмечено влияние на отрисовку кадра
  • Приведён реальный кейс оптимизации

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 4Middle

Чем Promise.all отличается от Promise.allSettled и Promise.race?

Как отвечать ▾

Как отвечать: Сравните поведение при отклонении одного промиса: отказ всего all, ожидание всех результатов в allSettled и гонка первого завершившегося в race; назовите сценарии применения.

Пример сильного ответа

Promise.all ждёт все промисы и падает сразу при первой ошибке — результат приходит массивом в том же порядке. allSettled тоже ждёт все, но не отклоняется: на каждый промис возвращает объект со статусом fulfilled или rejected, поэтому удобно, когда часть запросов может упасть, а остальные данные всё равно нужны. race отдаёт результат самого быстрого — и успех, и ошибку, поэтому обычно это таймауты и отмена. В одном проекте на дашборде было 12 параллельных запросов к разным сервисам, и через allSettled удалось показать интерфейс даже при двух недоступных источниках, а не пустой экран.

  • Чётко разведены три метода и их сценарии
  • Есть реальный пример с числом и результатом
  • Показано понимание обработки частичных ошибок

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 5Middle

Чем type отличается от interface в TypeScript и когда что использовать?

Как отвечать ▾

Как отвечать: Разведите объединения, пересечения и примитивные алиасы у type против declaration merging и расширения классами у interface; покажите, что у вас есть осознанная конвенция.

Пример сильного ответа

Interface описывает форму объекта и умеет расширяться через extends, а также поддерживает declaration merging — одинаковые интерфейсы в разных файлах объединяются, что удобно для типизации сторонних библиотек. Type — это алиас для любого типа: объединения, кортежи, условные и mapped-типы, примитивы. Поэтому союзы и вычисляемые типы — только через type, а публичные контракты компонентов и пропсов удобнее держать в interface. В моей практике на проекте с 60+ компонентами общий словарь пропсов и ответов API живёт в интерфейсах, а вариации вроде строковых литералов статуса — в type. Так код читается легче и правки не расходятся по файлам.

  • Названы ключевые отличия, а не спор о вкусах
  • Есть практическое правило выбора
  • Подкреплено масштабом проекта

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 6Middle

Что такое дженерики в TypeScript? Приведите пример из своего кода.

Как отвечать ▾

Как отвечать: Покажите обобщённую функцию или тип на примере API-клиента, компонента таблицы или утилиты; объясните, как дженерики сохраняют типобезопасность без дублирования.

Пример сильного ответа

Дженерики — это параметры типа: функция или компонент описывается один раз и работает с любым типом, при этом связь между входом и выходом сохраняется, а не теряется в any. Классический пример — обёртка над запросом, которая принимает URL и возвращает Promise нужной модели, а также хук с типом данных списка. В моём коде есть компонент таблицы с дженериком по строке: колонки описываются один раз, а на выходе тип строки сохраняется, поэтому опечатка в поле ловится компилятором. На таблице в 15 колонок это убрало целый класс ошибок на ревью.

  • Сначала суть, потом пример из практики
  • Показан реальный выигрыш от типизации
  • Нет абстрактных рассуждений без опоры

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 7Для всех уровней

Чем useMemo отличается от useCallback и когда мемоизация вредит?

Как отвечать ▾

Как отвечать: Объясните мемоизацию значения против мемоизации функции; честно назовите цену мемоизации — сравнение зависимостей и сложность кода — и что сначала нужно измерить производительность.

Пример сильного ответа

useMemo кэширует результат вычисления, useCallback — саму функцию, чтобы ссылка не менялась между рендерами. Обычно useMemo нужен для тяжёлых расчётов и фильтрации больших списков, а useCallback — для колбэков, которые уходят в мемоизированные дочерние компоненты или в зависимости других хуков. Мемоизация не бесплатна: она держит значения в памяти и добавляет сравнение зависимостей на каждый рендер. Вред начинается, когда её ставят везде. В одном проекте убирание лишних useMemo и useCallback в 20 компонентах упростило код, а на слабых устройствах работало ровнее — расчёты там были дешёвыми.

  • Разница объяснена через суть, а не синтаксис
  • Честно названы издержки мемоизации
  • Есть пример обратного рефакторинга с числом

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 8Middle

Как React решает, когда перерисовать компонент, и зачем нужны ключи в списках?

Как отвечать ▾

Как отвечать: Расскажите про сравнение виртуального DOM, роль key в сопоставлении элементов списка и баги с состоянием при использовании индекса массива как ключа.

Пример сильного ответа

React перерисовывает компонент, когда меняется его state или приходят новые пропсы, а также когда рендерится родитель — если только компонент не обёрнут в memo. Сравнение поверхностное, по ссылке, поэтому новые объекты и функции в пропсах ломают мемоизацию. Ключи в списках нужны, чтобы React сопоставлял элементы между рендерами и переиспользовал DOM, а не пересоздавал всё. Индекс как ключ ломается при вставке и сортировке: в списке из 500 задач с drag-and-drop переход на стабильные id убрал мигание и потерю фокуса в полях ввода.

  • Механика рендера объяснена коротко и по делу
  • Связь ключей с переиспользованием DOM
  • Наглядный пример с числом и симптомом

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 9Middle

Какие типичные ошибки совершают с useEffect и массивом зависимостей?

Как отвечать ▾

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

Пример сильного ответа

Чаще всего мне приходилось сталкиваться с тремя вещами. Первая — неполный массив зависимостей: значение внутри эффекта остаётся устаревшим, и поведение расходится с ожиданиями. Вторая — объект, массив или функция прямо в зависимостях: они создаются заново на каждый рендер, и эффект зацикливается. Третья — эффект там, где достаточно вычисления при рендере или обработчика события. Ещё часто забывают про очистку подписок и таймеров. Помогает правило линтера о зависимостях, мемоизация через useCallback и useMemo, ref для нестабильных значений и функциональное обновление состояния. В одном проекте таких мест было около пятнадцати; после переработки лишние перерисовки при скролле ушли.

  • Названы три конкретные ошибки, а не общие слова
  • Есть инструменты решения, а не только диагноз
  • Цифра из личного опыта подтверждает практику

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 10Senior

Как вы выбираете способ управления состоянием: локальный state, Context, Redux или Zustand?

Как отвечать ▾

Как отвечать: Покажите критерии: область видимости данных, частота обновлений, размер команды; предупредите о преждевременном внедрении глобального стора и избыточных ре-рендерах через Context.

Пример сильного ответа

Начинаю с самого простого: локальный state, пока данные нужны одному экрану или ветке компонентов. Context беру для того, что меняется редко и нужно многим — тема, язык, текущий пользователь; для частых обновлений он неудобен, потому что тянет за собой всех потребителей. Redux Toolkit выбираю там, где большая команда, сложные асинхронные сценарии, нужны предсказуемость и инструменты отладки. Zustand — когда нужен лёгкий общий стор без церемоний, с точечными подписками на слайс. Критерии простые: частота обновлений, число потребителей, размер команды, требования к отладке и кешированию. В проекте с четырьмя командами и примерно сорока экранами общий стор на Redux Toolkit заметно упростил сопровождение.

  • Ясный принцип движения от простого к сложному
  • Названы критерии выбора, а не вкусовщина
  • Упоминание отладки и кеша говорит о зрелости

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 11Middle

Чем SSR, SSG и CSR отличаются в Next.js и как выбрать подход под страницу?

Как отвечать ▾

Как отвечать: Свяжите выбор с требованиями: SEO и персонализация против статики и скорости; приведите примеры — маркетинговая страница, личный кабинет, каталог.

Пример сильного ответа

SSR рендерит страницу на каждый запрос: свежие и персональные данные, но выше нагрузка на сервер и время ответа. SSG собирает готовый HTML заранее: максимально быстро, удобно кешировать на CDN, подходит для контента, который меняется нечасто. CSR отдаёт каркас и рисует всё в браузере: уместно для личных кабинетов и виджетов, где поисковая выдача не важна. Выбор делаю по странице: статьи и каталог — статика с периодической регенерацией, карточка товара с ценой под пользователя — серверный рендер, кабинет — клиентский. На практике это гибрид: серверные компоненты для данных, клиентские для интерактивности. Перевод каталога на статику дал падение нагрузки примерно на 60%.

  • Каждый подход объяснён через компромисс
  • Решение принимается по странице, а не глобально
  • Цифра про нагрузку делает ответ предметным

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 12Middle

Что такое controlled и uncontrolled компоненты и когда уместен каждый подход?

Как отвечать ▾

Как отвечать: Разведите управление значением через state против доступа через ref; назовите сценарии: сложные формы с валидацией против простых полей или интеграции с не-React-кодом.

Пример сильного ответа

Controlled — когда значение живёт в состоянии, а поле отдаёт изменения через обработчик. Это даёт предсказуемость: мгновенная валидация, зависимые поля, маски, блокировка кнопки отправки. Минус — рендер на каждый символ, что заметно на больших формах. Uncontrolled — когда значение читается через ref, а начальное задаётся атрибутом: меньше рендеров, проще интеграция с файловыми полями и сторонними библиотеками. На практике часто гибрид: библиотека форм держит поля неконтролируемыми и подписывает на изменения только нужные части. В форме на тридцать полей такой переход убрал задержку ввода примерно на треть.

  • Сравнение идёт по предсказуемости и производительности
  • Упомянут гибридный подход из реальной практики
  • Метрика из своего опыта усиливает ответ

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 13Junior

Чем flexbox отличается от grid и когда вы применяете каждый?

Как отвечать ▾

Как отвечать: Разведите одномерную раскладку против двумерной сетки; приведите примеры: набор карточек и выравнивание по строке против каркаса страницы.

Пример сильного ответа

Flexbox — одномерная раскладка: элементы выстраиваются вдоль одной оси, а размеры часто определяет содержимое. Это мой инструмент для навигации, тулбаров, рядов карточек, выравнивания и распределения свободного места. Grid — двумерная сетка: строки и колонки задаются заранее, есть именованные области и автоплейсмент, поэтому одинаковые по высоте строки получаются без хаков. Grid беру для каркаса страницы, галерей и дашбордов, flex — внутри компонентов. В дашборде с восемнадцатью виджетами такой подход сократил разметку и стили примерно на четверть, а адаптив собрался через auto-fit и minmax без лишних медиазапросов.

  • Чётко разделены одномерная и двумерная раскладка
  • Есть практическое правило комбинирования инструментов
  • Пример с цифрами и адаптивом звучит убедительно

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 14Для всех уровней

Как работает специфичность CSS и почему !important — тревожный сигнал?

Как отвечать ▾

Как отвечать: Объясните веса селекторов (inline, id, класс, тег), порядок при равной специфичности; покажите, что !important ломает предсказуемость и усложняет поддержку.

Пример сильного ответа

Специфичность — это вес селектора: инлайн-стили и идентификаторы перебивают классы, классы — теги, а при равном весе побеждает правило ниже в файле. Мне ближе держать специфичность низкой: один класс на компонент, вложенность не глубже двух уровней, для обнуления веса — :where(), плюс каскадные слои, чтобы порядок подключения не решал всё. !important ломает эту логику: он переворачивает каскад, и перебить стиль потом можно только ещё одним !important. Это тревожный сигнал, что архитектура CSS поплыла. На одном проекте получилось убрать около сорока таких правил и сократить таблицу стилей примерно на 15 процентов.

  • Показано понимание каскада, а не заучивание весов
  • Объяснено, почему !important мешает поддержке кода
  • Ответ подкреплён личным измеримым результатом

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 15Для всех уровней

Как вы подходите к адаптивной вёрстке: mobile-first или desktop-first?

Как отвечать ▾

Как отвечать: Расскажите про медиазапросы, относительные единицы, контрольные точки от контента, а не от устройств; упомяните проверку на реальных экранах и touch-интерфейсы.

Пример сильного ответа

По умолчанию я работаю mobile-first. Так проще: базовые стили — под узкий экран, а min-width медиазапросы дальше только добавляют, а не переопределяют. Это заставляет сначала расставить приоритеты в контенте, а не сжимать десктопную сетку. Для сложных админок, где основной сценарий — большой монитор, разумнее desktop-first, там логичнее max-width. Точки перелома выбираю по контенту, а не по популярным устройствам, и активно использую grid, clamp() для типографики и container queries. После перехода на mobile-first конверсия мобильной версии выросла примерно на 12 процентов, а правок под конкретные разрешения стало заметно меньше.

  • Есть осознанный принцип выбора, а не привычка
  • Учтён сценарий, где desktop-first действительно оправдан
  • Результат подтверждён метрикой, а не словами

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 16Middle

Что такое Core Web Vitals и как вы улучшаете LCP, CLS и INP?

Как отвечать ▾

Как отвечать: Назовите метрики и их пороги; для каждой приведите 1–2 приёма: оптимизация изображений и серверного ответа для LCP, резервирование места под контент для CLS, разбиение длинных задач для INP.

Пример сильного ответа

Core Web Vitals — это метрики опыта пользователя: LCP про скорость появления главного контента, CLS про визуальную стабильность, INP про отзывчивость на действия. Смотрю в первую очередь на полевые данные, лабораторные замеры использую как подсказку. По LCP: приоритетная загрузка главного изображения, отказ от ленивой загрузки выше первого экрана, самохостинг шрифтов, меньше блокирующих скриптов. По CLS: заданные размеры и aspect-ratio для картинок и баннеров, заранее отведённое место под динамику. По INP: дробление длинных задач, отложенная инициализация тяжёлых виджетов, разгрузка обработчиков ввода. На ключевой странице удалось снизить LCP примерно с четырёх секунд до двух, а INP — с 480 до 180 миллисекунд.

  • Различает полевые и лабораторные измерения
  • По каждой метрике названы конкретные приёмы
  • Есть результат до и после с цифрами

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 17Middle

Как вы ускоряете загрузку страницы: code splitting, lazy loading, оптимизация изображений?

Как отвечать ▾

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

Пример сильного ответа

Начинаю с измерений: смотрю размер бандла, что в него попало и что реально нужно на первом экране. Дальше код-сплиттинг по маршрутам и динамический импорт для тяжёлых виджетов — редакторов, графиков, карт. Ниже первого экрана изображения грузятся лениво, в современных форматах, с набором размеров под разную плотность экрана. Статика отдаётся через CDN с хешированными именами, чтобы кеш жил долго; критичный CSS инлайнится, некритичные скрипты откладываются, следующий маршрут подгружается заранее при наведении. На одном проекте бандл первой загрузки уменьшился примерно с 1,2 мегабайта до 380 килобайт, а время до интерактивности сократилось почти на треть.

  • Начинает с измерений, а не с оптимизации вслепую
  • Приёмы взяты из разных слоёв загрузки
  • Цифры показывают эффект, а не намерение

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 18Для всех уровней

Что вы делаете, чтобы интерфейс был доступным (a11y)?

Как отвечать ▾

Как отвечать: Назовите семантические теги, alt-тексты, навигацию с клавиатуры, контраст, ARIA-атрибуты там, где не хватает семантики; упомяните проверку скринридером или Lighthouse.

Пример сильного ответа

Доступность начинается с семантики: корректные теги, иерархия заголовков, label у каждого поля, alt у значимых изображений. Дальше — управление с клавиатуры: всё, что кликается, должно фокусироваться, фокус видимый, порядок обхода логичный. ARIA добавляю только там, где нативной семантики не хватает, потому что неверный ARIA хуже его отсутствия. Проверяю вручную — проход по интерфейсу только клавиатурой и скринридером, автоматические проверки в CI работают как быстрый фильтр. В дизайн-системе закладываю контраст и состояния фокуса прямо в компоненты. На одном продукте закрыли около шестидесяти замечаний по доступности, и большая часть — семантикой и фокусом, а не ARIA.

  • Семантика поставлена выше ARIA
  • Сочетаются ручная и автоматическая проверка
  • Показан системный подход через дизайн-систему

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Эти вопросы задают всем. По вашему резюме спросят другое. Перерывы, переходы, цифры — покажем 5 вопросов, которые зададут именно вам.

Вопросы по моему резюме

Кейс

Вопрос 1Middle

Кейс: страница каталога грузится 8 секунд, пользователи уходят. Как вы будете искать причину?

Как отвечать ▾

Как отвечать: Покажите системный подход: измерение в DevTools и WebPageTest, разделение проблем сети, рендеринга и JavaScript, гипотезы по приоритету и измерение эффекта после каждого шага.

Пример сильного ответа

Сначала я не трогаю код, а измеряю. Открываю Lighthouse и вкладку Performance, смотрю Network: где основное время — на ответ сервера, на загрузку бандла или на рендер. Параллельно смотрю RUM-метрики по реальным пользователям, потому что 8 секунд на моём ноутбуке и на среднем смартфоне — разные вещи. Дальше гипотезы: размер бандла, число запросов, кэширование, лишние ре-рендеры, блокирующие скрипты. На одном проекте после код-сплита и виртуализации длинного списка время до интерактивности упало с 7 до 2,5 секунд, а конверсия выросла на 12%. Оптимизировать вслепую смысла нет: сначала узкое место, потом изменение.

  • Показан системный подход: сначала измерения, потом правки
  • Есть конкретные цифры результата и влияние на бизнес
  • Упомянуты реальные пользователи, а не только локальная машина

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 2Senior

Кейс: нужно внедрить TypeScript в большой легаси-проект на чистом JavaScript. Ваш план?

Как отвечать ▾

Как отвечать: Предложите постепенную миграцию: настройка tsconfig в мягком режиме, новые файлы сразу на TS, типизация критичных модулей в первую очередь, метрики прогресса для команды.

Пример сильного ответа

Большой рефакторинг одним махом — верный способ положить продукт, поэтому мой план инкрементальный. Включаю allowJs и проверку типов, строгость наращиваю постепенно, чтобы сборка не падала. Дальше правило: новый код и всё, что правится, пишу на TypeScript — сначала общие типы, контракты API и утилиты, потом модули по одному. На проекте с командой из шести человек за пару месяцев доля TypeScript-файлов дошла до 60%, а ошибок типов в проде стало заметно меньше. Ещё ставлю проверку типов в CI, чтобы регресс не возвращался и план не оставался на бумаге.

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

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Поведенческий вопрос

Вопрос 1Для всех уровней

Расскажите о самом сложном баге во фронтенде, который вы нашли и исправили.

Как отвечать ▾

Как отвечать: Ответьте по STAR: симптомы, как локализовали проблему (воспроизведение, бинарный поиск по коммитам, логирование), решение и что изменили, чтобы баг не повторился.

Пример сильного ответа

Самый сложный случай — баг, который воспроизводился только у части пользователей и не ловился локально. В интернет-магазине заказы иногда дублировались: пользователь нажимал кнопку оплаты, запрос уходил дважды. Локально всё чисто, в логах — тишина. Мне помогают записи реальных сессий: я просматриваю сетевой водопад и вижу гонку между повторным рендером и отправкой запроса. Решение — блокировка кнопки по состоянию плюс идемпотентный ключ на бэкенде. Дубликаты упали примерно с 30 в неделю до нуля, а похожие гонки с тех пор находятся быстрее.

  • Есть структура: симптом, диагностика, причина, фикс
  • Конкретный измеримый результат в цифрах
  • Показана работа с данными вместо догадок

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 2Middle

Опишите ситуацию, когда вы не согласились с дизайнером по реализации макета. Как решили?

Как отвечать ▾

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

Пример сильного ответа

Бывает, что макет классный визуально, но дорогой в реализации и поддержке. В одном случае дизайнер настаивал на параллаксе и тяжёлых анимациях на длинной странице каталога: на слабых устройствах это давало просадку и заметные лаги при скролле. Я не спорю о вкусе — приношу данные: замеряю FPS и время рендера на среднем смартфоне, показываю, как это бьёт по метрикам. Дальше предлагаю альтернативу: анимация на CSS-трансформациях и лёгкий эффект на первом экране. В итоге выбрали компромисс, визуально почти неотличимый, а плавность выросла заметно.

  • Конфликт решается аргументами и замерами, а не спором
  • Предложена альтернатива, а не отказ
  • Сохранены отношения с дизайнером и цель продукта

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 3Для всех уровней

Как вы следите за изменениями во frontend-экосистеме и решаете, что внедрять?

Как отвечать ▾

Как отвечать: Назовите конкретные источники и ритуалы; важнее показать критерии внедрения: зрелость технологии, поддержка сообщества, реальная польза проекту против хайпа.

Пример сильного ответа

Слежу выборочно, иначе на это уходит всё время. Подписан на официальные release notes и RFC ключевых инструментов, читаю несколько профильных каналов и дайджестов, смотрю разборы конференций. Но главное — не тащить всё в прод сразу. Интересную технологию проверяю на пет-проекте или в отдельной ветке: смотрю на размер бандла, скорость сборки, кривую обучения и то, решает ли она нашу реальную боль. Если да — приношу команде короткое сравнение с планом миграции. Так за год осознанно перешли на сборщик с инкрементальной сборкой и сэкономили команде несколько часов в неделю.

  • Показан критерий отбора, а не погоня за хайпом
  • Есть проверка на практике и обсуждение в команде
  • Приведён результат внедрения в часах экономии

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Что спросят именно вас?

Типовые задают всем. По резюме спросят другое — «В резюме перерыв с 2024 года, чем вы занимались?». Покажем 5 таких вопросов бесплатно, а готовые ответы на них — под вашу вакансию и резюме — за 99 ₽.

Поделиться подборкой:TGVKWA

📈 Готовитесь к собеседованию? Получайте свежие вакансии Frontend-разработчик на почту или в Telegram — и откликайтесь, пока подготовка свежая.

бесплатно
PRO

Проверьте себя: первый разбор — бесплатно

Прочитать вопросы — это старт. Настоящая подготовка — проговорить ответ и услышать, что с ним не так. Первый разбор ИИ бесплатный и без регистрации, прямо на этой странице. Полная симуляция — в PRO или разово, без подписки.

  • ✓ Реальные вопросы по вашей роли
  • ✓ Разбор ответов с ИИ
  • ✓ Оценка и советы

Как пройти собеседование на позицию Frontend-разработчика

1. HR-этап

Подготовьте рассказ о себе на 1–2 минуты: последнее место работы, главный результат и причина интереса именно к этой вакансии. Для роли «Frontend-разработчик» HR чаще всего проверяет мотивацию и зарплатные ожидания — заранее сверьте их с медианой по рынку — 230 000 ₽ (блок «Зарплата» ниже на этой странице).

2. Профессиональный этап

Основная часть собеседования — вопросы по ключевым навыкам: JavaScript, TypeScript, React. Разберите категории «JavaScript и TypeScript» и «React и управление состоянием» из подборки выше и подготовьте по одному примеру из своего опыта на каждую — с цифрами и результатом.

3. Финальный этап

В финале обсуждают условия, график и задачи на испытательный срок. Подготовьте 2–3 вопроса работодателю о команде, метриках успеха и ближайших проектах — кандидаты, которые задают такие вопросы, запоминаются лучше.

План подготовки

  1. 1Повторите основы JavaScript: замыкания, event loop, промисы, прототипы — без них техническая часть не складывается.
  2. 2Разберите свои проекты на React: будьте готовы объяснить, почему выбрали такой стейт-менеджмент, роутинг и структуру компонентов.
  3. 3Выучите Core Web Vitals с порогами и по два способа улучшения каждой метрики — тема звучит почти на каждом интервью.
  4. 4Подготовьте 2–3 истории по STAR: сложный баг, конфликт требований, оптимизация, которой вы гордитесь.
  5. 5Изучите стек из вакансии (Next.js, TypeScript, конкретный стейт-менеджер) и привяжите к нему свои примеры.
  6. 6Пройдите пробное интервью в тренажёре и проверьте, насколько ответы конкретны и не сводятся к пересказу документации.

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

  • Пересказывать документацию React и MDN, не приводя примеров из собственных проектов.
  • Мемоизировать всё подряд и не понимать, что useMemo и useCallback имеют свою цену.
  • Игнорировать темы производительности и доступности — для middle и выше это обязательный минимум.
  • Не уметь объяснить event loop на примере с console.log — классический фильтр уже на первом этапе.
  • Критиковать текущего работодателя или дизайнеров вместо рассказа о поиске решения.
  • Не знать стек компании из вакансии и отвечать абстрактно, без привязки к её задачам.
Практика интервью

От вопросов — к тренировке интервью

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

Открыть тренажёр для роли Frontend-разработчик
Зарплата

Зарплата Frontend-разработчик в России

По данным 37 вакансий

Полная статистика →

P25 (ниже среднего)

193 000 ₽

Медиана

230 000 ₽

50% вакансий

P75 (выше среднего)

242 000 ₽

Медиана по уровню опыта

3–6 лет

230 000 ₽

Вопрос с каждого собеседования

«Какие у вас зарплатные ожидания?» — что ответить на собеседовании Frontend-разработчика

Называйте диапазон: от типичной зарплаты для вашего опыта до суммы на 10–15 % выше, но не выше уровня, который платит лишь четверть работодателей. Суммы на руки по России (данных пока немного — ориентир); в Москве и Санкт-Петербурге обычно выше.

Называйте 230 000 ₽ – 240 000 ₽ на руки.

Пример ответа рекрутеру — для типичной вакансии по России

«Рассматриваю предложения от 230 до 240 тысяч на руки — итоговая сумма зависит от задач и состава компенсации».

В поле «желаемая зарплата» — одна цифра, нижняя граница диапазона: 230 000 ₽. До вычета налога это ≈ 265 000 ₽.

Посчитать для вашего города и опыта

Покажем вашу сумму, готовые фразы на «сколько получаете сейчас» и «у нас бюджет до…», а если уже есть предложение — сравним его с рынком.

Навыки

Востребованные навыки Frontend-разработчика

Частота упоминания в вакансиях работодателей

Все навыки →
1
TypeScript24%
2
API16%
↑
3
JavaScript16%
↓
4
React14%
↑
5
Git14%
↑
6
REST11%
↓
7
Angular8%
8
Vue.js8%
↓

Вы готовитесь к собеседованию. А работодатели уже ищут Frontend-разработчика.

Создайте анонимный публичный профиль — его найдут в Яндексе и Google, и предложения придут сами. Контакты скрыты, пока вы не решите иначе.

Работодатели уже ищут: Frontend-разработчик · от 230 000 ₽

Создать анонимный профиль — бесплатно

Пройдите мини-собеседование, добавьте резюме на экране результата — профиль создадим за минуту, с вашего согласия.

Вы нанимаете Frontend-разработчика? Профили кандидатов и подбор для работодателей →

Вакансии

Свежие вакансии Frontend-разработчика: 471

Откройте подходящие предложения и откликнитесь после подготовки к собеседованию.

Смотреть вакансии →

Откликаетесь на вакансии Frontend-разработчика? Приложите сопроводительное письмо

Пример письма для этой профессии и генератор, который напишет письмо под текст вакансии. Первое письмо — бесплатно.