Вы прошли отбор по резюме, но теперь перед вами реальное испытание: техническое собеседование. Для позиции джуниор фронтенд-разработчик начальный уровень разработки интерфейсов с фокусом на базовые знания HTML, CSS и JavaScript работодатели редко ждут глубокой экспертизы в архитектуре. Им важнее увидеть вашу логику, умение учиться и понимание фундаментальных концепций веб-технологий.
Многие кандидаты проваливаются не из-за сложных алгоритмов, а потому что не могут четко объяснить простую вещь, например, разницу между `var` и `let`, или как работает каскад в CSS. В этой статье мы разберем самые частые вопросы, которые задают рекрутеры и тимлиды в 2026 году, и покажем, как отвечать так, чтобы вас запомнили как перспективного специалиста.
Базовые вопросы по HTML и семантике
Даже если вы пишете код на фреймворках, основа остается HTML. Интервьюеры любят проверять, понимаете ли вы структуру документа, а не просто копируете разметку из туториалов.
- Что такое семантическая верстка? Это использование тегов (`
`, ` `, ` `, ` - В чем разница между `div` и `section`? `div` - это нейтральный контейнер без смысла. `section` - это тематический блок контента, который обычно имеет заголовок. Используйте `section`, когда логически группируете контент, и `div`, когда нужна просто стилистическая обертка.
- Как работают атрибуты `alt` и `aria-label`? `alt` описывает изображение для скринридеров и показывается, если картинка не загрузилась. `aria-label` дает имя элементу интерфейса (например, кнопке без текста) для программ чтения с экрана.
Частая ошибка новичков - использовать `div` везде подряд. Покажите, что вы думаете о структуре страницы. Если спросят про формы, обязательно упомяните атрибуты `required`, `pattern` и `novalidate`. Это демонстрирует знание нативных возможностей браузера.
Глубокое погружение в CSS
CSS часто считается «простым», но именно здесь теряется много баллов. Работодатели хотят убедиться, что вы понимаете, как браузер рисует страницу.
| Свойство position | Поведение элемента | Типичное применение |
|---|---|---|
static |
Элемент находится в обычном потоке документа | По умолчанию для большинства блоков |
relative |
Элемент смещается относительно своего исходного места, но занимает его место | Точка отсчета для абсолютных детей, небольшие сдвиги |
absolute |
Элемент выводится из потока, позиционируется относительно ближайшего предка с position != static | Оверлеи, бейджи, модальные окна |
fixed |
Элемент позиционируется относительно окна браузера, не двигается при скролле | Шапки, плавающие кнопки |
Ключевые темы, которые стоит выучить наизусть:
- Box Model: Помните, что ширина элемента включает padding, border и margin? Нет, только content + padding + border (при box-sizing: content-box). Уточните, используете ли вы `box-sizing: border-box`, чтобы упростить расчеты.
- Флоуты vs Flexbox vs Grid: Флоуты давно устарели для макетов. Flexbox идеален для одномерных раскладок (строка или колонка), а Grid - для двумерных (ряды и столбцы одновременно).
- Каскад и специфичность (Specificity): Идите от общего к частному: инлайн-стили > ID > классы > теги. Избегайте `!important`, если только не чините чужой баг.
Если спросят про адаптивность, назовите медиазапросы (`@media`) и современные функции вроде `clamp()`, `min()`, `max()` и контейнерные запросы (container queries), которые стали стандартом в 2025-2026 годах.
JavaScript: основы и асинхронность
Это самая объемная часть собеседования. От вас не ждут написания сложной библиотеки, но базовый синтаксис и работа с данными должны быть на уровне рефлекса.
1. Типы данных и приведение типов. Знайте разницу между примитивами (string, number, boolean, undefined, null, symbol, bigint) и объектами (object, function, array). Понимайте, почему `"5" + 3` равно `"53"`, а `"5" - 3` равно `2`.
2. Области видимости и замыкания (Closures). Замыкание - это функция, которая «помнит» переменные из внешней области видимости, даже после того, как внешняя функция завершила работу. Пример: ```javascript function counter() { let count = 0; return function() { count++; return count; }; } const increment = counter(); increment(); // 1 ```
3. Асинхронность: Callbacks, Promises, Async/Await. В 2026 году почти никто не пишет чистые коллбеки. Основной инструмент - `async/await`. Поймите, что `Promise` - это объект, представляющий результат асинхронной операции (pending, fulfilled, rejected). Знание методов `.then()`, `.catch()` и `.finally()` обязательно.
4. Работа с DOM. Умеете ли вы выбрать элемент (`document.querySelector`), изменить его текст (`textContent`), добавить событие (`addEventListener`)? Важно понимать разницу между `innerHTML` и `textContent` (второй безопаснее от XSS-атак).
Инструменты и экосистема
Джуниору не нужно знать все фреймворки, но нужно понимать, зачем они нужны.
- Git: Разница между `commit` и `push`. Как сделать `pull request`. Что делать, если возник конфликт при `merge`? Ответ должен быть простым: «Открываю файл, вижу конфликты, решаю их вручную, сохраняю и делаю commit».
- npm/yarn/pnpm: Зачем нужен `package.json`? Чем отличается `dependencies` от `devDependencies`? (Первое нужно для работы приложения в продакшене, второе - только для разработки и сборки).
- Фреймворки (React/Vue/Angular): Спросят, почему выбран React? Ответ: большая экосистема, компонентный подход, виртуальный DOM. Не углубляйтесь в хуки слишком сильно, если не работали с ними, но знайте концепцию состояния (state) и жизненного цикла компонента.
Логические задачи и алгоритмы
На джуниор-позициях редко дают сложные задачи уровня LeetCode Hard. Чаще всего это простые задачи на массивы и строки.
Пример типичной задачи: «Напишите функцию, которая принимает массив чисел и возвращает новый массив, где каждое число возведено в квадрат, но только если оно четное».
function squareEvens(arr) {
return arr.filter(num => num % 2 === 0).map(num => num * num);
}
Здесь проверяют знание методов массива: `filter`, `map`, `reduce`. Попробуйте решить задачу двумя способами: циклом `for` и функциональным стилем. Это покажет гибкость мышления.
Другой популярный вопрос: «Как проверить, является ли строка палиндромом?» Решение: обратить строку и сравнить с оригиналом, либо использовать два указателя (один с начала, один с конца).
Мягкие навыки и вопросы о себе
Технические знания можно подтянуть, но характер видно сразу. Тимлид хочет понять, впишетесь ли вы в команду.
- «Расскажите о проекте, которым гордитесь». Готовьте историю по методу STAR (Situation, Task, Action, Result). Опишите ситуацию, вашу задачу, конкретные действия и измеримый результат.
- «Как вы решаете споры с дизайнером или бэкендером?» Правильный ответ: через данные и обсуждения. Не «заставляю слушать», а «показываю ограничения технологии и предлагаю компромисс».
- «Почему вы хотите работать именно у нас?» Изучите продукт компании. Скажите, что вам нравится их подход к UX или масштаб задач. Избегайте общих фраз вроде «вы крупная компания».
Чек-лист подготовки перед собеседованием
За день до интервью пройдите этот список. Он поможет закрыть 80% возможных вопросов.
- [ ] Повторить Box Model и свойства Flexbox/Grid.
- [ ] Написать руками код для создания списка задач (ToDo List) на чистом JS.
- [ ] Объяснить своими словами, что такое Event Loop и как работает очередь микротасков.
- [ ] Подготовить ответы на 3 вопроса о вашем опыте (даже если опыта мало, расскажите про учебные проекты).
- [ ] Проверить камеру, микрофон и интернет, если собеседование онлайн.
- [ ] Приготовить блокнот и ручку - записывать вопросы во время разговора нормально и показывает внимательность.
Частые ошибки новичков
Не молчите, если не знаете ответа. Лучше сказать: «Мне кажется, тут работает механизм X, давайте я объясню свою логику», чем зависнуть на минуту. Инженеры ценят процесс мышления больше, чем мгновенный правильный ответ.
Не критикуйте прошлых работодателей или университет. Говорите позитивно: «Я хотел бы развиваться в более современном стеке» вместо «Старый код был ужасным».
И главное - будьте собой. Джуниор - это тот, кто учится. Покажите, что вам интересна профессия, и вы готовы тратить время на изучение новых технологий. Это качество часто весит больше, чем знание конкретного синтаксиса.
Нужно ли знать TypeScript для джуниора?
Желательно, но не всегда обязательно. Многие компании нанимают джуниоров на JavaScript и обучают TS на месте. Однако знание основ TS (типы, интерфейсы) дает преимущество и показывает серьезный подход к качеству кода.
Какой фреймворк лучше знать: React или Vue?
Выбирайте тот, который используется в компании, куда вы идете. Если выбираете сами для обучения, React имеет большую базу вакансий и сообщество. Vue проще для старта, но рынок меньше. Главное - глубоко понять принципы одного, а не поверхностно знать три.
Стоит ли решать задачи на Codeforces перед собеседованием?
Для джуниора-фронтендера достаточно простых задач на массивы и строки. Тяжелые алгоритмы (графы, динамическое программирование) требуются скорее для бэкенда или старших позиций. Сфокусируйтесь на практических задачах, связанных с DOM и обработкой данных.
Что делать, если забыл ответ на вопрос?
Скажите честно: «Кажется, я немного запутался, дайте мне секунду подумать». Начните рассуждать вслух. Даже если не найдете точный ответ, интервьюер увидит ваш ход мысли. Молчание воспринимается хуже, чем попытка рассуждения.
Сколько длится техническое собеседование?
Обычно от 45 минут до 1 часа. Первые 5-10 минут - знакомство, основная часть - технические вопросы, последние 5-10 минут - ваши вопросы к интервьюеру. Обязательно задайте 1-2 вопроса о команде или процессах разработки.