Skip to content

Вопросы на собеседовании: Бэкенд-разработчик

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

Смотреть пример резюме: Бэкенд-разработчик

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

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

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

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

Вопросы

rest

REST, это архитектурный стиль для сетевых API поверх HTTP.

  • Без состояния: каждый запрос несёт всю нужную серверу информацию.
  • Единый интерфейс: согласованное именование ресурсов и стандартные HTTP-методы.
  • Разделение клиента и сервера, кэшируемость и многоуровневость, опционально код по требованию.
  • На практике: ресурсы как URL вида /users/42, GET для чтения, POST для создания, без серверного состояния сессии.

Зачем это спрашивают: Интервьюер проверяет, понимаете ли вы REST как архитектурный стиль с конкретными правилами, а не просто любой HTTP API.

http

PUT полностью заменяет ресурс, PATCH обновляет только его часть.

  • PUT: отправляете полное представление, сервер перезаписывает всё существующее.
  • PATCH: отправляете только поля, которые нужно изменить.
  • Пример: обновление email через PUT требует весь объект пользователя, через PATCH, только поле email.
  • PATCH защищает от случайного затирания полей, которые клиент не собирался менять.

Зачем это спрашивают: Это проверяет точное понимание семантики HTTP, что важно при проектировании API, на который полагаются клиенты.

httpstatus-codesdesign

Выбирайте коды статуса по смыслу, а не возвращайте 200 на всё.

  • 201 Created при успешном создании, обычно с новым ресурсом в теле.
  • 404 Not Found для отсутствующего ресурса.
  • 400 Bad Request при ошибке валидации, с телом, описывающим что не так.
  • 500 Internal Server Error при необработанном сбое на сервере.
  • Правильные коды позволяют клиентам обрабатывать ошибки программно, не разбирая текст.

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

authjwt

Сервер выдаёт подписанный токен после входа и проверяет его на каждом запросе.

  • Токен состоит из трёх частей: заголовок, base64-нагрузка с данными вроде ID пользователя и срока действия, и подпись.
  • Клиент передаёт его в заголовке Authorization при последующих запросах.
  • Сервер проверяет подпись секретным ключом и доверяет нагрузке без обращения к базе данных.
  • Поскольку JWT самодостаточны, они подходят для stateless API.

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

auth

Аутентификация подтверждает, кто вы, авторизация определяет, что вам разрешено.

  • Аутентификация: проверка пароля или валидация токена.
  • Авторизация: выдача прав после подтверждения личности.
  • Пример: проверка JWT, это аутентификация, проверка роли администратора перед удалением, авторизация.
  • Частая ошибка, смешивать их, тогда эндпоинты узнают пользователя, но не проверяют права.

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

foreign-keys

Внешний ключ ссылается на первичный ключ другой таблицы и обеспечивает ссылочную целостность.

  • Пример: таблица orders имеет user_id, указывающий на таблицу users.
  • Он предотвращает осиротевшие записи, например заказ для несуществующего пользователя.
  • СУБД отклоняет вставки или обновления, нарушающие ограничение.
  • Это надёжнее, чем проверять правило только в коде приложения.

Зачем это спрашивают: Интервьюер проверяет, понимаете ли вы реляционное моделирование данных за рамками написания SELECT-запросов.

databaseindexes

Индекс, это структура данных, находящая совпадающие строки без полного сканирования таблицы.

  • Обычно это B-дерево по одному или нескольким столбцам.
  • Добавляйте индекс на столбцы, часто используемые в WHERE, JOIN или ORDER BY.
  • Каждый индекс замедляет INSERT, UPDATE и DELETE, потому что его тоже нужно обновлять.
  • Поэтому создавайте индексы избирательно, где производительность чтения важнее всего.

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

queriesn+1

N+1 возникает, когда вы загружаете N записей и делаете по одному лишнему запросу на каждую для связанных данных.

  • Пример: загрузка 100 постов с запросом автора для каждого даёт 101 запрос.
  • Решение, загрузить связанные данные одним джойном или одним пакетным запросом.
  • Большинство ORM предлагают жадную загрузку, например include в Sequelize или select_related в Django.
  • Это сводит работу к одному-двум запросам.

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

sqlnosqldatabase

SQL использует таблицы с фиксированной схемой, NoSQL, гибкие схемы и разные модели данных.

  • SQL: таблицы с фиксированной схемой и структурированные запросы для джойнов, агрегаций и транзакций.
  • NoSQL: документные хранилища вроде MongoDB, «ключ-значение» вроде Redis, колоночные вроде Cassandra.
  • SQL подходит для реляционных данных с жёсткими требованиями к согласованности.
  • NoSQL часто жертвует частью гарантий ACID ради горизонтальной масштабируемости или гибкости схемы.
  • На уровне junior начинайте с реляционной базы, если нет явной причины поступить иначе.

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

middleware

Middleware, это функция в цепочке запроса-ответа, выполняемая до или после обработчика маршрута.

  • Она может читать или менять запрос, вызывать следующий middleware или прервать цепочку, отправив ответ.
  • Частые сценарии: парсинг JSON-тела, проверка токенов, логирование запросов, обработка CORS.
  • В Express она принимает (req, res, next) и должна вызвать next() для продолжения цепочки.

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

concurrency

Процесс, это независимая программа со своей памятью, поток разделяет память внутри процесса.

  • У процесса своё адресное пространство памяти, управляемое ОС.
  • Поток, это более мелкая единица выполнения, разделяющая память с другими потоками того же процесса.
  • Потоки легко обмениваются данными через общие переменные, но могут повредить общее состояние без синхронизации.
  • Node.js работает на одном потоке, но может порождать рабочие потоки или дочерние процессы для CPU-интенсивных задач.

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

async

Асинхронное программирование позволяет запустить операцию, продолжить работу и обработать результат позже без блокировки.

  • Синхронная блокирующая модель останавливала бы сервер в ожидании каждого запроса к базе данных.
  • Асинхронный I/O позволяет одному потоку обслуживать много запросов, уступая управление во время ожидания сети или диска.
  • В Node.js это модель по умолчанию; в Python используется asyncio.

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

https

HTTPS, это HTTP поверх TLS: трафик шифруется, а личность сервера проверяется.

  • При подключении клиент и сервер выполняют TLS-рукопожатие.
  • Сервер предъявляет сертификат, клиент проверяет его через доверенный центр сертификации.
  • Они согласовывают симметричный ключ, и все последующие данные шифруются им.
  • Это блокирует прослушивание и самозванцев; бэкенд-разработчики настраивают сертификаты через Let's Encrypt или облачный балансировщик.

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

cors

CORS, это механизм безопасности браузера, управляющий кросс-доменными запросами из JavaScript.

  • Он ограничивает JS на одном источнике (домен и порт) от вызова другого источника.
  • Браузер отправляет заголовок Origin, а сервер отвечает Access-Control-Allow-Origin с разрешёнными источниками.
  • Без него вредоносный сайт мог бы делать аутентифицированные запросы через cookies посетителя.
  • Настраивается на бэкенде; небраузерные клиенты вроде Postman его игнорируют.

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

caching

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

  • Cache-aside: приложение сначала проверяет кэш, при промахе читает базу данных и записывает результат обратно в кэш.
  • Write-through: каждая запись идёт сразу и в кэш, и в базу данных, сохраняя синхронизацию.
  • Cache-aside, самый частый паттерн, он хорошо сочетается с Redis для результатов запросов или готовых ответов.

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

redis

Redis, это хранилище «ключ-значение» в памяти с богатыми типами данных, используемое в основном ради скорости.

  • Поддерживает строки, хэши, списки, множества и сортированные множества.
  • Кэширование: хранение результатов запросов с TTL во избежание дорогого пересчёта.
  • Хранение сессий: данные сессии без обращения к основной базе на каждом запросе.
  • Ограничение частоты: инкремент счётчика на пользователя за временное окно.
  • Хранение в памяти делает чтение и запись микросекундными в отличие от реляционной базы.

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

databasemigrations

Миграция, это версионированное изменение схемы базы данных в виде кода, хранящееся в репозитории.

  • Примеры: добавление столбца или создание таблицы, записанные как код.
  • Инструменты вроде Flyway, Liquibase или Alembic применяют их по порядку и отслеживают выполненные.
  • Это делает изменения схемы воспроизводимыми, доступными для ревью и привязанными к коммиту.
  • Без миграций ручные изменения трудно воспроизвести в staging, тестовом и production-окружениях.

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

databasetransactions

Транзакция объединяет SQL-операции в один блок, который либо весь фиксируется, либо весь откатывается.

  • Используйте её, когда несколько таблиц должны меняться атомарно, например списание с одного счёта и зачисление на другой.
  • Начните с BEGIN, выполните запросы, затем COMMIT при успехе или ROLLBACK при сбое.
  • Большинство ORM оборачивают логику в try-catch и откатывают изменения при любом исключении.

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

idempotencydesign

Операция идемпотентна, если её многократный вызов даёт тот же результат, что и однократный.

  • GET, PUT и DELETE идемпотентны по природе; POST по умолчанию нет.
  • Это важно, потому что сетевые сбои заставляют клиентов повторять запросы, что грозит двойным списанием или дублями.
  • Сделать POST идемпотентным помогает сгенерированный клиентом ключ идемпотентности.
  • Перед выполнением операции проверяйте, был ли этот ключ уже обработан.

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

sqljoins

Тип джойна определяет, какие несовпадающие строки вы сохраняете.

  • INNER JOIN возвращает только строки с совпадениями в обеих таблицах.
  • LEFT JOIN возвращает все левые строки плюс совпадения справа; при отсутствии совпадения столбцы будут null.
  • RIGHT JOIN, зеркало: все правые строки независимо от совпадения слева.
  • LEFT JOIN используется чаще всего, например все пользователи, включая тех, у кого пока нет заказов.

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

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

  • 21

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

    secretsconfig
  • 22

    Что такое Docker и почему он полезен для бэкенд-разработки?

    docker
  • 23

    Что такое Dockerfile и что он содержит?

    docker
  • 24

    В чём разница между Docker-образом и контейнером?

    dockercontainers
  • 25

    Что такое рабочий процесс с feature-ветками в Git и как он работает?

    git
  • 26

    Что такое pull request и какова его цель помимо слияния кода?

    code-review
  • 27

    Как написать юнит-тест? Что должен проверять один тест?

    unit
  • 28

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

    unitintegratione2e
  • 29

    Что такое внедрение зависимостей (dependency injection) и почему оно полезно?

    injectiondependencies
  • 30

    Что такое ORM и каковы его компромиссы?

    orm
  • 31

    Как защитить API-эндпоинт, доступный только авторизованным пользователям?

    endpoints
  • 32

    Что такое SQL-инъекция и как её предотвратить?

    sqlinjection
  • 33

    Что такое XSS и касается ли это бэкенд-кода?

    xss
  • 34

    Что такое rate limiter и зачем добавлять его к API?

    rate-limiting
  • 35

    Как последовательно обрабатывать ошибки в REST API?

    restsoft-skills
  • 36

    Что такое пагинация и почему она необходима для эндпоинтов со списками?

    endpointspagination
  • 37

    В чём разница между синхронным и асинхронным кодом в Node.js?

    async
  • 38

    Что такое цикл событий (event loop) в Node.js?

    event-loop
  • 39

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

    asyncpromisescallbacks
  • 40

    Как правильно обрабатывать отклонённые Promises и ошибки при async/await?

    asyncpromises
  • 41

    Как спроектировать базовый процесс регистрации и входа пользователей?

    design
  • 42

    Почему для хранения паролей используется bcrypt, а не MD5 или SHA-256?

    passwords
  • 43

    Что такое refresh-токен и чем он отличается от access-токена?

    tokens
  • 44

    Что такое версионирование API и как его реализовать?

    versioning
  • 45

    В чём разница между горизонтальным и вертикальным масштабированием?

    scaling
  • 46

    Что такое очередь сообщений (message queue) и когда её стоит использовать?

    queues
  • 47

    Что такое пул соединений (connection pooling) в базах данных?

    databasepooling
  • 48

    В чём разница между жадной загрузкой (eager loading) и ленивой загрузкой (lazy loading) в ORM?

    ormlazy-loading
  • 49

    Что такое составной индекс (composite index) в SQL и когда он полезен?

    sqlindexes
  • 50

    Как отлаживать медленный запрос к базе данных?

    databasequeries
  • 51

    В чём разница между WHERE и HAVING в SQL?

    sql
  • 52

    Когда использовать подзапрос, а когда JOIN?

    joins
  • 53

    Что такое HTTP-заголовки? Назовите три важных для бэкенд-API.

    http
  • 54

    Что такое webhook и чем он отличается от polling?

    webhooks
  • 55

    Как именовать эндпоинты REST API?

    restendpoints
  • 56

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

    microservicesmonolith
  • 57

    Что такое CI/CD пайплайн и что он автоматизирует?

    ci-cd
  • 58

    Что такое GitHub Actions и как вы использовали его в проекте?

    ci-cd
  • 59

    Что такое линтинг и почему он важен в бэкенд-проекте?

    linting
  • 60

    На что вы обращаете внимание при ревью pull request коллеги?

    code-review
  • 61

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

  • 62

    Что следует логировать в бэкенд-сервисе и на каких уровнях логирования?

    logging
  • 63

    Что такое эндпоинт проверки состояния (health check) и почему он полезен?

    health-checksendpoints
  • 64

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

    load-balancing
  • 65

    Что может вызывать ошибку 502 Bad Gateway и как её отладить?

    gateway
  • 66

    В чём разница между файлом .env и файлами конфигурации приложения?

    config
  • 67

    Что такое паттерн singleton и где он встречается в бэкенд-коде?

    design
  • 68

    Что такое мемоизация и чем она отличается от общего кэширования?

    cachingmemoization
  • 69

    Что такое хэш-таблица и почему поиск в ней в среднем O(1)?

    data-structures
  • 70

    Что такое рекурсия и когда предпочтительнее итеративный подход?

    recursioniteration
  • 71

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

    algorithms
  • 72

    Что вызывает ошибку переполнения стека (stack overflow) в бэкенд-процессе?

    memoryconcurrency
  • 73

    Что такое сборка мусора (garbage collection) и почему она важна для производительности бэкенда?

    gc
  • 74

    Что такое сериализация и десериализация в контексте бэкенд-API?

    serializationapi
  • 75

    В чём разница между TCP и UDP и какой из них использует HTTP?

    http
  • 76

    Что такое DNS-запрос и как он вписывается в жизненный цикл HTTP-запроса?

    http
  • 77

    Что такое CDN и применим ли он к бэкенд-API?

    api
  • 78

    Что такое Postman и как вы используете его в разработке API?

    api
  • 79

    Как документировать API для других разработчиков?

    api
  • 80

    Что такое спецификация OpenAPI (Swagger)?

    openapi
  • 81

    Что такое gRPC и как он сравнивается с REST для внутренних сервисов?

    restgrpc
  • 82

    В чём разница между аутентификацией на основе сессий и JWT-аутентификацией?

    authjwtsessions
  • 83

    Как добавить столбец NOT NULL в большую production-таблицу без простоя?

    schema
  • 84

    Что такое мягкое удаление (soft delete) и когда его использовать?

    soft-delete
  • 85

    Как обрабатывать загрузку файлов в бэкенд-API?

    soft-skillsapi
  • 86

    Что такое фоновое задание (background job) и как запланировать его?

    jobs
  • 87

    Как реализовать постраничную навигацию на основе смещения в SQL-запросе?

    sqlqueriespagination
  • 88

    Что такое взаимоблокировка (deadlock) в базе данных и как её избежать?

    databaselocking
  • 89

    В чём разница между сканированием индекса и полным сканированием таблицы?

    indexes
  • 90

    Что такое схема в реляционной базе данных?

    databaseschema
  • 91

    Расскажите о проекте, в котором вам пришлось освоить что-то новое для его завершения.

    story
  • 92

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

    prioritization
  • 93

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

  • 94

    Как вы подходите к чтению и пониманию незнакомой кодовой базы?

    learning
  • 95

    Как вы сообщаете о техническом блокере команде или менеджеру?

    communication
  • 96

    Что вы делаете, когда ревью кода предполагает серьёзные изменения вашей работы?

    code-review
  • 97

    Как вы следите за тенденциями и лучшими практиками в бэкенд-разработке?

    learning
  • 98

    Опишите, как вы онбордитесь на новый бэкенд-проект в первую неделю.

    onboarding
  • 99

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

    soft-skillstech-debt
  • 100

    Где вы хотите расти как бэкенд-разработчик в ближайший год?

    growth