100 вопросов backend-разработчику на собеседовании: где обычно сыпятся даже опытные кандидаты

2286
100 вопросов backend-разработчику на собеседовании: где обычно сыпятся даже опытные кандидаты

Backend-собеседование проверяет не набор модных слов, а способность видеть систему целиком. Запрос проходит через сеть, балансировщик, API, бизнес-логику, базу данных, кеш, очередь, логи, метрики и внешние сервисы. На каждом участке может возникнуть задержка, дубль, гонка, потеря данных, утечка токена или конфликт транзакций.

100 вопросов backend-разработчику на собеседовании

Вопросы с подвохом обычно звучат просто. «Добавим индекс?» «Поставим Redis?» «Повторим запрос?» «Вынесем в микросервис?» В продакшене такие ответы без оговорок часто ломают систему. Хороший backend-разработчик объясняет не только решение, но и цену решения, границы применимости и способ проверки.

Ниже - 100 вопросов с краткими ответами, разбитых на 5 уровней по 20 штук. Первый уровень проверяет базу HTTP и API, второй - SQL и транзакции, третий - кеши, очереди и распределенные сценарии, четвертый - безопасность и эксплуатацию, пятый - вопросы с подвохом для проверки инженерного мышления.

Уровень 1. HTTP, API и базовая логика backend

  1. Что происходит после запроса пользователя к backend-сервису?

    Запрос проходит DNS, TLS, балансировщик, маршрутизацию, авторизацию, бизнес-логику, базу, кеш, логи, метрики и ответ клиенту. Слабый ответ начинается сразу с контроллера и забывает сеть.

  2. Чем backend отличается от API?

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

  3. Что такое endpoint?

    Endpoint - конкретная точка API, обычно сочетание URL, HTTP-метода и контракта запроса. Один путь может иметь разные операции для GET, POST, PUT или DELETE.

  4. Чем GET отличается от POST?

    GET используют для чтения и не должен менять бизнес-состояние. POST часто создает ресурс или запускает действие, поэтому повтор POST может быть опасен.

  5. Чем PUT отличается от PATCH?

    PUT обычно заменяет ресурс целиком. PATCH меняет часть полей. В реальном API смысл должен быть явно описан контрактом.

  6. Что такое идемпотентность?

    Идемпотентная операция при повторе дает тот же бизнес-результат. Идемпотентность нужна для платежей, заказов, вебхуков, ретраев и фоновых задач.

  7. Почему POST не считают идемпотентным по умолчанию?

    Повтор POST может создать второй заказ, второе письмо или второе списание. Конкретный POST можно сделать идемпотентным через ключ операции и сохранение результата.

  8. Когда возвращать 400?

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

  9. Чем 401 отличается от 403?

    401 означает, что пользователь не прошел аутентификацию. 403 означает, что пользователь известен, но права на действие отсутствуют.

  10. Когда лучше вернуть 404 вместо 403?

    404 уместен, если API не должен раскрывать существование чужого приватного ресурса. Такой подход снижает риск перебора идентификаторов.

  11. Что означает 409?

    409 показывает конфликт состояния. Например, заказ уже отправлен, а пользователь пытается отменить его как новый.

  12. Когда использовать 422?

    422 часто используют для бизнес-валидации корректно сформированного запроса. Например, JSON валиден, но промокод истек или лимит уже исчерпан.

  13. Когда нужен 429?

    429 показывает превышение лимита запросов. Такой ответ полезен при rate limiting, защите от злоупотреблений и управлении нагрузкой.

  14. Чем 502, 503 и 504 отличаются?

    502 часто связан с плохим ответом от upstream. 503 говорит о временной недоступности. 504 обычно указывает на таймаут шлюза или прокси.

  15. Что такое REST?

    REST - архитектурный стиль вокруг ресурсов, стандартных методов и представлений. В большинстве проектов встречается REST-подобный API, а не строгий REST.

  16. Чем REST отличается от RPC?

    REST строится вокруг ресурсов и операций над ними. RPC строится вокруг вызова действий вроде createOrder или cancelPayment.

  17. Зачем API нужна схема ответа?

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

  18. Как версионировать API?

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

  19. Что такое backward compatibility?

    Новая версия сервера продолжает работать со старыми клиентами. Опасны переименования полей, смена типов и новые обязательные параметры.

  20. Что должен содержать хороший ответ об ошибке API?

    Ответ должен дать машинный код ошибки, понятное сообщение, безопасные детали для клиента и идентификатор для поиска в логах. Stack trace наружу отдавать нельзя.

Уровень 2. SQL, индексы и транзакции

  1. Что такое N плюс 1 запрос?

    Приложение получает список одним запросом, а потом отдельно тянет связанные данные для каждой строки. На продакшен-объеме база получает сотни лишних запросов.

  2. Индекс всегда ускоряет запрос?

    Нет. Индекс помогает только при подходящем запросе и хорошей селективности. Индекс замедляет запись, занимает место и может не попасть в план.

  3. Почему база может не использовать индекс?

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

  4. Как работает составной индекс?

    Составной индекс лучше всего работает по левой части. Индекс по user_id и created_at полезен для заказов пользователя с сортировкой по времени.

  5. Что показывает EXPLAIN?

    EXPLAIN показывает план выполнения запроса. По плану видно, использует ли база индекс, сколько строк читает и где тратит время.

  6. Почему EXPLAIN ANALYZE полезнее простого EXPLAIN?

    EXPLAIN строит прогноз. EXPLAIN ANALYZE реально выполняет запрос и показывает фактическое время, строки и расхождение с оценкой.

  7. Что такое транзакция?

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

  8. Что означает ACID?

    ACID описывает атомарность, согласованность, изоляцию и долговечность. На интервью важнее объяснить реальные гонки и сбои, чем просто расшифровать аббревиатуру.

  9. Что такое dirty read?

    Одна транзакция читает данные другой транзакции, которая еще не зафиксировалась. Если вторая транзакция откатится, первая работала с несуществующим состоянием.

  10. Что такое non-repeatable read?

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

  11. Что такое phantom read?

    Повторный запрос в той же транзакции видит новый набор строк. Проблема важна для правил, которые зависят от диапазона данных.

  12. Почему уровни изоляции надо проверять по конкретной СУБД?

    Названия уровней одинаковые, но детали отличаются. Например, одна база может не показывать фантомы там, где стандарт допускает такое поведение.

  13. Как защитить баланс от двойного списания?

    Нужна атомарная операция или транзакция с корректной блокировкой. Хороший вариант проверяет условие прямо в UPDATE и смотрит число измененных строк.

  14. Когда нужен SELECT FOR UPDATE?

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

  15. Почему SELECT FOR UPDATE не всегда спасает?

    Блокировка существующих строк не защищает правило, где проблема возникает из-за новой строки в диапазоне. Нужны ограничения, другой уровень изоляции или отдельная модель блокировок.

  16. Что такое deadlock?

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

  17. Optimistic locking или pessimistic locking?

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

  18. Как менять схему базы без простоя?

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

  19. Почему нельзя просто удалить старую колонку?

    Старую схему могут читать фоновые задачи, отчеты или часть приложений при rolling deploy. Удаление без проверки превращается в мину с задержкой.

  20. SQL или NoSQL?

    SQL хорош для связей, транзакций и сложных запросов. NoSQL выбирают под конкретную модель данных, а не просто «для масштаба».

Уровень 3. Кеши, очереди и распределенные сценарии

  1. Что такое eventual consistency?

    Система не обещает мгновенно одинаковое состояние во всех узлах, но со временем приходит к согласованности.

  2. Где eventual consistency подходит?

    Подход часто подходит для лайков, счетчиков, уведомлений и аналитики. Для денег, лимитов и бронирований нужна более строгая модель.

  3. Как работает cache-aside?

    Приложение сначала читает кеш. При промахе идет в базу, кладет результат в кеш и возвращает ответ.

  4. Почему инвалидация кеша сложная?

    База уже изменилась, а кеш может отдавать старое значение. Иногда поток случайно возвращает устаревшую версию обратно в кеш.

  5. Что такое TTL?

    TTL задает срок жизни ключа в кеше. Слишком короткий TTL перегружает базу, слишком длинный TTL держит устаревшие данные.

  6. Что такое cache stampede?

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

  7. Как защититься от cache stampede?

    Помогают блокировка на ключ, объединение одинаковых запросов, случайный разброс TTL и раннее обновление популярных ключей.

  8. Когда Redis не стоит делать единственным источником истины?

    Когда нужны сложные запросы, дешевые большие объемы, строгая долговечность и привычная транзакционная модель. Persistence снижает риск, но не отменяет trade-off.

  9. Зачем нужны очереди?

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

  10. Почему очередь не делает систему надежной автоматически?

    Нужны идемпотентность, дедупликация, мониторинг лага, повторная обработка, DLQ и понятная политика ошибок.

  11. Что такое DLQ?

    Dead letter queue хранит сообщения, которые не удалось обработать после заданного числа попыток. Потом инженер разбирает причину отдельно.

  12. Что делать, если обработчик выполнил задачу дважды?

    Дубли надо считать нормой распределенной системы. Помогают уникальные ключи операций, таблица обработанных сообщений и проверка состояния.

  13. Exactly once существует?

    В некоторых системах есть exactly-once semantics внутри их модели. Но внешний бизнес-эффект требует идемпотентности, дедупликации и контроля частичного успеха.

  14. Что такое outbox pattern?

    Приложение в одной транзакции пишет бизнес-данные и событие в outbox-таблицу. Отдельный процесс отправляет событие в брокер.

  15. Какую проблему решает outbox?

    Outbox закрывает дыру, когда запись в базу прошла, а сообщение в брокер потерялось из-за сбоя между двумя операциями.

  16. REST или gRPC?

    REST проще для внешних API и ручной отладки. gRPC удобен для внутренних сервисов, строгих контрактов, стриминга и низкой задержки.

  17. Зачем нужен contract testing?

    Контрактные тесты проверяют, что сервисы одинаково понимают формат запроса и ответа. Особенно полезны при независимых релизах команд.

  18. Что такое retry?

    Retry повторяет операцию после сбоя. Без идемпотентности и ограничений повтор может создать дубль или усилить аварию.

  19. Что такое exponential backoff?

    Каждая следующая попытка ждет дольше предыдущей. Такой подход снижает давление на зависимость, которая уже деградирует.

  20. Зачем нужен jitter?

    Jitter добавляет случайный разброс к задержке ретраев. Без разброса клиенты могут повторять запросы волнами и снова перегружать сервис.

Уровень 4. Безопасность, наблюдаемость и эксплуатация

Вопросы про SQL injection, CSRF, JWT, SSRF, логи и авторизацию предназначены для легальной и ответственной разработки. Такие знания нельзя применять для несанкционированного доступа, слежки, взлома, нарушения правил сервисов или незаконного обхода ограничений. При работе с безопасностью нужно соблюдать законы своей страны, особенно России.

  1. Как проектировать авторизацию?

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

  2. Где должна жить проверка прав?

    Проверка прав должна быть рядом с бизнес-операцией, а не только на уровне маршрута. Иначе появляется риск обхода через другой путь.

  3. Что такое IDOR?

    IDOR возникает, когда пользователь меняет идентификатор ресурса и получает доступ к чужим данным из-за слабой проверки прав.

  4. Как хранить пароли?

    Пароли хранят через специализированные медленные схемы хеширования с солью и корректными параметрами. На практике используют Argon2id, scrypt, bcrypt или PBKDF2 по требованиям.

  5. Почему SHA-256 не подходит для паролей?

    SHA-256 слишком быстрый для паролей. Атакующий сможет перебирать варианты быстрее, чем при использовании адаптивного password hashing.

  6. Чем опасно небрежное использование JWT?

    Риски связаны с долгим сроком жизни, сложным отзывом, небезопасным хранением, лишними claims и ошибками проверки подписи.

  7. Как снизить риски JWT?

    Используют короткий access token, контролируемый refresh token, проверку подписи, минимальный набор claims и безопасное хранение.

  8. Что такое CSRF?

    CSRF заставляет браузер авторизованного пользователя выполнить нежелательный запрос. Риск особенно заметен при cookie-based auth.

  9. Как защищаться от CSRF?

    Помогают SameSite cookies, CSRF-токены, привязка токена к сессии и проверка Origin или Referer для чувствительных операций.

  10. Что такое SQL injection?

    SQL injection возникает, когда пользовательский ввод попадает в SQL как часть команды. Защита строится на параметризованных запросах и минимальных правах.

  11. Что такое SSRF?

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

  12. Почему логирование может стать уязвимостью?

    В логи легко попадают токены, пароли, персональные данные и содержимое документов. Нужны маскирование, контроль доступа и срок хранения.

  13. Какие метрики нужны backend-сервису?

    Минимум включает latency, traffic, errors, saturation, RPS, p95 и p99 задержки, размер очереди, лаг обработчиков и ошибки зависимостей.

  14. Почему средней задержки мало?

    Среднее значение скрывает боль части пользователей. p95 и p99 лучше показывают хвост задержек.

  15. Чем лог отличается от метрики?

    Лог описывает конкретное событие. Метрика показывает численное состояние системы во времени.

  16. Зачем нужна трассировка?

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

  17. Почему высокая кардинальность метрик опасна?

    Метки вроде user_id или request_id резко увеличивают число временных рядов. Система мониторинга становится дорогой и медленной.

  18. Почему timeout по умолчанию опасен?

    Без таймаута поток или соединение может зависнуть надолго. Слишком большой таймаут забивает пул, слишком маленький режет нормальные ответы.

  19. Как работает circuit breaker?

    После серии ошибок circuit breaker временно перестает ходить в проблемный сервис. Через паузу пропускает пробные запросы.

  20. Что такое backpressure?

    Система явно замедляет прием новой работы, когда обработчики, база или очередь не успевают. Без backpressure сервис падает тяжелее.

Уровень 5. Подвохи, архитектура и продакшен-мышление

  1. Добавим Redis и все ускорим?

    Не обязательно. Без стратегии TTL, инвалидации, промахов и устаревших данных Redis может добавить баги быстрее, чем скорость.

  2. Добавим индекс и запрос станет быстрым?

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

  3. Вынесем в микросервис и станет проще?

    Микросервис добавляет сеть, ретраи, версионирование, трассировку и согласованность данных. Плохой дизайн микросервисы не лечат.

  4. Монолит всегда хуже микросервисов?

    Нет. Монолит проще запускать, тестировать и менять на старте. Микросервисы полезны при зрелых границах доменов и команд.

  5. Как выделить сервис из монолита?

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

  6. Почему общая база у микросервисов опасна?

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

  7. Можно ли просто повторить неудачный запрос?

    Только если операция безопасна для повтора. Нужны идемпотентность, лимиты, backoff, jitter и понимание частичного успеха.

  8. Что такое частичный успех?

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

  9. Почему внешний сервис нельзя вызывать внутри долгой транзакции?

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

  10. Почему локально быстро, а в продакшене медленно?

    На продакшене другие объемы данных, сеть, конкуренция, пулы соединений, индексы, холодные кеши и внешние зависимости.

  11. Почему тесты прошли, а релиз сломался?

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

  12. Чем health check отличается от readiness check?

    Health check показывает, жив ли процесс. Readiness check показывает, готов ли сервис принимать трафик.

  13. Почему canary-релиз снижает риск?

    Новая версия получает малую долю трафика. Команда видит ошибки и задержки до полного раската.

  14. Что такое blue-green deploy?

    Две среды работают параллельно. Трафик переключают на новую среду, а при проблеме быстро возвращают назад.

  15. Чем опасны feature flags?

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

  16. Почему rollback не всегда прост?

    Если новая версия изменила схему данных несовместимо, старая версия может не запуститься. Поэтому миграции должны быть обратимо совместимыми.

  17. Почему Kubernetes не решает проблемы приложения?

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

  18. Как расследовать деградацию API?

    Сначала смотрят метрики, ошибки, p95 и p99. Затем проверяют трассировки, логи, базу, кеш, очереди и внешние зависимости.

  19. Что должно быть в хорошей postmortem?

    Нужны таймлайн, причина, вклад технических и процессных факторов, ущерб, действия для предотвращения повтора и владельцы задач.

  20. Как отличить сильного backend-разработчика на собеседовании?

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

Как отвечать на backend-собеседовании

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

Перед собеседованием полезно освежить базовые проверки. Команды не заменяют мышление, но быстро показывают, понимает ли кандидат, где искать проблему.

curl -i https://api.example.com/orders/123
 
 EXPLAIN ANALYZE
 SELECT *
 FROM orders
 WHERE user_id = 42
 ORDER BY created_at DESC, id DESC
 LIMIT 20;
 
 wrk -t4 -c100 -d30s https://api.example.com/orders/123

Первая команда показывает контракт API и заголовки. Вторая показывает реальный план SQL-запроса. Третья вскрывает поведение сервиса под параллельной нагрузкой. На собеседовании не всегда просят запускать команды, но кандидат должен понимать, какую проверку выбрал бы в реальной системе.

Красные флаги в ответах

Фраза кандидата Что не так
Redis все решит Нет разговора про TTL, инвалидацию, промахи кеша, persistence и устаревшие данные
Добавим индекс Нет плана запроса, селективности, цены записи и проверки на реальных данных
Сделаем микросервисы Нет границ домена, владельца данных, трассировки и стратегии деплоя
Просто повторим запрос Нет идемпотентности, дедупликации, backoff, jitter и понимания частичного успеха
JWT решает авторизацию Смешаны аутентификация, авторизация, отзыв токенов и хранение секретов

Что повторить перед собеседованием

  • HTTP-методы, коды ответа, кеширование, идемпотентность, rate limiting и версионирование API.
  • SQL, индексы, транзакции, уровни изоляции, блокировки и планы запросов.
  • Redis, cache-aside, TTL, инвалидацию, cache stampede, stale data и persistence.
  • Очереди, ретраи, DLQ, outbox pattern, дедупликацию и лаг обработчика.
  • Пароли, JWT, CSRF, SQL injection, SSRF, IDOR и безопасное логирование.
  • Метрики, логи, трассировки, алерты, health checks, readiness checks и SLO.
  • Монолит, микросервисы, backpressure, circuit breaker, canary, rollback и postmortem.

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

Backend-разработчика нанимают не за способность произнести Kafka, Redis и Kubernetes в одном предложении. Нужен инженер, который понимает цену каждого решения, видит отказ до релиза и может проверить работу системы. На собеседовании выигрывает не самый громкий ответ, а самый проверяемый.

Alt text
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.
01001
SOC
Security Vision SIEM
ЭКСПЕРТИЗА И АНАЛИТИЧЕСКИЕ ИНСТРУМЕНТЫ SOC — В ЕДИНОМ КОНТУРЕ.
ОТ КОНТРОЛЯ ДАННЫХ И ВЫЯВЛЕНИЯ АТАК ДО РАССЛЕДОВАНИЯ И РЕАГИРОВАНИЯ.
УЗНАТЬ БОЛЬШЕ
18+. Реклама. Рекламодатель ООО «Интеллектуальная безопасность», ИНН 7719435412

Гиганяшка

Технологии без шума вентиляторов и сухих спецификаций.