Jeśli kiedykolwiek przygotowywałeś się do rozmowy kwalifikacyjnej na stanowisko programisty Java lub zdawałeś jakikolwiek egzamin (niekoniecznie z programowania) w celu uzyskania certyfikatu, to najprawdopodobniej zauważyłeś już, że pytania, jakie zadają, są bardzo konkretne. Wiele z nich skłania do refleksji nad architekturą języka, inne są przeznaczone do głębokiej wiedzy. Są też takie, które bardziej przypominają łamigłówki lub dotyczą niuansów, które bez praktyki bardzo trudno wyczuć. W tym artykule programista Saraans Singh podaje kilka takich pytań dotyczących języka Java. Oczywiście z odpowiedziami. 1. Co się stanie, jeśli w bloku try/catch umieścisz instrukcję return lub System.exit()? Jest to bardzo popularne pytanie „nadrabiające zaległości” w Javie. Sztuczka polega na tym, że wielu programistów wierzy, że blok
finally
i tak zostanie wykonany. To pytanie podważa tę koncepcję, umieszczając instrukcję return
w bloku try/catch
lub wywołując z bloku try/catch
instrukcji System.exit ()
. Odpowiedź na to podchwytliwe pytanie: blok finally
zostanie wykonany, gdy instrukcja zostanie umieszczona return
w bloku try/catch
i nie zostanie wykonany, gdy zostanie wywołany z bloku try/catch
instrukcji System.exit ()
. 2. Czy Java obsługuje dziedziczenie wielokrotne? To bardzo trudne pytanie. Ankieterzy często mówią: jeśli C++ może obsługiwać bezpośrednie wielokrotne dziedziczenie, dlaczego Java nie? Odpowiedź jest nieco bardziej skomplikowana, niż mogłoby się wydawać, ponieważ Java obsługuje dziedziczenie wielu typów, ponieważ zawarty w niej interfejs może rozszerzać inne interfejsy. Jednak język Java nie obsługuje wielokrotnego dziedziczenia implementacji. 3. Czy w przypadku, gdy metoda zgłasza wyjątek NullPointerException
w klasie nadrzędnej, można go zastąpić metodą, która zgłasza wyjątek RuntimeException
? Kolejne trudne pytanie związane z koncepcjami przeciążenia i przesłaniania. Odpowiedź: Możesz bezpiecznie zgłosić wyjątek klasy nadrzędnej w nadpisanej metodzie NullPointerException – RuntimeException
, ale nie możesz zrobić tego samego w przypadku zaznaczonego wyjątku typu Exception
. 4. Jak zagwarantować, że wątki będą miały dostęp do zasobów bez zakleszczenia? N
N
Jeśli nie jesteś dobry w pisaniu kodu wielowątkowego, to pytanie będzie dla ciebie naprawdę trudne. Może to być wyzwanie nawet dla doświadczonego programisty, który nie miał do czynienia z zakleszczeniami i warunkami wyścigowymi. Sztuka polega na kolejności: zakleszczeniu można zapobiec, uwalniając zasoby w odwrotnej kolejności, w jakiej zostały zdobyte. 5. Jaka jest różnica pomiędzy klasami StringBuffer
i StringBuilder
w języku Java? Klasyczne pytanie dotyczące języka Java, przez niektórych programistów uważane za trudne, a przez innych bardzo proste. Klasa StringBuilder
została wprowadzona w JDK 1.5 i jedyna różnica między nimi polega na tym, że metody klasy lub StringBuffer
na przykład są zsynchronizowane , podczas gdy odpowiadające im metody klasy nie. Z powodu tej zasadniczej różnicy łączenie ciągów jest szybsze w przypadku . W rzeczywistości nie zaleca się używania, ponieważ w 99% przypadków użycia łączenie ciągów odbywa się w tym samym wątku. 6. Co zwraca wyrażenie 1.0/0.0? Czy zgłosi wyjątek lub spowoduje błąd kompilacji? Kolejne trudne pytanie dotyczące zajęć . Chociaż programiści Java są świadomi prostego typu danych double i klasy , podczas wykonywania operacji zmiennoprzecinkowych nie zwracają wystarczającej uwagi na , i reguły rządzące obliczeniami arytmetycznymi z nimi związanymi. Odpowiedź na to pytanie jest prosta: nie zostanie zgłoszony żaden wyjątek , wartość zostanie zwrócona . 7. Co się stanie, jeśli spróbujesz wstawić obiekt kluczowy do obiektu kluczowego, który już w nim istnieje? To podchwytliwe pytanie jest częścią innego często zadawanego pytania: jak one działają w Javie? to popularny temat, w którym pojawiają się mylące i podchwytliwe pytania dotyczące języka Java. Odpowiedź jest taka, że jeśli spróbujesz ponownie włożyć klucz do , zastąpi on stary, ponieważ klasa nie pozwala na duplikowanie kluczy. Ten sam klucz oznacza ten sam kod skrótu, więc znajdzie się w tym samym miejscu w segmencie skrótu. Na podstawie materiałów Quoralength()
capacity()
append()
StringBuilder
StringBuilder
StringBuffer
StringBuffer
Double
Double
Double.INFINITY
NaN
-0.0
ArithmeticException
Double.INFINITY
HashMap
HashMap
HashMap
HashMap
HashMap
GO TO FULL VERSION