P
prepair.app
Пройти інтерв'ю →
EnglishУкраїнськаРусскийDeutsch
🗄️

Middle Data EngineerПитання на співбесіді data engineer

Middle · 2–4 роки досвіду

Співбесіда дата-інженера сильно спирається на SQL і на те, чи переживуть ваші пайплайни запуск двічі, із запізненням або не по порядку. Будуть і питання з моделювання, де немає єдино правильної відповіді. Нижче — питання, які ставлять найчастіше, кожне з еталонною відповіддю. Middle: глибше розуміння, оптимізацію та реальні робочі ситуації.

Спробувати — без реєстрації
Готуємо питання…

Теми для підготовки

Просунутий SQL
Моделювання даних і сховища
ETL проти ELT та оркестрація
Spark і розподілена обробка
Стрімінг і Kafka
Якість даних

7 питань рівня Middle з відповідями

1

Чим рядкові формати відрізняються від колонкових?

Відповідь

Рядкові на кшталт CSV або Avro зберігають запис цілком, що зручно для запису й читання записів повністю. Колонкові на кшталт Parquet і ORC зберігають разом кожен стовпець, тому запит, що торкається трьох стовпців із пʼятдесяти, читає лише ці три. Колонкові до того ж набагато краще стискаються, бо в стовпці лежать схожі значення. Плата — дорогий запис одного рядка, тому колонкові для аналітики, а не для транзакцій.

2

Що означає ідемпотентність batch-джоби і як зробити ідемпотентною вставку?

Відповідь

Ідемпотентність означає, що другий запуск лишає той самий результат, що й перший, — а це важливо, бо повтори трапляються: від планувальника, від збою, від людини. Для вставки звичні відповіді — merge чи upsert за бізнес-ключем, видалення цільової партиції перед записом, або унікальне обмеження, через яке дубль падає безпечно. Звичайний INSERT у повтореній джобі мовчки подвоює дані.

3

Чим схема «зірка» відрізняється від «сніжинки»?

Відповідь

У зірці виміри денормалізовані в одиничні таблиці, приєднані прямо до факту. У сніжинці виміри нормалізовані в додаткові таблиці. Зірці потрібно менше зʼєднань і вона швидша в запитах; сніжинка економить місце й уникає аномалій оновлення. Аналітика зазвичай обирає зірку, бо місце дешеве, а час аналітика ні.

4

Що таке ліниві обчислення в Spark і чим трансформація відрізняється від дії?

Відповідь

Трансформації — map, filter, join — будують план і не виконують нічого. Дія — count, collect, write — запускає весь план. Лінивість дозволяє оптимізатору побачити весь ланцюг і переставити його, проштовхнувши фільтри вниз і схлопнувши кроки. Практичний наслідок: замір часу трансформації не вимірює нічого, а помилка, яку ви чекали на третьому рядку, зʼявляється на дії.

5

Чим широка залежність відрізняється від вузької і чому це важливо?

Відповідь

За вузької залежності кожна вхідна партиція живить одну вихідну — map чи filter, обчислювані на тому ж вузлі, де лежать дані. Широка потребує даних із багатьох партицій, а отже shuffle мережею. Shuffle визначає час більшості джоб, тому groupBy чи join — перше, куди дивляться, коли щось повільно.

6

Коли застосовувати broadcast join?

Відповідь

Коли одна сторона достатньо мала, щоб уміститися в памʼять кожного виконавця, — таблиця вимірів проти великої таблиці фактів. Її розсилка прибирає shuffle цілком, а це зазвичай різниця між хвилинами і годинами. Обмеження — памʼять: розішлете завелике, і заплатить кожен виконавець, тому поріг краще знати, а не вгадувати.

7

Що таке Change Data Capture і коли він замість повного перезавантаження?

Відповідь

CDC читає власний журнал змін вихідної бази і передає вставки, оновлення та видалення, а не перечитує таблицю цілком. Застосовують, коли таблиця настільки велика, що повне перезавантаження не влазить у вікно, або коли потрібні самі зміни — особливо видалення, які порівняння повних знімків виявляє лише за відсутністю.

🦎

Прочитати відповіді недостатньо

На співбесіді ти говориш вголос під тиском. Кем поставить ті самі питання, оцінить кожну відповідь і покаже, що саме підтягнути.

Пройти інтерв'ю Middle Data Engineer →
Безкоштовно · 3 інтерв'ю на місяць

Інші рівні — Data Engineer

Junior Data EngineerSenior Data EngineerУсі питання Data Engineer

Інші спеціалізації

🔍Middle QA Manual🤖Middle QA AutomationMiddle Java Backend🐍Middle Python Backend🐘Middle PHP Backend🦫Middle Go Backend🟢Middle Node.js Backend💎Middle Ruby on Rails🟣Middle .NET Backend Developer🔷Middle C++