← Wszystkie tematy

Pytania rekrutacyjne z baz danych z odpowiedziami

SQL i modelowanie relacyjne, JOIN-y i agregacja, indeksy i plany zapytań, transakcje i izolacja, PostgreSQL w praktyce, NoSQL i Redis, replikacja i sharding.

225 pytań na rozmowę rekrutacyjną z tematu Bazy danych z odpowiedziami i wyjaśnieniami - poziomy Junior, Middle i Senior. Przykładowe pytania, testy online i zadania z kodu.

Pytania według poziomu

Przykładowe pytania

Kilka pytań z każdego poziomu z poprawną odpowiedzią i wyjaśnieniem.

Bazy danych · Junior

  1. Czym jest relacyjna baza danych?

    Poprawna odpowiedź: Bazą, która przechowuje dane w tabelach z wierszami i kolumnami i łączy tabele kluczami

    PostgreSQL, MySQL, SQL Server, Oracle i SQLite to bazy relacyjne. Zapytania do nich pisze się w SQL, a powiązania między tabelami wyraża kluczami głównymi i obcymi.

  2. Czym jest klucz główny?

    Poprawna odpowiedź: Kolumną (lub zestawem kolumn), która jednoznacznie identyfikuje każdy wiersz i nie może być NULL

    Tabela ma co najwyżej jeden klucz główny. Baza automatycznie tworzy dla niego unikalny indeks, więc wyszukiwanie po kluczu głównym jest szybkie.

  3. Czym jest klucz obcy?

    Poprawna odpowiedź: Kolumną, która odwołuje się do klucza głównego (lub unikalnego) innej tabeli, a baza sprawdza, czy taki wiersz istnieje

    Na przykład orders.user_id odwołuje się do users.id. Baza odrzuci zamówienie dla nieistniejącego użytkownika. ON DELETE CASCADE lub ON DELETE SET NULL określają, co się stanie po usunięciu wiersza, do którego jest odwołanie.

  4. Jak zamodelować relację wiele do wielu, np. studentów i kursy?

    Poprawna odpowiedź: Tabelą łączącą, np. enrollments(student_id, course_id), z kluczem obcym do każdej strony

    Tabela łącząca może też przechowywać dane o samej relacji, np. datę zapisu czy ocenę. Listy po przecinku nie da się porządnie zindeksować, złączyć ani ograniczyć.

Wszystkie 75 pytań z odpowiedziami →

Bazy danych · Middle

  1. Jakiej struktury danych używa domyślny indeks w PostgreSQL?

    Poprawna odpowiedź: B-drzewa

    B-drzewa trzymają klucze posortowane, więc obsługują równość, zakresy (<, BETWEEN), sortowanie i prefiksowy LIKE 'abc%' (z odpowiednią collation lub klasą operatorów). Hash, GIN, GiST i BRIN są do szczególnych przypadków.

  2. Jest indeks na (last_name, first_name). Które zapytanie może go efektywnie użyć?

    Poprawna odpowiedź: WHERE last_name = 'Smith'

    Indeks złożony jest posortowany po pierwszej kolumnie, a w jej obrębie po drugiej, jak książka telefoniczna. Pomaga zapytaniom po początkowym prefiksie kolumn; szukanie tylko po first_name zwykle nie wykorzysta go dobrze.

  3. Jest indeks na created_at. Dlaczego WHERE date(created_at) = '2026-11-01' może go zignorować?

    Poprawna odpowiedź: Funkcja na kolumnie zmienia wartość, więc indeksu na surowej kolumnie nie da się przeszukać; użyj zakresu albo indeksu na wyrażeniu

    Przepisz to jako created_at >= '2026-11-01' AND created_at < '2026-11-02' albo utwórz indeks na samym wyrażeniu.

  4. Dlaczego zwykły indeks B-tree nie przyspieszy WHERE name LIKE '%son'?

    Poprawna odpowiedź: Z symbolem wieloznacznym na początku nie wiadomo, jak zaczyna się wartość, więc posortowany indeks nie zawęzi wyszukiwania

    LIKE 'son%' może użyć B-drzewa (z odpowiednią klasą operatorów). Do szukania podciągów lub wyszukiwania rozmytego użyj trigramowego indeksu GIN (pg_trgm) albo wyszukiwania pełnotekstowego.

Wszystkie 75 pytań z odpowiedziami →

Bazy danych · Senior

  1. Jak PostgreSQL decyduje, czy wersja wiersza jest widoczna dla transakcji?

    Poprawna odpowiedź: Każda wersja wiersza przechowuje ID transakcji xmin/xmax, porównywane ze snapshotem transakcji

    xmin to transakcja, która utworzyła wersję, a xmax ta, która ją usunęła lub zaktualizowała. Snapshot zawiera listę transakcji jeszcze trwających, więc wiersz jest widoczny tylko wtedy, gdy jego twórca zatwierdził się wcześniej.

  2. Czym jest przepełnienie ID transakcji (wraparound) i dlaczego jest groźne?

    Poprawna odpowiedź: ID transakcji są 32-bitowe i używane ponownie; jeśli VACUUM nie „zamrozi” starych wierszy na czas, PostgreSQL przestaje przyjmować zapisy, żeby chronić dane

    Autovacuum zamraża stare wiersze dużo przed limitem. Wyłączony autovacuum albo bardzo długie transakcje mogą doprowadzić bazę do wymuszonego zatrzymania.

  3. Czym jest puchnięcie tabeli (bloat) i co je zwykle powoduje?

    Poprawna odpowiedź: Miejscem zajętym przez martwe wersje wierszy, które nie jest wystarczająco szybko ponownie używane; często przez intensywne aktualizacje, opóźniony autovacuum lub długie transakcje blokujące sprzątanie

    Dostrajaj autovacuum per tabela (niższe scale factor dla gorących tabel), unikaj długich transakcji i przebudowuj spuchnięte obiekty online przez pg_repack lub REINDEX CONCURRENTLY.

  4. Jaki jest cel dziennika zapisu z wyprzedzeniem (WAL)?

    Poprawna odpowiedź: Zmiany są zapisywane do sekwencyjnego dziennika i zrzucane na dysk przed commitem, więc baza może się odtworzyć po awarii i przesyłać zmiany do replik

    Strony danych można zapisać na dysk później, w tle. WAL napędza też replikację fizyczną, dekodowanie logiczne i odtwarzanie do punktu w czasie.

Wszystkie 75 pytań z odpowiedziami →

Zadania z kodu

Napisz rozwiązanie prosto w przeglądarce, a testy od razu je sprawdzą. Klasyka rozmów rekrutacyjnych z JavaScriptu (debounce, deepClone, Promise.all, cache LRU) i z Reacta: komponenty i hooki, takie jak lista zadań, zakładki, useDebounce i useInterval.

Otwórz zadania →