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:

  1. Dlaczego myślisz o zmianie pracy/projektu?
  2. Jak wyglądał Twój ostatni projekt i czym się w nim zajmował[a|e]ś?
  3. Czy bardziej lubisz frontend/backend/devops/etc?
  4. Czym będziesz kierować się w wyborze kolejnego projektu/zleceniodawcy?
  5. 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:

  1. Oceń, w skali od 1 do 10, tempo Twojej pracy w porównaniu do reszty zespołu.
  2. Jakie są Twoje mocne strony?
  3. Jakie są Twoje słabe strony?
  4. Czego najbardziej nie lubisz u swoich współpracowników?
  5. 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

  1. 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ć.
  2. Kiedy warto używać cache’a?
  3. Jaka jest różnica pomiędzy procesem, a wątkiem?
  4. Czym jest fluent API?
  5. Co to jest closure i jak wygląda w porównaniu z lambdą?
  6. Wymień i krótko omów cechy programowania obiektowego.
  7. Jakie znasz modele architektoniczne kodu?

Wzorce projektowe

  1. Wymień 3 wzorce projektowe i przykłady ich użycia.
  2. Podaj różnicę pomiędzy wzorcami factorybuilder.
  3. Jakie są problemy z singletonem? Dlaczego uważany jest za antywzorzec?
  4. Jaki wzorzec projektowy wykorzystywany jest w filtrach z Javy EE?
  5. Jaki wzorzec projektowy wykorzystywany jest w JDBC?

Java

  1. Co sprawia, że klasa w Javie jest thread-safe? Przykłady klas thread-safe w Javie.
  2. Do czego służy i jak używać mechanizm serializacji w Javie?
  3. Wyjaśnij rolę słówka kluczowego transient w Javie.
  4. Wyjaśnij rolę słówka kluczowego synchronized w Javie.
  5. Do czego służy serialVersionUID w Javie?
  6. Przykład użycia checked i unchecked exception w Javie.
  7. Co się kryje w java.util.concurrent?
  8. Jak działa Garbage Collector?
  9. Rodzaje pamięci w Javie.
  10. Jak działa wait/notify?
  11. Co nowego pojawiło się w N-tej wersji Javy?
  12. Jaka jest różnica pomiędzy TreeSetLinkedHashSet?
  13. Jaka jest różnica pomiędzy TreeMapLinkedHashMap?
  14. Jaka jest różnica pomiędzy HashMap, ConcurrentHashMapCollections.synchronizedMap?
  15. Jak wygląda hierarchia wyjątków/errorów w Javie?
  16. Do czego służą metody hashCodeequals?
  17. Czym różni się Comparable od Comparatora?
  18. Co to jest diamond problem i czy występuje w Javie?
  19. Kiedy użyć metody flatMap na Streamie?
  20. Kiedy użyć metody reduce na Streamie?

Spring

  1. Podaj przykład dwóch adnotacji w Springu. Jak je używasz?
  2. Jaka jest różnica pomiędzy adnotacjami @Bean@Component w Springu?
  3. Jaka jest różnica pomiędzy adnotacjami @Service@Component w Springu?
  4. Jak technicznie działa @Transactional?
  5. Jakie są rodzaje zasięgu (scope) w Springu?
  6. Jaka jest przewaga wstrzykiwania zależności poprzez konstruktor vs. wstrzykiwania poprzez parametry?

Bazy danych

  1. ACID. Pojawiał się nieco rzadziej niż SOLID, ale jak temat schodził na relacyjne bazy danych, to bez kwasu się nie obyło 😉
  2. Różnice pomiędzy relacyjnymi, a nie relacyjnymi bazami danych. Kiedy zastosowałbym jedne, a kiedy drugie?
  3. Jaka jest różnica pomiędzy widokiem, a widokiem zmaterializowanym?
  4. Co oznacza termin eventual consistency?
  5. Teoria CAP – czym jest i czego dotyczy?
  6. Czego dotyczy problem N+1 zapytań?
  7. W jakich przypadkach zastosowałbyś bazy NoSQL?
  8. Wyjaśnij różnicę pomiędzy optimistic, a pessimistic locking.
  9. Opowiedz o poziomach cache’a w JPA.
  10. Jak działa lazy loading wewnątrz JPA?
  11. Jaka jest różnica pomiędzy metodami getload w Hibernate?
  12. Opisz poziomy izolacji transakcji w bazie danych
  13. Jak działa explain w bazach danych?
  14. Jakie są rodzaje indeksów w bazach danych?
  15. Czy można tworzyć indeksy na widokach w bazach danych?
  16. Jaka jest różnica pomiędzy funkcjami i procedurami składowanymi w bazach danych?

Web

  1. Czy HttpSession jest thread-safe?
  2. Co to jest WebSocket?
  3. Dlaczego REST jest REST-em?
  4. Czy REST może używać XML-a?
  5. Czy HTTP jest stanowy?

Mikroserwisy

  1. Czym różni się choreografia od orkiestracji mikroserwisów? Czym jest command, a czym event w tym przypadku?
  2. Na czym polega wzorzec Circuit Breaker?
  3. Do czego służą i jak działają wzorce inbox i outbox?
  4. Jakie są sposoby na komunikację pomiędzy mikroserwisami?

* polecam: 12 Microservices Patterns I Wish I Knew Before the System Design Interview

Testy

  1. Po co są testy?
  2. Jakie są różnice pomiędzy testami integracyjnymi, a jednostkowymi?
  3. Co to są black i white testy?

Bezpieczeństwo

  1. OWASP Top Ten. Najczęściej pytano o wymienienie kilku pozycji z listy i jak im zapobiegać/przeciwdziałać.

Inne

  1. Co to jest ELK?
  2. Jak działa Apache Kafka i do czego służy?
  3. 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ą:

Dołączając do newslettera #NoweRozdanie2 otrzymasz dostęp do dodatkowych materiałów:

  • PDF: „Jednoosobowa działalność gospodarcza krok po kroku” (do artykułu)
  • PDF: „FAQ: Jak pracuje się dla Roche/Sii?” (do artykułu)
  • PDF: „Jak zmniejszyć prawdopodobieństwo wystąpienia kontroli i co zrobić kiedy urzędnik zapuka do Twoich drzwi?” (do artykułu)

Powyższe dane są przechowywane w systemie Mailchimp i nie są udostępniane nikomu innemu. Więcej szczegółów znajdziesz na stronie polityki prywatności.

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.

Postaw mi kawę na buycoffee.to

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