Skip to content

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

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

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

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

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

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

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

Вопросы

html

Эти три типа отображения различаются по потоку и box-поведению.

  • Block: занимает всю ширину родителя, начинается с новой строки (div, p, h1).
  • Inline: занимает только ширину содержимого, течёт в строке, игнорирует width/height (span, a, strong).
  • Inline-block: течёт как inline, но принимает width, height, padding, margin как block.

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

css

Специфичность: числовой вес, определяющий, какое CSS-правило побеждает для одного элемента и свойства.

  • Считается по четырём категориям: inline-стили, ID, классы и псевдоклассы, теги.
  • Каждая категория весомее нижних, поэтому более высокий вес побеждает независимо от порядка объявления.
  • !important перекрывает всё, но использовать его стоит крайне редко.

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

css

Каждый элемент: прямоугольный блок из четырёх слоёв.

  • Content: область с текстом или изображением.
  • Padding: прозрачный отступ между содержимым и рамкой.
  • Border: сама рамка вокруг padding.
  • Margin: внешний отступ, отделяющий элемент от соседей.
  • box-sizing: border-box включает padding и border в width и height, это современный дефолт.

Зачем это спрашивают: Понимание box model фундаментально для вёрстки и управления размерами элементов.

css

Разница в том, остаётся ли элемент в потоке документа.

  • position: relative оставляет элемент в потоке, но позволяет сдвигать его через top, right, bottom, left без вытеснения соседей.
  • position: absolute убирает его из потока и позиционирует относительно ближайшего предка с position, отличным от static.
  • Если такого предка нет, позиционирование идёт относительно начального содержащего блока.

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

flexbox

Flexbox: одномерная система компоновки, включаемая через display: flex на контейнере.

  • Главная ось: основное направление элементов, задаётся flex-direction, по умолчанию горизонтальна.
  • Поперечная ось: перпендикулярна главной.
  • justify-content выравнивает по главной оси; align-items: по поперечной.

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

cssflexboxgrid

CSS Grid: двумерная система компоновки для строк и столбцов.

  • Вы явно задаёте строки и столбцы контейнера и размещаете элементы в этой сетке.
  • Flexbox подходит для одномерных раскладок, где элементы идут в одном направлении: навигация или ряд карточек.
  • Grid предпочтителен, когда нужен контроль сразу в двух измерениях: шапка, боковая панель, контент и подвал.

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

css

Эти единицы различаются тем, относительно чего они задаются.

  • px: абсолютная, не масштабируется с настройками пользователя или браузера.
  • em: относительно font-size родителя, может накапливаться при вложенности.
  • rem: относительно font-size корневого html, более предсказуема для глобального масштабирования.
  • vw и vh: единицы вьюпорта, равные 1% ширины или высоты окна, удобны для полноэкранных блоков.

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

responsive

Стройте mobile-first и постепенно улучшайте для широких экранов.

  • Начните с базового мобильного макета, затем добавляйте media queries с min-width для больших экранов.
  • Используйте гибкие единицы вроде процентов и rem для ширин и шрифтов.
  • Используйте Flexbox или Grid для контейнеров макета.
  • Избегайте жёстких ширин и задавайте max-width странице, чтобы контент не выходил за пределы.

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

htmla11y

Семантический HTML использует элементы, передающие смысл содержимого.

  • Применяйте header, nav, main, article, section, footer вместо универсальных div повсюду.
  • Браузеры, поисковики и ассистивные технологии читают эти сигналы, чтобы понять структуру документа.
  • Это улучшает доступность для скринридеров, поднимает SEO и упрощает чтение кода.

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

cssqueries

Media queries применяют CSS только при выполнении условия, чаще всего ширины вьюпорта.

  • Запрос @media (min-width: 768px) активирует стили только на экранах шириной от 768px.
  • Условия можно комбинировать через and или разделять типы носителей print и screen.

Зачем это спрашивают: Это прямая проверка знания основного инструмента адаптивной вёрстки.

cssindexes

z-index управляет порядком наложения позиционированных элементов: выше значение, ближе к зрителю.

  • Работает только на элементах с position, отличным от static, и на flex/grid-дочерних.
  • Контекст наложения: изолированная группа, внутри которой z-index сравниваются только между собой.
  • Поэтому дочерний элемент с огромным z-index не поднимется выше предка с меньшим контекстом.

Зачем это спрашивают: Непонимание контекста наложения является одним из самых частых источников багов с z-index.

css

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

  • display: none убирает элемент из потока, он не занимает места и недоступен скринридерам.
  • visibility: hidden скрывает его визуально, но место в макете сохраняется.
  • opacity: 0 делает его прозрачным, но он занимает место, перехватывает клики и остаётся доступным.

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

a11y

Атрибут alt задаёт текстовое описание изображения.

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

Зачем это спрашивают: Проверяется знание базовой доступности изображений, закреплённое в стандарте WCAG.

css

Каскад определяет, какое правило применить, когда несколько целятся в один элемент и свойство.

  • Сначала оценивается происхождение и важность правил.
  • Затем специфичность селекторов.
  • Затем порядок в источнике, поэтому при равной специфичности побеждает более позднее правило.

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

css

Padding: внутренний отступ элемента, margin: внешний.

  • Padding находится между содержимым и рамкой и перенимает фоновый цвет элемента.
  • Margin: прозрачный отступ между рамкой и соседними элементами.
  • Смежные вертикальные margin у блоков схлопываются до большего значения, чего padding никогда не делает.

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

scopejavascript

Они различаются областью видимости, поднятием и переприсваиванием.

  • var имеет функциональную область и поднимается, поэтому к нему можно обратиться до объявления, что порождает баги.
  • let и const имеют блочную область и существуют только внутри ближайших фигурных скобок.
  • const запрещает переприсваивание привязки, но не делает объекты или массивы неизменяемыми.

Зачем это спрашивают: Проверяется знание областей видимости и поднятия, необходимых для написания предсказуемого JavaScript.

javascript

Всплытие: то, как событие движется вверх по DOM после срабатывания.

  • Сначала вызываются обработчики на целевом элементе, затем на каждом предке вплоть до document.
  • Клик по кнопке внутри div также вызывает обработчики клика у div и его предков.
  • Остановить можно вызовом event.stopPropagation() внутри обработчика.

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

closuresjavascript

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

  • Это работает, потому что функции хранят ссылку на окружение, где были созданы.
  • Классический пример: фабрика счётчиков, где каждый вызов получает собственную приватную переменную.

Зачем это спрашивают: Замыкания: ключевая концепция JavaScript, и этот вопрос проверяет понимание лексических областей видимости.

javascript

=== сравнивает значение и тип, == приводит типы перед сравнением.

  • === возвращает true только при точном совпадении значения и типа.
  • == сначала приводит типы, поэтому 0 и false или null и undefined могут оказаться равны.
  • Используйте === почти везде, чтобы избежать трудноуловимых сюрпризов приведения.

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

thisjavascript

Значение this зависит от того, как вызвана функция, а не где она определена.

  • В вызове метода this: это объект перед точкой.
  • В самостоятельном вызове в строгом режиме this равно undefined.
  • Стрелочные функции не имеют своего this и наследуют его из окружающего лексического окружения.

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

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

  • 21

    Что такое Promise в JavaScript и зачем он нужен?

    promisesjavascript
  • 22

    Что такое async/await и как это соотносится с промисами?

    asyncpromises
  • 23

    В чём разница между null и undefined в JavaScript?

    fundamentalsjavascript
  • 24

    Что такое цикл событий (event loop) в JavaScript и почему он важен?

    event-loopjavascript
  • 25

    В чём разница между map, filter и reduce у массивов?

    arrays
  • 26

    Чем стрелочные функции отличаются от обычных function expressions?

    functions
  • 27

    Что такое деструктуризация в JavaScript? Приведите практический пример.

    destructuringjavascript
  • 28

    Что такое операторы spread и rest и чем они отличаются?

    restspread
  • 29

    Что такое DOM и как выбирать и изменять элементы с помощью JavaScript?

    domjavascript
  • 30

    Что такое делегирование событий и почему это полезный паттерн?

    dom
  • 31

    В чём разница между localStorage и sessionStorage?

    sessions
  • 32

    Что такое JSON и как его парсить и сериализовать в JavaScript?

    serializationjavascript
  • 33

    Как выполнить запрос данных с помощью fetch API в JavaScript?

    javascript
  • 34

    Как работает прототипное наследование в JavaScript?

    prototypesjavascript
  • 35

    В чём разница между call, apply и bind?

    functions
  • 36

    Что такое React и какую основную проблему он решает?

    react
  • 37

    В чём разница между React-элементом и React-компонентом?

    reactcomponents
  • 38

    Что такое пропсы (props) в React и как передать их дочернему компоненту?

    reactcomponents
  • 39

    Что такое state в React и чем он отличается от props?

    react
  • 40

    Как работает хук useState?

    hooks
  • 41

    Как работает хук useEffect и что контролирует момент его запуска?

    hooks
  • 42

    Что такое виртуальный DOM в React?

    reactdomvirtual-dom
  • 43

    Какая распространённая ошибка допускается при навешивании обработчиков событий в JSX?

    ownershipreact
  • 44

    Как отрисовать список элементов в React и почему важны ключи?

    react
  • 45

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

    react
  • 46

    Что значит поднять состояние (lifting state up) в React?

    react
  • 47

    Что такое Context API в React и когда его стоит использовать?

    reactstateapi
  • 48

    Что такое кастомный хук в React и зачем он нужен?

    reacthooks
  • 49

    В чём разница между управляемым и неуправляемым инпутом в React?

    reactforms
  • 50

    Что такое prop drilling и как его избежать?

    state
  • 51

    Что такое TypeScript и почему многие команды предпочитают его обычному JavaScript?

    typescriptjavascript
  • 52

    В чём разница между interface и type alias в TypeScript?

    typescripttypes
  • 53

    Что такое union type в TypeScript и как его сужать?

    typescripttypes
  • 54

    Как добавить TypeScript-типы к пропсам React-компонента?

    reactcomponentstypescript
  • 55

    Что такое дженерики (generics) в TypeScript? Приведите простой пример.

    typescriptgenerics
  • 56

    Зачем нужен пакетный менеджер вроде npm или pnpm и что делает файл package.json?

    pnpmnpm
  • 57

    Что делает бандлер вроде Vite или Webpack?

    webpackvitebundling
  • 58

    Что такое Git и чем git merge отличается от git rebase?

    git
  • 59

    Как отлаживать ошибку времени выполнения JavaScript в браузере?

    javascript
  • 60

    Что такое ESLint и какую пользу он приносит команде?

    eslint
  • 61

    Что такое Prettier и чем он отличается от линтера?

    prettierlinting
  • 62

    Что такое CORS и почему он возникает в разработке фронтенда?

    cors
  • 63

    Что такое горячая замена модулей (HMR) и почему она ценна?

    hmr
  • 64

    В чём разница между development-сборкой и production-сборкой?

    build
  • 65

    Что такое tree-shaking и как он влияет на размер бандла?

    bundle-size
  • 66

    Какие типы тестов применяются во frontend-разработке и чем они отличаются?

    testing
  • 67

    Что такое React Testing Library и какая философия лежит в её основе?

    rtlreact
  • 68

    Что такое мокирование в тестах и зачем оно нужно?

    mocking
  • 69

    Что такое Core Web Vitals и почему frontend-разработчик должен о них заботиться?

    web-vitals
  • 70

    Что такое ленивая загрузка (lazy loading) и как применить её к изображениям?

    lazy-loading
  • 71

    Что такое веб-доступность и почему это ответственность разработчика?

    a11y
  • 72

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

    a11y
  • 73

    Как расследовать проблему слишком частых повторных рендеров React-компонента?

    reactcomponents
  • 74

    API-запрос работает локально, но падает в продакшене. С чего вы начнёте?

    api
  • 75

    Как выровнять div по центру горизонтально и вертикально с помощью CSS?

    cssscaling
  • 76

    Пользователь сообщает, что макет ломается на телефоне. Как вы подойдёте к исправлению?

  • 77

    Как показать индикатор загрузки в React, пока ждёте данные от API?

    reactapi
  • 78

    Что такое React Fragment и когда его стоит использовать?

    react
  • 79

    Что такое разделение кода (code splitting) и как оно улучшает производительность?

    performance
  • 80

    Что такое переменная окружения и зачем она нужна во frontend-проектах?

    config
  • 81

    Что такое Tailwind CSS и чем его подход отличается от написания обычного CSS?

    csstailwind
  • 82

    Почему не стоит систематически отключать предупреждения линтера через disable-комментарии?

    linting
  • 83

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

    learning
  • 84

    Как вы реагируете на критические замечания по вашему коду во время ревью?

    soft-skillsfeedbackcode-review
  • 85

    Как вы подходите к изучению новой JavaScript-библиотеки или фреймворка?

    javascript
  • 86

    Как вы решаете, когда просить помощи, а когда ещё самостоятельно разбираться в проблеме?

  • 87

    Как выглядит хороший Git-коммит?

    git
  • 88

    Расскажите о проекте, которым вы гордитесь. Что вы создали и чему научились?

    story
  • 89

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

    problem-solvingcommunication
  • 90

    Что такое pull request и что должно быть в хорошем описании?

    code-review
  • 91

    Для чего нужен файл .gitignore?

    git
  • 92

    В чём разница между GET и POST HTTP-запросами?

    http
  • 93

    Что означает статус-код HTTP 404 и как обрабатывать его во frontend-приложении?

    httpstatus-codessoft-skills
  • 94

    Что такое хук useRef в React и каковы его два основных варианта использования?

    reacthooks
  • 95

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

    ux
  • 96

    Что такое Storybook и чем он помогает frontend-командам?

    storybook
  • 97

    Что делает поле формы доступным?

    forms
  • 98

    Что такое инструмент Lighthouse и как им пользоваться?

    web-vitals
  • 99

    Как добавить поддержку тёмной темы в React-приложение?

    reacttheming
  • 100

    Где вы хотите быть как frontend-разработчик через два года и что вы делаете для этого?

    growth