Открытая база вопросов

Вопросы на собеседовании программиста с ответами

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

  • 10 вопросов с разбором
  • Пример, частая ошибка и уточнение к каждому
  • Без регистрации

Направления

Выберите направление подготовки

Общие вопросы

Примеры вопросов и хороших ответов

Редакция Get Offer · Материал подготовлен . Примеры учебные; контекст конкретной системы может менять выбор решения.

Сложность алгоритмов

Что означает O(n)?

Оценка показывает, как растёт потребность алгоритма в ресурсе при увеличении размера входа. O(n) задаёт асимптотическую верхнюю границу линейного порядка и не сообщает точное время в миллисекундах. Уточняйте, о времени или памяти идёт речь, а также обсуждаете ли вы худший, средний или амортизированный случай. Сравнивайте алгоритмы на одинаковом контракте: например, поиск по одному запросу и подготовка индекса для многих запросов имеют разную общую стоимость.

Пример
Один проход по списку длины n обычно требует O(n) операций; дополнительный список результатов может потребовать O(n) памяти.
Частая ошибка
Игнорировать стоимость вложенной операции внутри внешне одного цикла.
Уточнение интервьюера
Когда алгоритм с лучшей асимптотикой проиграет на маленьких входах?
HTTP

Что происходит при HTTP-запросе?

Клиент отправляет метод, адрес, заголовки и при необходимости тело. Сервер обрабатывает запрос и возвращает статус, заголовки и тело ответа. Между ними могут находиться прокси, кеши и балансировщики, поэтому наблюдение на одном участке не всегда описывает весь путь. При диагностике разделяйте установление соединения, доставку запроса, обработку и отображение результата. Успешный HTTP-код сам по себе не доказывает нужный бизнес-эффект.

Пример
Ответ 202 может означать принятие фоновой задачи, которая завершится позже.
Частая ошибка
Считать любой HTTP 200 подтверждением окончательного сохранения данных.
Уточнение интервьюера
Как отличить таймаут соединения от таймаута ожидания ответа?
API

Что входит в контракт API?

Контракт включает допустимые операции, входные данные, ответы, ошибки, авторизацию и значимые свойства поведения. Для изменяющей операции важны повторы и идемпотентность; для списка — порядок, фильтры и пагинация. Совместимость определяется потребителями, поэтому изменение смысла поля может быть опаснее добавления нового необязательного поля. Хороший контракт позволяет независимо реализовать клиента и проверить сервер на воспроизводимых примерах.

Пример
Повтор создания заказа с одним idempotency key должен иметь заранее описанный результат.
Частая ошибка
Считать контрактом только пример успешного JSON.
Уточнение интервьюера
Как изменить API без поломки старого desktop-клиента?
SQL

Зачем нужен LEFT JOIN?

LEFT JOIN сохраняет все строки левой стороны и добавляет совпадения справа. Если совпадения нет, правые поля получают NULL. Это позволяет показать объекты без связанных записей, например пользователей без заказов. После соединения дополнительные фильтры могут убрать такие строки, поэтому размещение условия в ON или WHERE имеет значение. Соединение один-ко-многим увеличивает число строк и требует внимательной агрегации.

Пример
Для количества заказов каждого пользователя используют LEFT JOIN и COUNT(order.id).
Частая ошибка
Фильтровать правую таблицу в WHERE и случайно исключить пользователей без заказов.
Уточнение интервьюера
Как найти только строки, для которых совпадение справа отсутствует?
Базы данных

Что объединяет транзакция?

Транзакция объединяет операции базы в согласованное изменение: либо фиксируется результат, либо выполняется откат. При этом уровень изоляции влияет на наблюдение конкурентных изменений. Транзакция одной базы не распространяется автоматически на внешний HTTP-сервис, отправку письма или другую базу. Для таких границ нужны дополнительные протоколы и обработка неопределённого результата. Важно определить сам бизнес-инвариант, который должен сохраняться.

Пример
Списание с одного счёта и зачисление на другой выполняются в одной транзакции базы.
Частая ошибка
Считать, что rollback базы отменит уже отправленный внешний платёж.
Уточнение интервьюера
Как связать изменение записи и отправку события без их рассогласования?
Базы данных

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

Индекс — дополнительная структура, позволяющая находить нужные строки без полного просмотра таблицы для подходящих запросов. При вставке, изменении и удалении базовая таблица и индекс должны оставаться согласованными. Польза зависит от условия, сортировки, распределения данных и плана выполнения. Наличие индекса не гарантирует, что оптимизатор выберет его. Чрезмерное число индексов увеличивает объём хранения и стоимость изменения данных.

Пример
Индекс по user_id может помочь частому поиску заказов пользователя, но его пользу проверяют планом запроса.
Частая ошибка
Создавать индекс на каждое поле без измерения нагрузки.
Уточнение интервьюера
Как порядок колонок влияет на составной индекс?
Конкурентность

Чем конкурентность отличается от параллелизма?

Конкурентность означает работу с несколькими задачами, чьи периоды выполнения перекрываются. Параллелизм означает фактическое одновременное выполнение. Один поток с циклом событий может конкурентно обслуживать I/O, чередуя задачи во время ожидания. Для одновременных вычислений нужны соответствующие ресурсы и поддержка среды. В обоих случаях остаются вопросы владения состоянием, ограничения нагрузки и корректного завершения задач.

Пример
Пока один запрос ждёт сеть, цикл событий обрабатывает другой; это не обязательно два одновременно выполняющихся CPU-вычисления.
Частая ошибка
Считать async синонимом отдельного потока.
Уточнение интервьюера
Какие задачи выигрывают от перекрытия ожидания?
Тестирование

Что доказывает успешный тест?

Тест подтверждает конкретное наблюдаемое поведение на выбранных входах и в определённом окружении. Он не доказывает отсутствие всех дефектов. Сила набора зависит от того, покрывает ли он важные правила, границы, отказы и вероятные ошибки реализации. Проверки разных уровней дополняют друг друга: функция, интеграция и пользовательский сценарий имеют разные границы. Результат нужно связывать с версией и условиями запуска.

Пример
Unit-тест расчёта цены не подтверждает правильную передачу суммы платёжному провайдеру.
Частая ошибка
Заменять конкретный результат формулировкой «всё проверено».
Уточнение интервьюера
Как определить, какой интеграционный риск не покрыт unit-тестами?
Надёжность

Когда запрос можно безопасно повторить?

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

Пример
После таймаута оплаты сначала проверяют статус операции по её идентификатору.
Частая ошибка
Повторять любой POST сразу после сетевой ошибки.
Уточнение интервьюера
Как клиент должен сообщить пользователю неопределённый результат?
Архитектура

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

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

Пример
Публичную статью можно кешировать отдельно от личного профиля; снятие статьи с публикации должно обновить и список.
Частая ошибка
Использовать один URL как ключ для ответов разных пользователей.
Уточнение интервьюера
Как избежать одновременного пересчёта одного дорогого значения?