Rozmowa techniczna: Java, SQL i JavaScript z przykładowymi odpowiedziami
Krótko: na rozmowie technicznej na backendzie najczęściej pytają o podstawy Javy (wyjątki, kolekcje, equals/hashCode), Spring i JPA, SQL (JOIN-y, indeksy, transakcje) oraz o JavaScript, jeśli praca dotyczy też frontu. Nie ma oficjalnej listy pytań żadnej firmy, więc najlepiej ćwiczyć wzorzec odpowiedzi: definicja w jednym zdaniu, przykład z własnego projektu i kompromis. Przykładowe odpowiedzi poniżej są ilustracyjne, nie pochodzą z rekrutacji konkretnej firmy.
Jak budować odpowiedź techniczną
Rekruter techniczny rzadko szuka encyklopedycznej definicji; sprawdza, czy konceptu faktycznie użyłeś. Stosuj trzy kroki: (1) jedno zdanie wprost, (2) przykład z projektu, stażu lub kursu (powiedz uczciwie, że to projekt własny), (3) kompromis: kiedy rozwiązanie się nie sprawdza. Jeśli czegoś nie wiesz, powiedz, co wiesz i jak byś to sprawdził w dokumentacji. To lepsze niż pewne siebie zgadywanie. O etapach procesu w software housie piszemy w osobnym artykule, a ogólny plan nauki jest w poradniku przygotowania do rozmowy technicznej.
Co mówią źródła o zakresie pytań
Serwis justjoin.it w zestawieniu pytań na backend wymienia dla Javy m.in. programowanie obiektowe, kontener IoC w Springu, Hibernate, JVM, garbage collector, wzorce projektowe, REST kontra SOAP, mikroserwisy i JDBC, a przykładowe pytanie brzmi: „Czym się różni wyjątek typu checked od unchecked?”. Pojawiają się też pytania ogólne, np. o największy problem w karierze i o to, co robisz, gdy wiesz, że nie zdążysz z zadaniem. To jeden publiczny przegląd, a nie gwarancja, że usłyszysz dokładnie te pytania.
Java: pytania rekrutacyjne z przykładowymi odpowiedziami
1. Dlaczego String jest niemutowalny? Dokumentacja Javy: obiekty typu String są stałe, ich wartości nie można zmienić po utworzeniu, dlatego można je współdzielić. Przykładowa odpowiedź: „Niemutowalność daje bezpieczeństwo wątkowe i stabilny hash przy użyciu jako klucza mapy. Kosztem jest tworzenie nowych obiektów przy wielokrotnym łączeniu, więc w pętlach używam StringBuilder”.
2. Jaka jest relacja między equals a hashCode? Jeśli dwa obiekty są równe według equals, ich hashCode musi być taki sam. Obiekty nierówne mogą mieć ten sam hash, ale różne hashe poprawiają wydajność tablic haszujących. Dlatego nadpisując jedną metodę, nadpisuj obie.
3. HashMap a ConcurrentHashMap? HashMap nie jest synchronizowany, dopuszcza klucz i wartości null, nie gwarantuje kolejności i przy współbieżnych zmianach struktury wymaga zewnętrznej synchronizacji. ConcurrentHashMap pozwala na współbieżne odczyty bez blokowania i aktualizacje z dużą współbieżnością, ale nie dopuszcza null jako klucza ani wartości.
4. Checked a unchecked? Wyjątki checked kompilator wymusza obsłużyć lub zadeklarować, unchecked (RuntimeException) nie. W praktyce ważne jest, jak traktuje je Spring przy transakcjach (niżej).
5. Pozostałe częste tematy: interfejs a klasa abstrakcyjna, final, static, Optional, strumienie, działanie garbage collectora i podstawy współbieżności (synchronized, wyścig danych). Do każdego przygotuj jedno zdanie i jeden przykład. Wersja angielska tego tematu: Java interview questions.
Spring Boot i JPA
Jak działa @Transactional i gdzie jest pułapka? Według dokumentacji Spring Framework w domyślnym trybie proxy przechwytywane są tylko wywołania z zewnątrz przez proxy; wywołanie metody z tej samej klasy (self-invocation) nie uruchamia transakcji, nawet jeśli metoda jest oznaczona adnotacją. Domyślnie wycofanie (rollback) powodują RuntimeException i Error, a wyjątki checked nie. Przykładowa odpowiedź: „Trafiłem na metodę wywoływaną z tej samej klasy, która nie otwierała transakcji. Przeniosłem logikę do osobnego beana, a przy wyjątkach checked ustawiam rollbackFor”.
- Wstrzykiwanie zależności: czemu konstruktor jest lepszy od pola (niemutowalność, testowalność).
- Problem N+1 w Hibernate: czym jest, jak go zobaczyć w logach SQL i jak naprawić (join fetch, entity graph, batch).
- Lazy a eager i
LazyInitializationException.
SQL: pytania rekrutacyjne i odpowiedzi
- INNER JOIN a LEFT JOIN. Dokumentacja PostgreSQL: LEFT OUTER JOIN najpierw wykonuje inner join, a potem dla każdego wiersza z lewej tabeli bez dopasowania dodaje wiersz z wartościami NULL po prawej, więc wynik zawiera co najmniej jeden wiersz na każdy wiersz lewej tabeli. Pułapka: warunek na prawą tabelę w
WHEREzamienia LEFT JOIN w praktyce w INNER JOIN. - Po co indeks i ile kosztuje? Pozwala znaleźć wiersze bez skanowania całej tabeli, ale musi być synchronizowany przy każdej zmianie danych, co obciąża INSERT, UPDATE i DELETE. Dokumentacja PostgreSQL zaleca usuwać rzadko używane indeksy.
- Poziomy izolacji transakcji. PostgreSQL ma cztery poziomy standardu SQL, domyślny to Read Committed; w innych bazach zachowanie może się różnić, więc nazwij bazę, której używasz.
- GROUP BY, HAVING i czytanie wyniku
EXPLAIN.
Najlepsze ćwiczenie: weź wolne zapytanie z własnego projektu, uruchom EXPLAIN, dodaj indeks i opowiedz, co się zmieniło.
JavaScript: pytania na rozmowie
== a ===. Operator == próbuje zamienić typy operandów przed porównaniem, a === nigdy tego nie robi: przy różnych typach zwraca false. Przykłady: "3" === 3 to false, a NaN === NaN też false (MDN).
Czym jest domknięcie (closure)? Według MDN to połączenie funkcji z odwołaniami do jej otaczającego stanu (środowiska leksykalnego); innymi słowy, funkcja ma dostęp do zakresu zewnętrznego. Przykładowa odpowiedź: „Używam domknięć np. do funkcji z prywatnym licznikiem; pamiętam, że w pętli ze starym var wszystkie callbacki widzą tę samą zmienną”.
Do powtórki: this, prototypy, async/await i pętla zdarzeń, różnica między let, const i var.
Zadania na żywo i komunikacja
W zadaniu na żywo oceniany jest też proces. Powtórz treść własnymi słowami, dopytaj o ograniczenia, zacznij od prostego rozwiązania, podaj złożoność i przetestuj na małym przykładzie. Gdy utkniesz, opowiedz, co już próbowałeś. Więcej o formatach: pytania behawioralne przy okazji tej samej rozmowy oraz jak przejść rozmowę z AI.
Trening z narzędziem i zasady
Interview Copilot to nakładka na pulpit (macOS, Windows, Linux w becie), która słucha dźwięku rozmowy, rozpoznaje mowę i podpowiada odpowiedzi na żywo, a także rozwiązuje zadania z kodu na podstawie zrzutu ekranu. W darmowym planie nie trzeba karty (5 minut rozpoznawania na żywo i 3 rozwiązania ze zrzutu). Zobacz też asystenta rozmów z kodowaniem. Dobrze sprawdza się w próbnych rozmowach.
Zasady: wiele firm zabrania pomocy z zewnątrz w trakcie testów i rozmów, a część monitoruje ekran. Przed prawdziwą rozmową zapytaj rekrutera, co jest dozwolone, i trzymaj się zasad z zaproszenia. Na macOS i Windows okno prosi system, by nie trafiało do przechwytywania ekranu; na Linuksie jest widoczne, a efekt zależy od programu do udostępniania, więc sprawdź go na prywatnym udostępnieniu (szczegóły). Nie ma gwarancji, a złamanie zasad może skończyć się dyskwalifikacją.
Źródła
- Just Join IT: rekrutacja na Backend Developera, przykładowe pytania
- Oracle Java SE 21: String
- Oracle Java SE 21: Object (equals/hashCode)
- Oracle Java SE 21: HashMap
- Oracle Java SE 21: ConcurrentHashMap
- Spring Framework: @Transactional
- PostgreSQL: JOIN-y
- PostgreSQL: indeksy
- PostgreSQL: izolacja transakcji
- MDN: Strict equality
- MDN: Closures
Sprawdzono 13.11.2026. Nie udało się potwierdzić, jakie dokładnie pytania zadają konkretne polskie firmy; to ogólne tematy, a odpowiedzi są ilustracyjne.
FAQ
Jakie są najczęstsze pytania rekrutacyjne z Javy?
Podstawy (String, equals/hashCode, kolekcje, wyjątki checked i unchecked), Spring i JPA, SQL oraz REST. Oficjalnej listy firm nie ma, więc czytaj ogłoszenie i przygotuj tematy, które się w nim pojawiają.
Dlaczego String w Javie jest niemutowalny?
Dokumentacja mówi, że obiekty String są stałe i dlatego można je współdzielić. Daje to bezpieczeństwo wątkowe i stabilny klucz w mapach; kosztem jest tworzenie nowych obiektów przy wielokrotnym łączeniu.
Czym różni się INNER JOIN od LEFT JOIN?
INNER JOIN zwraca tylko dopasowane wiersze. LEFT JOIN zwraca też wiersze lewej tabeli bez dopasowania, z NULL po prawej stronie, więc wynik ma co najmniej jeden wiersz na każdy wiersz lewej tabeli.
Czemu @Transactional nie zadziałało w mojej metodzie?
W domyślnym trybie proxy wywołanie metody z tej samej klasy nie przechodzi przez proxy i nie uruchamia transakcji. Przenieś logikę do osobnego beana lub użyj trybu AspectJ.
Czym różni się == od === w JavaScript?
== konwertuje typy przed porównaniem, === nigdy tego nie robi i przy różnych typach zwraca false. NaN === NaN daje false.
Czy mogę korzystać z AI na rozmowie technicznej?
To zależy od zasad firmy, a wiele z nich tego zabrania. Zapytaj rekrutera przed prawdziwą rozmową i trzymaj się zaproszenia; do treningu narzędzi używaj dowolnie.