Java HR: ściąga na rozmowę rekrutacyjną
Pierwszy post na blogu postanowiłem poświęcić na najbardziej podstawowe informacje dotyczące tego, czym zajmuję się zawodowo i co znam z technologii w największym stopniu – Javy (przede wszystkim w wersji 8).
Właściwie będzie to raczej wpis agregujący właściwe artykuły dotyczące poszczególnych zagadnień, w postaci aktualizowanej na bieżąco listy pytań z rozmów rekrutacyjnych i prawidłowych odpowiedzi.
Dla jednych może to być forma wprowadzenia w programowanie ogółem, dla innych pomoc przy zajęciach z pierwszego semestru na studiach, ale piszę to też dla takich osób jak ja – jako ściągawkę do odświeżenia sobie pamięci przed rozmową rekrutacyjną. Zwłaszcza, że dotyka to często zagadnień na tak podstawowym poziomie, że nie wykorzystujemy tej wiedzy na co dzień w pracy, przez co łatwo jest zapomnieć jak to w teorii działa.
Nie oszukujmy się – jak często jako, przykładowo, programista aplikacji webowych, musimy policzyć złożoność obliczeniową algorytmu korzystając z notacji big-O?
Albo jak często przy tego typu pracy użyjemy metody finalize()? A są to jedne z częstszych pytań, z jakimi trzeba się zmierzyć przy aplikowaniu na takie właśnie stanowisko. Dlatego nawet pracując wiele miesięcy dokładnie w tych samych technologiach, jakich będziemy używać w nowej pracy, bez wcześniejszego przygotowania wciąż można mieć problem z odpowiedzią na niektóre pytania.
Pytania zgromadziłem z własnego doświadczenia, głównie z wakacji w 2017 r. gdy odbyłem we Wrocławiu kilkanaście rozmów rekrutacyjnych na stanowisko Junior Java Developer. Oczywiście niekoniecznie muszą one dotyczyć samego języka – jako programista Javy, a właściwie jako jakikolwiek programista, powinno się znać też ogólne wzorce programistyczne i architektoniczne, a także technologie poboczne, ale wykorzystywane na podobnym stanowisku w prawie każdym przypadku – takie jak Spring, SQL czy jakiś inny HTML i CSS.
Wiele z nich powtarzało się wielokrotnie, na różnych rozmowach, dlatego należy na nie zwrócić szczególną uwagę i opanować je w największym stopniu – te zagadnienia pogrubiłem na mojej liście.
W przyszłości lista będzie rozszerzana o kolejne pytania, wraz z nabywaniem nowego doświadczenia w tym zakresie, być może dodam też najpopularniejsze pytania znalezione w internecie. Zależy mi przede wszystkim na tym, żeby były one realne i aktualne, takie których faktycznie można się w praktyce spodziewać w czasie procesu rekrutacji.
Należy jednocześnie zaznaczyć, że nie będę się zbytnio pochylać nad każdym zagadnieniem, kompleksowo opisując wszystko co się da na jego temat – takich artykułów jest już w internecie całe mnóstwo. Nie zawsze jednak ma się ochotę na czytanie wielkich ścian tekstu. Dla osoby początkującej nieraz wystarczy powierzchowne i skrótowe zrozumienie tematu, tak aby nie utopić się w oceanie nowych informacji. Natomiast dla osoby bardziej zaawansowanej, taki format swoistego cheatsheetu pozwoli na szybkie odświeżenie pamięci, skoro pełniejszą wiedzę posiadła już wcześniej.
W opracowaniu niniejszych zagadnień opierałem się w dużym stopniu na takich tytułach jak Java w pigułce, wydanie VI (Benjamin J Evans, David Flanagan) oraz Java 8. Przewodnik doświadczonego programisty (Cay S. Horstmann)
Java:
- Metody equals() i hashCode()
- Zależności między klasami i metodami – przeciążanie i przesłanianie
- Polimorfizm w Javie
- Generyczność w Javie
- Modyfikatory dostępu
- Struktury danych w Javie
- Wyjątki w Javie (error vs exception, checked vs unchecked)
- Obiekty niezmienne (immutable)
- StringBuffer i StringBuilder
- Wielowątkowość
- Wewnętrzne klasy w Javie
- Czy kod w bloku finally zawsze się wykona?
- Final, finally i finalize
Java 8:
- Interfejsy funkcyjne
- Wyrażenia lambda
- Optional
Architektura:
- Metodologia SOLID
- Wzorce projektowe: Fabryka i fabryka abstrakcyjna
- Wzorce projektowe: Singleton
- Wzorce projektowe: Budowniczy
- Wzorce projektowe: pozostałe
- Inversion of Control
- MVC
- Notacja Big-O
- Wątek vs proces
- Metody testowania oprogramowania
- Mockowanie w testach
Web:
- SOAP vs REST
- HTTP vs HTTPS
- Wstrzykiwanie zależności – różne sposoby
- Co pojawiło się nowego w HTML5?
SQL:
- Podstawy SQL
- SQL: wyzwalacze (triggery)
- SQL: join i jego wszystkie rodzaje
Jeśli macie przykłady innych pytań, z którymi mieliście do czynienia na rozmowach, będę wdzięczny za każdą taką propozycję w komentarzu 🙂
Informatyk, programista. Obecnie Java Developer (Web Fullstack), właściciel studia Berrygames oraz prezes koła TK Games na Politechnice Wrocławskiej.