Подборка вопросов

Вопросы на собеседовании Frontend junior

Замыкания, this и прототипы, event loop и промисы, как браузер рисует страницу, блочная модель, flex и grid, как React решает, что перерисовать, и зачем TypeScript — то, о чём спрашивают начинающих фронтенд-разработчиков.

144вопроса
94Junior
41Middle
9Senior
  1. 01Что происходит, когда вы вводите адрес сайта в браузере и нажимаете Enter?

    DNS находит IP → TCP-рукопожатие → TLS-рукопожатие → HTTP-запрос → сервер (балансировщик, приложение, база) → ответ → браузер разбирает HTML, догружает ресурсы и рисует страницу.

    Junior
  2. 02Что такое XSS и как от неё защищаться?

    XSS — злоумышленник заставляет сайт выполнить его JavaScript в браузере другого пользователя: скрипт работает с правами сайта — читает данные страницы, отправляет запросы от имени…

    Junior
  3. 03Что такое CSRF и как он связан с CORS?

    CSRF — чужой сайт заставляет браузер жертвы отправить запрос на ваш сайт; браузер сам приложит cookie, и запрос выполнится от имени пользователя. CORS — правила, когда скрипт с…

    Middle
  4. 04Что такое cookies? Чем они отличаются от localStorage и sessionStorage?

    Cookies — небольшие данные, которые браузер отправляет на сервер с каждым запросом (сессия, настройки); localStorage и sessionStorage — хранилища, доступные только скриптам…

    Junior
  5. 05Что такое доступность веб-интерфейса и с чего её начинать?

    Доступность — возможность пользоваться интерфейсом людям с нарушениями зрения, слуха, моторики, когнитивными особенностями, а также всем в неудобных условиях (солнце, одна рука)…

    Junior
  6. 06Как обеспечить работу интерфейса с клавиатуры и управление фокусом?

    Все действия должны быть доступны с клавиатуры: Tab — перемещение по интерактивным элементам, Enter и пробел — активация, Esc — закрыть окно, стрелки — внутри составных виджетов…

    Junior
  7. 07Как устроено приложение на Angular?

    Angular — полноценный фреймворк «всё включено» на TypeScript: компоненты, маршрутизация, формы, HTTP-клиент, тестирование, CLI. Компонент — класс с декоратором @Component…

    Junior
  8. 08Как работает внедрение зависимостей в Angular?

    Сервис — класс с @Injectable; Angular сам создаёт его экземпляр и передаёт компонентам и другим сервисам, которые его запросили (через конструктор или функцию inject())…

    Junior
  9. 09Как в Angular используются RxJS и Observable?

    Observable — поток значений во времени (может выдать много значений, ленив до подписки, отменяется отпиской), в отличие от Promise с одним значением. HttpClient, события форм и…

    Middle
  10. 10Что такое ARIA и когда её использовать?

    ARIA — атрибуты, которые сообщают вспомогательным технологиям роль (role="dialog"), состояние (aria-expanded, aria-selected) и связи (aria-labelledby, aria-describedby…

    Middle
  11. 11Какие методы массивов меняют исходный массив, а какие возвращают новый?

    Мутируют: push, pop, shift, unshift, splice, sort, reverse, fill. Возвращают новый: map, filter, slice, concat, flat, а с ES2023 — toSorted, toReversed, toSpliced, with. forEach…

    Junior
  12. 12Как работают async и await и как правильно обрабатывать в них ошибки?

    async-функция всегда возвращает Promise; await приостанавливает её до завершения промиса, не блокируя поток (продолжение — микрозадача). Ошибки ловят обычным try/catch…

    Junior
  13. 13Что такое БЭМ и зачем методологии именования CSS?

    В CSS все классы глобальны, и в большом проекте стили начинают конфликтовать. БЭМ (блок, элемент, модификатор) даёт соглашение: .card — блок, .card__title — элемент блока…

    Junior
  14. 14Что такое блочная модель CSS и чем content-box отличается от border-box?

    Каждый элемент — прямоугольник из content, padding, border, margin. При content-box (по умолчанию) width задаёт только содержимое, а padding и border добавляются сверху. При…

    Junior
  15. 15Зачем нужен сборщик (Vite, webpack) и что он делает?

    Сборщик берёт исходники (модули JS/TS, CSS, картинки, импорты из node_modules) и делает оптимизированные файлы для браузера: склеивает модули, транспилирует TypeScript и JSX…

    Junior
  16. 16Что такое замыкание в JavaScript и где оно применяется?

    Замыкание — функция вместе с лексическим окружением, в котором она создана: она помнит переменные внешней функции даже после её завершения. Применение: приватное состояние…

    Junior
  17. 17Что такое разделение кода (code splitting) и ленивая загрузка?

    Вместо одного большого бандла код делят на части, которые грузятся по необходимости: по маршрутам (страница настроек не нужна на главной), по тяжёлым виджетам (редактор, графики…

    Middle
  18. 18Чем контролируемый компонент формы отличается от неконтролируемого?

    Контролируемый — значение поля хранится в состоянии React (value + onChange): React — единственный источник истины, легко валидировать и форматировать на лету. Неконтролируемый …

    Junior
  19. 19Как скопировать объект в JavaScript и чем поверхностная копия отличается от глубокой?

    Поверхностная копия ({...obj}, Object.assign, [...arr], slice) копирует только верхний уровень — вложенные объекты общие. Глубокая — structuredClone(obj) (встроенная, сохраняет…

    Junior
  20. 20Что такое Core Web Vitals и как их улучшить?

    Три метрики Google, измеряемые на реальных пользователях: LCP — когда отрисован главный элемент (хорошо ≤ 2,5 с), INP — задержка реакции на действия пользователя (≤ 200 мс), CLS …

    Middle
  21. 21Чем отличаются CSR, SSR, SSG и ISR?

    CSR — сервер отдаёт пустую страницу и JS, всё рисует браузер: просто, но медленный первый показ и слабое SEO; подходит для личных кабинетов. SSR — HTML собирается на сервере на…

    Middle
  22. 22Какие CSS-свойства наследуются и как работают inherit, initial и unset?

    Наследуются в основном свойства текста: color, font-, line-height, text-align, visibility, cursor. Не наследуются свойства блока: margin, padding, border, background, width…

    Junior
  23. 23Как сделать анимацию через @keyframes?

    @keyframes имя { from {…} to {…} } (или проценты 0%, 50%, 100%) описывает шаги, свойство animation применяет её: имя, длительность, функция времени, задержка, число повторов…

    Junior
  24. 24Что такое CSS Modules и чем они отличаются от CSS-in-JS?

    CSS Modules — обычный CSS-файл, классы которого сборщик превращает в уникальные имена (.title → Card_title__x7a2) и отдаёт объектом: styles.title. Стили изолированы без соглашений…

    Junior
  25. 25Чем отличаются значения position — static, relative, absolute, fixed, sticky?

    static — обычный поток. relative — остаётся в потоке, сдвигается относительно своего места и становится опорой для absolute-детей. absolute — выпадает из потока, позиционируется…

    Junior
  26. 26Как работают каскад и специфичность в CSS?

    При конфликте правил побеждает: !important → более высокая специфичность → более позднее правило. Специфичность считается тройкой (id, классы/атрибуты/псевдоклассы…

    Junior
  27. 27Как сделать плавное изменение стиля через CSS transition?

    transition плавно переводит свойство из старого значения в новое, когда значение меняется (hover, класс, состояние): transition: transform 200ms ease-out. Задаётся свойство…

    Junior
  28. 28Какие единицы измерения есть в CSS и когда какие использовать?

    px — абсолютные пиксели; rem — от размера шрифта корня (html), em — от шрифта текущего элемента (вложенные em накапливаются); % — от размера родителя; vw/vh — проценты окна…

    Junior
  29. 29Чем debounce отличается от throttle?

    Debounce — вызвать функцию, только когда события прекратились на N мс: поиск по вводу, сохранение черновика, resize. Throttle — вызывать не чаще раза в N мс, пока события идут…

    Junior
  30. 30Как построить дизайн-систему и библиотеку компонентов для нескольких продуктов?

    Дизайн-система — общий язык дизайна и кода: токены (цвета, типографика, отступы) в CSS-переменных, библиотека компонентов с доступностью из коробки, документация и песочница…

    Senior
  31. 31Что такое дизайн-токены?

    Токены — именованные значения дизайна: цвета, размеры шрифтов, отступы, радиусы, тени, длительности анимаций. Есть базовые (blue-600 = #2563eb) и семантические (color-accent…

    Middle
  32. 32Что такое всплытие и перехват событий и как работает делегирование?

    Событие проходит три фазы: перехват (от window вниз к цели), цель, всплытие (от цели вверх). Обработчики по умолчанию срабатывают на всплытии. Делегирование — один обработчик на…

    Junior
  33. 33Как найти и изменить элементы DOM на JavaScript?

    Найти: querySelector(css-селектор) — первый элемент, querySelectorAll — статический список. Изменить: textContent — текст (безопасно), innerHTML — разметка (опасно с…

    Junior
  34. 34Чем == отличается от === в JavaScript?

    === — строгое сравнение: типы должны совпадать, без преобразований. == — нестрогое: перед сравнением приводит типы по запутанным правилам ("1" == 1, 0 == "", null == undefined …

    Junior
  35. 35Зачем нужны ESLint и Prettier и как их подключить к проекту?

    ESLint — линтер: находит ошибки и опасные конструкции (неиспользуемые переменные, нарушение правил хуков, сравнение через ==). Prettier — форматтер: единообразно расставляет…

    Junior
  36. 36Чем ES-модули отличаются от CommonJS?

    CommonJS — исторический формат Node.js: require() и module.exports, загрузка синхронная и динамическая (require можно вызвать где угодно). ES-модули — стандарт языка…

    Junior
  37. 37Как работает event loop в JavaScript — макрозадачи и микрозадачи?

    JavaScript выполняется в одном потоке. Цикл событий берёт одну макрозадачу (скрипт, setTimeout, событие, сетевой ответ), выполняет её до конца, затем все микрозадачи (then у…

    Junior
  38. 38Спроектируйте компонент поиска с автодополнением.

    Уточнить требования (источник данных, объём, задержка, мобильные, офлайн), затем: debounce ввода (~150–300 мс), отмена устаревших запросов (AbortController) и защита от гонок…

    Senior
  39. 39Как сделать HTTP-запрос через fetch и правильно обработать ошибки?

    fetch(url, options) возвращает Promise ответа. Важно: промис отклоняется только при сетевой ошибке — на 404 и 500 он выполняется успешно, поэтому надо проверять response.ok или…

    Junior
  40. 40Что делать с нестабильными (flaky) тестами?

    Нестабильный тест подрывает доверие ко всем тестам: команда привыкает перезапускать и пропускает настоящие ошибки. Частые причины: ожидание по времени (sleep) вместо условия…

    Middle
  41. 41Чем Flexbox отличается от Grid и когда что использовать?

    Flexbox — одномерная раскладка: элементы в строку или столбец, распределение места и выравнивание вдоль оси; размеры идут от содержимого. Grid — двумерная: строки и столбцы…

    Junior
  42. 42Как валидировать формы на фронтенде?

    Проверка на клиенте — для удобства (быстрая подсказка), на сервере — обязательно (клиент можно обойти). Встроенные атрибуты: required, minlength, pattern, min/max, типы email и…

    Junior
  43. 43Как устроить сборку и выкатку фронтенда?

    Пайплайн: установка по lock-файлу → линтер и типы → тесты → сборка → проверки размера → preview-окружение на каждый PR → выкатка. Статика с хешами в именах кэшируется надолго на…

    Middle
  44. 44Как мониторить ошибки и производительность фронтенда в продакшене?

    Код выполняется на тысячах чужих устройств — без мониторинга вы узнаете об ошибках от пользователей. Нужны: сбор ошибок (Sentry и аналоги) с source maps, чтобы видеть исходный…

    Middle
  45. 45Как правильно сверстать форму?

    Каждое поле — с label (for/id или обёртка): клик по подписи фокусирует поле, скринридер читает подпись. Правильный type (email, tel, number, date, password) даёт нужную клавиатуру…

    Junior
  46. 46Что такое семантическая разметка HTML и зачем она нужна?

    Семантические теги описывают смысл содержимого: header, nav, main (один на странице), article, section, aside, footer, заголовки h1–h6 по иерархии, button для действий, a для…

    Junior
  47. 47Что такое гидратация и какие с ней бывают проблемы?

    После SSR браузер получает готовый HTML, но он «мёртвый»: гидратация — фреймворк загружает JS, повторно строит дерево компонентов и привязывает обработчики к существующей…

    Middle
  48. 48Как оптимизировать изображения на сайте?

    Картинки — часто самая тяжёлая часть страницы. Приёмы: современные форматы (AVIF, WebP; SVG для иконок), размер под экран через srcset и sizes (телефону не нужна картинка 3000px)…

    Junior
  49. 49Какие браузерные API полезны фронтенд-разработчику — IntersectionObserver, ResizeObserver, Storage, History?

    IntersectionObserver — сообщает, когда элемент входит в видимую область: ленивая загрузка, бесконечная прокрутка, аналитика просмотров — без дорогих обработчиков scroll…

    Junior
  50. 50Как работают ES-модули — import и export?

    Модуль — файл со своей областью видимости: наружу видно только то, что экспортировано. Именованный экспорт export function sum импортируют import { sum } (имя совпадает), default…

    Junior
  51. 51Какие типы данных есть в JavaScript?

    Семь примитивов: string, number, bigint, boolean, undefined, null, symbol — и object (включая массивы, функции, даты). Примитивы неизменяемы и копируются по значению, объекты …

    Junior
  52. 52Как постепенно переписать большое legacy-приложение на новый стек?

    Переписывать всё с нуля — главный риск: годы без новых функций и вечная погоня за старой системой. Работает постепенная замена (strangler fig): новый стек встраивается в старое…

    Senior
  53. 53Какие мета-теги нужны странице — title, description, Open Graph?

    title — заголовок во вкладке и в выдаче (до ~60 символов), meta description — сниппет (~150 символов), viewport — для мобильных, canonical — основной адрес страницы, robots …

    Junior
  54. 54Что такое микрофронтенды и когда они оправданы?

    Микрофронтенды — разделение интерфейса на части, которые разные команды разрабатывают и выкатывают независимо, а оболочка собирает их в одно приложение (Module Federation…

    Senior
  55. 55Зачем фронтенду монорепозиторий и как его организовать?

    Монорепозиторий хранит несколько приложений и пакетов (дизайн-система, клиент API, утилиты) в одном репозитории: атомарные изменения сразу во всех потребителях, единые версии…

    Senior
  56. 56Зачем нужен lock-файл (package-lock.json, pnpm-lock.yaml) и чем npm install отличается от npm ci?

    package.json задаёт диапазоны версий (^1.2.0), а lock-файл фиксирует точные версии всего дерева зависимостей — у всех разработчиков и в CI ставится одно и то же. Lock-файл…

    Junior
  57. 57Что такое npm-скрипты и npx?

    Раздел scripts в package.json — именованные команды проекта: npm run dev, npm run build, npm test. В скриптах доступны бинарники из node_modules/.bin без указания пути — поэтому…

    Junior
  58. 58Как держать производительность большого фронтенд-приложения под контролем?

    Производительность деградирует незаметно — по килобайту в каждом PR. Удержать её помогают бюджеты (размер JS на маршрут, LCP, INP) с проверкой в CI, которая блокирует превышение…

    Senior
  59. 59Как писать сквозные (e2e) тесты на Playwright?

    E2E-тест проходит пользовательский сценарий в настоящем браузере против развёрнутого приложения: вход, поиск, оформление заказа. Их мало (вершина пирамиды) — только ключевые…

    Middle
  60. 60Как организовать архитектуру большого фронтенд-приложения?

    Цель — чтобы изменение в одной функции не задевало остальные и новый человек быстро находил код. Основа — разделение по функциональности (features, страницы, сущности), а не по…

    Senior
  61. 61Что такое Promise и чем отличаются Promise.all, allSettled, race и any?

    Promise — объект будущего результата в одном из состояний: pending, fulfilled, rejected; состояние меняется один раз. then/catch/finally возвращают новый промис — получаются…

    Junior
  62. 62Как работает прототипное наследование и что такое class в JavaScript?

    У каждого объекта есть ссылка на прототип; если свойства нет в объекте, оно ищется по цепочке прототипов. Методы хранятся в прототипе и разделяются всеми экземплярами. class …

    Junior
  63. 63Как строить обёртки через children и слоты?

    Всё, что вложено в компонент между тегами, приходит в props.children — так делают обёртки: модальное окно, карточку, раскладку страницы, не зная, что внутри. Если мест для…

    Junior
  64. 64Что такое составные компоненты (compound components)?

    Набор компонентов, которые работают вместе и делят общее состояние через Context родителя: <Tabs>, <Tabs.List>, <Tabs.Tab>, <Tabs.Panel>. Пользователь сам собирает разметку в…

    Middle
  65. 65Как сделать условный рендеринг в React и в чём ловушка с && и нулём?

    Способы: тернарный оператор {cond ? <A/> : <B/>}, логическое И {cond && <A/>}, ранний return из компонента, переменная с элементом. Ловушка &&: если слева число 0, React его…

    Junior
  66. 66Что такое Context в React и когда его использовать?

    Context передаёт значение всему поддереву без протаскивания через props: createContext → <Ctx.Provider value={...}> наверху → useContext(Ctx) в любом вложенном компоненте…

    Junior
  67. 67Как избежать лишних перерисовок при использовании Context и почему Context — не менеджер состояния?

    Все потребители контекста перерисовываются, когда value меняется по ссылке. Частая ошибка — объект в value создаётся заново на каждом рендере провайдера: value={{user, setUser}} …

    Middle
  68. 68Как писать пользовательские хуки?

    Пользовательский хук — функция с именем use…, внутри которой вызываются другие хуки; так выносят повторяющуюся логику (подписка на размер окна, debounce, загрузка данных, работа с…

    Middle
  69. 69Почему не нужно хранить в state то, что можно вычислить из других данных?

    Если значение вычисляется из props или другого состояния (отфильтрованный список, сумма корзины, полное имя), его считают во время рендера, а не хранят в отдельном state…

    Middle
  70. 70Что такое границы ошибок в React и что они не ловят?

    Граница ошибок перехватывает исключения, брошенные при рендере дочерних компонентов, и показывает запасной интерфейс вместо белого экрана. Ставят на уровне страниц и виджетов…

    Middle
  71. 71Как обрабатывать события в React и передавать колбэки дочерним компонентам?

    Обработчик передают функцией: onClick={handleClick} или onClick={() => remove(id)} — не onClick={handleClick()} (это вызов при рендере). Событие — синтетическое объединение над…

    Junior
  72. 72Что такое Fiber и конкурентный рендеринг в React?

    Fiber — внутренняя структура React: каждый элемент дерева представлен узлом-«волокном» с ссылками на родителя, потомка и соседа. Это позволяет выполнять работу кусками…

    Senior
  73. 73Как сделать простую форму в React?

    Контролируемое поле: значение в state, value={name} и onChange={e => setName(e.target.value)} — React — источник истины, удобно валидировать и форматировать на лету…

    Junior
  74. 74Как передать ref в свой компонент и открыть его методы?

    По умолчанию ref на свой компонент не попадает в его DOM. В React 19 ref передаётся как обычный prop; в прежних версиях компонент оборачивали в forwardRef. useImperativeHandle…

    Middle
  75. 75Как строить сложные формы на React Hook Form со схемой Zod?

    React Hook Form держит поля неконтролируемыми (через register и ref) — мало перерисовок даже на больших формах — и даёт состояние ошибок, отправки, «грязных» полей. Zod описывает…

    Middle
  76. 76Какие правила хуков в React и почему их нельзя вызывать в условиях?

    Хуки вызывают только на верхнем уровне компонента или своего хука — не в условиях, циклах и вложенных функциях — и только из React-функций. Причина: React хранит состояние хуков…

    Junior
  77. 77Почему пользовательские хуки вытеснили HOC и render props?

    HOC — функция, которая принимает компонент и возвращает обёрнутый с дополнительными props (withUser(Profile)). Render props — компонент вызывает функцию-проп для отрисовки (<Mouse…

    Middle
  78. 78Что такое JSX и как вставлять в него выражения и фрагменты?

    JSX — синтаксис, который компилируется в вызовы создания элементов (<div className="a"> → jsx("div", {className: "a"})). В фигурных скобках — любое выражение JavaScript…

    Junior
  79. 79Как поделиться состоянием между соседними компонентами — что значит «поднять состояние»?

    Данные в React текут сверху вниз через props. Если двум соседям нужно одно состояние, его поднимают в ближайшего общего родителя: родитель хранит state, передаёт значение вниз…

    Junior
  80. 80Когда применять React.memo, useMemo и useCallback?

    React.memo пропускает перерисовку компонента, если props поверхностно равны прошлым. useMemo кэширует результат вычисления, useCallback — саму функцию между рендерами. Они…

    Middle
  81. 81Как тестировать компоненты, которые ходят в сеть и используют провайдеры?

    MSW (Mock Service Worker) перехватывает запросы на уровне сети и отвечает заданными данными: компонент работает с настоящим fetch и клиентом, а тест управляет ответами — успех…

    Middle
  82. 82Чем разработка на React Native отличается от веба?

    React Native рендерит нативные компоненты платформы, а не DOM: View, Text, Image, Pressable, FlatList вместо div и span; текст — только внутри Text. Стили — объекты через…

    Middle
  83. 83Как устроен App Router в Next.js — маршруты, раскладки, загрузка данных?

    Маршруты — папки в app/: app/orders/[id]/page.tsx → /orders/123. layout.tsx оборачивает вложенные страницы и не перемонтируется при переходах между ними; loading.tsx …

    Middle
  84. 84Как спроектировать кэширование и стратегии рендеринга страниц в Next.js?

    Стратегии: статическая генерация при сборке — для неизменного контента; ISR (revalidate по времени) — статика, которая пересобирается в фоне; ревалидация по требованию…

    Senior
  85. 85Какие задачи не нужно решать через useEffect?

    Эффект — для синхронизации с внешней системой (подписка, таймер, сторонний виджет, запрос). Лишние эффекты: вычисление из props и state (считать при рендере), реакция на событие…

    Middle
  86. 86Как сделать оптимистичное обновление интерфейса с откатом при ошибке?

    Оптимистичное обновление показывает результат действия сразу, не дожидаясь сервера (лайк, отметка задачи), — интерфейс кажется мгновенным. В TanStack Query: в onMutate отменить…

    Middle
  87. 87Что такое порталы в React и как сделать на них модальное окно?

    createPortal(jsx, domNode) рендерит содержимое в другое место DOM (обычно в конец body), сохраняя его положение в дереве React. Это нужно модальным окнам, подсказкам, выпадающим…

    Middle
  88. 88Что такое виртуальный DOM и зачем в списках нужен key?

    Компонент возвращает описание интерфейса (дерево React-элементов). При обновлении React сравнивает новое дерево со старым (reconciliation) и применяет к настоящему DOM минимальные…

    Junior
  89. 89Как устроен Redux Toolkit — слайсы, селекторы, middleware?

    Redux — одно хранилище, состояние меняется только через action (объект «что произошло»), а reducer — чистая функция (state, action) → новое state: без побочных эффектов, поэтому…

    Middle
  90. 90Чем useRef отличается от useState?

    Оба сохраняют значение между рендерами, но изменение ref.current не вызывает перерисовку, а setState — вызывает. Ref — «ящик» для значений, которые не влияют на вывод: id таймера…

    Junior
  91. 91Когда компонент React перерисовывается и как избежать лишних рендеров?

    Компонент перерисовывается, когда меняется его состояние, контекст, который он читает, или перерисовывается родитель (по умолчанию — все дети, даже с теми же props). React.memo…

    Junior
  92. 92Как загружать данные до показа страницы в React Router?

    loader маршрута — функция, которую роутер вызывает при переходе, параллельно для всех вложенных маршрутов, до рендера страницы; компонент читает результат через useLoaderData()…

    Middle
  93. 93Как настроить маршруты и вложенные раскладки в React Router?

    Маршруты описывают деревом: путь → компонент. Вложенные маршруты рендерятся внутри родителя на месте &lt;Outlet/&gt; — так общая раскладка (шапка, меню) остаётся, а меняется…

    Junior
  94. 94Как читать параметры пути и строки запроса в React Router?

    Параметры пути (/orders/:id) читают useParams() — const { id } = useParams(). Параметры строки запроса (?page=2&sort=date) — useSearchParams(): чтение params.get("page") и запись…

    Junior
  95. 95Что такое Server Actions и как с ними делать формы?

    Server Action — асинхронная функция с директивой "use server", которая выполняется на сервере, но вызывается из клиента: её передают в <form action={createOrder}> или вызывают из…

    Middle
  96. 96Чем серверные компоненты отличаются от клиентских и от SSR?

    Серверный компонент выполняется только на сервере: может читать базу и секреты, его код не попадает в бандл браузера, но в нём нет состояния, эффектов и обработчиков событий…

    Middle
  97. 97Что такое SSR и гидратация и откуда берутся ошибки гидратации?

    SSR: сервер рендерит компоненты в HTML — пользователь сразу видит содержимое, поисковики его индексируют. Затем в браузере React гидратирует: загружает JS, сопоставляет его с…

    Middle
  98. 98Почему обработчик видит «старое» значение состояния?

    Каждый рендер — снимок: функции компонента замыкают значения state этого рендера. setState не меняет переменную сразу, а планирует новый рендер. Поэтому setCount(count + 1) три…

    Junior
  99. 99Почему в React нельзя изменять состояние напрямую?

    React узнаёт об изменении, сравнивая ссылки (Object.is). Мутация (items.push(x), user.name = ...) оставляет ссылку прежней — перерисовки не будет, а memo и useEffect не увидят…

    Junior
  100. 100Как управлять состоянием в React-приложении — Context, Redux, Zustand, серверное состояние?

    Сначала — локальное состояние и подъём к общему предку. Context — передать редко меняющиеся данные глубоко (тема, пользователь, язык) без прокидывания props. Глобальное хранилище…

    Junior
  101. 101Чем state отличается от props в React?

    props — входные данные от родителя, компонент их только читает. state — собственные данные компонента, меняются через setState и вызывают перерисовку. Данные текут сверху вниз…

    Junior
  102. 102Как стилизовать компоненты React — CSS Modules, Tailwind, clsx?

    CSS Modules (Button.module.css) делают имена классов локальными для файла: styles.primary превращается в уникальное имя, конфликтов нет. Tailwind — служебные классы прямо в…

    Junior
  103. 103Как разделить код по маршрутам через lazy и Suspense?

    lazy(() => import("./Page")) превращает компонент в отдельный чанк, который загрузится при первом показе. Пока он грузится, ближайшая &lt;Suspense fallback&gt; показывает запасной…

    Middle
  104. 104Как работать с серверными данными через TanStack Query?

    Серверное состояние — копия данных сервера: его нужно кэшировать, обновлять, дедуплицировать. useQuery({ queryKey, queryFn }) даёт data, isPending, error, кэш по ключу, повторы…

    Middle
  105. 105Чем отличаются getBy, queryBy и findBy в Testing Library?

    getBy… — элемент должен быть сейчас, иначе ошибка. queryBy… — возвращает null, если элемента нет: для проверки отсутствия (expect(queryByText("Ошибка")).not.toBeInTheDocument())…

    Junior
  106. 106Как тестировать пользовательские хуки?

    Хук нельзя вызвать вне компонента, поэтому используют renderHook из Testing Library: он рендерит служебный компонент и отдаёт result.current — текущее возвращаемое значение…

    Middle
  107. 107Как тестировать React-компоненты через Testing Library и user-event?

    Testing Library проверяет компонент как пользователь: рендерит его, ищет элементы по роли, подписи, тексту, а не по классам и внутреннему состоянию. user-event имитирует реальные…

    Junior
  108. 108Что тестировать во фронтенд-приложении на React?

    Тестировать поведение, важное пользователю: что показывается при разных данных (пусто, ошибка, загрузка, список), что происходит после действий (отправка формы, фильтр, удаление)…

    Junior
  109. 109Как сделать интерфейс отзывчивым при тяжёлых обновлениях — useTransition и виртуализация?

    useTransition помечает обновление как несрочное: ввод в поле применяется сразу, а тяжёлая перерисовка результатов идёт в фоне и может прерываться; isPending показывает индикатор…

    Middle
  110. 110Как типизировать обработчики событий в React с TypeScript?

    События React имеют типы с параметром элемента: ChangeEvent&lt;HTMLInputElement&gt;, MouseEvent&lt;HTMLButtonElement&gt;, FormEvent&lt;HTMLFormElement&gt;, KeyboardEvent. Если…

    Junior
  111. 111Как написать дженерик-компонент и типизировать контекст с проверкой провайдера?

    Дженерик-компонент получает параметр типа из данных: function List<T>({ items, render }: { items: T[]; render: (item: T) => ReactNode }) — внутри render тип элемента известен без…

    Middle
  112. 112Как типизировать props и состояние React-компонента в TypeScript?

    Props описывают типом или интерфейсом и указывают в параметре: function Button({ label, onClick }: ButtonProps). Необязательные — ?, значения по умолчанию — в деструктуризации…

    Junior
  113. 113Какое состояние стоит хранить в URL и как защищать маршруты?

    В URL хранят то, что должно переживать перезагрузку, делиться ссылкой и работать с кнопкой «назад»: фильтры, сортировку, страницу, открытую вкладку, поисковый запрос. URL…

    Middle
  114. 114Как работает useEffect и что такое массив зависимостей?

    useEffect запускает побочный эффект после отрисовки: подписки, таймеры, запросы, синхронизацию с внешней системой. Зависимости определяют, когда эффект перезапускается: [] — один…

    Junior
  115. 115Когда использовать useReducer вместо useState?

    useReducer(reducer, initial) хранит состояние, которое меняется через действия: dispatch({type: "added", item}), а чистая функция reducer(state, action) возвращает новое…

    Middle
  116. 116Как получить доступ к DOM-элементу через useRef?

    const inputRef = useRef<HTMLInputElement>(null) и <input ref={inputRef}/> — после монтирования в inputRef.current будет DOM-элемент. Использовать его можно в обработчиках и…

    Junior
  117. 117Как работает useState?

    const [value, setValue] = useState(initial) — React хранит значение вне функции компонента, привязав его к позиции хука; при следующих рендерах возвращает текущее. setValue…

    Junior
  118. 118Как создать React-проект и почему React перерисовывает интерфейс при изменении состояния?

    Проект создают сборщиком Vite: npm create vite@latest app -- --template react-ts, затем npm install и npm run dev. React декларативный: вы описываете, как интерфейс выглядит при…

    Junior
  119. 119Как React защищает от XSS при выводе строк и когда эта защита не работает?

    React экранирует строки, вставленные в JSX: {comment} с текстом <script> покажется как текст, а не выполнится. Защита не работает: в dangerouslySetInnerHTML (HTML вставляется как…

    Junior
  120. 120Как создать хранилище Zustand и подписаться на его часть?

    create создаёт хук-хранилище: состояние и функции изменения в одном объекте, без провайдера. Компонент подписывается селектором — useCart(s => s.items.length) — и…

    Junior
  121. 121Зачем учитывать prefers-reduced-motion?

    У части людей движение на экране вызывает головокружение и тошноту (вестибулярные нарушения), других отвлекает. В системе они включают «уменьшить движение», а сайт узнаёт об этом…

    Junior
  122. 122Как браузер отрисовывает страницу и чем reflow отличается от repaint?

    HTML → DOM, CSS → CSSOM, вместе → дерево отрисовки → layout (геометрия: размеры и позиции) → paint (пиксели слоёв) → composite (сборка слоёв на GPU). Reflow — пересчёт раскладки…

    Junior
  123. 123Как сделать адаптивную вёрстку?

    Гибкая раскладка (flex, grid с fr и minmax), относительные единицы (rem, %, vw, clamp), медиазапросы по ширине и адаптивные изображения (srcset, sizes). Mobile-first — базовые…

    Junior
  124. 124Чем отличаются атрибуты async и defer у тега script?

    Обычный <script> останавливает разбор HTML до загрузки и выполнения. defer — загрузка параллельно, выполнение после разбора HTML, по порядку подключения. async — загрузка…

    Junior
  125. 125Что означают версии ^1.2.3 и ~1.2.3 и как обновлять зависимости?

    Semver: MAJOR.MINOR.PATCH — major ломает совместимость, minor добавляет функции, patch исправляет ошибки. ^1.2.3 разрешает обновления до <2.0.0 (minor и patch), ~1.2.3 — только…

    Junior
  126. 126Что фронтенд-разработчику нужно знать про SEO?

    Поисковик должен получить содержимое страницы, понять его и оценить качество. Для этого: контент доступен в HTML без обязательного выполнения JS (SSR или статическая генерация для…

    Junior
  127. 127Зачем нужны robots.txt и sitemap.xml?

    robots.txt в корне сайта говорит роботам, какие разделы не обходить (админка, корзина, бесконечные фильтры) и где лежит sitemap. Это не защита: страница может попасть в индекс по…

    Junior
  128. 128Что такое source maps и как их использовать в продакшене?

    Source map — файл соответствия собранного (минифицированного, склеенного) кода исходному: строка 1, столбец 48231 в index-3f2a.js → Cart.tsx:42. Браузерные DevTools и системы…

    Middle
  129. 129Зачем нужен Storybook?

    Storybook — песочница, где компоненты разрабатывают и показывают изолированно от приложения: каждая история (story) — компонент в конкретном состоянии (обычная кнопка, загрузка…

    Junior
  130. 130Чем Svelte отличается от React и Vue?

    Svelte — компилятор: компоненты (.svelte) превращаются при сборке в небольшой JS, который напрямую обновляет DOM, без виртуального DOM и тяжёлой библиотеки в рантайме — меньше…

    Junior
  131. 131Как делить состояние между компонентами в Svelte?

    Между родителем и ребёнком — props и колбэки (или bind). Для общего состояния нескольких компонентов в Svelte 5 выносят $state в отдельный модуль (.svelte.js) и импортируют его …

    Junior
  132. 132Что такое утилитарный CSS (Tailwind) и какие у него плюсы и минусы?

    Tailwind — набор маленьких классов-утилит (flex, p-4, text-lg, md:grid-cols-2), из которых стиль собирается прямо в разметке. Плюсы: не нужно придумывать имена, стили не…

    Junior
  133. 133Как тестировать компоненты с Testing Library?

    Принцип Testing Library: тестировать так, как пользуется человек. Компонент рендерят, ищут элементы по роли, подписи, тексту (getByRole('button', { name: 'Отправить' }))…

    Junior
  134. 134Как определяется this в JavaScript и чем стрелочные функции отличаются от обычных?

    В обычной функции this определяется в момент вызова: obj.method() — obj; простой вызов f() — undefined в строгом режиме; new F() — новый объект; call/apply/bind — заданный явно…

    Junior
  135. 135Что такое дженерики в TypeScript и зачем они нужны?

    Дженерик — параметр типа: функция или тип работает с разными типами, сохраняя связь между входом и выходом. function first<T>(xs: T[]): T | undefined — для string[] вернёт string…

    Junior
  136. 136Что такое сужение типов в TypeScript?

    Если переменная имеет тип-объединение (string | number, User | null), TypeScript позволяет использовать только общее. Проверка внутри кода сужает тип в ветке: typeof (примитивы)…

    Junior
  137. 137Зачем нужен TypeScript и чем any отличается от unknown?

    TypeScript добавляет к JavaScript статические типы, которые проверяются при компиляции и стираются в итоговом JS. Польза: ошибки до запуска, автодополнение, безопасный…

    Junior
  138. 138Чем interface отличается от type в TypeScript и что такое утилитарные типы?

    Оба описывают форму объекта. interface — расширяется через extends и сливается при повторном объявлении (удобно для расширения чужих типов). type — умеет больше: объединения…

    Junior
  139. 139Чем var отличается от let и const?

    var — область видимости функции, поднимается (hoisting) со значением undefined, допускает повторное объявление. let и const — область видимости блока {}, до строки объявления …

    Junior
  140. 140Как писать юнит-тесты на фронтенде (Vitest, Jest)?

    Юнит-тесты проверяют логику без браузера: функции форматирования, расчёты, валидацию, редьюсеры, хуки. Vitest (быстрый, совместим с Vite) и Jest — похожий API: describe, it/test…

    Junior
  141. 141Как устроен компонент Vue?

    Компонент Vue обычно — однофайловый (.vue): блоки <script setup>, <template> и <style scoped>. Шаблон — HTML с директивами: {{ }} для вывода, v-bind (:href), v-on (@click)…

    Junior
  142. 142Как компоненты Vue обмениваются данными — props, emits, слоты?

    Данные идут сверху вниз через props (defineProps), ребёнок их не меняет. Наверх ребёнок сообщает событиями (defineEmits, emit('select', id)), родитель слушает @select. v-model на…

    Junior
  143. 143Как работает реактивность во Vue — ref, reactive, computed, watch?

    Vue отслеживает, какие реактивные значения прочитал шаблон или вычисление, и при их изменении сам обновляет только зависимое. ref — обёртка для любого значения (в скрипте .value…

    Junior
  144. 144Когда фронтенду нужен REST, GraphQL или WebSocket?

    REST — ресурсы и HTTP-методы: просто, кэшируется HTTP, хватает для большинства приложений. GraphQL — клиент сам описывает нужные поля одним запросом: удобно при множестве экранов…

    Middle
Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования