Pytania rekrutacyjne Git z odpowiedziami
Commity, indeks i gałęzie, merge i rebase, konflikty, cofanie zmian przez reset, revert i reflog, zdalne repozytoria i pull requesty, przepisywanie historii, budowa wewnętrzna Gita i procesy zespołowe.
226 pytań na rozmowę rekrutacyjną z tematu Git z odpowiedziami i wyjaśnieniami - poziomy Junior, Middle i Senior. Przykładowe pytania, testy online i zadania z kodu.
- Commity
- Gałęzie
- Rebase
- Reset
- Procesy
Pytania według poziomu
Junior
Podstawowe pojęcia i składnia · 50 pytań
Middle
Praktyka, niuanse i optymalizacja · 50 pytań
Senior
Architektura, mechanizmy wewnętrzne, przypadki brzegowe · 50 pytań
Przykładowe pytania
Kilka pytań z każdego poziomu z poprawną odpowiedzią i wyjaśnieniem.
Git · Junior
- Co sprawia, że Git jest rozproszonym systemem kontroli wersji?
Poprawna odpowiedź: Każdy klon ma całą historię i działa offline
Klon zawiera wszystkie commity, więc można commitować, tworzyć gałęzie i przeglądać historię bez serwera. Zdalne repozytorium, np. GitHub, to po prostu kolejna kopia, z którą zespół się synchronizuje.
- Przez jakie trzy główne obszary przechodzi plik w Gicie?
Poprawna odpowiedź: Katalog roboczy, indeks (staging), repozytorium
Pliki edytujesz w katalogu roboczym, wybierasz, co trafi do następnego commita, przez
git add(indeks), agit commitzapisuje ten stan w repozytorium. - Co robi
git add file.js?Poprawna odpowiedź: Dodaje bieżącą treść pliku do indeksu
git addkopiuje bieżący stan pliku do indeksu. Jeśli potem znowu go zmienisz, nowe zmiany nie trafią do commita, dopóki nie wykonasz ponowniegit add. - Co przechowuje commit w Gicie?
Poprawna odpowiedź: Migawkę projektu, autora, opis i rodzica
Koncepcyjnie każdy commit to pełna migawka (niezmienione pliki są współdzielone, a nie powielane) z metadanymi i odnośnikiem do rodzica. Różnice liczy się dopiero na żądanie.
Git · Middle
- Co robi
git rebase mainna gałęzi funkcji?Poprawna odpowiedź: Przenosi commity gałęzi na wierzch najnowszego
mainKażdy commit funkcji jest nakładany od nowa na nową bazę, co daje nowe commity z nowymi haszami. Powstaje liniowa historia, jakby gałąź utworzono od dzisiejszego
main. - Jaka jest „złota zasada” rebase?
Poprawna odpowiedź: Nie rób rebase commitów, na których inni budują pracę
Rebase zastępuje commity nowymi. Jeśli koledzy mają już stare, ich historia się rozjedzie i pojawią się duplikaty. Własną, niewypchniętą lub prywatną gałąź można rebase'ować.
- Merge czy rebase przy wciąganiu
maindo gałęzi funkcji: jaki jest kompromis?Poprawna odpowiedź: Merge zachowuje prawdziwą historię; rebase daje liniową, ale przepisuje commity
Merge dokładnie zapisuje, co się stało, i dodaje commity scalające; rebase daje czystą linię, łatwiejszą do czytania i bisect, kosztem nowych haszy. Zespół wybiera jedną konwencję.
- Podczas rebase pojawił się konflikt. Jaka jest zwykła kolejność?
Poprawna odpowiedź: Popraw pliki,
git add, potemgit rebase --continueRebase zatrzymuje się na commicie z konfliktem; po rozwiązaniu i
git addpolecenie--continueprzechodzi do następnego.--skipcałkowicie porzuca bieżący commit,--abortprzywraca pierwotną gałąź.
Git · Senior
- Jakie cztery typy obiektów tworzą bazę obiektów Gita?
Poprawna odpowiedź: Blob, tree, commit i tag z adnotacją
Blob trzyma treść pliku, tree mapuje nazwy na bloby i poddrzewa, commit wskazuje na drzewo i rodziców, a tag z adnotacją wskazuje na obiekt z opisem. Gałęzie to referencje, nie obiekty.
- Dlaczego zmiana nazwy pliku nie duplikuje jego treści w magazynie Gita?
Poprawna odpowiedź: Blob jest adresowany treścią; zmienia się tylko wpis w tree
Identyczna treść zawsze ma ten sam hasz, więc jest przechowywana raz. Zmiany nazw Git wykrywa później, porównując drzewa, a nie zapisuje ich jawnie.
- Czym wewnętrznie jest ref w Gicie?
Poprawna odpowiedź: Nazwą przechowującą hasz commita, np.
refs/heads/mainReferencje żyją jako małe pliki albo w
packed-refs.HEADto referencja symboliczna wskazująca na inną referencję. Przesunięcie gałęzi to po prostu zapisanie nowego hasza w jej ref. - Co robi
git gc?Poprawna odpowiedź: Pakuje obiekty, usuwa nieosiągalne i stare wpisy refloga
Luźne obiekty są kompresowane do packfile z deltami, a obiekty nieosiągalne z referencji i refloga są usuwane po okresie karencji. Git uruchamia to automatycznie.
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), z TypeScriptu (generyki, zawężanie i typy narzędziowe, sprawdza prawdziwy kompilator), logika backendu w Node.js (middleware, limity żądań, kolejki zadań), zapytania SQL w prawdziwym PostgreSQL i z Reacta: komponenty i hooki, takie jak lista zadań, zakładki, useDebounce i useInterval.
Otwórz zadania →