Вопросы по инфраструктуре данных на собеседовании
Эти вопросы про то, где физически лежат данные и сколько стоит их прочитать. Кандидат, который называет Parquet просто «сжатым CSV», обычно не проходит дальше.
Из чего состоит тема
Так тема разложена в тренажёре: движок ведёт прогресс по каждой подтеме отдельно и возвращает те, где вы ошибаетесь.
- IaC и конфигурация12
- CI/CD11
- Kubernetes11
- Docker и контейнеры10
- Наблюдаемость10
Разборы подтем
Конспект по каждой: что это, как отвечать вслух, на чём валятся, плюс вопросы для самопроверки.
- CI/CD в дата-инженерии11 вопросов
- Docker для дата-инженера10 вопросов
- IaC и конфигурация инфраструктуры12 вопросов
- Kubernetes для дата-инженера11 вопросов
- Наблюдаемость дата-пайплайнов10 вопросов
Примеры вопросов с разбором
- Что такое CI/CD простыми словами?A)Авто-тест/сборка на коммит (CI) + авто-доставка в среду (CD)B)CI/CD — это система хранения версий кода, заменяющая собой git-репозиторий проектаC)CI/CD означает ручной запуск тестов и деплоя инженером по расписанию раз в неделюD)CI/CD — это среда выполнения контейнеров в продакшене вместо Kubernetes
показать ответ и разбор
+A)Авто-тест/сборка на коммит (CI) + авто-доставка в среду (CD)// разбор: CI (continuous integration) — на каждое изменение в репозитории автоматически прогонять линтеры, тесты и сборку артефакта (образа), чтобы поломки ловились сразу, а не при релизе. CD (continuous delivery/deployment) — автоматически доставлять прошедшие проверку изменения в среды (stage/prod) по готовности, без ручного копирования. Вместе это конвейер от коммита до прода: код прошёл тесты → собрался образ → задеплоился. Для дата-инженера CI ещё и проверяет сами трансформации (SQL/dbt-тесты) до того, как сломанная логика доедет до витрин.
- Чем образ (image) отличается от контейнера (container) в Docker?A)Образ — неизменяемый шаблон (файлы + зависимости); контейнер — запущенный из него изолированный экземпляр процессаB)Образ — это запущенный процесс, а контейнер — файл на диске с его зависимостями и настройкамиC)Образ и контейнер — полные синонимы, обозначающие одно и то же в разных версиях DockerD)Контейнер — это неизменяемый шаблон, из которого собирают множество разных образов приложения
показать ответ и разбор
+A)Образ — неизменяемый шаблон (файлы + зависимости); контейнер — запущенный из него изолированный экземпляр процесса// разбор: Образ Docker — иммутабельный слоёный шаблон: код, зависимости, окружение, зафиксированные на момент сборки. Контейнер — запущенный из образа изолированный процесс со своей файловой системой (поверх слоёв образа), сетью и лимитами. Из одного образа поднимают много одинаковых контейнеров. Аналогия: образ — класс, контейнер — объект. Контейнеры эфемерны: их удаляют и создают заново, а состояние держат снаружи (в volume/БД), иначе оно теряется при пересоздании.
- Что такое Infrastructure as Code (IaC), например через Terraform?A)Инфра описана кодом в git — создаётся/меняется воспроизводимоB)IaC — это написание самого приложения на языке инфраструктуры вместо Python или JavaC)IaC означает ручную настройку каждого сервера через веб-консоль облака по чек-листуD)IaC — это мониторинг инфраструктуры, собирающий метрики серверов в реальном времени
показать ответ и разбор
+A)Инфра описана кодом в git — создаётся/меняется воспроизводимо// разбор: IaC — управление инфраструктурой через код, а не ручную настройку в консоли. В декларативном файле (Terraform HCL) описывают желаемые ресурсы: виртуалки, сети, кластеры K8s, бакеты, БД. Инструмент (Terraform) сравнивает описание с реальностью и создаёт/меняет ресурсы, приводя их к описанному. Код инфраструктуры лежит в git: его ревьюят, версионируют, воспроизводят одинаково в dev/stage/prod. Так уходят «снежинки-серверы», настроенные вручную и невоспроизводимые, а поднятие идентичного окружения становится командой, а не многодневным ручным трудом.
- Что такое Kubernetes и зачем он дата-инженеру?A)Оркестрация контейнеров по кластеру — планирование, самовосстановление, масштабB)Kubernetes — это язык программирования для написания data-пайплайнов вместо PythonC)Kubernetes — это база данных для хранения больших объёмов аналитических данных кластераD)Kubernetes управляет одним контейнером на одной машине, заменяя собой команду docker run
показать ответ и разбор
+A)Оркестрация контейнеров по кластеру — планирование, самовосстановление, масштаб// разбор: Kubernetes (K8s) управляет контейнерами на кластере из многих машин: размещает (планирует) их по узлам с учётом ресурсов, следит за здоровьем и перезапускает упавшие (самовосстановление), масштабирует число реплик, катит обновления без простоя, даёт сеть и сервис-дискавери. Дата-инженеру он даёт продовую среду для контейнеризированных пайплайнов и сервисов: на нём гоняют Airflow, Spark, стрим-джобы, эластично поднимая поды под задачи. Ты описываешь желаемое состояние (декларативно), а K8s его поддерживает.
- Что такое три столпа наблюдаемости (observability): логи, метрики, трейсы?A)Логи (события) + метрики (числа во времени) + трейсы (путь запроса)B)Это три способа хранения данных в базе: логи в строках, метрики в столбцах, трейсы в графахC)Все три — синонимы обычного логирования, отличаются лишь уровнем детализации сообщенийD)Логи, метрики и трейсы — это три среды развёртывания приложения вместо dev/stage/prod
показать ответ и разбор
+A)Логи (события) + метрики (числа во времени) + трейсы (путь запроса)// разбор: Наблюдаемость строят на трёх типах телеметрии. Логи — дискретные записи о событиях (что произошло: ошибка, старт задачи) с деталями. Метрики — агрегированные числовые ряды во времени (загрузка CPU, число обработанных строк, длительность задачи), дёшевы для хранения и алертов. Трейсы — путь одного запроса/операции через несколько сервисов (где именно время/сбой), важны в распределённых системах. Вместе: метрики говорят «что-то не так и насколько», логи — «что именно», трейсы — «где в цепочке». Для дата-платформы это способ вовремя увидеть проблему, а не узнать о ней от пользователей.
- Что проверяет CI для дата-пайплайна помимо обычных тестов кода?A)Скорость выполнения запросов — CI для данных измеряет производительность SQLB)Сами трансформации данных: линт и тесты SQL/dbt, валидацию схем и контрактов — чтобы сломанная логика не доехала до витринC)Ничего сверх обычных тестов кода: SQL и трансформации в CI проверить не получитсяD)CI для данных проверяет орфографию комментариев и форматирование SQL-файлов
показать ответ и разбор
+B)Сами трансформации данных: линт и тесты SQL/dbt, валидацию схем и контрактов — чтобы сломанная логика не доехала до витрин// разбор: У дата-пайплайна ломается не только Python-код, но и SQL-трансформации и контракты данных. CI для данных добавляет к юнит-тестам кода: линт SQL, прогон dbt-тестов (unique/not_null/relationships) на тестовых данных, компиляцию моделей (ref/зависимости), проверку схем и обратной совместимости, иногда прогон трансформации на sample и сверку с эталоном. Так изменение, которое сломало бы витрину или контракт с потребителем, отсекается в pull request, а не обнаруживается в проде по кривым цифрам. Это сдвиг проверки данных «влево», ближе к разработчику.
- Зачем упаковывать data-пайплайн в Docker-контейнер?A)Чтобы контейнер автоматически ускорял выполнение кода пайплайна в несколько разB)Зафиксировать окружение и зависимости: пайплайн одинаково запускается локально, в CI и в проде — конец «работает у меня»C)Чтобы отказаться от указания версий зависимостей — Docker подберёт их сам на летуD)Чтобы хранить данные пайплайна прямо внутри контейнера вместо внешней базы данных
показать ответ и разбор
+B)Зафиксировать окружение и зависимости: пайплайн одинаково запускается локально, в CI и в проде — конец «работает у меня»// разбор: Контейнер упаковывает код вместе с точными версиями интерпретатора, библиотек и системных зависимостей в неизменяемый образ. Тот же образ запускается идентично на ноутбуке, в CI и на проде — исчезает класс проблем «у меня работало, на сервере нет» из-за разных версий. Плюс изоляция (пайплайны не конфликтуют зависимостями), портируемость между машинами/облаками и простое масштабирование (запусти N копий образа). Это фундамент современного развёртывания дата-пайплайнов (в т.ч. на K8s).
- Чем декларативный подход к инфраструктуре (Terraform, K8s) отличается от императивного (скрипты)?A)Декларативный подход — это пошаговый скрипт команд, а императивный описывает конечное состояниеB)Декларативно — «что должно быть», инструмент сам добьётся; императивно — шагиC)Разницы нет: оба подхода одинаково описывают инфраструктуру набором последовательных командD)Императивный подход идемпотентен и устойчив к дрейфу, а декларативный — нет
показать ответ и разбор
+B)Декларативно — «что должно быть», инструмент сам добьётся; императивно — шаги// разбор: Императивный подход — последовательность команд «сделай то, потом это» (bash-скрипт: создай ВМ, установи пакет...): ты отвечаешь за все шаги и за то, что будет при повторном запуске. Декларативный — ты описываешь конечное желаемое состояние («должно быть 3 сервера с таким конфигом»), а инструмент (Terraform/K8s) сам вычисляет разницу с текущим и делает только необходимые изменения, чтобы к нему прийти. Декларатив идемпотентен (повторный apply при совпадении состояния ничего не меняет) и устойчив к дрейфу — поэтому его предпочитают для инфраструктуры и оркестрации.
- Что такое pod в Kubernetes?A)Pod — это отдельный физический сервер (узел) кластера Kubernetes, на котором запускают контейнерыB)Наименьшая разворачиваемая единица: один или несколько тесно связанных контейнеров с общими сетью и хранилищемC)Pod — это кластер целиком, объединяющий все контейнеры и узлы под общим управлениемD)Pod содержит ровно один контейнер, объединять несколько контейнеров в под запрещено
показать ответ и разбор
+B)Наименьшая разворачиваемая единица: один или несколько тесно связанных контейнеров с общими сетью и хранилищем// разбор: Pod — наименьшая единица, которой оперирует K8s. Обычно это один контейнер приложения, иногда несколько тесно связанных (основной + sidecar), которые делят сетевое пространство (один IP, localhost между собой) и тома. K8s планирует и масштабирует именно поды, а не отдельные контейнеры. Поды эфемерны и одноразовы: их не создают и не чинят вручную — этим управляют контроллеры (Deployment, Job), пересоздавая поды при сбое или обновлении. Прямое создание голого пода без контроллера — антипаттерн: упал и не восстановится.
это 9 из 54
Ещё 45 вопросов по теме — в тренажёре, с движком повторения
Прочитать разбор и ответить самому — разные навыки. В Сеньорчике вопросы идут сессиями, а движок возвращает подтемы, где вы ошибаетесь, пока они не начнут отскакивать. Бесплатно, лимит по энергии.
Частые вопросы
Почему Parquet быстрее CSV?
Колоночное хранение позволяет читать только нужные столбцы и эффективно сжимать однотипные данные, а статистика по блокам отсекает лишние куски файла ещё до чтения.
Что такое lakehouse?
Подход, где поверх файлов в объектном хранилище работает табличный слой с транзакциями и версионированием. Он даёт часть возможностей хранилища при стоимости озера данных.