5.05.20227 min

Mateusz JaroszRedakcja Bulldogjob

Java Developer – rozmowa rekrutacyjna

Planujesz zostać Programistą Java? W tym artykule dowiesz się, jak przygotować się na rozmowy kwalifikacyjne Java Developera i poznasz przykładowe pytania rekrutacyjne!

Java Developer – rozmowa rekrutacyjna

Od wielu lat nie brakuje opinii, że oto jesteśmy świadkami końca Javy, mają one już charakter niemal memiczny. Tymczasem Java nadal radzi sobie świetnie, jest głównym językiem programowania dla ogromnej liczby pracowników branży IT. Jak zatem przygotować się na rozmowę kwalifikacyjną na stanowisko Java Developera?


Java Developer w Polsce

Zanim przejdziemy do szczegółów, warto w pierwszej kolejności nakreślić, kim jest dziś w Polsce Java Developer. Posłuży nam do tego Raport z Badania Społeczności IT, według którego Javę zna aż 34% badanych. Co ważne, jest to główny język programowania wśród backendowców (39%), którzy są także najliczniejszą w Polsce grupą wśród wszystkich specjalizacji IT. Java Developerzy najczęściej znają także SQL (61%), JavaScript(43%)  i HTML i CSS (34%).

Developerzy Java są w Polsce nieźle wynagradzani na tle programistów pracujących z innymi językami. W przypadku umowy o pracę javowiec może liczyć średnio na 8 275 zł, jest to zatem więcej niż pensja programistów korzystających w pracy Pythona, C# czy JavaScript. W przypadku developerów Java zatrudnionych w formacie B2B średnie zarobki wynoszą 18 629 zł, przy czym są to zarobki netto na fakturze. Zlecenia i dzieła wyceniane są średnio na 5 875 zł miesięcznie. 


Frameworki i biblioteki

Przed rozmową rekrutacyjny należy wiedzieć, że Java to język obiektowy z silnym typowaniem wykorzystujący do wykonywania kodu maszynę wirtualną. Ma to duże znaczenie – dzięki niej możliwe jest uruchomienie kodu pisanego w Javie na wielu platformach i architekturach, ale stanowi to także pewnie wyzwanie. 

Kompilacja kodu źródłowego do kodu pośredniego sprawia, że programy napisane w Javie bywają wolniejsze niż te kompilowane bezpośrednio. Między innymi dlatego nigdy nie udało się zrealizować założeń, które pierwotnie stały za narodzinami Javy, miała ona bowiem być następczynią C++ jako główny uniwersalny język ogólnego przeznaczenia.

Od lat najpopularniejszym javowym frameworkiem pozostaje Spring. Jest to wolne oprogramowanie dystrybuowane bezpłatnie na licencji Apache 2.0. Narzędzie oferuje mnogość komponentów stanowiących szablony. Wśród nich warto wspomnieć między innymi o kontenerze IoC pozwalającym stosować technikę inwersji kontroli, szablon Model-Widok-Kontroler czy szablon pozwalający na wdrożenie uwierzytelnia użytkowników. Ze szczegółami na temat Springa można zapoznać się w dokumentacji frameworka

Mniejszą popularnością niż Spring cieszy się rozwijany przez firmę Red Hat framework Hibernate, z którego korzysta 26% programistów Java. Jego rdzeniem jest, nomen omen, Hibernate Core, czyli biblioteka, dzięki której z użyciem plików XML w Javie można przeprowadzać mapowania obiektowo-relacyjne. Pewną popularnością cieszy się także wśród javowców framework Angular.

W ramach przygotowań do rozmowy rekrutacyjnej bez wątpienia warto sobie także odświeżyć informację na temat najpopularniejszych bibliotek. Najpopularniejszą z nich jest najpewniej JUnit, którą wykorzystuje się do przeprowadzania testów oprogramowania. Ponadto warto wiedzieć o bibliotece Guava, czyli zestawie narzędzi opracowanych przez Google na wewnętrzne potrzeby. Trzeba przecież pamiętać, że jeszcze kilka lat temu Java była głównym językiem programowania na Androidzie i dopiero relatywnie niedawno została zastąpiona przez Kotlin. Popularna jest także biblioteka Log4j służąca do logowania, która co prawda pokryła się ostatnio pewną niesławą – o czym więcej pisaliśmy tutaj – niemniej wciąż jest wykorzystywana na bardzo dużą skalę.


Kluczowe zagadnienia 

Jak przystało na język obiektowe, kluczowe znaczenie w Javie mają klasy. A także obiekty będące instancjami klas oraz metody. Zakres zmiennych to liczby całkowite, zmiennoprzecinkowe i zmienne tekstowe. Podobnie jak w innych językach obiektowych ważnych cechami Javy jest dziedziczenie, enkapsulacja, abstrakcja, polymorfizm i interfejs. Kompilacja przebiega zgodnie z JiT, czyli jut-in-time (kompilowany jest tylko ten kod, który jest w danym przypadku potrzebny, nie zaś cały kod źródłowy, co może być podczas rozmowy podane przez kandydata jako przykład mechanizmów wpływających pozytywnie na wydajność Javy.

Ponadto w użyciu jest osiem typów głównych:

  • boolean – klasyczna logika Boole’a, przyjmująca wartości true lub false.
  • char – typ danych, w którym zawrzeć można dowolny jeden znak. Częściej od niego stosuje się oczywiście string, który jednak nie jest typem głównym. 
  • double – służący do przechowywania liczb zmiennoprzecinkowych typ o maksymalnej wielkości 8 bajtów, co przekłada się na wartość o maksymalnie 14-15 cyfrach po przecinku.
  • byte – bajt przechowujący liczby całkwotie z zakresu od -128 do 127.
  • float – podobnie jak double jest o typ danych liczb zmiennoprzecinkowych, różni się jednak wielkością. Zamiast 8 bajtów mamy tu 4 bajty.
  • int – typ dla liczb całkowitych od -2 147 483 648 do 2 147 483 647.
  • long – ośmiobajtowy typ dla liczb całkowitych od -263 do 263.
  • short – dwubajtowy typ liczb całkowitych od -32 768 do 32 767.

Jeśli zaś chodzi o stosowane w Javie, operatory matematyczne to wyróżnia się ich 5: +, -, * służący do mnożenia, / wykonujący dzielenie oraz % pozwalający na dzielenie z resztą. Oprócz tego w przypadku typu boolean stosowane są operatory logiczne. 


Przykładowe pytania

Po początkowej fazie rozmowy, podczas której można spodziewać się sprawdzenia umiejętności interpersonalnych, czy też tematów wynikających z charakteru projektu, nad którym będzie potencjalnie kandydat, należy spodziewać się pytań ogólnych, sprawdzających nie tylko ogólną wiedzę na temat języka. Po nich można się natomiast spodziewać konkretnych pytań technicznych. Przyjrzyjmy się tym, które pojawiają się najczęściej.


Czym jest w Javie dziedziczenie?

Dziedziczenie to funkcja Javy, dzięki której kod z jednej klasy może być wykorzystywany w innej klasie. Nowa klasa (sub class, podklasa) dziedziczy funkcje po istniejącej klasie (super class). Dzięki temu w Javie może dochodzić do ponownego wykorzystywania już raz napisanego kodu, w wyniku którego nowe klasy mogą otrzymywać po klasach typu super pola oraz metody. Każda klasa ma przynajmniej jedną klasę super, a w przypadku, jeśli ta nie zostanie określona, superklasą jest Object, który nie ma już nad sobą superklasy. 


Czym w Javie jest enkapsulacja?

Enkapsulacja nazywana jest także hermetyzacją danych. W dużym skrócie jest o funkcja Javy pozwalająca chronić dane. Wystarczy określić rodzaj zmiennej jako private, by niemożliwa była jej późniejsza modyfikacja przez inną klasę, zaś wartość zmiennej private jest dostępna wyłącznie dla jej własnej klasy. Modyfikatory zmiennych, które pozwalają korzystać z enkapsulacji to wspomniany już private, dzięki któremu dane są widocznie wyłącznie wewnątrz klasy. Wartość zmiennej private nie może być dziedziczona (patrzy wyżej). W przypadku braku modyfikatora (słowa kluczowego), wartość zmiennej jest widoczna w całej paczce. Słowo kluczowe protected pozwala na widoczność danych w paczce oraz dziedziczenie, publiczne dane są widoczne globalnie i mogą być dziedziczone.


Jaka jest różnica między tablicą i listami?

W przypadku tablic w Javie konieczne jest określanie ich rozmiaru w momencie deklarowania, umieszczenie obiektu wymaga zdefiniowania indeksu. Najważniejszą cechą list stanowiących różnicę w porównaniu tablicami jest dynamiczny rozmiar – nie trzeba go z góry określać w momencie deklarowania. Listy nie muszą mieć również indeksów.


Czym są słowa kluczowe?

Słowa kluczowe to 67 zarezerwowanych w Javie słów, które mają konkretne predefiniowane zastosowania. Z przykładami słów kluczowych mieliśmy już do czynienia – to właśnie opisane wyżej modyfikatory pozwalajace na hermetyzację danych. Słowami kluczowymi mgoą być także słowa określające typy zmiennych (np. string), pętle (np. while). 


Na czym polega nadpisywanie metod?

Pojęcie nadpisywania metod wynika bezpośrednio w wyniku dziedziczenia. Dochodzi do niego w sytuacji, kiedy podklasa ma zdeklarowane te same metody co superklasa. Aby doszło do nadpisania, muszą zostać spełnione następujące warunki: metoda w obu klasach musi mieć tę samą nazwę i parametry oraz musi zachodzić dziedziczenie. 


Co to są konstruktory?

Konstruktory w Javie są specjalnym rodzajem metod czy raczej są do nich podobnie. Konstruktory wykorzystuje się do inicjalizacji obiektów, może być także wykorzystywany do inicjalizacji wartości dla atrybutów obiektów. W stosunku do zwyczajnych metod występują zasadnicze różnice: konstruktory muszą mieć taką samą nazwę, jak klasy, w których są zdefiniowane, nie zwracają także typu ani void oraz są wywoływane wyłącznie raz, w momencie inicjalizacji obiektów.


Co powoduje zastosowanie słowa kluczowego final?

Zastosowanie słowa kluczowego final różni się w zależności wobec czego, je zastosujemy:

  • w stosunku do klasy skutkuje tym, że te nie będą już mogły być rozszerzane. Nie oznacza to jednak, że będzie ona niezmienna, po prostu nie będzie ona mogła być już rozszerzana. 
  • W przypadku metod zastosowanie słowa kluczowego final sprawi, że taka metoda nie będzie mogła zostać nadpisana.
  • Zmienne final nie mogą być zastąpione innymi po inicjalizacji, przypisana raz podczas deklarowania zmiennej wartość pozostaje niezmienna. 
  • Pola oznaczone jako final mogą być albo stałe albo jego wartość będzie można nadać wyłącznie raz 

Osobny etap rozmowy mogą stanowić praktyczne zadania, niewykluczone także, że kandydat będzie poproszony o odrobienie „pracy domowej” – wówczas zostanie on poproszony o rozwiązanie bardziej rozbudowanego problemu. Najpowszechniejszym rodzajem praktycznych zadań, których możemy się podczas rozmowy rekrutacyjnej, są te, gdzie kandydat proszony jest o przeanalizowanie kodu i podaniu na tej postawie jego rezultatów. Należy wówczas zachować czujność, gdyż często zadanie to ma sprawdzać znajomość niuansów czy też kruczków Javy, które mniej doświadczeni developerzy mogą przeoczyć.


Przydatne linki

Przykłady rzecz jasna można mnożyć, dlatego warto samodzielnie śledzić internetowe bezy danych. Na sam koniec, dla uzupełnienia lub odświeżenia, podrzucamy kilka przydatnych linków:

<p>Loading...</p>