Замыкания, this и прототипы, event loop и промисы, как браузер рисует страницу, блочная модель, flex и grid, как React решает, что перерисовать, и зачем TypeScript — то, о чём спрашивают начинающих фронтенд-разработчиков.
- Что происходит, когда вы вводите адрес сайта в браузере и нажимаете Enter? Junior
DNS находит IP → TCP-рукопожатие → TLS-рукопожатие → HTTP-запрос → сервер (балансировщик, приложение, база) → ответ → браузер разбирает HTML, догружает ресурсы и рисует страницу.
- Что такое XSS и как от неё защищаться? Junior
XSS — злоумышленник заставляет сайт выполнить его JavaScript в браузере другого пользователя: скрипт работает с правами сайта — читает данные страницы, отправляет запросы от имени…
- Что такое CSRF и как он связан с CORS? Middle
CSRF — чужой сайт заставляет браузер жертвы отправить запрос на ваш сайт; браузер сам приложит cookie, и запрос выполнится от имени пользователя. CORS — правила, когда скрипт с…
- Что такое cookies? Чем они отличаются от localStorage и sessionStorage? Junior
Cookies — небольшие данные, которые браузер отправляет на сервер с каждым запросом (сессия, настройки); localStorage и sessionStorage — хранилища, доступные только скриптам…
- Какие методы массивов меняют исходный массив, а какие возвращают новый? Junior
Мутируют: push, pop, shift, unshift, splice, sort, reverse, fill. Возвращают новый: map, filter, slice, concat, flat, а с ES2023 — toSorted, toReversed, toSpliced, with. forEach…
- Как работают async и await и как правильно обрабатывать в них ошибки? Junior
async-функция всегда возвращает Promise; await приостанавливает её до завершения промиса, не блокируя поток (продолжение — микрозадача). Ошибки ловят обычным try/catch…
- Что такое блочная модель CSS и чем content-box отличается от border-box? Junior
Каждый элемент — прямоугольник из content, padding, border, margin. При content-box (по умолчанию) width задаёт только содержимое, а padding и border добавляются сверху. При…
- Что такое замыкание в JavaScript и где оно применяется? Junior
Замыкание — функция вместе с лексическим окружением, в котором она создана: она помнит переменные внешней функции даже после её завершения. Применение: приватное состояние…
- Чем контролируемый компонент формы отличается от неконтролируемого? Junior
Контролируемый — значение поля хранится в состоянии React (value + onChange): React — единственный источник истины, легко валидировать и форматировать на лету. Неконтролируемый …
- Как скопировать объект в JavaScript и чем поверхностная копия отличается от глубокой? Junior
Поверхностная копия ({...obj}, Object.assign, [...arr], slice) копирует только верхний уровень — вложенные объекты общие. Глубокая — structuredClone(obj) (встроенная, сохраняет…
- Что такое Core Web Vitals и как их улучшить? Middle
Три метрики Google, измеряемые на реальных пользователях: LCP — когда отрисован главный элемент (хорошо ≤ 2,5 с), INP — задержка реакции на действия пользователя (≤ 200 мс), CLS …
- Чем отличаются значения position — static, relative, absolute, fixed, sticky? Junior
static — обычный поток. relative — остаётся в потоке, сдвигается относительно своего места и становится опорой для absolute-детей. absolute — выпадает из потока, позиционируется…
- Как работают каскад и специфичность в CSS? Junior
При конфликте правил побеждает: !important → более высокая специфичность → более позднее правило. Специфичность считается тройкой (id, классы/атрибуты/псевдоклассы…
- Чем debounce отличается от throttle? Junior
Debounce — вызвать функцию, только когда события прекратились на N мс: поиск по вводу, сохранение черновика, resize. Throttle — вызывать не чаще раза в N мс, пока события идут…
- Как построить дизайн-систему и библиотеку компонентов для нескольких продуктов? Senior
Дизайн-система — общий язык дизайна и кода: токены (цвета, типографика, отступы) в CSS-переменных, библиотека компонентов с доступностью из коробки, документация и песочница…
- Что такое всплытие и перехват событий и как работает делегирование? Junior
Событие проходит три фазы: перехват (от window вниз к цели), цель, всплытие (от цели вверх). Обработчики по умолчанию срабатывают на всплытии. Делегирование — один обработчик на…
- Чем == отличается от === в JavaScript? Junior
=== — строгое сравнение: типы должны совпадать, без преобразований. == — нестрогое: перед сравнением приводит типы по запутанным правилам ("1" == 1, 0 == "", null == undefined …
- Как работает event loop в JavaScript — макрозадачи и микрозадачи? Junior
JavaScript выполняется в одном потоке. Цикл событий берёт одну макрозадачу (скрипт, setTimeout, событие, сетевой ответ), выполняет её до конца, затем все микрозадачи (then у…
- Спроектируйте компонент поиска с автодополнением. Senior
Уточнить требования (источник данных, объём, задержка, мобильные, офлайн), затем: debounce ввода (~150–300 мс), отмена устаревших запросов (AbortController) и защита от гонок…
- Чем Flexbox отличается от Grid и когда что использовать? Junior
Flexbox — одномерная раскладка: элементы в строку или столбец, распределение места и выравнивание вдоль оси; размеры идут от содержимого. Grid — двумерная: строки и столбцы…
- Как устроить сборку и выкатку фронтенда? Middle
Пайплайн: установка по lock-файлу → линтер и типы → тесты → сборка → проверки размера → preview-окружение на каждый PR → выкатка. Статика с хешами в именах кэшируется надолго на…
- Как мониторить ошибки и производительность фронтенда в продакшене? Middle
Код выполняется на тысячах чужих устройств — без мониторинга вы узнаете об ошибках от пользователей. Нужны: сбор ошибок (Sentry и аналоги) с source maps, чтобы видеть исходный…
- Какие типы данных есть в JavaScript? Junior
Семь примитивов: string, number, bigint, boolean, undefined, null, symbol — и object (включая массивы, функции, даты). Примитивы неизменяемы и копируются по значению, объекты …
- Как постепенно переписать большое legacy-приложение на новый стек? Senior
Переписывать всё с нуля — главный риск: годы без новых функций и вечная погоня за старой системой. Работает постепенная замена (strangler fig): новый стек встраивается в старое…
- Что такое микрофронтенды и когда они оправданы? Senior
Микрофронтенды — разделение интерфейса на части, которые разные команды разрабатывают и выкатывают независимо, а оболочка собирает их в одно приложение (Module Federation…
- Зачем фронтенду монорепозиторий и как его организовать? Senior
Монорепозиторий хранит несколько приложений и пакетов (дизайн-система, клиент API, утилиты) в одном репозитории: атомарные изменения сразу во всех потребителях, единые версии…
- Как держать производительность большого фронтенд-приложения под контролем? Senior
Производительность деградирует незаметно — по килобайту в каждом PR. Удержать её помогают бюджеты (размер JS на маршрут, LCP, INP) с проверкой в CI, которая блокирует превышение…
- Как организовать архитектуру большого фронтенд-приложения? Senior
Цель — чтобы изменение в одной функции не задевало остальные и новый человек быстро находил код. Основа — разделение по функциональности (features, страницы, сущности), а не по…
- Что такое Promise и чем отличаются Promise.all, allSettled, race и any? Junior
Promise — объект будущего результата в одном из состояний: pending, fulfilled, rejected; состояние меняется один раз. then/catch/finally возвращают новый промис — получаются…
- Как работает прототипное наследование и что такое class в JavaScript? Junior
У каждого объекта есть ссылка на прототип; если свойства нет в объекте, оно ищется по цепочке прототипов. Методы хранятся в прототипе и разделяются всеми экземплярами. class …
- Какие правила хуков в React и почему их нельзя вызывать в условиях? Junior
Хуки вызывают только на верхнем уровне компонента или своего хука — не в условиях, циклах и вложенных функциях — и только из React-функций. Причина: React хранит состояние хуков…
- Что такое виртуальный DOM и зачем в списках нужен key? Junior
Компонент возвращает описание интерфейса (дерево React-элементов). При обновлении React сравнивает новое дерево со старым (reconciliation) и применяет к настоящему DOM минимальные…
- Когда компонент React перерисовывается и как избежать лишних рендеров? Junior
Компонент перерисовывается, когда меняется его состояние, контекст, который он читает, или перерисовывается родитель (по умолчанию — все дети, даже с теми же props). React.memo…
- Почему в React нельзя изменять состояние напрямую? Junior
React узнаёт об изменении, сравнивая ссылки (Object.is). Мутация (items.push(x), user.name = ...) оставляет ссылку прежней — перерисовки не будет, а memo и useEffect не увидят…
- Как управлять состоянием в React-приложении — Context, Redux, Zustand, серверное состояние? Junior
Сначала — локальное состояние и подъём к общему предку. Context — передать редко меняющиеся данные глубоко (тема, пользователь, язык) без прокидывания props. Глобальное хранилище…
- Чем state отличается от props в React? Junior
props — входные данные от родителя, компонент их только читает. state — собственные данные компонента, меняются через setState и вызывают перерисовку. Данные текут сверху вниз…
- Как работает useEffect и что такое массив зависимостей? Junior
useEffect запускает побочный эффект после отрисовки: подписки, таймеры, запросы, синхронизацию с внешней системой. Зависимости определяют, когда эффект перезапускается: [] — один…
- Как браузер отрисовывает страницу и чем reflow отличается от repaint? Junior
HTML → DOM, CSS → CSSOM, вместе → дерево отрисовки → layout (геометрия: размеры и позиции) → paint (пиксели слоёв) → composite (сборка слоёв на GPU). Reflow — пересчёт раскладки…
- Как сделать адаптивную вёрстку? Junior
Гибкая раскладка (flex, grid с fr и minmax), относительные единицы (rem, %, vw, clamp), медиазапросы по ширине и адаптивные изображения (srcset, sizes). Mobile-first — базовые…
- Чем отличаются атрибуты async и defer у тега script? Junior
Обычный <script> останавливает разбор HTML до загрузки и выполнения. defer — загрузка параллельно, выполнение после разбора HTML, по порядку подключения. async — загрузка…
- Как определяется this в JavaScript и чем стрелочные функции отличаются от обычных? Junior
В обычной функции this определяется в момент вызова: obj.method() — obj; простой вызов f() — undefined в строгом режиме; new F() — новый объект; call/apply/bind — заданный явно…
- Зачем нужен TypeScript и чем any отличается от unknown? Junior
TypeScript добавляет к JavaScript статические типы, которые проверяются при компиляции и стираются в итоговом JS. Польза: ошибки до запуска, автодополнение, безопасный…
- Чем interface отличается от type в TypeScript и что такое утилитарные типы? Junior
Оба описывают форму объекта. interface — расширяется через extends и сливается при повторном объявлении (удобно для расширения чужих типов). type — умеет больше: объединения…
- Чем var отличается от let и const? Junior
var — область видимости функции, поднимается (hoisting) со значением undefined, допускает повторное объявление. let и const — область видимости блока {}, до строки объявления …