Подготовка к собеседованию — DevOps-инженер
Колода из 210+ карточек с вопросами для собеседования по направлению «DevOps-инженер» — по темам и уровню сложности, с возвратом ровно перед тем, как вы забудете. Посмотрите несколько карточек ниже, затем войдите, чтобы учить всё направление по расписанию в стиле Anki (SM-2).
Бесплатно · вход через GitHub · ваш прогресс остаётся с вами.
Что внутри
Все темы направления, сгруппированные так, как вы будете их учить.
Linux и траблшутинг
11 карточекСети в эксплуатации
10 карточекВнутренности контейнеров
8 карточекKubernetes
13 карточекCI/CD и GitOps
8 карточекTerraform и Ansible (IaC)
8 карточекНаблюдаемость и SRE
11 карточекОблако и безопасность
9 карточекDevOps и инфраструктура
35 карточекОсновы CS
33 карточкиСистемный дизайн
29 карточекПоведенческое интервью
35 карточекПримеры вопросов
Несколько карточек из колоды — откройте ответ, затем войдите, чтобы учить весь набор по расписанию.
free показывает почти ноль свободной памяти. Сервер задыхается без RAM?
free показывает почти ноль свободной памяти. Сервер задыхается без RAM?
Короткий ответ: Почти наверняка нет. Linux сознательно занимает «лишнюю» память под page cache — она отдаётся приложениям мгновенно. Смотреть надо на колонку available, а не free; о реальном дефиците говорят swap-in и major page faults.
Подробно:
| Метрика | Что означает | Тревожиться? |
|---|---|---|
| free | память, не занятая вообще ничем | нет — у здорового сервера близка к нулю |
| buff/cache | page cache: кэш файлов и блоков | нет — вытесняется по требованию |
| available | сколько реально можно выдать без свопа | да, если стабильно стремится к нулю |
- Пустая память — потерянная память — ядро кэширует диск, чтобы повторные чтения шли из RAM, а не с устройства.
- Реальные признаки дефицита — растущий 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- 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 и какие механизмы его реализуют?
Короткий ответ: Контейнер — это обычный процесс Linux, которому ядро подсунуло изолированный «вид» системы: неймспейсы прячут чужое, cgroups ограничивают ресурсы, слоёная файловая система даёт свой rootfs. Гостевого ядра нет — ядро одно на всех, и в этом настоящая разница с VM.
Подробно:
- Namespaces — изоляция видимости: каждый тип прячет свой кусок системы.
- cgroups — лимиты CPU, памяти, IO: сколько процессу можно, а не что он видит.
- Слоёный 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 apply -f deployment.yaml? Опишите всю цепочку до работающего пода.
Короткий ответ: kubectl валидирует манифест и отправляет его в API server: authn → RBAC → admission-вебхуки → запись в etcd. На этом синхронная часть заканчивается — дальше контроллеры, scheduler и kubelet асинхронно замечают изменения через watch и приводят кластер к желаемому состоянию. Никто ничего не «пушит».
Подробно:
- API server — аутентификация, авторизация (RBAC), admission (mutating → validating вебхуки), объект сохранён в etcd.
- Deployment-контроллер — видит новый Deployment (watch) и создаёт ReplicaSet.
- ReplicaSet-контроллер — создаёт Pod-объекты, пока без ноды.
- Scheduler — находит поды с пустым nodeName, фильтрует и скорит ноды, делает bind.
- kubelet — на выбранной ноде видит «свой» под: тянет образы, запускает контейнеры через CRI, сеть поднимает CNI-плагин.
- 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 и почему?
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 | коробочный софт, несколько поддерживаемых версий |
- Флаги разделяют deploy и release — код едет в прод выключенным; включение — это конфиг, а не выкатка. Это снимает страх мержить незавершённое в main.
- Аргумент — размер батча, а не вкус: чем дольше живёт ветка, тем больше конфликтов, длиннее lead time и страшнее откат — DORA-метрики ровно об этом.
⚠️ Частая ошибка: отвечать «кому что удобнее». Это не вопрос вкуса: долгие ветки → большие батчи → длинный lead time — аргумент измеримый.
Два инженера одновременно запускают terraform apply. Что будет со стейт-локом и без него?
Два инженера одновременно запускают 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 ─┴─► кто записал
последним, тот и «прав»
- Последствия гонки — потерянные записи: ресурс создан в облаке, но его нет в стейте (сирота), или стейт бит и его чинят руками через
state rm/import. - Механика — backend берёт лок на время операции (для S3 — таблица DynamoDB),
force-unlockтолько для зависших локов. - Правильный ответ целиком — 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/год) поднимает дневной лимит и добавляет блиц-режим.