← Усі теми

Питання на співбесіді з баз даних з відповідями

SQL і реляційне моделювання, JOIN і агрегація, індекси та плани запитів, транзакції та ізоляція, PostgreSQL на практиці, NoSQL і Redis, реплікація та шардинг.

225 запитань для співбесіди з теми Бази даних з відповідями й поясненнями - рівні Junior, Middle і Senior. Приклади запитань, онлайн-тести й задачі на код.

Запитання за рівнями

Приклади запитань

Кілька запитань із кожного рівня з правильною відповіддю й поясненням.

Бази даних · Junior

  1. Що таке реляційна база даних?

    Правильна відповідь: База, що зберігає дані в таблицях із рядків і стовпців і пов'язує таблиці через ключі

    PostgreSQL, MySQL, SQL Server, Oracle і SQLite - реляційні бази. Запити до них пишуть мовою SQL, а зв'язки між таблицями виражають первинними й зовнішніми ключами.

  2. Що таке первинний ключ?

    Правильна відповідь: Стовпець (або набір стовпців), що однозначно ідентифікує кожен рядок і не може бути NULL

    У таблиці щонайбільше один первинний ключ. База автоматично створює для нього унікальний індекс, тож пошук за первинним ключем швидкий.

  3. Що таке зовнішній ключ?

    Правильна відповідь: Стовпець, що посилається на первинний (або унікальний) ключ іншої таблиці, а база перевіряє, що такий рядок існує

    Наприклад, orders.user_id посилається на users.id. База не дасть створити замовлення для неіснуючого користувача. ON DELETE CASCADE чи ON DELETE SET NULL визначають, що робити, коли рядок, на який посилаються, видаляють.

  4. Як змоделювати зв'язок «багато до багатьох», наприклад студентів і курси?

    Правильна відповідь: Через проміжну таблицю, наприклад enrollments(student_id, course_id), з зовнішнім ключем на кожну сторону

    Проміжна таблиця може зберігати й дані про сам зв'язок, як-от дату запису чи оцінку. Список через кому не можна нормально проіндексувати, з'єднати чи обмежити.

Усі 75 запитань з відповідями →

Бази даних · Middle

  1. Яку структуру даних використовує індекс PostgreSQL за замовчуванням?

    Правильна відповідь: B-дерево

    B-дерева тримають ключі відсортованими, тож підтримують рівність, діапазони (<, BETWEEN), сортування та префіксний LIKE 'abc%' (з відповідною collation чи класом операторів). Hash, GIN, GiST і BRIN - для особливих випадків.

  2. Є індекс на (last_name, first_name). Який запит може ефективно його використати?

    Правильна відповідь: WHERE last_name = 'Smith'

    Складений індекс відсортований за першим стовпцем, а всередині нього - за другим, як телефонний довідник. Він допомагає запитам за початковим префіксом стовпців; пошук лише за first_name зазвичай не може добре його використати.

  3. Є індекс на created_at. Чому WHERE date(created_at) = '2026-11-01' може його ігнорувати?

    Правильна відповідь: Функція над стовпцем змінює значення, тож індекс за сирим стовпцем не можна використати для пошуку; беріть діапазон або індекс за виразом

    Перепишіть як created_at >= '2026-11-01' AND created_at < '2026-11-02' або створіть індекс за самим виразом.

  4. Чому звичайний B-tree індекс не пришвидшить WHERE name LIKE '%son'?

    Правильна відповідь: З шаблоном на початку невідомо, з чого починається значення, тож відсортований індекс не звузить пошук

    LIKE 'son%' може використати B-дерево (з відповідним класом операторів). Для пошуку підрядка чи нечіткого пошуку беріть триграмний GIN-індекс (pg_trgm) або повнотекстовий пошук.

Усі 75 запитань з відповідями →

Бази даних · Senior

  1. Як PostgreSQL вирішує, чи видима версія рядка для транзакції?

    Правильна відповідь: Кожна версія рядка зберігає ID транзакцій xmin/xmax, які порівнюються зі знімком транзакції

    xmin - транзакція, що створила версію, xmax - та, що видалила чи оновила. Знімок містить список транзакцій, які ще тривали, тож рядок видимий, лише якщо його творець закомітився раніше.

  2. Що таке переповнення ID транзакцій (wraparound) і чому воно небезпечне?

    Правильна відповідь: ID транзакцій 32-бітні й використовуються повторно; якщо VACUUM вчасно не «заморозить» старі рядки, PostgreSQL припинить приймати запис, щоб захистити дані

    Autovacuum заморожує старі рядки задовго до межі. Вимкнений autovacuum чи дуже довгі транзакції можуть підвести базу до примусової зупинки.

  3. Що таке роздування таблиці (bloat) і що його зазвичай спричиняє?

    Правильна відповідь: Місце, зайняте мертвими версіями рядків, яке не встигає перевикористовуватися; часто через інтенсивні оновлення, відставання autovacuum або довгі транзакції, що блокують прибирання

    Налаштовуйте autovacuum для окремих таблиць (менші scale factor для гарячих), уникайте довгих транзакцій і перебудовуйте роздуті об'єкти онлайн через pg_repack чи REINDEX CONCURRENTLY.

  4. Яке призначення журналу попереднього запису (WAL)?

    Правильна відповідь: Зміни пишуться в послідовний журнал і скидаються на диск до commit, тож база може відновитися після збою й передавати зміни реплікам

    Сторінки даних можна записати на диск пізніше, у фоні. WAL також лежить в основі фізичної реплікації, логічного декодування й відновлення на момент часу.

Усі 75 запитань з відповідями →

Задачі на код

Напишіть рішення просто в браузері - тести перевірять його одразу. Класика співбесід на JavaScript (debounce, deepClone, Promise.all, LRU-кеш) і на React: компоненти й хуки на кшталт списку справ, вкладок, useDebounce та useInterval.

Відкрити задачі →