RecallDeck
Направление

Подготовка к собеседованию — DevOps-инженер

Колода из 210+ карточек с вопросами для собеседования по направлению «DevOps-инженер» — по темам и уровню сложности, с возвратом ровно перед тем, как вы забудете. Посмотрите несколько карточек ниже, затем войдите, чтобы учить всё направление по расписанию в стиле Anki (SM-2).

210 карточек12 тем

Бесплатно · вход через GitHub · ваш прогресс остаётся с вами.

Что внутри

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

Linux и траблшутинг

11 карточек
Linux и траблшутинг

Сети в эксплуатации

10 карточек
Сети в эксплуатации

Внутренности контейнеров

8 карточек
Внутренности контейнеров

Kubernetes

13 карточек
Kubernetes

CI/CD и GitOps

8 карточек
CI/CD и GitOps

Terraform и Ansible (IaC)

8 карточек
Terraform и Ansible

Наблюдаемость и SRE

11 карточек
Наблюдаемость и SRE

Облако и безопасность

9 карточек
Облако и безопасность

DevOps и инфраструктура

35 карточек
Docker, CI/CD и Linux

Основы CS

33 карточки
Сети

Системный дизайн

29 карточек
Системный дизайн

Поведенческое интервью

35 карточек
Поведенческое интервью

Примеры вопросов

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

free показывает почти ноль свободной памяти. Сервер задыхается без RAM?

Короткий ответ: Почти наверняка нет. Linux сознательно занимает «лишнюю» память под page cache — она отдаётся приложениям мгновенно. Смотреть надо на колонку available, а не free; о реальном дефиците говорят swap-in и major page faults.

Подробно:

Метрика Что означает Тревожиться?
free память, не занятая вообще ничем нет — у здорового сервера близка к нулю
buff/cache page cache: кэш файлов и блоков нет — вытесняется по требованию
available сколько реально можно выдать без свопа да, если стабильно стремится к нулю
  1. Пустая память — потерянная память — ядро кэширует диск, чтобы повторные чтения шли из RAM, а не с устройства.
  2. Реальные признаки дефицита — растущий si в vmstat 1 (swap-in), major page faults, срабатывания OOM-killer в dmesg.
free -h       # смотрим available, не free
vmstat 1 5    # колонки si/so — идёт ли активный своппинг

⚠️ Частая ошибка: «свободной памяти нет — перезагрузим» или сброс кэша через drop_caches. Page cache — это фича: очистка только замедлит систему до повторного прогрева.

L4- vs L7-балансировка: что видит и что умеет каждый уровень?

Короткий ответ: L4-балансировщик видит только IP и порт — раскидывает TCP/UDP-потоки, быстрый и дешёвый, но для него протокол непрозрачен. L7 разбирает HTTP: маршрутизация по пути и заголовкам, ретраи, терминация TLS, sticky-сессии — ценой CPU на парсинг.

Подробно:

L4 L7
Видит IP:порт, SYN метод, путь, заголовки, куки
Маршрутизация round-robin/хэш по потокам /api → один пул, /static → другой
Ретраи и таймауты нет — не знает, где кончается запрос per-request ретраи, circuit breaking
TLS пропускает насквозь (passthrough) терминация, X-Forwarded-For
Цена почти нулевая, миллионы pps парсинг HTTP: CPU и латентность

Примеры: L4 — IPVS, AWS NLB; L7 — nginx, Envoy, AWS ALB. Частый каскад: L4 снаружи → L7 внутри.

⚠️ Частая ошибка: ждать от L4 ретраев и маршрутизации по пути — он не видит HTTP и в принципе не знает, где закончился один запрос и начался следующий.

Что такое контейнер на уровне ядра Linux и какие механизмы его реализуют?

Короткий ответ: Контейнер — это обычный процесс Linux, которому ядро подсунуло изолированный «вид» системы: неймспейсы прячут чужое, cgroups ограничивают ресурсы, слоёная файловая система даёт свой rootfs. Гостевого ядра нет — ядро одно на всех, и в этом настоящая разница с VM.

Подробно:

  1. Namespaces — изоляция видимости: каждый тип прячет свой кусок системы.
  2. cgroups — лимиты CPU, памяти, IO: сколько процессу можно, а не что он видит.
  3. Слоёный rootfs (overlayfs) — собственная файловая система поверх общих read-only слоёв образа.
Неймспейс Что изолирует
pid дерево процессов: внутри свой PID 1
net сетевой стек: интерфейсы, маршруты, свои порты
mnt точки монтирования, свой rootfs
uts hostname и domainname
ipc System V IPC, POSIX-очереди
user маппинг UID/GID: root внутри ≠ root снаружи
cgroup видимую иерархию cgroups

⚠️ Частая ошибка: «контейнер — это лёгкая VM». У VM гипервизор и своё гостевое ядро; контейнер делит ядро хоста — поэтому стартует за миллисекунды, но изоляция слабее: уязвимость ядра пробивает все контейнеры сразу.

Что происходит после kubectl apply -f deployment.yaml? Опишите всю цепочку до работающего пода.

Короткий ответ: kubectl валидирует манифест и отправляет его в API server: authn → RBAC → admission-вебхуки → запись в etcd. На этом синхронная часть заканчивается — дальше контроллеры, scheduler и kubelet асинхронно замечают изменения через watch и приводят кластер к желаемому состоянию. Никто ничего не «пушит».

Подробно:

  1. API server — аутентификация, авторизация (RBAC), admission (mutating → validating вебхуки), объект сохранён в etcd.
  2. Deployment-контроллер — видит новый Deployment (watch) и создаёт ReplicaSet.
  3. ReplicaSet-контроллер — создаёт Pod-объекты, пока без ноды.
  4. Scheduler — находит поды с пустым nodeName, фильтрует и скорит ноды, делает bind.
  5. kubelet — на выбранной ноде видит «свой» под: тянет образы, запускает контейнеры через CRI, сеть поднимает CNI-плагин.
  6. Readiness — проба прошла → под попадает в EndpointSlice и получает трафик.
kubectl ──► API server (authn → RBAC → admission) ──► etcd
              ▲ watch      ▲ watch       ▲ watch      ▲ watch
  deploy-ctrl → RS    rs-ctrl → Pods   scheduler → bind   kubelet → CRI/CNI

⚠️ Частая ошибка: «API server шедулит под и запускает контейнеры». Он только хранит и раздаёт состояние — всю работу делают независимые контроллеры по модели watch/reconcile.

Trunk-based development или GitFlow: какая модель делает возможным continuous deployment и почему?

Короткий ответ: Continuous deployment реален только при trunk-based + фиче-флаги: маленькие батчи, ветки живут часы, main всегда выкатываем. GitFlow с долгоживущими develop/release-ветками — большие батчи и merge-ад; его место — коробочный софт с версиями.

Подробно:

Trunk-based GitFlow
Ветки main + ветки < 1–2 дней develop, release/, hotfix/ — долгоживущие
Размер батча маленький, интеграция ежедневно большой, интеграция в конце релиза
Deploy vs release разделены фиче-флагами склеены: релиз = мерж release-ветки
Подходит для SaaS, continuous deployment коробочный софт, несколько поддерживаемых версий
  1. Флаги разделяют deploy и release — код едет в прод выключенным; включение — это конфиг, а не выкатка. Это снимает страх мержить незавершённое в main.
  2. Аргумент — размер батча, а не вкус: чем дольше живёт ветка, тем больше конфликтов, длиннее lead time и страшнее откат — DORA-метрики ровно об этом.

⚠️ Частая ошибка: отвечать «кому что удобнее». Это не вопрос вкуса: долгие ветки → большие батчи → длинный lead time — аргумент измеримый.

Два инженера одновременно запускают terraform apply. Что будет со стейт-локом и без него?

Короткий ответ: С локом второй apply заблокируется или упадёт с ошибкой «Error acquiring the state lock» — стейт залочен первым. Без лока — гонка: оба читают одну версию стейта и перетирают записи друг друга, стейт становится неконсистентным.

Подробно:

с локом:    A: apply ──► lock OK ──► работает ──► unlock
            B: apply ──► Error acquiring the state lock ✗

без лока:   A: read state v1 ──► write v2a ─┐
            B: read state v1 ──► write v2b ─┴─► кто записал
                                                последним, тот и «прав»
  1. Последствия гонки — потерянные записи: ресурс создан в облаке, но его нет в стейте (сирота), или стейт бит и его чинят руками через state rm/import.
  2. Механика — backend берёт лок на время операции (для S3 — таблица DynamoDB), force-unlock только для зависших локов.
  3. Правильный ответ целиком — apply выполняет только CI-пайплайн, последовательно; люди локально запускают plan.

⚠️ Частая ошибка: считать лок опциональной мелочью «для больших команд» — достаточно одного пересечения apply, чтобы потом разгребать стейт руками.

Готовы закрепить навсегда?

Первая сессия — меньше минуты. Ваше будущее «я» на собеседовании скажет спасибо.

Вопросы об этом направлении

Как готовиться к собеседованию на «DevOps-инженер»?

Учите концепции, которые придётся объяснять, а не только те, что умеете кодить. Направление «DevOps-инженер» в RecallDeck даёт 210+ отобранных вопросов и возвращает каждый по расписанию в стиле Anki (SM-2) ровно перед тем, как вы забудете — чтобы на собеседовании ответы были под рукой.

Какие темы охватывает направление «DevOps-инженер»?

Направление «DevOps-инженер» разбито на ключевые области, которые реально проверяют на таких собеседованиях, — по темам и уровню сложности (Concept, Junior, Middle, Senior). Полный план и примеры вопросов можно посмотреть выше до входа.

Помогает ли интервальное повторение в подготовке к «DevOps-инженер»?

Да. Активно вспоминать ответ и честно себя оценивать — куда прочнее для памяти, чем перечитывать заметки. RecallDeck планирует каждую карту «DevOps-инженер» так, чтобы она вернулась перед моментом забывания: ежедневных повторений становится меньше, а знания держатся.

Направление «DevOps-инженер» бесплатное?

Да — направление «DevOps-инженер» и полный планировщик SM-2 бесплатны, с 20 новыми картами в день. Войдите через GitHub, и прогресс синхронизируется с аккаунтом. RecallDeck Pro ($5/мес или $29/год) поднимает дневной лимит и добавляет блиц-режим.

Другие направления

RecallDeckПодготовка к собеседованию на интервальных повторениях