Вопросы на собеседовании: Фронтенд-разработчик
100 реальных вопросов с образцовыми ответами и пояснениями для уровня Junior.
Смотреть пример резюме: Фронтенд-разработчик →Вопросы
Эти три типа отображения различаются по потоку и box-поведению.
- Block: занимает всю ширину родителя, начинается с новой строки (div, p, h1).
- Inline: занимает только ширину содержимого, течёт в строке, игнорирует width/height (span, a, strong).
- Inline-block: течёт как inline, но принимает width, height, padding, margin как block.
Зачем это спрашивают: Проверяется знание базовой модели отображения HTML и способность предсказать, как элементы будут расположены на странице.
Специфичность: числовой вес, определяющий, какое CSS-правило побеждает для одного элемента и свойства.
- Считается по четырём категориям: inline-стили, ID, классы и псевдоклассы, теги.
- Каждая категория весомее нижних, поэтому более высокий вес побеждает независимо от порядка объявления.
- !important перекрывает всё, но использовать его стоит крайне редко.
Зачем это спрашивают: Проверяется, умеет ли кандидат отлаживать конфликты стилей системно, без злоупотребления !important.
Каждый элемент: прямоугольный блок из четырёх слоёв.
- Content: область с текстом или изображением.
- Padding: прозрачный отступ между содержимым и рамкой.
- Border: сама рамка вокруг padding.
- Margin: внешний отступ, отделяющий элемент от соседей.
- box-sizing: border-box включает padding и border в width и height, это современный дефолт.
Зачем это спрашивают: Понимание box model фундаментально для вёрстки и управления размерами элементов.
Разница в том, остаётся ли элемент в потоке документа.
- position: relative оставляет элемент в потоке, но позволяет сдвигать его через top, right, bottom, left без вытеснения соседей.
- position: absolute убирает его из потока и позиционирует относительно ближайшего предка с position, отличным от static.
- Если такого предка нет, позиционирование идёт относительно начального содержащего блока.
Зачем это спрашивают: Непонимание позиционирования является одним из самых частых источников верстальных багов у начинающих.
Flexbox: одномерная система компоновки, включаемая через display: flex на контейнере.
- Главная ось: основное направление элементов, задаётся flex-direction, по умолчанию горизонтальна.
- Поперечная ось: перпендикулярна главной.
- justify-content выравнивает по главной оси; align-items: по поперечной.
Зачем это спрашивают: Проверяется концептуальное понимание Flexbox, без которого его использование сводится к случайному подбору свойств.
CSS Grid: двумерная система компоновки для строк и столбцов.
- Вы явно задаёте строки и столбцы контейнера и размещаете элементы в этой сетке.
- Flexbox подходит для одномерных раскладок, где элементы идут в одном направлении: навигация или ряд карточек.
- Grid предпочтителен, когда нужен контроль сразу в двух измерениях: шапка, боковая панель, контент и подвал.
Зачем это спрашивают: Кандидат должен выбирать нужный инструмент компоновки под задачу, а не использовать один подход на все случаи.
Эти единицы различаются тем, относительно чего они задаются.
- px: абсолютная, не масштабируется с настройками пользователя или браузера.
- em: относительно font-size родителя, может накапливаться при вложенности.
- rem: относительно font-size корневого html, более предсказуема для глобального масштабирования.
- vw и vh: единицы вьюпорта, равные 1% ширины или высоты окна, удобны для полноэкранных блоков.
Зачем это спрашивают: Знание единиц измерения важно для создания адаптивных интерфейсов, учитывающих пользовательские настройки шрифта.
Стройте mobile-first и постепенно улучшайте для широких экранов.
- Начните с базового мобильного макета, затем добавляйте media queries с min-width для больших экранов.
- Используйте гибкие единицы вроде процентов и rem для ширин и шрифтов.
- Используйте Flexbox или Grid для контейнеров макета.
- Избегайте жёстких ширин и задавайте max-width странице, чтобы контент не выходил за пределы.
Зачем это спрашивают: Проверяется, есть ли у кандидата реальная стратегия адаптивной вёрстки или только теоретическое знакомство с темой.
Семантический HTML использует элементы, передающие смысл содержимого.
- Применяйте header, nav, main, article, section, footer вместо универсальных div повсюду.
- Браузеры, поисковики и ассистивные технологии читают эти сигналы, чтобы понять структуру документа.
- Это улучшает доступность для скринридеров, поднимает SEO и упрощает чтение кода.
Зачем это спрашивают: Проверяется, думает ли кандидат не только о визуальном результате, но и о структурных и доступных аспектах разметки.
Media queries применяют CSS только при выполнении условия, чаще всего ширины вьюпорта.
- Запрос @media (min-width: 768px) активирует стили только на экранах шириной от 768px.
- Условия можно комбинировать через and или разделять типы носителей print и screen.
Зачем это спрашивают: Это прямая проверка знания основного инструмента адаптивной вёрстки.
z-index управляет порядком наложения позиционированных элементов: выше значение, ближе к зрителю.
- Работает только на элементах с position, отличным от static, и на flex/grid-дочерних.
- Контекст наложения: изолированная группа, внутри которой z-index сравниваются только между собой.
- Поэтому дочерний элемент с огромным z-index не поднимется выше предка с меньшим контекстом.
Зачем это спрашивают: Непонимание контекста наложения является одним из самых частых источников багов с z-index.
Все три скрывают элемент, но различаются местом, событиями и доступностью.
- display: none убирает элемент из потока, он не занимает места и недоступен скринридерам.
- visibility: hidden скрывает его визуально, но место в макете сохраняется.
- opacity: 0 делает его прозрачным, но он занимает место, перехватывает клики и остаётся доступным.
Зачем это спрашивают: Проверяются тонкие поведенческие различия, которые важны для анимаций, доступности и стабильности макета.
Атрибут alt задаёт текстовое описание изображения.
- Оно показывается, если изображение не загрузилось, и зачитывается скринридерами незрячим пользователям.
- Осмысленный alt улучшает доступность и SEO изображений.
- Для чисто декоративных изображений задавайте пустой alt, чтобы скринридеры его пропускали.
Зачем это спрашивают: Проверяется знание базовой доступности изображений, закреплённое в стандарте WCAG.
Каскад определяет, какое правило применить, когда несколько целятся в один элемент и свойство.
- Сначала оценивается происхождение и важность правил.
- Затем специфичность селекторов.
- Затем порядок в источнике, поэтому при равной специфичности побеждает более позднее правило.
Зачем это спрашивают: Проверяется фундаментальное знание CSS и способность диагностировать конфликты стилей системно.
Padding: внутренний отступ элемента, margin: внешний.
- Padding находится между содержимым и рамкой и перенимает фоновый цвет элемента.
- Margin: прозрачный отступ между рамкой и соседними элементами.
- Смежные вертикальные margin у блоков схлопываются до большего значения, чего padding никогда не делает.
Зачем это спрашивают: Схлопывание margin: конкретное поведение, которое часто удивляет новичков.
Они различаются областью видимости, поднятием и переприсваиванием.
- var имеет функциональную область и поднимается, поэтому к нему можно обратиться до объявления, что порождает баги.
- let и const имеют блочную область и существуют только внутри ближайших фигурных скобок.
- const запрещает переприсваивание привязки, но не делает объекты или массивы неизменяемыми.
Зачем это спрашивают: Проверяется знание областей видимости и поднятия, необходимых для написания предсказуемого JavaScript.
Всплытие: то, как событие движется вверх по DOM после срабатывания.
- Сначала вызываются обработчики на целевом элементе, затем на каждом предке вплоть до document.
- Клик по кнопке внутри div также вызывает обработчики клика у div и его предков.
- Остановить можно вызовом event.stopPropagation() внутри обработчика.
Зачем это спрашивают: Знание всплытия событий необходимо для делегирования событий и предотвращения случайных срабатываний обработчиков.
Замыкание: функция, сохраняющая доступ к переменным внешней области даже после её завершения.
- Это работает, потому что функции хранят ссылку на окружение, где были созданы.
- Классический пример: фабрика счётчиков, где каждый вызов получает собственную приватную переменную.
Зачем это спрашивают: Замыкания: ключевая концепция JavaScript, и этот вопрос проверяет понимание лексических областей видимости.
=== сравнивает значение и тип, == приводит типы перед сравнением.
- === возвращает true только при точном совпадении значения и типа.
- == сначала приводит типы, поэтому 0 и false или null и undefined могут оказаться равны.
- Используйте === почти везде, чтобы избежать трудноуловимых сюрпризов приведения.
Зачем это спрашивают: Проверяется осведомлённость о приведении типов, которое часто становится источником багов у новичков.
Значение 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