Parę tygodni temu obiecałem przygotować listę pytań jakie otrzymałem w trakcie technicznej rozmowy rekrutacyjnej (2 etap w procesie mojej rekrutacji na stanowisko Senior Developera w norweskim Software House).
Poniżej lista pytań i zastanawiam się co jeszcze mi umknęło… mój błąd, że nie spisałem ich wszystkich od razu po rozmowie 😅
W miarę możliwości będę również dodawał odpowiedzi na wszystkie pytania jeśli pojawią się one gdzieś w moich materiałach. Sama rozmowa trwała około 2h. Jeśli interesuje Cię całościowy jej przebieg oraz jak i dlaczego poukładałem sobie pytania, które były mi zadawane, to zachęcam do obejrzenia:
Spring
- Rodzaje beanów i ich przeznaczenie
https://bykowski.pl/spring-boot-czesc-2-adnotacje-obiekty-zarzadzane/ [Dostęp otwarty]
https://www.akademiaspring.pl/kurs-spring-boot-2/tydzien-2/czym-jest-bean/ [Dostęp dla członków AkademiaSpring.pl] - Jakie znasz zasięgi beanów (@Scope)? Do czego one służą? Podaj przykład wykorzystania.
https://www.akademiaspring.pl/kurs-spring-boot-2/tydzien-4/bonus-zasiegi-beanow-scope/ [Dostęp dla członków AkademiaSpring.pl] - Czym jest i jak działa Spring Container?
https://www.akademiaspring.pl/kurs-spring-boot-2/tydzien-2/jak-dziala-kontener/ [Dostęp dla członków AkademiaSpring.pl] - Czym są profile? Jak można je wykorzystać?
https://bykowski.pl/spring-boot-24-budowanie-profili/ [Dostęp otwarty]
https://www.akademiaspring.pl/kurs-spring-boot-2/tydzien-2/profilowanie/ [Dostęp dla członków AkademiaSpring.pl] - Czym są interoceptory? Jak można je wykorzystać? Czy są znamiennikiem dla AOP?
https://www.akademiaspring.pl/kurs-spring-boot-2/tydzien-6/programowanie-aspektowe-teoria/ [Dostęp dla członków AkademiaSpring.pl] - Czym jest repozytorium Spring? Jak z niego korzystać? Jak działają elastyczne formuły?
https://www.akademiaspring.pl/kurs-spring-boot-2/tydzien-8/elastyczne-formuly-repozytorium/ [Dostęp dla członków AkademiaSpring.pl] - Uwierzytelnienie użytkownika w aplikacji – Sposoby, podejścia, kiedy jakie stosować, jak to rozwiązać w REST API – omów na przykładzie (Tu głównie chodziło, aby wskazać wady zalety basic auth i zestawić je z JWT. To pytanie zajęło największą cześć rozmowy)
https://www.akademiaspring.pl/spring-boot-2-skuteczne-zabezpieczanie-aplikacji-edycja-1/modul-5/zabezpieczenie-api-z-wykorzystaniem-basic-authentication/ [Dostęp dla członków AkademiaSpring.pl]
https://www.akademiaspring.pl/spring-boot-2-skuteczne-zabezpieczanie-aplikacji-edycja-1/modul-5/niebezpieczenstwa-wynikajace-ze-stosowania-basic-authentication-dla-api/ [Dostęp dla członków AkademiaSpring.pl]
https://www.akademiaspring.pl/spring-boot-2-skuteczne-zabezpieczanie-aplikacji-edycja-1/modul-6/tworzenie-api-zabezpieczonego-przez-jwt/ [Dostęp dla członków AkademiaSpring.pl]
DevOps
- Czym jest CI/CD – opisz przeznaczenie i flow
https://www.youtube.com/watch?v=Ria4mj8XCt8&list=PLUtcRmGoaP25uMppQouFXWLcj3KXTuZWu [Dostęp otwarty] - Jak wygląda proces wytwórczy oprogramowania?
To pytanie nawiązywało do poprzedniego, polegała opowiedzeniu jak wygląda praca w zespole – że programista robi pusha, później trafia do do CI, w zależności od polityki wdrażane jest na różne środowiska dev/test/stage/ z różnymi profilami, robienie CR po drodze itp… - Czym jest konteneryzacja?
https://bykowski.pl/docker-konteneryzacja-wirtualizacja-emulacja-i-symulacja/ [Dostęp otwarty] - Czym jest Docker? – polecenia, zastosowanie, przykłady, działanie
https://www.youtube.com/watch?v=cqIu1h8FkMw [Dostęp otwarty] - Czym jest Kubernetes? Opisz jego możliwe zastosowania.
Nie mam materiału na ten temat, ale zrobimy jakiś LiveStream o tym 🙂 - Cloud – może doświadczenia z poszczególnymi providerami (bardzo otwarte pytanie)
Algorytmika
Same zadania nie były trudne, chociaż w obliczu stresu i presji wymagały one opanowania (czyli czegoś czego zupełnie nie mam 😅). W skrypcie rekrutacyjnym do którego miałem później dostęp wyczytałem, że ta część miała za zadanie:
Things to clarify: Problem-solving, time and stress management, communication and planning skills
Czyli bardziej rozplanowanie zadań i podejścia do nich niż jakościowy kod. Same algorytmy przygotowałem poprawne, jednak kod nie kompilował mi się w żadnym przypadku – rozwiązania musiałem pisać w środowisku, które nie wspierało podpowiadania składni, formatowania tekstu, ani podkreślania linii kodu, kiedy coś pominiemy. Czasu było niedużo, więc w zadaniach, które dostałem nie obsłużyłem walidacji danych.
- Print the numbers from 1 to 100 and print „Fizz” for multiples of 3, print „Buzz” for multiples of 5, and print „FizzBuzz” for multiples of both
- Given two arrays of integers, compute the pair of values (one value in each array) with the smallest (non-negative) difference. Return the difference.
Input: (1, 3, 15, 11, 2), (23, 127, 235, 19, 8) Output 3, the pair is (11, 8) - Given a list of people with their birth and death years, implement a method to compute the year with the most number of people alive. You may assume that all people were born between 1900 and 2000 (inclusive). If a person was alive during any portion of that year, they should be included in that year’s count. For example, Person (birth = 1908, death = 1909) is included in the counts for both 1908 and 1909
- Miałem jeszcze zadanie spoza listy – dlatego nie mam do niego treści, ale zadanie polegało, na odwróceniu String’a. np. „Boo” zamieniało na „ooB”. To zadanie najpewniej miało sprawdzić czy zrobię to wykorzystując pętle, czy API StringBuildera 🙂
Podsumowanie
Luźno się rozmawiało i meeeega przyjemnie 🙂 Podobało mi się, że osoba odpowiedzialna za rozmowę techniczną nie narzucała mi presji i poziomu stresu, lecz bardzo pozytywnym nastawieniem skutecznie go zbijała.
Na niektórych rozmowach rekrutacyjnych można zauważyć, że rekruter przyjmuje dosadny ton i traktuje nas z pozycji wyższego od siebie – czasem, żeby podbudować sobie ego. Czasem, tylko po to, aby sprawdzić czy poradzimy sobie w sytuacji stresowych (jeśli w danej firmie występują one często i wymagany jest kandydat, który sobie z tym poradzi). Warto mieć tego świadomość, bo mnie jako dawnemu Juniorowi nikt tego nie powiedział i z wielu rozmów kwalifikacyjnych wychodziłem z podkulonym ogonem i utratą własnej wartości 😔. Często przy utracie własnej wartości jesteśmy w stanie się zgodzić na niższe wynagrodzenie, które pierwotnie sobie zakładaliśmy więc również warto jest o tym pamiętać 🙂
Wracając! Na dobrą sprawę, każde pytanie wypływało z poprzedniego i nie wyglądało to jak gradobicie. Na potrzeby tego artykułu wyłuskałem rzeczy o które mnie pytano, tak, aby sama forma była czytelna i prosta. Jednak przede wszystkim była to dyskusja, która miała za zadanie sprawdzić moje doświadczenie, a nie jedynie umiejętność odpowiedzenia na każde pytanie bezbłędnie 🙂
BTW: Na temat czystej Java nie miałem żadnego pytania, tak samo nie spytano mnie o wzorce projektowe, na co w sumie czekałem.
Coś jeszcze o Hibernate było jak nic… ale już nie pamiętam. Może jeszcze mi się przypomni 😁
Daj znać czy pytania dostałem trudne czy łatwe 🙂