Frontend-разработчик: подробный roadmap с нуля, современный стек и вопросы на собеседовании
Актуальная дорожная карта фронтенд-разработчика: фундаментальный JavaScript, TypeScript, React, архитектура SPA, оптимизация Core Web Vitals и типичные вопросы на интервью.
Фронтенд давно перестал быть версткой статических HTML-страничек с добавлением пары строк на jQuery. Сегодня фронтенд-инженер проектирует сложные распределенные Single Page Applications (SPA), настраивает Server-Side Rendering (SSR), управляет стейтом на миллионы пользователей и борется за миллисекунды в метриках Core Web Vitals.
В этой статье мы подробно разберем:
- Что реально нужно знать фронтендеру (без устаревшего мусора).
- Пошаговую дорожную карту (Roadmap) от базы до продакшна.
- 5 частых каверзных вопросов с технических собеседований с подробными ответами.
Что должен уметь Frontend-разработчик?#
На рынке труда требования к кандидатам делятся на три кита:
| Область | Что включает | Зачем работодателю |
|---|---|---|
| Базовая база | Семантический HTML5, CSS3 / Modern Flexbox & Grid, Vanilla JS (ES6+) | Понимание стандартов платформы браузера |
| Инженерный стек | TypeScript, React / Next.js, менеджеры состояния (Zustand, Redux Toolkit) | Создание поддерживаемого и масштабируемого кода |
| Инфраструктура и производительность | Vite, Webpack, CI/CD, Git, Core Web Vitals (LCP, INP, CLS) | Скорость доставки и быстрая загрузка у пользователей |
Дорожная карта (Roadmap) обучения#
Пошаговый план развития Frontend-разработчика
Семантика, доступность и современный CSS
3-4 неделиСемантический HTML5, адаптивная верстка Mobile First, глубокое владение Flexbox, CSS Grid и утилитарными стилями Tailwind CSS.
Фундаментальный JavaScript (ES6+)
1-2 месяцаГлубокое понимание рантайма браузера: модель памяти, замыкания, Event Loop (микро- и макротаски), промисы и async/await.
Строгая типизация на TypeScript
3-4 неделиСтандарт современной индустрии: интерфейсы, типы, дженерики, утилит-типы (Omit, Pick, Partial) и сужение типов.
React и архитектура клиентского состояния
1-2 месяцаКомпонентная модель, оптимизация рендеринга (React.memo, useCallback), разделение серверного (TanStack Query) и клиентского стейта (Zustand).
Сборка, производительность и Core Web Vitals
3-4 неделиРабота со сборщиками (Vite), оптимизация бандла (Code Splitting), метрики скорости (LCP, INP, CLS) и тестирование (Vitest, Playwright).
Топ-5 вопросов с собеседований по Frontend#
1. Как работает Event Loop в браузере?#
Это главный фильтрующий вопрос на любом собеседовании.
Браузер выполняет JavaScript в одном потоке (Single Threaded). Механизм Event Loop координирует выполнение кода:
- Выполняется синхронный код в стеке вызовов (Call Stack).
- Когда стек пуст, Event Loop берет задачи из очереди микротасок (Microtask Queue): промисы
Promise.then(),queueMicrotask,MutationObserver. Все накопившиеся микротаски выполняются до конца. - Браузер обновляет рендеринг (Render Steps: Recalculate Style, Layout, Paint), если подошел квант времени кадра (обычно 16.6ms для 60fps).
- Берется одна задача из очереди макротасок (Macrotask Queue / Task Queue):
setTimeout,setInterval, события ввода. - Цикл повторяется.
console.log("1");
setTimeout(() => {
console.log("2");
}, 0);
Promise.resolve().then(() => {
console.log("3");
});
console.log("4");
// Вывод: 1 -> 4 -> 3 -> 2
2. В чем разница между useCallback и useMemo?#
Оба хука служат для оптимизации производительности, но кешируют разные вещи:
useMemo— кеширует результат вычисления. Полезен при сложных расчетах массивов или объектов:TYPESCRIPTconst sortedList = useMemo(() => heavySort(items), [items]);useCallback— кеширует саму ссылку на функцию. Используется для предотвращения лишних ререндеров дочерних компонентов, обернутых вReact.memo:TYPESCRIPTconst handleClick = useCallback(() => { doAction(id); }, [id]);
Оборачивать вообще каждую функцию в useCallback — антипаттерн. Создание замыкания и массива зависимостей в useCallback само по себе требует памяти и процессорного времени. Используйте его только там, где функция передается в мемоизированные дочерние компоненты.
3. Разница между interface и type в TypeScript#
Оба инструмента позволяют описывать форму объектов, но имеют ключевые отличия:
| Критерий | interface | type |
|---|---|---|
| Объединения (Unions) | ❌ Не может объявить type ID = string | number | ✅ Поддерживает любые примитивы и объединения |
| Декларативное слияние (Declaration Merging) | ✅ Повторное объявление расширяет интерфейс | ❌ Вызовет ошибку дублирования идентификатора |
| Кортежи и примитивы | ❌ Только объекты | ✅ type Point = [number, number] |
| Рекомендация сообщества | Для публичных API библиотек и сущностей данных | Для внутренних типов, утилит и сложных объединений |
4. Что такое CORS и как его «починить» на фронтенде?#
CORS (Cross-Origin Resource Sharing) — это механизм безопасности браузера, запрещающий веб-странице делать AJAX-запросы к домену, отличному от того, с которого страница загрузилась (разные протокол, домен или порт).
Ключевой момент: CORS настраивается на сервере, а не на фронтенде! Сервер должен вернуть заголовки Access-Control-Allow-Origin: * или указать конкретный фронтенд-домен.
Для локальной разработки фронтендер может обойти CORS через проксирование в дев-сервере (например, в vite.config.ts или next.config.ts rewrites).
5. Метрики Core Web Vitals: LCP, INP, CLS#
На собеседованиях уровня Middle+ проверяют насмотренность в метриках пользовательского опыта Google:
- LCP (Largest Contentful Paint) — время отрисовки самого большого видимого элемента (баннера, заголовка). Идеал: $\le 2.5$ сек.
- INP (Interaction to Next Paint) — отзывчивость интерфейса при кликах и нажатиях клавиш. Идеал: $\le 200$ мс.
- CLS (Cumulative Layout Shift) — визуальная стабильность (сдвиг верстки из-за внезапно подгрузившихся картинок или баннеров). Идеал: $\le 0.1$.
Резюме#
Фронтенд-разработка сегодня требует фундаментального понимания браузерного рантайма, архитектуры компонентов и сетевых протоколов. Держите фокус на базе: чистый JS, типы и профилирование скорости.
Прокачивай IT-скиллы с Capycodio
Не зубри теорию часами перед компьютером. Короткие 3-минутные интерактивные сессии прямо с телефона: по дороге, за кофе или перед сном.
Мы создаем интерактивный мобильный тренажер для разработчиков. Короткие сессии по 3-5 минут, чтобы держать базу и закрывать пробелы перед собеседованиями.