17 февраля 2026 · 10 мин чтения

Frontend собеседование: React, Vue, Angular — что спрашивают в 2026

Разбираем ~20 реальных вопросов с собеседований на Frontend-разработчика. JavaScript, React, Vue, TypeScript, CSS, производительность и инструменты — с подробными ответами и советами.

🟨 JavaScript основы (ES6+, замыкания, асинхронность)

1. Что такое замыкание (closure) и зачем оно нужно?

Замыкание — это функция, которая «запоминает» переменные из внешнего лексического окружения, даже когда внешняя функция уже завершилась. Это основа приватности данных в JS.

Пример: фабричная функция createCounter() возвращает функцию-инкремент, которая хранит count в замыкании. Извне переменная недоступна — только через возвращённую функцию.

💡 Совет: Приведите практический пример — каррирование, debounce/throttle или модульный паттерн.

2. В чём разница между Promise, async/await и callback?

Callback — функция, передаваемая аргументом. Проблема: callback hell при вложенности. Promise — объект-обёртка для асинхронной операции с состояниями pending/fulfilled/rejected. Позволяет цепочки через .then(). async/await — синтаксический сахар над Promise, делает асинхронный код похожим на синхронный.

💡 Совет: Упомяните Promise.all(), Promise.allSettled() и обработку ошибок через try/catch.

3. Что такое Event Loop и как он работает?

Event Loop — механизм, который позволяет JS быть однопоточным, но неблокирующим. Он постоянно проверяет call stack и task queue. Когда стек пуст — берёт следующую задачу из очереди. Микрозадачи (Promise, queueMicrotask) выполняются до макрозадач (setTimeout, setInterval).

💡 Совет: Нарисуйте схему: Call Stack → Microtask Queue → Macrotask Queue. Это покажет глубину понимания.

⚛️ React (hooks, Virtual DOM, state management)

4. Как работает Virtual DOM в React?

Virtual DOM — лёгкая JavaScript-копия реального DOM. При изменении состояния React создаёт новое виртуальное дерево, сравнивает его со старым (diffing через алгоритм reconciliation) и применяет минимальный набор изменений к реальному DOM. Это быстрее прямых манипуляций, потому что batch-обновления и минимизация reflow/repaint.

💡 Совет: Упомяните React Fiber — архитектуру, позволяющую прерывать рендеринг и приоритизировать обновления.

5. В чём разница между useState, useReducer и useRef?

useState — для простого локального состояния, вызывает ре-рендер. useReducer — для сложной логики с несколькими связанными переменными (аналог Redux-паттерна). useRef — хранит мутабельное значение, которое не вызывает ре-рендер при изменении. Часто используется для ссылок на DOM-элементы и хранения предыдущих значений.

💡 Совет: Покажите, когда useReducer лучше useState — например, форма с 5+ полями или состояние с зависимыми переходами.

6. Как предотвратить лишние ре-рендеры в React?

Основные инструменты: React.memo — мемоизация компонента (пропускает ре-рендер, если пропсы не изменились). useMemo — мемоизация вычислений. useCallback — мемоизация функций-колбеков. Также важно: правильная структура стейта, разделение контекстов, и не создавать объекты/массивы inline в JSX.

💡 Совет: Упомяните React DevTools Profiler для поиска узких мест и React Compiler (React 19+), который автоматизирует мемоизацию.

💚 Vue (реактивность, Composition API)

7. Как работает реактивность в Vue 3?

Vue 3 использует Proxy (вместо Object.defineProperty из Vue 2) для отслеживания зависимостей. Когда вы обращаетесь к реактивному свойству в шаблоне или computed — Vue запоминает эту зависимость (track). При изменении свойства вызывается trigger, который перезапускает эффекты и обновляет DOM.

💡 Совет: Объясните разницу между ref() (оборачивает примитив в объект с .value) и reactive() (делает объект реактивным целиком).

8. Composition API vs Options API — когда что использовать?

Options API — классический подход с data(), methods, computed, watch. Хорош для простых компонентов и новичков. Composition API — функциональный подход через setup() или <script setup>. Позволяет группировать логику по фичам, а не по типу опции. Идеален для переиспользования через composables.

💡 Совет: Приведите пример composable — например, useAuth() или useFetch() — и объясните, почему это лучше миксинов.

9. Что такое Pinia и чем она лучше Vuex?

Pinia — официальный стейт-менеджер Vue 3. В отличие от Vuex: нет мутаций (только actions), полная поддержка TypeScript из коробки, модульная архитектура без вложенных модулей, поддержка Composition API. Код проще и компактнее. Vuex фактически deprecated для новых проектов.

💡 Совет: Покажите, что знаете структуру store в Pinia: state, getters, actions — и как использовать storeToRefs().

🔷 TypeScript

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

interface — описывает форму объекта, поддерживает declaration merging (можно объявить дважды — свойства объединятся) и extends. type — более гибкий: может описывать union, intersection, mapped types, conditional types и примитивы. Для объектов и классов — предпочтительнее interface. Для сложных типов и утилит — type.

💡 Совет: Покажите практический пример: type Status = 'loading' | 'error' | 'success' — это невозможно с interface.

11. Что такое Generics и зачем они нужны?

Generics позволяют создавать переиспользуемые компоненты, которые работают с разными типами, сохраняя типобезопасность. Например, function identity<T>(arg: T): T — функция, которая принимает и возвращает значение одного типа. Без дженериков пришлось бы использовать any, теряя проверку типов.

💡 Совет: Упомяните constraints (extends), утилитарные типы (Partial, Pick, Omit) и keyof.

12. Как типизировать компоненты React/Vue с TypeScript?

React: FC<Props> или просто типизация аргументов. Для хуков: useState<string>(''). Vue 3: defineProps<{ title: string }>() в <script setup lang="ts">. Для emit: defineEmits<{ (e: 'update', value: string): void }>(). TypeScript ловит ошибки на этапе компиляции, до рантайма.

💡 Совет: Знайте разницу между runtime и compile-time валидацией пропсов.

🎨 CSS & вёрстка (Flexbox, Grid, responsive)

13. Flexbox vs Grid — когда что использовать?

Flexbox — одномерная раскладка (строка ИЛИ колонка). Идеален для навигации, карточек в ряд, выравнивания элементов. CSS Grid — двумерная раскладка (строки И колонки одновременно). Идеален для полных макетов страниц, сложных сеток, dashboard'ов. На практике их часто комбинируют: Grid для макета страницы, Flexbox для компонентов внутри.

💡 Совет: Знайте grid-template-areas — это упрощает понимание макета в коде.

14. Как реализовать адаптивный дизайн?

Основные подходы: Media queries (@media (max-width: 768px)), относительные единицы (rem, em, vw, vh, %), CSS Container Queries (стилизация по размеру родителя, а не viewport), clamp() для флюидной типографики. Mobile-first подход: начинайте с мобильной версии, расширяйте через min-width.

💡 Совет: Упомяните Container Queries — это горячая тема в 2026. Покажите, что следите за современными стандартами.

15. Что такое BEM и зачем нужны CSS-методологии?

BEM (Block, Element, Modifier) — соглашение об именовании: .card__title--active. Решает проблему коллизий имён и повышает читаемость. Альтернативы: CSS Modules (локальная область видимости автоматически), Tailwind CSS (utility-first), CSS-in-JS (styled-components, Emotion). В 2026 Tailwind и CSS Modules доминируют в production-проектах.

💡 Совет: Знайте плюсы и минусы каждого подхода. Часто спрашивают: «Почему вы выбрали X, а не Y?»

🌐 Браузер & производительность (CRP, Web Vitals)

16. Что такое Critical Rendering Path?

CRP — последовательность шагов браузера для отображения страницы: 1) Парсинг HTML → DOM. 2) Парсинг CSS → CSSOM. 3) Объединение в Render Tree. 4) Layout (расчёт размеров и позиций). 5) Paint (отрисовка пикселей). 6) Composite (слои). Блокирующие ресурсы (CSS, синхронный JS) задерживают рендеринг.

💡 Совет: Упомяните оптимизации: async/defer для скриптов, preload для критических ресурсов, инлайн critical CSS.

17. Какие Core Web Vitals вы знаете и как их улучшить?

LCP (Largest Contentful Paint) — скорость загрузки главного контента (<2.5с). Улучшаем: оптимизация изображений, preload, CDN. INP (Interaction to Next Paint) — отзывчивость на ввод (<200мс). Улучшаем: разбивка тяжёлых задач, requestIdleCallback. CLS (Cumulative Layout Shift) — визуальная стабильность (<0.1). Улучшаем: явные размеры для img/video, font-display: swap.

💡 Совет: INP заменил FID в 2024 — убедитесь, что знаете актуальные метрики. Используйте Lighthouse и Chrome DevTools Performance.

18. Как оптимизировать загрузку JavaScript-приложения?

Ключевые техники: Code splitting — разбивка бандла на чанки (lazy loading маршрутов). Tree shaking — удаление неиспользуемого кода. Compression — Brotli/gzip. Caching — правильные заголовки, Service Worker. Lazy loading — изображения, компоненты. Prefetch/Preload — для критических ресурсов. Бандл-анализ через webpack-bundle-analyzer или rollup-plugin-visualizer.

💡 Совет: Назовите конкретные цифры: «мы уменьшили бандл с 500KB до 180KB через code splitting» — это впечатляет интервьюера.

🛠 Инструменты (Webpack, Vite, ESLint)

19. Webpack vs Vite — в чём ключевые различия?

Webpack — бандлит всё перед запуском dev-сервера. Мощная экосистема плагинов, но медленный cold start на крупных проектах. Vite — использует нативные ES-модули браузера в dev-режиме (мгновенный запуск) и Rollup для production-сборки. HMR в Vite работает в разы быстрее. В 2026 Vite — стандарт для новых проектов (Vue, React, Svelte).

💡 Совет: Если у вас опыт с обоими — расскажите, при каких условиях Webpack всё ещё актуален (legacy-проекты, сложные кастомные конфигурации).

20. Зачем нужны ESLint и Prettier, и как они работают вместе?

ESLint — линтер, находит ошибки и проблемы в коде (неиспользуемые переменные, потенциальные баги, нарушение конвенций). Prettier — форматтер, отвечает только за стиль (отступы, кавычки, точки с запятой). Вместе: ESLint проверяет качество, Prettier форматирует. Конфигурация: eslint-config-prettier отключает конфликтующие правила ESLint.

💡 Совет: Упомяните husky + lint-staged для pre-commit хуков — это показывает зрелость ваших процессов разработки.

Проверь свои знания на практике

Наш Telegram-бот проведёт реалистичное Frontend-собеседование с адаптивной сложностью. Получи мгновенную обратную связь и детальный разбор каждого ответа.

🚀 Начать тренировку

Бесплатно · 5 интервью без оплаты