Skip to content

Вопросы на собеседовании: Фулстек-разработчик

100 реальных вопросов с образцовыми ответами и пояснениями для уровня Junior.

Смотреть пример резюме: Фулстек-разработчик

Тренировка флешкарточками

Интервальное повторение · Hunter Pass

Слушайте собеседование

Включите как подкаст: вопрос и образцовый ответ подряд.

Вопросы

scopejavascript

var имеет область видимости функции и поднимается, тогда как let и const блочные.

  • var: поднимается к началу функции и доступна до строки объявления
  • let и const: блочная область видимости, недоступны до объявления
  • let допускает переприсвоение, const нет, хотя свойства const-объекта можно менять
  • По умолчанию используйте const, а let только когда переприсвоение действительно нужно

Зачем это спрашивают: Проверяет понимание правил области видимости, hoisting и современных соглашений JavaScript, а не опору на устаревший var.

closuresjavascript

Замыкание, это функция, сохраняющая доступ к переменным внешней области даже после её завершения.

  • Сохраняет переменные внешней лексической области после выхода из внешней функции
  • Пример: фабрика счётчика возвращает внутреннюю функцию, инкрементирующую приватный count
  • Каждый вызов фабрики создаёт независимый счётчик
  • Основа мемоизации, модульных паттернов и обработчиков событий с памятью состояния

Зачем это спрашивают: Сильный ответ демонстрирует понимание цепочки областей видимости, а не просто то, что замыкания помнят переменные из внешней области.

asyncevent-loop

Node.js выполняет JavaScript в одном потоке, но выносит I/O, чтобы не блокироваться.

  • Делегирует I/O вроде чтения файлов и сетевых запросов ОС или пулу потоков libuv
  • Завершённая асинхронная операция помещает свой коллбэк в очередь цикла событий
  • Цикл событий выполняет коллбэк, когда стек вызовов пуст
  • Позволяет Node.js обрабатывать тысячи одновременных подключений без блокировки

Зачем это спрашивают: Проверяет ментальную модель параллелизма в Node.js, которая критична для написания неблокирующего серверного кода.

javascript

== сравнивает после приведения типов, а === проверяет значение и тип без приведения.

  • == сначала приводит типы, поэтому 0 == false равно true
  • === проверяет и значение, и тип, поэтому 0 === false равно false
  • В продакшне используйте === во избежание багов от неявного преобразования

Зачем это спрашивают: Кандидаты, полагающиеся на == без понимания приведения типов, часто вносят трудноотлавливаемые баги в логику условий.

asyncpromises

Promise представляет конечный результат асинхронной операции.

  • Имеет три состояния: ожидание, успех или ошибка
  • Вы цепляете .then() и .catch() для обработки результата
  • async/await, это сахар поверх Promise, читающийся как синхронный код
  • Ошибки обрабатываются через try/catch, а не цепочки обработчиков

Зачем это спрашивают: Проверяет понимание жизненного цикла Promise и способность связать синтаксис async/await с лежащим в его основе механизмом.

functions

Функция высшего порядка принимает функцию в аргументы, возвращает функцию, или и то и другое.

  • map, filter и reduce, типичные примеры
  • map принимает коллбэк и применяет его к каждому элементу, возвращая новый массив той же длины
  • Позволяет создавать компонуемую и переиспользуемую логику
  • Лежит в основе функционального программирования на JavaScript

Зачем это спрашивают: Позволяет оценить понимание функций первого класса, которые лежат в основе современного JavaScript и дизайна React.

fundamentalsjavascript

undefined значит, что значение не задано, а null, это намеренная пустота.

  • undefined: значение по умолчанию для объявленной без инициализации переменной или непереданного параметра
  • null: намеренное присвоение, отмечающее отсутствие значения
  • Оба значения ложные (falsy)
  • typeof undefined возвращает 'undefined', а typeof null, 'object', исторический баг

Зачем это спрашивают: Различение этих двух значений выявляет кандидатов, понимающих систему типов JavaScript и умеющих избегать багов с неинициализированными переменными.

destructuringjavascript

Деструктуризация лаконично извлекает значения массивов или свойства объектов в отдельные переменные.

  • Работает и с массивами, и с объектами, раскладывая поля по переменным
  • Пример: const { name, age } = user извлекает поля напрямую без отдельных обращений
  • Сокращает повторяющиеся обращения к свойствам
  • Особенно удобна с параметрами функций, ответами API и пропсами React

Зачем это спрашивают: Проверяет знакомство с современным синтаксисом ES6+, который повсеместно используется в React и Node.js.

typescripttypes

Интерфейс описывает форму объекта, а псевдоним типа, любой тип.

  • Интерфейсы расширяются и реализуются классами, а одноимённые объединяются автоматически
  • Псевдонимы покрывают объединения, примитивы и кортежи, не только объекты, без слияния объявлений
  • Для расширяемых форм объектов предпочтительны интерфейсы
  • Для объединений и вычисляемых типов предпочтительны псевдонимы типов

Зачем это спрашивают: Проверяет практическое знание TypeScript: понимает ли кандидат, когда использовать каждый инструмент, а не считает ли их взаимозаменяемыми.

typescript

TypeScript выводит тип переменной из её начального значения.

  • const count = 0 получает тип number без явной аннотации
  • Вывод также охватывает возвращаемые типы функций и параметры обобщений
  • Он применяется и к деструктурированным значениям
  • Сокращает количество аннотаций при сохранении полной типобезопасности

Зачем это спрашивают: Кандидат, понимающий вывод типов, пишет более чистый TypeScript и не аннотирует каждую переменную избыточно.

restspread

Spread раскрывает итерируемое в отдельные элементы, а rest собирает аргументы в массив.

  • Spread объединяет массивы [...arr1, ...arr2] или клонирует объекты { ...original, key: newValue }
  • Rest использует тот же синтаксис в определении функции, например function sum(...numbers)
  • Оба постоянно встречаются при обновлении состояния в React и в сигнатурах утилит

Зачем это спрашивают: Spread и rest повсеместны в современном JavaScript; проверка знания их синтаксиса оценивает готовность к повседневной работе.

prototypesjavascript

Каждый объект JavaScript ссылается на объект-прототип, образуя цепочку.

  • Обращение к свойству идёт вверх по цепочке, пока не найдёт его или не достигнет null
  • Классы ES6, это синтаксический сахар поверх этой цепочки прототипов
  • Они не вводят классическую модель наследования, как в Java или C#

Зачем это спрашивают: Понимание цепочки прототипов помогает отлаживать неожиданные поиски свойств и понимать, почему методы вроде .toString() доступны на любом объекте.

async

Синхронный код блокирует поток до конца каждой операции, асинхронный, нет.

  • Синхронный выполняется строка за строкой, что может заморозить интерфейс или сервер на долгих задачах
  • Асинхронный начинает операцию и продолжает выполнять другой код в ожидании
  • Результат приходит через коллбэк, Promise или async/await
  • Почти весь I/O вроде запросов к базе и HTTP-вызовов должен быть асинхронным во избежание блокировки

Зачем это спрашивают: Непонимание разницы между sync и async является корневой причиной замороженных интерфейсов и неотзывчивых серверов на Node.js.

javascriptmodulessystem-design

CommonJS использует require и работает синхронно, а ES Modules используют import и поддерживают tree shaking.

  • CommonJS: require() и module.exports, синхронно, устаревший стандарт Node.js
  • ES Modules: import и export, статический анализ и tree shaking, актуальный стандарт
  • Формат модулей влияет на разрешение импортов и удаление неиспользуемого кода при бандлинге

Зачем это спрашивают: Интервьюеры проверяют, может ли кандидат работать в кодовой базе, где смешаны оба формата, и понимает ли он практические различия.

callbacks

Коллбэк, это функция, переданная другой функции для вызова после завершения асинхронной операции.

  • Передаётся как аргумент и вызывается по завершении операции
  • Вложение коллбэков на несколько уровней порождает callback hell, трудный для чтения и поддержки
  • Promise и async/await устраняют вложенность и восстанавливают читаемый последовательный поток

Зачем это спрашивают: Вопрос о коллбэках и их недостатках проверяет, понимает ли кандидат историческую эволюцию асинхронного JavaScript и почему появились современные паттерны.

typescriptgenerics

Обобщения позволяют писать переиспользуемый код для разных типов с сохранением типобезопасности.

  • Пример: identity<T>(value: T): T принимает любой тип и возвращает тот же тип
  • При этом информация о типе не теряется
  • Часто встречаются в утилитарных типах, обёртках для запросов и API переиспользуемых компонентов React
  • Полезны, когда точный тип не известен на момент написания

Зачем это спрашивают: Обобщения, это шаг выше базового знания TypeScript; кандидат, понимающий их, может создавать по-настоящему переиспользуемые типизированные абстракции.

arrays

map преобразует, filter отбирает, reduce накапливает.

  • map преобразует каждый элемент и возвращает новый массив той же длины
  • filter возвращает только элементы, прошедшие предикат, и может быть короче исходного
  • reduce накапливает все элементы в одно значение, например сумму, объект или массив

Зачем это спрашивают: Эти три метода постоянно используются как при рендеринге данных на фронтенде, так и при обработке данных на бэкенде, поэтому свободное владение ими является базовым требованием.

javascript

Опциональная цепочка безопасно читает вложенные свойства, а нулевое слияние подставляет значение по умолчанию только для null или undefined.

  • ?. возвращает undefined вместо ошибки, если промежуточное значение null или undefined, например user?.address?.city
  • ?? возвращает правый операнд только если левый null или undefined, в отличие от ||, который срабатывает и на 0 или пустую строку
  • Вместе user?.name ?? 'Аноним' даёт чистую и безопасную логику значений по умолчанию

Зачем это спрашивают: Оба оператора встречаются в современных кодовых базах и устраняют многословные проверки на null; уверенное владение ими говорит об актуальных знаниях JavaScript.

reactdomvirtual-dom

Виртуальный DOM, это лёгкое дерево JavaScript-объектов, зеркалящее реальный DOM.

  • При изменении состояния React строит новое виртуальное дерево и сравнивает его с предыдущим снимком
  • Затем применяет только минимальный набор нужных реальных DOM-мутаций
  • Быстрее, чем трогать реальный DOM при каждом изменении, ведь операции с ним затратны
  • Освобождает разработчиков от ручного отслеживания того, какие элементы обновить

Зачем это спрашивают: Понимание виртуального DOM объясняет, почему React-компоненты перерисовываются, и закладывает основу для рассуждений об оптимизации рендеринга.

reactcomponentsforms

Управляемый компонент хранит значение в состоянии React, неуправляемый, в DOM.

  • Управляемый: React, единственный источник истины, каждое нажатие вызывает обновление состояния и перерисовку
  • Неуправляемый: значение в DOM, читается через ref по необходимости, без состояния React
  • Управляемые дают предсказуемое поведение и упрощают валидацию
  • Неуправляемые проще для случаев вроде загрузки файлов

Зачем это спрашивают: Это различает кандидатов, понимающих модель потока данных React, от тех, кто просто копирует паттерны форм не понимая, как они работают.

Закрытые вопросы

  • 21

    Что такое useState и чем он отличается от обычной переменной в компоненте?

    componentshooks
  • 22

    Как работает useEffect и какова роль его массива зависимостей?

    hooksdependencies
  • 23

    Что такое жизненный цикл компонента React в функциональных компонентах?

    reactcomponents
  • 24

    Когда следует использовать useCallback и useMemo?

  • 25

    Что такое prop drilling и как Context API помогает его решить?

    stateapi
  • 26

    Как обрабатывать формы в React?

    soft-skillsreact
  • 27

    В чём разница между React.memo и useMemo?

    react
  • 28

    Как работает проп key в списках React и почему он важен?

    react
  • 29

    Что такое Next.js и какие проблемы он решает по сравнению с чистым React?

    reactnextjs
  • 30

    В чём разница между getServerSideProps и getStaticProps в Next.js?

    nextjs
  • 31

    Как устроена маршрутизация в App Router Next.js?

    nextjs
  • 32

    Что такое Tailwind CSS и чем он отличается от традиционных CSS-фреймворков вроде Bootstrap?

    csstailwind
  • 33

    Как реализовать адаптивную вёрстку с помощью Tailwind CSS?

    csstailwindresponsive
  • 34

    Что такое специфичность CSS и как она вычисляется?

    css
  • 35

    В чём разница между CSS Flexbox и CSS Grid?

    cssflexboxgrid
  • 36

    Зачем нужна семантическая HTML-разметка?

    htmla11y
  • 37

    Как реализовать клиентскую навигацию в Next.js без полной перезагрузки страницы?

    soft-skillsnextjs
  • 38

    Что такое правила хуков в React и почему они существуют?

    reacthooks
  • 39

    Что такое Node.js и что делает его подходящим для разработки веб-серверов?

  • 40

    Как Express обрабатывает роутинг и middleware?

    middleware
  • 41

    Что такое цикл запрос-ответ в Express-приложении?

  • 42

    Как обрабатывать ошибки в Express-приложении?

    soft-skills
  • 43

    В чём разница между HTTP-методами GET, POST, PUT, PATCH и DELETE?

    http
  • 44

    Что такое HTTP-статус-коды и что означает каждый диапазон?

    httpstatus-codes
  • 45

    Как валидировать данные запроса в Node.js API?

    validationapi
  • 46

    Что такое CORS и как его настроить в Express-приложении?

    configcors
  • 47

    Как структурировать REST API проект для ясности и поддерживаемости?

    rest
  • 48

    Зачем нужны переменные окружения и как ими управлять в Node.js?

    config
  • 49

    Как реализовать пагинацию в REST API?

    restpagination
  • 50

    Что такое ограничение частоты запросов (rate limiting) и зачем добавлять его в API?

    rate-limiting
  • 51

    Как обрабатывать загрузку файлов на Node.js-сервере?

    soft-skills
  • 52

    Что такое JSON Web Token и как он работает для аутентификации в API?

    authtokensapi
  • 53

    Чем сессионная аутентификация отличается от токен-based аутентификации?

    authtokenssessions
  • 54

    В чём разница между SQL и NoSQL базами данных?

    sqlnosqldatabase
  • 55

    Когда следует выбирать PostgreSQL вместо MongoDB?

    postgresmongodb
  • 56

    Что такое индекс базы данных и почему он важен для производительности запросов?

    databaseindexesqueries
  • 57

    Объясните базовые типы SQL JOIN: INNER JOIN, LEFT JOIN и RIGHT JOIN.

    sqljoins
  • 58

    Что такое нормализация базы данных и какие проблемы она решает?

    databasenormalization
  • 59

    Как Prisma ORM упрощает работу с базой данных в проекте на Node.js и TypeScript?

    databaseormtypescript
  • 60

    Что такое транзакция в базе данных и когда её использовать?

    databasetransactions
  • 61

    Как предотвратить SQL-инъекции в приложении?

    sqlinjection
  • 62

    Что такое проблема N+1 запросов и как её избежать?

    queriesn+1
  • 63

    Как спроектировать простую схему «пользователи и посты» в реляционной базе данных?

    databaseschemadesign
  • 64

    Опишите полный цикл запрос-ответ, когда браузер получает данные от API.

    api
  • 65

    В чём разница между серверным рендерингом, клиентским рендерингом и генерацией статических сайтов?

    ssr
  • 66

    Что такое HTTPS и почему он необходим для продакшн веб-приложений?

    https
  • 67

    Что такое cookie и localStorage и каковы ключевые различия при хранении токенов аутентификации?

    authtokenscookies
  • 68

    Чем REST API отличается от GraphQL API на базовом уровне?

    restgraphql
  • 69

    Что такое WebSocket и когда его использовать вместо обычного HTTP?

    httpwebsockets
  • 70

    Что такое CSRF и как от него защититься?

    csrf
  • 71

    Как раздача контента через CDN улучшает производительность приложения?

    performance
  • 72

    Для чего предназначен HTTP-заголовок Authorization?

    authhttp
  • 73

    Как структурировать новую сквозную функцию от таблицы базы данных до отрендеренного React-компонента?

    reactcomponentsdatabase
  • 74

    Что такое Git и в чём разница между слиянием (merge) и перебазированием (rebase) веток?

    git
  • 75

    Какую стратегию ветвления вы использовали бы в командном проекте?

  • 76

    Что такое Docker и почему джуниору стоит его понимать?

    docker
  • 77

    Что такое CI/CD пайплайн и что он обычно включает?

    ci-cd
  • 78

    Как Vercel упрощает деплой Next.js приложения?

    nextjsdeployment
  • 79

    Что такое GitHub Actions и как его использовать для базового воркфлоу Node.js?

    ci-cd
  • 80

    Как управлять разными средами, разработкой, staging и продакшном, в full-stack проекте?

  • 81

    Что такое файл package.json и каковы его ключевые поля?

    npm
  • 82

    Чем pnpm отличается от npm?

    pnpmnpm
  • 83

    Что такое ESLint и почему он ценен в проекте?

    eslint
  • 84

    Что такое юнит-тестирование и чем оно отличается от интеграционного тестирования?

    unitintegration
  • 85

    Как написать базовый тест для React-компонента с помощью React Testing Library?

    reactcomponentsrtl
  • 86

    Что такое мокирование в тестах и зачем оно нужно?

    mocking
  • 87

    Что измеряет покрытие тестами и каковы его ограничения?

    coverage
  • 88

    Как тестировать REST API эндпоинт в Node.js?

    restendpoints
  • 89

    Как вы подходите к изучению новой технологии или фреймворка, с которым раньше не работали?

  • 90

    Опишите проект, в котором вы построили что-то от базы данных до интерфейса. Что было самым сложным?

    database
  • 91

    Как вы реагируете на обратную связь в ходе код-ревью?

    soft-skillsfeedbackcode-review
  • 92

    Что вы будете делать, если застряли на баге несколько часов?

    problem-solving
  • 93

    Как вы приоритизируете задачи, когда одновременно есть несколько дел?

    prioritization
  • 94

    Расскажите о случае, когда вы улучшили существующий код. Что вас мотивировало?

  • 95

    Как вы обеспечиваете понятность вашего кода для других разработчиков?

  • 96

    Как вы оцениваете, сколько времени займёт задача разработки?

    estimation
  • 97

    Что для вас означает «готово», когда вы завершаете функцию?

  • 98

    Как вы следите за изменениями в экосистеме JavaScript и веб-разработки?

    learningjavascript
  • 99

    Расскажите об ошибке, которую вы допустили в техническом проекте, и чему она вас научила.

    ownership
  • 100

    Почему вы хотите работать full-stack разработчиком, а не специализироваться только на фронтенде или бэкенде?

    motivation