Skip to content

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

100 реальных вопросов с образцовыми ответами и пояснениями для уровня Senior.

Смотреть пример резюме: Фронтенд-разработчик

Тренировка флешкарточками

Интервальное повторение · Hunter Pass

Слушайте собеседование

Включите как подкаст: вопрос и образцовый ответ подряд.

Вопросы

decision-makingjavascript

Я отношусь к этому как к решению на основе данных, а не погоне за трендом.

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

Зачем это спрашивают: Интервьюер хочет видеть структурированный процесс принятия решений в условиях неопределённости, а не энтузиазм по поводу новизны. Слабый ответ перечисляет преимущества фреймворка, сильный показывает воспроизводимый процесс оценки.

refactoring

Я применил миграцию по паттерну strangler fig, которая шла параллельно обычной доставке.

  • Новые фичи писались в целевой архитектуре, а общий адаптерный слой позволял старому и новому коду сосуществовать.
  • Оба варианта работали параллельно за feature flag, поэтому QA независимо проверял каждый перенесённый раздел.
  • За шесть месяцев все критические пути были перенесены, после чего адаптерный слой удалили.
  • Доставка фич не останавливалась, потому что ни один спринт не был заблокирован миграцией.

Зачем это спрашивают: Старшие разработчики должны управлять риском миграции, не замораживая продуктовый роадмап. Интервьюер проверяет знание паттернов инкрементальной миграции и кросс-командной координации.

componentsapidesign

Я предпочитаю композицию вместо конфигурации и проектирую вокруг реальных потребителей.

  • Строю небольшие сфокусированные примитивы, которые пользователи собирают, а не один компонент с тридцатью пропсами.
  • Беру первые два-три реальных потребителя как источник проектирования и выделяю общие интерфейсы в типы.
  • Оставляю escape-hatches вроде renderProp или slot, чтобы потребители переопределяли поведение без форка.
  • Прячу внутреннюю реализацию за стабильным публичным интерфейсом, чтобы рефакторить внутренности без поломки вызывающих сторон.

Зачем это спрашивают: Тест на качество проектирования API. Интервьюер отличает разработчиков, думающих о компоненте с точки зрения потребителя, от тех, кто оптимизирует первоначальную реализацию.

ssr

Я подбираю стратегию рендеринга под контент каждого роута, а не одну на всё приложение.

  • SSR подходит для часто меняющегося, персонализированного контента, но добавляет серверные расходы и сложность кеширования.
  • SSG выигрывает для в основном стабильного контента, потому что переносит работу на сборку и даёт очень быстрый TTFB.
  • CSR хорош для аутентифицированных дашбордов, где SEO не важен, но ухудшает первую загрузку.

Зачем это спрашивают: Старшие разработчики принимают решения по рендерингу на уровне роута, а не приложения. Интервьюер проверяет понимание последствий каждого подхода для производительности, SEO и эксплуатации.

performance

Я задаю конкретные числа, принуждаю их в CI и фиксирую обоснование.

  • Определяю жёсткие лимиты, например 200 КБ сжатого начального JS-бандла и LCP менее 2,5 секунды на среднем устройстве.
  • Встраиваю эти числа в CI, чтобы pull request, превышающий бюджет, не проходил сборку.
  • Фиксирую обоснование в общем ADR, чтобы команды понимали, зачем существует лимит.
  • Раз в квартал пересматриваю пороги по мере развития продукта.

Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат превращать цели производительности в применимые инженерные практики, а не просто намерения.

event-loop

Event loop выполняет по одной задаче, затем опустошает микрозадачи перед рендерингом, и это определяет, как я планирую работу.

  • Длинные синхронные задачи блокируют loop и делают страницу неотзывчивой.
  • Разбиваю дорогие вычисления на части через requestIdleCallback или scheduler.postTask.
  • Откладываю некритичную работу в микрозадачи через Promise.resolve.
  • Избегаю синхронных чтений и записей в DOM в одной задаче, чтобы не вызывать layout thrashing.

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

components

Я закладываю доступность с самого начала через ARIA Authoring Practices и тестирование на реальных скринридерах.

  • Начинаю с ARIA Authoring Practices, чтобы определить ожидаемую навигацию по клавишам и семантику ролей для каждого паттерна.
  • Каждому интерактивному компоненту задаю контракт управления фокусом: куда он попадает при открытии и закрытии.
  • Тестирую сначала только с клавиатурой, затем с VoiceOver и NVDA, потому что спецификация ARIA и реальные браузеры расходятся.
  • Требования к доступности вношу в story каждого компонента в Storybook как критерии приёмки, а не как отдельный аудит.

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

statearchitecture

Я раскладываю состояние по категориям и держу границы чёткими; библиотека важна меньше, чем эта дисциплина.

  • Серверный кеш идёт в React Query или SWR, глобальное UI-состояние в Zustand или минимальный Context, локальное эфемерное в useState.
  • Чёткие границы предотвращают синхронизацию серверных данных в глобальный стор с ручным управлением устареванием.
  • Производное состояние вычисляю, а не храню, что устраняет целые классы багов синхронизации.

Зачем это спрашивают: Интервьюер проверяет, проектирует ли кандидат архитектуру состояния или просто берёт Redux по привычке. Сильный ответ называет конкретные компромиссы между категориями.

soft-skillscomponents

Я строго следую semantic versioning и делаю любой breaking change легко усваиваемым.

  • Любое удаление пропа или изменение поведения, это мажорный bump.
  • В предыдущем минорном релизе отправляю deprecation-уведомление с кодмодом там, где это возможно.
  • Веду CHANGELOG с руководствами по миграции, а не просто дифф.
  • Для больших команд провожу office-hours сессию, чтобы потребители задали вопросы до апгрейда.

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

react

Я нахожу причину до любого исправления, двигаясь от профайлера вглубь.

  • Начинаю в браузерном профайлере, чтобы понять, где узкое место: JavaScript, layout/paint или сеть.
  • Если в JavaScript, открываю React DevTools Profiler, чтобы найти, что перерендеривается и почему.
  • Типичные виновники: inline-объекты или функции, отсутствие мемоизации дорогих значений, или контекст, рассылающий обновления слишком многим потребителям.
  • Исправляю причину, а не обматываю всё в memo как заплатку.

Зачем это спрашивают: Интервьюер хочет видеть систематический диагностический процесс, а не список оптимизационных трюков. Слабый ответ сразу предлагает memo или useMemo без измерений.

system-designdesigntokens

Я использую трёхуровневую систему токенов из единого источника истины.

  • Примитивные токены кодируют сырые значения вроде цветов и отступов; семантические токены отображаются на роли вроде background-primary; компонентные ссылаются на семантические.
  • Темы меняют только семантический слой, так что тёмная тема переопределяет семантические токены, а примитивы остаются неизменными.
  • Токены генерирую из одного источника, обычно Figma Variables или JSON-схемы.
  • Распространяю их как CSS custom properties или платформенные константы через автоматизированный шаг сборки.

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

react

Я делю по роутам и лениво гружу тяжёлые зависимости, опираясь на анализ бандла.

  • Анализирую бандл с webpack-bundle-analyzer, чтобы найти крупные зависимости, не нужные на начальном роуте.
  • React.lazy и Suspense разделяют каждый роут в отдельный чанк.
  • Тяжёлые сторонние библиотеки вроде библиотеки графиков прячу за dynamic import внутри использующего их компонента.
  • Слежу за раздуванием общих чанков: если каждый роут тянет одну большую вендорную библиотеку, пересматриваю ленивую загрузку или замену.

Зачем это спрашивают: Code splitting хорошо известен, но старшие разработчики объясняют шаг анализа и граничные случаи, а не только API React.lazy.

e2e

E2E держу тонкими, детерминированными и только для критических флоу.

  • Ограничиваю E2E критическими флоу вроде аутентификации и оформления заказа; остальное покрываю более быстрыми юнит- и интеграционными тестами.
  • Запускаю каждый тест против детерминированного окружения с засеянными данными, чтобы он не зависел от внешних сервисов.
  • Проверяю только наблюдаемые результаты, никогда детали реализации.
  • Нестабильные тесты немедленно карантинизирую, потому что известные падения приучают команду игнорировать красные сборки.

Зачем это спрашивают: Интервьюер проверяет, уважает ли кандидат пирамиду тестирования и понимает, для чего E2E тесты подходят лучше всего.

Мои главные инструменты, документация с видимыми доказательствами и превращение правильного пути в путь по умолчанию.

  • Чтобы продвинуть accessibility-first работу, я провёл двухчасовой воркшоп с реальными демо скринридеров, затем опубликовал краткое руководство в общей вики.
  • Сделал соответствие лёгким, добавив ESLint jsx-a11y правила в общий конфиг, так что правильный путь стал путём по умолчанию.
  • Отслеживал принятие неформально и отмечал команды, выпускавшие доступные компоненты.
  • Это создало социальный импульс без обязательных требований.

Зачем это спрашивают: Влияние на уровне senior, организационное, а не только техническое. Интервьюер проверяет, использует ли кандидат системное мышление для изменения дефолтов, а не только убеждение.

web-vitals

Я работаю с каждой метрикой отдельно и отслеживаю их через реальный пользовательский мониторинг, а не только Lighthouse.

  • Для LCP предзагружаю главное изображение через link rel=preload, подаю в современном формате вроде AVIF и никогда не гружу лениво.
  • Для CLS резервирую явные размеры каждого изображения и embed и избегаю вставки динамического контента над существующим.
  • Для INP профилирую длинные задачи во время взаимодействий и разбиваю их или откладываю некритичную работу.
  • Отслеживаю все три в реальном пользовательском мониторинге, потому что лабораторные и полевые оценки часто расходятся.

Зачем это спрашивают: Тест на глубину знания Core Web Vitals. Слабый ответ перечисляет три метрики; сильный описывает конкретные вмешательства для каждой и различает лабораторное и полевое измерение.

tech-debt

Я приоритизирую долг по масштабу ущерба и стоимости исправления сейчас против позже.

  • Долг в горячем пути, блокирующий доставку или несущий риски безопасности и доступности, устраняю в текущем квартале.
  • Изолированный, хорошо понятый долг, дорожающий незначительно, документирую в бэклоге с чётким триггером срочности.
  • Сопротивляюсь кампаниям по долгу в отрыве от продуктовой работы, потому что они редко завершаются и вызывают болезненное переключение контекста.

Зачем это спрашивают: Интервьюер проверяет, принимает ли кандидат прагматичные решения о компромиссах, а не относится ко всему техническому долгу как к одинаково срочному или одинаково откладываемому.

mentoring

Инстинкт на граничные случаи я вырабатываю через повторение, а не одну лекцию.

  • Разбираю конкретный PR вместе, прося их вслух описывать своё мышление.
  • Пробел обычно не в знаниях, а в привычке спрашивать, что может пойти не так, до написания счастливого пути.
  • Даю структурированное упражнение по отладке на основе прошлого баг-репорта, чтобы выработать этот инстинкт.
  • В последующих ревью указываю на упущенный граничный случай и прошу тест до мержа.

Зачем это спрашивают: Интервьюер ищет конкретные стратегии наставничества, а не общие заявления о терпении или обратной связи. Хороший ответ описывает поведенческий цикл, а не разовый разговор.

css

Cascade layers дают управляемую иерархию специфичности через правило @layer.

  • Стили в слое, объявленном позже, побеждают более ранние слои, а стили вне слоёв по умолчанию побеждают любые слоёные.
  • Это управляет приоритетом без хаков специфичности через лишние селекторы или !important.
  • Использую слои при интеграции стороннего reset или UI-библиотеки, помещая их стили в низкоприоритетный слой.
  • Так мои стили компонентов всегда побеждают без посекторальных переопределений.

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

monolithmicro-frontends

Micro-frontends решают автономию команд и независимый деплой, а не производительность.

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

Зачем это спрашивают: Интервьюер проверяет, понимает ли кандидат, что micro-frontends, это организационное решение, а не архитектурная оптимизация, и умеет ли объяснить, когда цена не оправдана.

ci-cd

Пайплайн идёт поэтапно с гейтами и держится под восемью минутами.

  • Этапы: установка и кеш зависимостей, проверка типов, юнит- и интеграционные тесты, сборка, визуальная регрессия через Chromatic или Percy, деплой на preview-URL.
  • Каждый этап должен пройти перед следующим.
  • Preview-деплои автоматичны на каждый pull request, чтобы рецензенты проверяли UI без локальной проверки кода.
  • Main автоматически деплоится в staging; продакшн-продвижение требует ручного подтверждения.

Зачем это спрашивают: Интервьюер хочет видеть конкретный дизайн пайплайна с мнениями о скорости и ручных воротах, а не общее описание того, что такое CI/CD.

Закрытые вопросы

  • 21

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

    reacti18nsoft-skills
  • 22

    Что такое виртуальный DOM и каковы его реальные ограничения производительности?

    domvirtual-domperformance
  • 23

    Как бы вы реализовали оптимистичные обновления UI и откат при ошибке серверного запроса?

    locking
  • 24

    Объясните, как реализовать виртуализированный список для эффективного рендера десятков тысяч строк.

    virtualization
  • 25

    Как вы подходите к безопасности во фронтенд-коде, в частности к XSS и CSRF?

    xsscsrf
  • 26

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

    typescript
  • 27

    Каков ваш процесс ревью pull request от менее опытного разработчика?

    code-reviewconcurrency
  • 28

    Опишите, как работает module federation и какие проблемы он решает в распределённой фронтенд-архитектуре.

    distributedfederation
  • 29

    Как вы управляете feature flags во фронтенд-приложении в масштабе?

    soft-skillsfeature-flags
  • 30

    Объясните разницу между useMemo, useCallback и React.memo и когда каждый из них реально стоит использовать.

    react
  • 31

    Как бы вы спроектировали функцию совместного редактирования в реальном времени, например общий документ, в React-приложении?

    react
  • 32

    Что делает настройку монорепо хорошей для кодовой базы с большим объёмом фронтенда и каковы типичные режимы отказа?

    monorepo
  • 33

    Как вы подходите к тестированию React-компонентов, зависящих от сложного асинхронного поведения?

    reactcomponentsasync
  • 34

    Опишите пайплайн рендеринга браузера от парсинга HTML до пикселей на экране.

    htmlrendering
  • 35

    Как вы балансируете быстрый выпуск с поддержанием качества кода под давлением продукта?

  • 36

    Объясните разницу между аутентификацией и авторизацией в контексте фронтенда и как вы обрабатываете оба аспекта.

    auth
  • 37

    Как бы вы настроили отслеживание ошибок и мониторинг для продакшн-фронтенда?

    monitoring
  • 38

    Что такое спецификация CSS containment и как она улучшает производительность рендеринга?

    cssperformance
  • 39

    Как вы оцениваете новый инструмент или библиотеку и вводите её в стек команды?

    decision-making
  • 40

    Опишите, как вы реализуете надёжную систему форм со сложной валидацией и динамическими полями.

    formssystem-designvalidation
  • 41

    Как вы структурируете организацию папок и модулей во фронтенд-приложении для долгосрочной поддерживаемости?

    structure
  • 42

    Каковы компромиссы между использованием GraphQL и REST для продукта с большим объёмом фронтенда?

    restgraphql
  • 43

    Как вы подходите к веб-производительности для мобильных пользователей на медленных сетях?

    performance
  • 44

    Объясните, как реализовать бесконечную прокрутку с хорошей производительностью и доступностью.

    a11yperformance
  • 45

    Как вы обрабатываете нормализацию данных на фронтенде и почему это важно?

    soft-skillsnormalization
  • 46

    Как вы сообщаете о техническом риске нетехническим стейкхолдерам?

    communication
  • 47

    В чём разница между layout, paint и composite в рендеринге браузера и почему это важно для анимаций?

    rendering
  • 48

    Как вы мигрируете большое приложение с JavaScript на TypeScript, не блокируя команду?

    typescriptjavascript
  • 49

    Как вы обеспечиваете согласованное поведение в браузерах и устройствах для продакшн-приложения?

  • 50

    Опишите случай, когда выпущенная вами фича имела неожиданный негативный эффект и как вы с этим справились.

  • 51

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

    components
  • 52

    Как работает сборщик мусора JavaScript и как неправильный выбор структур данных может вызывать утечки памяти в браузерном приложении?

    memorygcjavascript
  • 53

    Как вы подходите к написанию общих утилит, которые реально переиспользуемы без превращения в кладовку?

  • 54

    Объясните разницу между гидратацией и рендерингом в Next.js-приложении и типичные ловушки.

    hydrationnextjs
  • 55

    Как вы обрабатываете CSS-in-JS в масштабе и когда рекомендовали бы против него?

    soft-skillscss
  • 56

    Какова ваша стратегия по поддержанию зависимостей в актуальном состоянии без поломки продакшна?

    dependencies
  • 57

    Как вы используете web workers для улучшения производительности в браузерном приложении?

    web-workerperformance
  • 58

    Опишите, как вы создали бы сложный интерфейс drag-and-drop, работающий и для пользователей клавиатуры.

    types
  • 59

    Как вы подходите к progressive enhancement versus graceful degradation в современной фронтенд-разработке?

  • 60

    Как вы обрабатываете состояния загрузки и skeleton screens без создания layout shift?

    soft-skillsuxweb-vitals
  • 61

    Каков ваш опыт работы с Web Components и как они соотносятся с React-компонентами?

    reactcomponents
  • 62

    Как вы структурируете аналитику и отслеживание событий во фронтенд-приложении, чтобы поддерживать его обслуживаемость?

  • 63

    Как бы вы реализовали поддержку офлайн в веб-приложении с помощью service workers?

    service-worker
  • 64

    Опишите ваш опыт ведения архитектурного решения во фронтенде, имевшего долгосрочное влияние на команду.

    architecture
  • 65

    Как вы проектируете стратегию обработки ошибок для фронтенд-приложения?

    design
  • 66

    Что такое принципы SOLID и как они применяются к проектированию компонентов фронтенда?

    designsolidcomponents
  • 67

    Как вы подходите к A/B тестированию на уровне фронтенда без создания проблем с производительностью?

    testing
  • 68

    Как вы обрабатываете устаревшие API браузера или функции, которые удаляются?

    soft-skillsapi
  • 69

    Опишите вашу стратегию наблюдаемости фронтенда за пределами отслеживания ошибок.

    observability
  • 70

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

    soft-skillscomponents
  • 71

    Что наиболее важно для вас при погружении в незнакомую кодовую базу фронтенда?

    onboarding
  • 72

    Как вы подходите к оптимизации производительности анимаций на устройствах низкого класса?

    optimization
  • 73

    Как вы проектируете слой получения данных во фронтенд-приложении для его тестируемости и поддерживаемости?

    design
  • 74

    Опишите, как заголовки Content Security Policy улучшают безопасность приложения и как их настраивать без поломки функциональности.

    cspconfig
  • 75

    Как вы обеспечиваете масштабирование процесса code review в команде при её росте?

    code-reviewconcurrency
  • 76

    В чём разница между оптимистичной и пессимистичной блокировкой и как эти концепции применяются к конкурентному редактированию во фронтенде?

    lockingconcurrency
  • 77

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

    componentsa11ydecision-making
  • 78

    Как вы подходите к созданию фронтенда для мультитенантного SaaS-продукта, где у каждого тенанта может быть разный брендинг?

    multi-tenancy
  • 79

    Каковы компромиссы монорепо против полирепо для многокомандной фронтенд-организации?

    monorepo
  • 80

    Как вы обрабатываете очень большие наборы данных во фронтенде, например экспорт или рендер десятков тысяч записей?

    soft-skills
  • 81

    Как concurrent mode в React меняет ваше мышление о рендеринге и получении данных?

    reactconcurrency
  • 82

    Как вы структурируете CSS для большого приложения, избегая конфликтов специфичности и глобального загрязнения стилями?

    css
  • 83

    Каков ваш подход к парному программированию с разработчиком, имеющим очень другой стиль кодирования?

  • 84

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

    system-design
  • 85

    Как вы проверяете, что ваши UI-изменения безопасны для выпуска, помимо запуска тест-сьюта?

    validation
  • 86

    Как вы безопасно управляете переменными окружения в Next.js-приложении?

    nextjsconfig
  • 87

    Каков ваш подход к интернационализации форматирования дат, времени и чисел в разных локалях?

    i18n
  • 88

    Как вы справляетесь с задачей поддержания синхронизации библиотеки компонентов Storybook с реальными компонентами приложения?

    componentsstorybooksoft-skills
  • 89

    Опишите, как вы бы спроектировали поток аутентификации для Next.js-приложения с использованием JWT.

    nextjsauth
  • 90

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

    documentation
  • 91

    Что такое Suspense для получения данных и как он меняет проектирование компонентов?

    componentsreactdesign
  • 92

    Как вы обрабатываете загрузку сторонних скриптов без блокировки основного рендеринга страницы?

    soft-skills
  • 93

    Как вы обрабатываете длительные фоновые задачи во фронтенде, например генерацию большого отчёта?

    soft-skills
  • 94

    Каков ваш подход к версионированию публичной библиотеки UI-компонентов?

    componentsversioning
  • 95

    Как вы выявляете и устраняете риск выгорания у себя и коллег?

    wellbeing
  • 96

    В чём разница между структурной и номинальной типизацией и как TypeScript обрабатывает каждую?

    typescript
  • 97

    Как вы подходите к планированию мощности и оценке трудозатрат для сложного фронтенд-проекта?

    capacity
  • 98

    Как вы справляетесь с задачей согласованного кросс-платформенного поведения при общей кодовой базе React Native и React web?

    soft-skillsreact
  • 99

    Каков ваш процесс устаревания и удаления компонента из внутренней дизайн-системы?

    componentsdesign-systemsystem-design
  • 100

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