Pytania i odpowiedzi na rozmowę kwalifikacyjną w języku Java w 2022 r.
Opublikowany: 2022-08-03Czy jesteś programistą? I wybrałeś język programowania Java jako preferowaną niszę do budowania kariery? Gratulacje! Wybrałeś słusznie. Według statystyk amerykański programista zarabia średnio 105 801 USD rocznie. To średnio 50,87 USD za godzinę, 2035 USD tygodniowo i 8817 USD miesięcznie. Czy to nie imponujące?
Ale zdobycie wymarzonej pracy jako programista Java jest poza myśleniem życzeniowym. Spośród 8 milionów programistów Java na całym świecie tylko około 56 585 jest zatrudnionych zarobkowo w Stanach Zjednoczonych, co sprawia, że poszukiwanie pracy jako programista Java jest dość konkurencyjne. Jeśli musisz zdobyć tę wymarzoną pracę, musisz być dobrze wyposażony zarówno w podstawowe, jak i złożone aspekty języka programowania Java.
Teraz już wiesz, jak konkurencyjna jest praca jako programista Java i wymaganie, aby być jednym z nielicznych, którzy otrzymają pracę jako programista Java. Pamiętaj, że sukces jest funkcją gotowości na spotkanie sposobności. W miarę postępów opracowaliśmy przewodnik z pytaniami i odpowiedziami, który pomoże Ci przejść przez fazę rozmowy kwalifikacyjnej i ewentualnie znaleźć wymarzoną pracę. Ta lista została stworzona za pomocą artykułu – przygotowanie do wywiadu java pytania i odpowiedzi na Apollotechnical. Zajmijmy się tym.
Podstawowe pytania do rozmowy kwalifikacyjnej w języku Java dla świeżo upieczonych

Co rozumiesz przez Javę?
Java to wszechstronny, zorientowany obiektowo i wieloplatformowy język programowania, używany na 3 miliardach urządzeń na całym świecie do różnych zadań, takich jak aplikacje społecznościowe, programy audio i wideo, gry, masowe przetwarzanie danych, urządzenia wbudowane i tak dalej.
Porównaj między Javą a Pythonem
W swojej prostocie Java jest uniwersalnym, obiektowym językiem programowania opartym na klasach, ale o mniejszej wymaganej specyfikacji. Ze względu na swoją reputację szybkiego, niezawodnego i ukierunkowanego na wyniki, jest to podstawowy język programowania do tworzenia aplikacji na telefony komórkowe, konsole do gier, laptopy, zaawansowane komputery naukowe itp. Z drugiej strony Python jest przetłumaczony, zorientowany obiektowo i ulepszony język programowania o dynamicznej strukturze. Python ułatwia elastyczność programu i ponowne wykorzystanie kodu, włączając moduły i pakiety.
Opisz główne funkcje Javy
- Java jest skoncentrowana na obiektach
- Java jest niezależna od platformy
- Ma doskonałą implementację wielowątkowości
- Używa prostego języka
- I czy architektura jest neutralna?
Co rozumiesz przez obiekt w Javie?
W Javie obiekt jest komponentem (znanym również jako „instancja”) innej grupy Javy o nazwie „klasa”. Każdy obiekt ma unikalny stan, zachowanie/działania i tożsamość. Pola (zmienne) przechowują stan obiektu, podczas gdy metodologie (operacje) przedstawiają działania obiektu. W czasie wykonywania obiekty są tworzone na podstawie struktur identyfikowanych jako klasy.
Obiekt może być również podstawowym elementem programowania obiektowego, który reprezentuje jednostki w świecie rzeczywistym.
Rozróżnij Stringbuffer i Stringbuilder w programowaniu Java
StringBuffer i StringBuilder różnią się przede wszystkim czterema parametrami: wydajność/szybkość, bezpieczeństwo wątków, dostępność i synchronizacja. StringBuilder to niezsynchronizowany wariant klasy StringBuffer.
Inną różnicą między StringBuffer i StringBuilder jest to, że ta pierwsza jest bezpieczna wątkowo, podczas gdy druga nie.
Rozróżnij JDK, JRE i JVM
Java Development Kit (JDK) obejmuje pisanie, rozwiązywanie problemów i analizowanie narzędzi programistycznych Java. JRE to zestaw klas i obiektów oraz innych towarzyszących plików, których JVM potrzebuje do uruchomienia aplikacji. JVM nie zapewnia żadnych narzędzi do tworzenia oprogramowania.
Java Development Kit (JDK) to oprogramowanie do tworzenia aplikacji Java. JRE to pakiet oprogramowania zawierający biblioteki klas Java i inne komponenty wymagane do uruchamiania programowania Java. Java Virtual Machine (JVM) interpretuje język bajtowy Java i tworzy atmosferę odpowiednią do wykonania. JDK jest zależne od platformy, JRE jest zależne od platformy, a JVM jest zależne od platformy na większą skalę.
Zdefiniuj dziedziczenie
W Javie dziedziczenie jest zasadą, która przenosi cechy jednej klasy do drugiej; Jest to struktura w Javie, dzięki której jedna klasa uzyskuje właściwości od innej lub pozwala jednej klasie posiadać cechy (metody i atrybuty) innej.
Czym jest klasa w Javie?
Klasa jest podstawowym elementem programowania obiektowego. Jest to format, który definiuje stan i funkcje przypisane do tworzenia instancji klasy. Klasa jest również szablonem logicznym, ponieważ służy do budowania modeli, które mają podobne atrybuty i metody.
Porównaj przeciążanie i zastępowanie w Javie
Przeciążanie odnosi się do posiadania metod tej samej klasy o tej samej nazwie, ale każda ma inne kryteria lub te same kryteria z różnymi typami i kolejnościami. Podczas zastępowania oznacza posiadanie podklasy z tymi samymi technikami pod tym samym tytułem co nadklasa i tym samym typem kryteriów i wartością zwracaną.
Ponadto przeciążanie jest polimorfizmem wiersza polecenia z wiązaniem statycznym i przeciążaniem metody statycznej. Podczas gdy nadpisywanie jest polimorfizmem wykonania programu z elastycznym wiązaniem i brakiem możliwości nadpisania metody statycznej.
Wyjaśnij tworzenie bezpiecznego wątkowo singletona w Javie przy użyciu podwójnie sprawdzanego blokowania
Wzorzec Singleton jest dobrze znanym wzorcem projektowym, w którym klasa jest ograniczona tylko do jednej instancji przez całe życie, a wielu klientów współużytkuje tę instancję. Wzorzec Singleton zawiera dwa główne obowiązki: pierwszym jest zapewnienie, że generowana jest tylko jedna instancja klasy. Drugim jest zapewnienie metody, dzięki której każdy ma dostęp do tej konkretnej instancji na całym świecie.
Jednym z wyzwań, przed jakim stoi projekt Singleton w programie wielowątkowym, jest zapewnienie, że generowana jest tylko jedna instancja klasy, mimo że różni użytkownicy wywołują technikę getInstance() w tym samym czasie. Podwójnie sprawdzany system blokowania rozwiązuje ten dylemat zapewniając, że synchronizacja jest używana tylko wtedy, gdy tworzony jest indywidualny przypadek Singletona za każdym razem, gdy funkcja getInstance() jest wywoływana po raz pierwszy i ta sama instancja jest przywracana bez powyższej synchronizacji wszystkie te inne przypadki.
Pytania do rozmowy kwalifikacyjnej Java dla średnio zaawansowanych

Co to jest JDK? Wymień warianty JDK?
JDK to skrót od Java Development Kit. Java Development Kit (JDK) to oprogramowanie używane podczas tworzenia dowolnej aplikacji Java. Java Development Kit (JDK) obejmuje pisanie, rozwiązywanie problemów i analizowanie narzędzi programistycznych Java.
Zasadniczo JDK jest implementacją Java Standard Edition lub Java Enterprise Edition. Java została przemianowana na Java 2 (skrócona do Java 2 SDK lub J2SDK) w 1998 roku z powodu znaczącej aktualizacji platformy. Opracował trzy oddzielne wersje Java do obsługi różnych aplikacji.
- J2SE to skrót od Java 2 Platform, Basic and Usual Edition i jest przeznaczony dla kontekstów desktopowych i serwerowych.
- J2EE to skrót od Java 2 Platform, Corporate Edition, zaprojektowany z myślą o aplikacjach biznesowych i obejmujący możliwości, takie jak przechowywanie w chmurze i obsługa usług online.
- J2ME (Java 2 Platform, Micro Edition) jest przeznaczony dla zainstalowanych i mobilnych gadżetów lub platform.
Jednak w 2004 r. etykiety wariantów zostały zmodyfikowane odpowiednio do Java ME (Micro Edition platformy Java), Java EE (Enterprise Edition platformy Java) i Java SE (Standard Edition platformy Java). Zmieniono również moniker zestawu rozwojowego z „Java 2 SDK” na „JDK”. Ponadto nazwa kontekstu operacyjnego została zmieniona na „JRE” zamiast „J2RE”. Warianty z ich wersjami Java SE 6 i Java EE 5 są nadal w użyciu.
Czy konstruktor może zwrócić wartość?
Rozumiejąc, że konstruktor nie jest konwencjonalną techniką używaną podczas programowania w Javie, w jakiś sposób nie zwraca ani nie przywraca żadnego określonego wyniku, który mógłby mieć duży wpływ na kod. Konstruktor może zawierać nieograniczone instrukcje, ale nie może przywracać ani zwracać wartości lub wyników instrukcji.

Wyjaśnij słowo kluczowe „THIS” w Javie
„To” jest specyficznym terminem w Javie, który określa jednostkę, którą programista teraz uruchomił. Słowo kluczowe jest jedynie przedrostkiem różniącego się parametru związanego z użyciem operatora – kropki (.), który może być użyty z wnętrza metody lub konstruktora. Słowo kluczowe „This” nie jest używane zbyt często, ponieważ większość aplikacji ma na celu uniknięcie sytuacji, w których byłoby to konieczne. Dostęp do zmiennych instancji zapewnia termin „to”.
Wyjaśnij słowo kluczowe „SUPER” w Javie
W Javie hasło „super” jest parametrem względnym powiązanym z koncepcją dziedziczenia, która odnosi się do instancji klasy nadrzędnej, zakładając, że klasa pochodna ma parametr w grupie lub metodzie o tej samej nazwie, co klasa nadrzędna. Termin ten jest najczęściej używany, gdy podklasa potrzebuje dostępu do parametru, funkcji lub konstruktora w klasie bazowej.
Wyjaśnij przeciążanie metod w Javie
W Javie przeciążanie odnosi się do metod o tej samej nazwie i klasie, ale o różnych kryteriach i odwrotnie. Co najmniej dwie techniki mają jednolite nazwy i klasy, ale różne sygnatury w przeciążaniu. Przeciążanie to polimorfizm wiersza polecenia, który rozciąga zachowanie metody, powodując w ten sposób przeciążenie.
Czy możemy przeciążyć metodę statyczną w Javie?
W Javie metoda statyczna zachowuje się podobnie do zwykłych metodologii przeciążania i jako taka może zostać przeciążona. Musi jednak oferować dodatkową metodę statyczną o tej samej nazwie, ale o różnej sygnaturze metodologii, jeśli celem jest przeciążenie metody statycznej.
Zdefiniuj późne wiązanie
Późne wiązanie to format, który wskazuje, że kompilator nie powinien przeprowadzać żadnych kontroli typu w wywołaniach metod ani argumentów i powinien pozostawić wszystko w czasie wykonywania (wystąpienie jest w programowaniu COM).
Zdefiniuj dynamiczną metodę wysyłki
Dynamiczne wysyłanie metody odnosi się do rozwiązywania lub naprawiania wywołania nadpisanej metody w czasie wykonywania, a nie w czasie kompilacji.
Dlaczego funkcja usuwania jest szybsza w połączonej liście niż w tablicy?
Operacja usuwania LinkedList zwraca O(1). Ale operacja usuwania ArrayList zwraca O(n) w najgorszym przypadku, tj. przy usuwaniu pierwszego wpisu i O(1) w najlepszym przypadku przy usuwaniu ostatniego elementu. W porównaniu z ArrayList usuwanie elementów LinkedList jest szybsze. Powodem tego jest to, że każdy element LinkedList ma dwa wskaźniki (adresy), które wskazują na oba sąsiednie elementy na liście. W rezultacie usunięcie węzła wiąże się z modyfikacją pozycji odniesienia w dwóch sąsiednich komponentach węzła.
Zaawansowane pytania do rozmowy kwalifikacyjnej Java dla doświadczonych

Chociaż dziedziczenie jest popularną koncepcją ups, jest mniej korzystne niż kompozycja. Wyjaśnić!
Klasy Java mogą mieć tylko jedną nadklasę, ponieważ język nie obsługuje wielu dziedziczeń. W przypadku różnych funkcji, takich jak odczytywanie i zapisywanie do pliku, preferowana jest struktura kompilacji. Można to porównać do możliwości pisania i czytania prywatnego członka. Za pomocą składu możliwe jest zapobieganie pękaniu kapsułki przy jednoczesnym uzyskaniu znacznej elastyczności. Testowanie jednostkowe, które jest niemożliwe ze względu na dziedziczenie, jest możliwe do osiągnięcia przy pomocy kompozycji.
Czym różni się tworzenie ciągu znaków przy użyciu new() od tworzenia literału?
Kiedy używamy new() do wygenerowania String, nowy obiekt jest budowany w pamięci sterty. Wykonywanie trwa dłużej, więc pozostaje w tyle w porównaniu z literałem String. Jeśli jednak istnieją już ustalone dane w ciągu dla ciągu utworzonego za pomocą literału ciągu, istnieje powiązanie tych samych danych ze zmienną ciągu w puli ciągów. Osiąga się to bez konieczności konstruowania zupełnie nowego ciągu z tymi samymi ustalonymi danymi.
Czy możliwe jest przekroczenie limitu pamięci w programie pomimo posiadania garbage collectora?
TAk. Obecność garbage collectora w żaden sposób nie powstrzymuje ani nie utrudnia programowi wychodzenia z pamięci.
Dlaczego potrzebna jest synchronizacja? Wyjaśnij za pomocą odpowiedniego przykładu
Synchronizacja to mechanizm, który zapewnia, że wszystkie zbieżne wątki działają jednocześnie. Synchronizacja zapobiega problemom ze spójnością pamięci generowanym przez niespójny widok pamięci synergicznej. W metodzie zsynchronizowanej obiekt jest monitorowany i utrzymywany na miejscu przez wątek. Jeśli inny wątek wykonuje zsynchronizowaną metodę, obecny wątek zostanie zatrzymany, dopóki poprzedni wątek nie zwolni monitora.
Powiedzmy, że w sytuacji, w której wymagane jest znalezienie liczby żądań skierowanych do określonego adresu URL, uruchomienie więcej niż jednego żądania spowoduje błędne zliczanie. Powiedzmy, że wątek 1 widzi liczbę jako 12; zostanie zwiększona do 13 przez dodanie jednego. Jednocześnie inny wątek 2 również widzi liczbę jako 12 i, w tym samym duchu, zwiększa się do 13 przez dodanie 1. Ta nieprzewidywalność wartości zliczania występuje, ponieważ zamiast oczekiwanej wartości końcowej 14, co zostałoby otrzymane jako ostateczna wartość będzie wynosić 13. W tym miejscu synchronizacja wchodzi w grę wraz ze wzrostem funkcji (), więc równoczesny dostęp do licznika jest uniemożliwiony.
Czy możesz wyjaśnić cykl życia wątku Java?
W Javie cykl życia wątku definiuje się jako przekształcenia stanu wątku od narodzin do śmierci. Po wygenerowaniu instancji wątku i wywołaniu funkcji start() klasy Thread, wątek przechodzi w stan, w którym można uruchomić. Gdy klasa Thread wywołuje metody sleep() lub wait(), wątek przestaje działać.
Jaki może być kompromis między użyciem tablicy nieuporządkowanej a użyciem tablicy uporządkowanej?
Jedną z głównych zalet uporządkowanej tablicy jest to, że ma ona złożoność czasu wyszukiwania wynoszącą O(log n). Operacja wstawiania na uporządkowanej tablicy ma złożoność czasową O(n), ponieważ elementy z większymi wynikami muszą zostać przesunięte, aby utworzyć nowy wariant. Z drugiej strony, operacja wstawiania nieuporządkowanej tablicy wymaga stałego czasu O(1).
Czy możliwe jest dwukrotne zaimportowanie tej samej klasy lub pakietu w java i co się z nimi dzieje w czasie wykonywania?
TAk. Bez względu na to, jak często klasa lub pakiet są importowane, JVM załaduje je wewnętrznie raz w czasie wykonywania.
Czy blok „Finally” zostanie wykonany, jeśli kod system.Exit(o) zostanie napisany na końcu bloku try?
Nie, blok „finally” nie zostanie wykonany w tym scenariuszu, ponieważ po aktywacji System.exit (0) formant natychmiast opuszcza program, a zatem „finally” nigdy nie jest wykonywany. Jeśli system. exit(0) jest wywoływane bez wyjątku; program się nie uruchomi.
Co rozumiesz przez interfejsy znaczników w Javie?
Interfejs bez stałych lub metod jest znany jako interfejs znacznika lub interfejs tagowania, ponieważ dostarcza on kompilatorowi i maszynie wirtualnej maszyny wirtualnej informacje o typie środowiska wykonawczego dla obiektów. Interfejsy zdalne, Serializable i Cloneable to przykłady interfejsów znaczników, a wszystkie te interfejsy są puste.
Wyjaśnij termin „Inicjowanie nawiasów klamrowych” w języku Java
W Javie inicjalizacja nawiasów klamrowych jest mieszanką 2 oddzielnych procesów. W tej sytuacji chodzi o dwa nawiasy klamrowe ({). Inicjalizacja podwójnego nawiasu klamrowego występuje, gdy dwa kolejne nawiasy klamrowe są wyświetlane w kodzie Java.
Konstrukcja nienazwanej klasy wewnętrznej to pierwszy nawias klamrowy, podczas gdy blok inicjujący to drugi nawias klamrowy. Inicjalizacja Java Double Brace występuje, gdy nienazwana klasa wewnętrzna używa bloku inicjującego.
Wniosek
Jako początkujący programista, a nawet doświadczony programista, te pytania podczas rozmowy kwalifikacyjnej mogą wydawać się nieco podchwytliwe. Ale jeśli zobowiążesz się do ćwiczenia tych pytań, z pewnością wykorzystasz kolejną okazję, jaką dostaniesz.
