Ostatnie przygody ze zmianą firmy pozwoliły mi zebrać nieco materiałów na temat tego jak aktualnie wyglądają rekrutacje na stanowisko Senior Java Developera. Gdzieś w chmurach przetrwały również moje prywatne notatki, które poczyniłem przy wcześniejszej rekrutacji na stanowisko „regulara”. W końcu postanowiłem zebrać wszystko razem, skondensować i opublikować.
Część HR-owa
Zanim przejdziemy do części technicznej, najpierw trzeba przebrnąć spotkanie z kimś od HR-ów. W większości przypadków są to „luźne rozmowy o życiu” mające na celu wstępną weryfikację pod kątem oferty pracodawcy oraz uzyskanie informacji o oczekiwaniach kandydata. Na tym etapie trzeba przede wszystkim przygotować odpowiedzi na pytania typu:
- Dlaczego myślisz o zmianie pracy/projektu?
- Jak wyglądał Twój ostatni projekt i czym się w nim zajmował[a|e]ś?
- Czy bardziej lubisz frontend/backend/devops/etc?
- Czym będziesz kierować się w wyborze kolejnego projektu/zleceniodawcy?
- Jakie są Twoje oczekiwania finansowe?
Powyższe pytania powtarzały się najczęściej. Ale oprócz nich, zdarzały się również takie bardziej unikatowe strzały:
- Oceń, w skali od 1 do 10, tempo Twojej pracy w porównaniu do reszty zespołu.
- Jakie są Twoje mocne strony?
- Jakie są Twoje słabe strony?
- Czego najbardziej nie lubisz u swoich współpracowników?
- Co najbardziej cenisz w kolegach/koleżankach z zespołu?
Część techniczna
Najczęstsze pytania
Tak jak wspominałem wcześniej, rozmowy techniczne przybierają różnorakie formy. Te najbardziej podstawowe, składające się z serii pytań, poruszają następujące zagadnienia:
Ogólne
- SOLID. Mnemonik, o który pytano mnie na wszystkie możliwe sposoby. Padały prośby o opowiedzenie swoimi słowami o wszystkich elementach. Pytano również dogłębnie o poszczególne zasady i własne przykłady. Warto go dobrze przyswoić i rozumieć.
- Kiedy warto używać cache’a?
- Jaka jest różnica pomiędzy procesem, a wątkiem?
- Czym jest fluent API?
- Co to jest closure i jak wygląda w porównaniu z lambdą?
- Wymień i krótko omów cechy programowania obiektowego.
- Jakie znasz modele architektoniczne kodu?
Wzorce projektowe
- Wymień 3 wzorce projektowe i przykłady ich użycia.
- Podaj różnicę pomiędzy wzorcami factory i builder.
- Jakie są problemy z singletonem? Dlaczego uważany jest za antywzorzec?
- Jaki wzorzec projektowy wykorzystywany jest w filtrach z Javy EE?
- Jaki wzorzec projektowy wykorzystywany jest w JDBC?
Java
- Co sprawia, że klasa w Javie jest thread-safe? Przykłady klas thread-safe w Javie.
- Do czego służy i jak używać mechanizm serializacji w Javie?
- Wyjaśnij rolę słówka kluczowego
transient
w Javie.
- Wyjaśnij rolę słówka kluczowego
synchronized
w Javie.
- Do czego służy
serialVersionUID
w Javie?
- Przykład użycia checked i unchecked exception w Javie.
- Co się kryje w
java.util.concurrent
?
- Jak działa Garbage Collector?
- Rodzaje pamięci w Javie.
- Jak działa wait/notify?
- Co nowego pojawiło się w N-tej wersji Javy?
- Jaka jest różnica pomiędzy
TreeSet
i LinkedHashSet
?
- Jaka jest różnica pomiędzy
TreeMap
i LinkedHashMap
?
- Jaka jest różnica pomiędzy
HashMap
, ConcurrentHashMap
i Collections.synchronizedMap
?
- Jak wygląda hierarchia wyjątków/errorów w Javie?
- Do czego służą metody
hashCode
i equals
?
- Czym różni się
Comparable
od Comparator
a?
- Co to jest diamond problem i czy występuje w Javie?
- Kiedy użyć metody
flatMap
na Stream
ie?
- Kiedy użyć metody
reduce
na Stream
ie?
Spring
- Podaj przykład dwóch adnotacji w Springu. Jak je używasz?
- Jaka jest różnica pomiędzy adnotacjami
@Bean
i @Component
w Springu?
- Jaka jest różnica pomiędzy adnotacjami
@Service
i @Component
w Springu?
- Jak technicznie działa
@Transactional
?
- Jakie są rodzaje zasięgu (scope) w Springu?
- Jaka jest przewaga wstrzykiwania zależności poprzez konstruktor vs. wstrzykiwania poprzez parametry?
Bazy danych
- ACID. Pojawiał się nieco rzadziej niż SOLID, ale jak temat schodził na relacyjne bazy danych, to bez kwasu się nie obyło 😉
- Różnice pomiędzy relacyjnymi, a nie relacyjnymi bazami danych. Kiedy zastosowałbym jedne, a kiedy drugie?
- Jaka jest różnica pomiędzy widokiem, a widokiem zmaterializowanym?
- Co oznacza termin eventual consistency?
- Teoria CAP – czym jest i czego dotyczy?
- Czego dotyczy problem N+1 zapytań?
- W jakich przypadkach zastosowałbyś bazy NoSQL?
- Wyjaśnij różnicę pomiędzy optimistic, a pessimistic locking.
- Opowiedz o poziomach cache’a w JPA.
- Jak działa lazy loading wewnątrz JPA?
- Jaka jest różnica pomiędzy metodami
get
i load
w Hibernate?
- Opisz poziomy izolacji transakcji w bazie danych
- Jak działa
explain
w bazach danych?
- Jakie są rodzaje indeksów w bazach danych?
- Czy można tworzyć indeksy na widokach w bazach danych?
- Jaka jest różnica pomiędzy funkcjami i procedurami składowanymi w bazach danych?
Web
- Czy
HttpSession
jest thread-safe?
- Co to jest WebSocket?
- Dlaczego REST jest REST-em?
- Czy REST może używać XML-a?
- Czy HTTP jest stanowy?
Mikroserwisy
- Czym różni się choreografia od orkiestracji mikroserwisów? Czym jest command, a czym event w tym przypadku?
- Na czym polega wzorzec Circuit Breaker?
- Do czego służą i jak działają wzorce inbox i outbox?
- Jakie są sposoby na komunikację pomiędzy mikroserwisami?
* polecam: 12 Microservices Patterns I Wish I Knew Before the System Design Interview
Testy
- Po co są testy?
- Jakie są różnice pomiędzy testami integracyjnymi, a jednostkowymi?
- Co to są black i white testy?
Bezpieczeństwo
- OWASP Top Ten. Najczęściej pytano o wymienienie kilku pozycji z listy i jak im zapobiegać/przeciwdziałać.
Inne
- Co to jest ELK?
- Jak działa Apache Kafka i do czego służy?
- Jaki element/node jest potrzebny Kafke do działania? Chodziło o ZooKeepera.
Te pytania padły głównie dlatego, że miałem akurat Elasticsearch oraz Apache Kafka w CV.
Jeżeli nie seria pytań, to co?
Oprócz typowych serii pytań odbyłem również kilka „bardziej unikatowych” etapów technicznych, w tym:
- Rozwiązywanie zadań na HackerRank.
- Rozwiązywanie zadań w stylu tych na HackerRank, ale w sesji programowania na żywo.
- Luźniejsza rozmowa techniczna, w której większość prawidłowych odpowiedzi zaczynała się od „to zależy” 🙂
- Review dostarczonego fragmentu kodu.
- System Design Interview
Przygotuj swoje własne pytania
Kiedy padną już wszystkie pytania HR-owe i techniczne, zadane zostanie Ci to najtrudniejsze: Jakie masz do nas pytania? W tym momencie warto mieć w zanadrzu przygotowany zestaw pytań, żeby pokazać swoje zainteresowanie projektem, zespołem, czy technologiami i żeby uniknąć „tej niezręcznej ciszy” 🙂
Dodasz coś od siebie?
To na ten moment wszystko co udało mi się zebrać, usystematyzować i przedstawić w skondensowany sposób w jednym wpisie. Niemniej jednak, mam świadomość, że to nie wszystkie możliwe pytania jakie mogą paść.
Mam więc prośbę do Ciebie. Jeżeli masz jakieś „ulubione” pytania lub zagadnienia, z rozmów kwalifikacyjnych, które wyjątkowo zapadły Ci w pamięci, to śmiało wrzucaj je w komentarzach poniżej. Będę starał się aktualizować artykuł na bieżąco.
Z drugiej strony, jeżeli będziesz miał(a) jakiekolwiek pytania do tego co napisałem powyżej, to również śmiało pytaj w komentarzach – postaram się zaktualizować.
Bądź na bieżąco!
Podobają Ci się treści publikowane na moim blogu? Nie chcesz niczego pominąć? Zachęcam Cię do subskrybowania kanału RSS, polubienia fanpage na Facebooku, zapisania się na listę mailingową:
lub śledzenia mnie na Twitterze. Generalnie polecam wykonanie wszystkich tych czynności, bo często zdarza się tak, że daną treść wrzucam tylko w jedno miejsce. Zawsze możesz zrobić to na próbę, a jeśli Ci się nie spodoba – zrezygnować
Dołącz do grup na Facebooku
Chcesz więcej? W takim razie zapraszam Cię do dołączenia do powiązanych grup na Facebooku, gdzie znajdziesz dodatkowe informacje na poruszane tutaj tematy, możesz podzielić się własnymi doświadczeniami i przemyśleniami, a przede wszystkim poznasz ludzi interesujących się tą samą tematyką co Ty.
W grupie Programista Na Swoim znajdziesz wiele doświadczonych osób chętnych do porozmawiania na tematy krążące wokół samozatrudnienia i prowadzenia programistycznej działalności gospodarczej. Vademecum Juniora przeznaczone jest zaś do wymiany wiedzy i doświadczeń na temat życia, kariery i problemów (niekoniecznie młodego) programisty.
Wesprzyj mnie
Jeżeli znalezione tutaj treści sprawiły, że masz ochotę wesprzeć moją działalność online, to zobacz na ile różnych sposobów możesz to zrobić. Niezależnie od tego co wybierzesz, będę Ci za to ogromnie wdzięczny.
Na wsparciu możesz także samemu zyskać. Wystarczy, że rzucisz okiem na listę różnych narzędzi, które używam i polecam. Decydując się na skorzystanie z któregokolwiek linku referencyjnego otrzymasz bonus również dla siebie.
Picture Credits
30 października 2023 at 15:32
Oprocz pytan, miales jakies live kodowania podczas interview? Moze pamietasz jakies przykladowe zadania.
30 października 2023 at 21:50
Takiego typowego live-codingu nie miałem nigdzie. Były zapowiedzi, ale z różnych powodów do tych etapów nie docierałem.
Z rzeczy, które były najbliżej live-codingu to:
Poza tym kodowanie opierało się na zadaniach domowych lub na platformach sprawdzających.
29 października 2023 at 09:53
Na część z tych zagadnień + kilka innych z System Design można znaleźć fajne, zwięzłe wyjaśnienia w tym repo: https://github.com/ByteByteGoHq/system-design-101
29 października 2023 at 22:45
27 października 2023 at 12:08
Jeszcze odpowiedzi by się przydały 🙂 lub źródła
27 października 2023 at 17:47
Odpowiedzi będą dostępne w płatnej wersji PRO 😛
Żarcik. Faktycznie myślałem o opracowaniu każdego z pytań lub podlinkowaniu jakichś materiałów, ale w swoich notatkach w większości mam „bazgroły” i musiałbym do tego solidnie przysiąść.
27 października 2023 at 11:14
Bardzo fajny wpis, lecz zastanawiam się (sorrki, jeśli podałeś w takim razem przegapiłem):
Czy te pytania padły podczas Twoich rekrutacji czy pochodzą głównie z internetu.
Jeśli na Twoich, to na jakiej ilości rekrutacji została zbudowana lista?
dzięki!
27 października 2023 at 11:35
Dzięki!
Na podstawie moich doświadczeń.
Jeżeli chodzi o ilość rekrutacji, to odsyłam do poprzednich wpisów: