сеньорчикОткрыть в Telegram
← все вопросывопросы для собеседований · Docker и Kubernetes

Вопросы по Docker и Kubernetes на собеседовании

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

120 вопросов в банке·10 подтем·ниже разбор 9

Из чего состоит тема

Так тема разложена в тренажёре: движок ведёт прогресс по каждой подтеме отдельно и возвращает те, где вы ошибаетесь.

Разборы подтем

Конспект по каждой: что это, как отвечать вслух, на чём валятся, плюс вопросы для самопроверки.

Примеры вопросов с разбором

  1. #app_servers1 / 9
    Зачем перед Python-приложением ставят gunicorn или uvicorn, а не dev-сервер?
    A)Прод-сервер держит нагрузку: воркеры, устойчивость, перезапуск
    B)Только чтобы приложение могло отдавать статические файлы клиентам
    C)Без них Python-приложение вообще не умеет принимать HTTP-запросы
    D)Прод-серверы автоматически шифруют весь трафик до приложения
    показать ответ и разбор
    +A)Прод-сервер держит нагрузку: воркеры, устойчивость, перезапуск

    // разбор: Dev-серверы (flask run, uvicorn --reload) рассчитаны на отладку, а не нагрузку. Прод-серверы (gunicorn для WSGI, uvicorn для ASGI) держат пул воркеров, переживают падение воркера, дают graceful reload и конкурентность. Их ставят за реверс-прокси (nginx), который занимается TLS и статикой.

  2. #caching_layers2 / 9
    Зачем перед базой ставят кэш (например Redis)?
    A)Чтобы полностью заменить базу данных и отказаться от неё совсем
    B)Снять нагрузку с БД и ускорить частые повторные чтения
    C)Чтобы обеспечить сохранность данных при падении базы данных
    D)Чтобы автоматически валидировать данные перед записью в базу
    показать ответ и разбор
    +B)Снять нагрузку с БД и ускорить частые повторные чтения

    // разбор: Кэш держит результат дорогого чтения (запрос к БД, вызов API, тяжёлый расчёт) в быстрой памяти, отдавая его повторным запросам без обращения к источнику. Это снижает задержку и нагрузку на БД. Но источник правды остаётся в БД: кэш летуч и может устаревать, что и порождает вопрос инвалидации.

  3. #config_12factor3 / 9
    Где по подходу 12-factor держать конфигурацию приложения (URL БД, ключи)?
    A)Прямо в коде константами — так их удобнее видеть при чтении файла
    B)В самом Docker-образе, зафиксированным на этапе его сборки
    C)В отдельной ветке git на каждую среду с зашитыми значениями
    D)В переменных окружения, отдельно от кода
    показать ответ и разбор
    +D)В переменных окружения, отдельно от кода

    // разбор: 12-factor: конфиг, различающийся между средами (адреса БД, ключи, флаги), хранят в переменных окружения, а не в коде или в VCS. Это отделяет код от среды: один и тот же артефакт запускается на dev/stage/prod, отличаясь лишь набором переменных. Хардкод и «ветка на среду» — антипаттерны.

  4. #docker_pyapp4 / 9
    Зачем упаковывать Python-сервис в Docker-образ?
    A)Только ради того, чтобы скрыть исходный код от чужих глаз навсегда
    B)Воспроизводимое окружение: одинаково у всех и на проде
    C)Docker сам по себе ускоряет исполнение Python-кода внутри контейнера
    D)Чтобы приложение могло работать вообще без установленного Python
    показать ответ и разбор
    +B)Воспроизводимое окружение: одинаково у всех и на проде

    // разбор: Образ фиксирует код, зависимости, версию Python и системные библиотеки в одном артефакте — он одинаково запускается на ноутбуке разработчика, в CI и на проде. Это лечит «у меня работало»: окружение перестаёт быть переменной. Ускорения исполнения контейнеризация не даёт.

  5. #kubernetes_basics5 / 9
    Что такое под (Pod) в Kubernetes с точки зрения разработчика Python-сервиса?
    A)Минимальная единица запуска: один-два контейнера с общей сетью
    B)Это виртуальная машина с собственной ОС под каждый экземпляр приложения
    C)Синоним Docker-образа: собранный артефакт сервиса, лежащий в реестре
    D)Постоянный сетевой адрес сервиса, по которому его находят остальные приложения кластера
    показать ответ и разбор
    +A)Минимальная единица запуска: один-два контейнера с общей сетью

    // разбор: Под — наименьшая деплой-единица k8s: обычно один контейнер приложения (иногда + сайдкар) с общим сетевым namespace и IP. Поды эфемерны: их создают и убивают, IP меняется — поэтому к ним не ходят напрямую, а через Service.

  6. #messaging_kafka6 / 9
    Чем брокер событий Kafka отличается от обычной очереди задач?
    A)Это устойчивый лог: события хранятся, читаются по offset, перечитываются
    B)Kafka исполняет обработчики сама, потребителям код писать не нужно
    C)Ничем: Kafka — просто другое название для очереди задач Celery
    D)Kafka удаляет сообщение сразу после первого прочтения потребителем
    показать ответ и разбор
    +A)Это устойчивый лог: события хранятся, читаются по offset, перечитываются

    // разбор: Очередь задач раздаёт работу воркерам (сообщение обычно исчезает после обработки). Kafka — устойчивый упорядоченный лог событий: записи хранятся по времени/размеру, каждый потребитель читает со своей позиции (offset) и может перечитать историю. Одно событие потребляют независимо несколько групп — это про потоки событий, а не про раздачу задач.

  7. #object_storage_s37 / 9
    Бэкенду нужно хранить загруженные пользователями файлы (аватары, PDF). Почему обычно берут S3-совместимое хранилище, а не кладут в PostgreSQL?
    A)Объектное хранилище дёшево тянет большие блобы и раздачу
    B)Postgres физически не умеет хранить бинарные данные никакого вида
    C)S3 автоматически проверяет содержимое файлов на вирусы перед сохранением
    D)Файлы в S3 индексируются для полнотекстового поиска по их содержимому из коробки
    показать ответ и разбор
    +A)Объектное хранилище дёшево тянет большие блобы и раздачу

    // разбор: Блобы в БД раздувают её размер, бэкапы и кэш, а раздача файлов нагружает коннекты к БД. Объектное хранилище (S3/MinIO) дёшево держит большие объекты и отдаёт их напрямую (в т.ч. через CDN), а в БД остаётся лишь ключ объекта и метаданные.

  8. #observability_cicd8 / 9
    Почему в проде логируют через logging со структурой, а не print?
    A)print в Python вообще не выводит текст при запуске в контейнере
    B)print работает медленнее ровно в силу отсутствия у него буфера
    C)logging шифрует сообщения, а print оставляет их в открытом виде
    D)Уровни, формат и маршрутизация логов — print этого не даёт
    показать ответ и разбор
    +D)Уровни, формат и маршрутизация логов — print этого не даёт

    // разбор: logging даёт уровни (DEBUG/INFO/ERROR), настраиваемый формат (в т.ч. JSON для сбора), хендлеры (stdout, файл, внешние системы) и централизованную конфигурацию — можно приглушить шум и поднять детализацию без правки кода. print — неструктурированный поток без уровней и маршрутизации, который в проде не отфильтровать и не разобрать машиной.

  9. #observability_monitoring9 / 9
    Сервис обрабатывает HTTP-запросы. Метод RED советует следить за тремя показателями — какими?
    A)Rate (запросы/с), Errors (доля ошибок), Duration (задержка)
    B)Reads, Edits, Deletes — три типа операций сервиса с данными
    C)Загрузка CPU, памяти и диска узла — основа дашборда сервиса
    D)Число активных пользователей, сессий и подписок в реальном времени
    показать ответ и разбор
    +A)Rate (запросы/с), Errors (доля ошибок), Duration (задержка)

    // разбор: RED — практичный набор для request-driven сервиса: Rate (сколько запросов в секунду), Errors (какая доля падает), Duration (распределение задержек, смотрят перцентили). Три показателя быстро отвечают «здоров ли сервис по запросам». Для ресурсов узла есть параллельный набор USE (Utilization, Saturation, Errors).

это 9 из 120

Ещё 111 вопросов по теме — в тренажёре, с движком повторения

Прочитать разбор и ответить самому — разные навыки. В Сеньорчике вопросы идут сессиями, а движок возвращает подтемы, где вы ошибаетесь, пока они не начнут отскакивать. Бесплатно, лимит по энергии.

Частые вопросы