Na pytania, na które powinien odpowiedzieć każdy dobry programista Java / Java EE? [Zamknięte]

138

Przeglądałem Pytania, na które każdy dobry programista .Net powinien móc odpowiedzieć i byłem pod wielkim wrażeniem treści i podejścia do tego pytania, więc w tym samym duchu zadaję to pytanie deweloperowi Java / Java EE.

Jak myślisz, na jakie pytania powinien odpowiedzieć dobry programista Java / Java EE?

Oznaczam to pytanie jako wiki społeczności, ponieważ nie jest ono specyficzne dla użytkownika i ma na celu służyć całej społeczności programistów.

Czekam na niesamowite odpowiedzi.

EDYCJA : Proszę również odpowiadać na pytania, zgodnie z sugestiami w komentarzach, aby ludzie również mogli dowiedzieć się czegoś nowego na temat języka.

Rachel
źródło
3
Dlaczego na to pytanie nie można uzyskać podobnej odpowiedzi na pytanie .Net?
Rachel
5
Dobry Boże :), pytanie .Net zostało zadane rok temu, a to ma dopiero dzień, a Ty porównujesz odpowiedzi.
zapping
1
Dlaczego nie zmienisz swojego pytania i nie dodasz zdania „Proszę odpowiedzieć na własne pytanie.”, Aby ludzie mogli się nawet czegoś nauczyć (nowego).
r3zn1k
9
„jaki jest obecny skrót Enterprise Edition”;)
Bozho
17
Anegdota Alberta Einsteina… JEDEN Z kolegów Einsteina poprosił go pewnego dnia o numer telefonu. Einstein sięgnął po książkę telefoniczną i odszukał ją. "Nie pamiętasz swojego numeru?" - zapytał zaskoczony mężczyzna. - Nie - odpowiedział Einstein. „Dlaczego mam zapamiętywać coś, co mogę tak łatwo wyciągnąć z książki?” Czy docieram do wszystkich;)? Tak, wiem, Einstein nie miał do czynienia z przesłuchującym ...
SB.

Odpowiedzi:

83

Jaka jest zależność między hashCode () i equals ()? Jakie jest znaczenie tych metod? Jakie są wymagania dotyczące ich wdrożenia?

Jeff
źródło
Tak, każdy programista powinien przynajmniej zdawać sobie sprawę z problemów, nawet jeśli niekoniecznie napotkasz je w praktyce.
sleske
3
equals () i hashCode () w java @ technofundo.com/tech/java/equalhash.html
pramodc84
70

Jaka jest różnica między Set, Map i List?

Nadal jestem zdumiony, jak wiele osób nie zna tego w wywiadzie telefonicznym.

Jon
źródło
8
To prawda, ale przeglądanie dokumentów w sieci to kwestia 20 sekund („framework kolekcji java”), więc wielu wartościowych ludzi może nie zawracać sobie głowy utrzymywaniem tego w pamięci.
Manur
127
Nie, przepraszam, nie kupuj tego, to podstawowa wiedza, którą powinien znać każdy programista.
Jon
15
Powiedziałbym nawet, że każdy, kto myśli o pracy w oprogramowaniu, musi zrozumieć nie tylko to, ale także różnice między różnymi rodzajami list (ArrayList / LinkedList). Niekoniecznie najlepsza implementacja lub nawet notacja O (n), ale zrozumienie, kiedy należy z czego korzystać.
Wielebny Gonzo
11
+1 @Jon: Zwykle zapisuję się na szkołę myślenia „nie trzeba zapamiętywać szczegółów”, ale jeśli nie znasz nawet podstawowych różnic koncepcyjnych między tymi podstawowymi interfejsami, to zdecydowanie nie jesteś dobrym programistą Java.
Joachim Sauer
13
@Joachim: możesz usunąć słowo „Java” ze swojego oświadczenia. Zbiory, mapy i listy to podstawowe pojęcia algorytmiczne.
CPerkins,
44

Czy interfejs może rozszerzyć wiele interfejsów?

Większość ludzi odpowiada „nie”, ponieważ wiedzą, że java nie ma wielokrotnego dziedziczenia. Jednak interfejs może nadal rozszerzać wiele interfejsów (ale klasa nie może rozszerzać wielu klas). To nie prowadzi do problemu z diamentami.

Jeśli odpowiedź brzmi „nie”, ankieter powinien zapytać „dlaczego miałoby to być zabronione?”. Wtedy zaczynasz o tym myśleć i powinieneś zdać sobie sprawę, że nie ma z tym problemu.

Więc nauczyłeś się czegoś (sam) podczas rozmowy kwalifikacyjnej i pokazałeś ankieterowi, że jesteś w stanie rozumować o klasach, przedmiotach, dziedziczeniu, polimorfizmie itp. To właściwie dużo lepsze niż kandydat, który zna odpowiedź na pamięć, ale nie. zrozum dlaczego

ewernli
źródło
Wczoraj pomyliłem wykładowczynię C ++ z problemem dziedziczenia diamentów, w ogóle o tym nie wiedziała :)
Esko
2
Kiedyś zadano mi to pytanie i odpowiedziałem „nie”. Myślę, że to był stres, a ponadto odpowiedziałem zbyt szybko. zawsze trudno jest znaleźć odpowiedzi na pytania, których nigdy nie używasz.
IAdapter
1
W tekście opiszę nieco więcej. Odpowiedź „nie” jest właściwie w porządku. Fajne w tym pytaniu jest to, że jest to dobry sposób na wywołanie dyskusji na temat koncepcji obiektowych i zobaczenie, jak kandydat argumentuje. Jeśli ankieter, z którym chciałeś tylko usłyszeć „tak”, jest to praktycznie bezcelowe. Wielokrotne dziedziczenie interfejsów rzeczywiście nie jest tak powszechne, aby było znane na pamięć.
ewernli
3
Bardziej skomplikowana wersja tego pytania brzmi: „Czy java obsługuje wielokrotne dziedziczenie?” na co odpowiedź brzmi „rodzaj” tylko dla interfejsów
nsfyn55
23

Wykorzystanie końcowego słowa kluczowego w wywołaniach metod. Na przykład, dlaczego test metody w poniższym kodzie nie daje żadnego błędu kompilacji pomimo użycia końcowego kwalifikatora dla parametru metody.

class Name {
    private String name;

    public Name (String s) {
        this.name = s;
    }

    public void setName(String s) {
        this.name = s;
    }
}

private void test (final Name n) {
    n.setName("test");
}

sateesh
źródło
Naprawdę chciałbym poznać odpowiedź na to pytanie. Brzmi bardzo interesująco.
Rachel
@Rachel: Powodem jest to, że finalsłowo kluczowe zostało zastosowane do Nameobiektu, a nie do namepola klasyName
ryanprayogo
20
Cóż, parametr njest zadeklarowany jako ostateczny, co oznacza, że ​​nie można go ponownie przypisać w testtreści metody. Nie powoduje błędu, ponieważ metoda testnie próbuje ponownie przypisać parametru, a jedynie ustawia właściwość parametru ... n = new Name("test");spowodowałoby błąd kompilacji ...
rjohnston
7
Dodanie do komentarzy @ rjohnston: użycie parametru final for method nie zapewnia niezmienności instancji klasy. Jeśli zachodzi potrzeba niezmienności, klasa (nazwa w tym przypadku) powinna być tak zaprojektowana (na przykład w tym przypadku nie
podawaj
Dziękuję wszystkim za podzielenie się cennymi informacjami. Naprawdę doceniam twój wkład w to.
Rachel,
19

Pewnym jest porównanie stringów. Różnica pomiędzy

String helloWorld = "Witaj świecie";
helloWorld == "Witaj świecie";
„Hello World” .equals (helloWorld);

przełączających
źródło
14
Całkiem pewny, że musiałbyś zrobić coś takiego jak new String („Hello World”). Czy stałe łańcuchowe nie są pobierane z puli, podobnie jak efekt miałby funkcja intern (), w związku z czym oba stwierdzenia są prawdziwe?
Steven Schlansker
17

Podchwytliwe pytanie: jakie rodzaje parametrów są przekazywane przez odwołanie w Javie?

To niesamowite, jak wielu ludzi wciąż papuguje mantrę „prymitywy są przekazywane przez wartość, przedmioty są przekazywane przez odniesienie”.

Chinmay Kanchi
źródło
4
Zastanawiam się, czy w wywiadzie zawsze jest właściwa odpowiedź. W miejscu, dla którego przeprowadzałem wywiad, ankieter również papugował to samo.
MAK
2
Zauważyłem różnicę między ludźmi, którzy uczyli się C jako pierwszego języka, a ludźmi, którzy uczyli się C ++ jako pierwszego języka, odpowiadając na to pytanie dotyczące Javy. Prawdopodobnie dlatego, że użytkownicy C są uczeni, że przekazywanie wskaźnika do wartości jest „przejściem przez referencję”.
Uri
23
To głupie pytanie, ponieważ „zła” odpowiedź najprawdopodobniej stanie się technicznie poprawna, jeśli również zapytasz „jakie konsekwencje ma przekazywanie przez odniesienie?” . To tylko kwestia definicji tego, co jest przekazywane przez odniesienie , a zatem nie ma dużej wartości w świecie Java, ponieważ istnieje tylko jeden sposób przekazywania obiektów. Ważniejsze jest, aby zrozumieć, co naprawdę się dzieje, niż używać arbitralnej definicji do przekazywania przez odniesienie tak, jak chcesz.
x4u
3
To pytanie jest co najmniej problematyczne, ponieważ w większości zależy od dokładnej definicji „przekazywanie przez wartość” / „przekazywanie przez odniesienie”, która jest często używana nieprawidłowo. Chociaż zgadzam się, że dobry programista powinien znać definicje, ważniejsze jest zrozumienie konsekwencji. Jeśli rozumiesz rzeczywiste zachowanie Javy, to znajomość poprawnej nazwy pojęcia nie jest zbyt znacząca, ponieważ nie jest to coś, o czym rozmawiasz w praktyce, ponieważ nigdy się nie zmienia.
sleske
3
Erm, obiekty przekazywane przez odwołanie w Javie. Nie możesz przekazać obiektu według wartości; między innymi obiekty nigdy nie istnieją na stosie. Oczywiście, odniesienia są przekazywane według wartości.
Sean Owen
17

Powiedziałeś „dobrze”, „programista”. Oto moje 2 centy .. :)

  • Co oznacza „zaznaczony wyjątek”?
  • Które z nich jest lepsze i kiedy: potwierdzenia lub wyjątki do obsługi nieoczekiwanych warunków?
  • Dlaczego klasa String jest ostateczna? (czy nie jest?;))
  • są metody wait, notify i notifyAll w klasie Object?
  • Dlaczego klasa Thread nie jest ostateczna? Dlaczego miałbym kiedykolwiek przedłużyć Thread?
  • Dlaczego istnieją dwie klasy Date; jeden w pakiecie java.util, a drugi w java.sql?
  • Co się stanie, jeśli wyjątek zostanie wrzucony do końcowego bloku? Czy pozostali są ostatecznie straceni, czy nie?
  • W porządku, jest garbage collector, ale czy w takim razie wyciek pamięci jest całkowicie nieobecny w aplikacjach Java? Jeśli nie, to w jaki sposób?

W przypadku J2EE:

  • Czy dobrze jest mieć zmienne instancji / statyczne w serwlecie? Dlaczego nie? Gdzie więc przechowujesz „stan”?
  • kontynuując powyższe pytanie: co i gdzie jest „stan” dla aplikacji (internetowej)?
  • Co się stanie, jeśli zacznę tworzyć / zamykać połączenia z bazą danych w „JSP”?
  • Jakie są sposoby obsługi wyjątków JSP? próbuj złapać? Hmmm… czy jest coś jeszcze?

Myślę, że jest ich wiele, wiele, wiele więcej, ale na razie to wystarczy :)

Elister
źródło
8
Odpowiedzi byłyby fajne, nie znam odpowiedzi na niektóre z nich.
MAK
Zaznaczone wyjątki to takie, z którymi program musi sobie poradzić w przypadku ich wystąpienia. Jeśli nie ma bloku try / catch wokół czegoś, co zgłasza sprawdzony wyjątek, program nie będzie się kompilował. Czekaj, powiadamiaj i powiadamiaj Wszystkie służą do synchronizacji wątków, aw Javie można synchronizować wszystkie obiekty. Rozszerzyłbym Thread (w przeciwieństwie do implementacji Runnable), jeśli koncepcyjnie klasa wymaga własnego wątku, tj. Musi wykonać pewne zarządzanie i nie reprezentuje zadania, które można uruchomić w innym wątku roboczym.
ZoFreX
Jeśli wyjątek zostanie zgłoszony w ostatnim bloku, reszta nie zostanie uruchomiona. W „czystym” programie Java nie istnieją kanoniczne wycieki pamięci. Jednak pamięć może nadal zostać wykorzystana, co nie powinno, jeśli struktury danych zawierają odniesienia do obiektów, które nie są już potrzebne. Jeśli używasz natywnych bibliotek, może być konieczne zarządzanie ich zasobami, na przykład w SWT ważne jest, aby wywołać .dispose () na niektórych zasobach, aby upewnić się, że nie wyciekną.
ZoFreX
2
Użyj asercji dla błędów typu „To nigdy nie powinno się zdarzyć”, którymi należy się zająć podczas programowania. Użyj wyjątków dla błędów, które mogą faktycznie wystąpić w czasie wykonywania, a program będzie musiał sobie z nimi poradzić.
MatrixFrog
16

Jaka jest różnica między String, StringBuffer i StringBuilder?

Thunderhashy
źródło
5
String - niezmienna klasa reprezentująca String. StringBuffer - wzorzec konstruktora wprowadzony w starszych wersjach Java, który synchronizuje się przy każdej operacji (lub większości z nich) w celu zbudowania ciągu. StringBuilder - wprowadzona w Javie 5 (JDK 1.5), klasie, która dzieli API StringBuffer do użycia do zbudowania ciągu, który nie synchronizuje się z każdą operacją (lub większością z nich). Ponieważ konstrukcja ciągów znaków zwykle ma miejsce w jednym wątku, StringBuilder jest preferowany do tego celu w środowiskach wykonawczych Java / JDK, które go obsługują.
MetroidFan2002
13

„Co to jest deskryptor wdrożenia?”

Jeśli kandydat mimowolnie wzdryga się, ma doświadczenie w pracy z EJB starszymi niż 3.0.

Michael Borgwardt
źródło
spraw, że „drży mimowolnie + mocno się poci + spada martwy po powtórzeniu tego pytania jeszcze 2 razy”, czasami czuję, że to „jedyny” powód, dla którego dodali / poparli całą rzecz z adnotacjami! :)
Elister
12

Wiele pytań i wywiadów jest dostępnych pod adresem http://www.techinterviews.com/interview-questions/java i nie widzę wartości w kopiowaniu / wklejaniu wybranych z nich.

Nie, to do Ciebie należy stworzenie własnej kompilacji rzeczy, które uważasz za ważne. Osobiście zawsze postępuję w dwóch krokach: najpierw kilka pytań, aby uzyskać podstawowe pojęcie o doświadczeniu i umiejętnościach, a następnie sytuacja, w której można rozwiązać problem. Naprawdę nie jestem przekonany, że umiejętność odpowiedzi na jakiekolwiek znane pytania sprawia, że ​​jesteś dobrym lub złym rozwiązaniem nieznanych problemów. Dlatego wolę prosić ludzi o rozwiązanie danego problemu, stawiać im pewne wymagania i prosić o napisanie kodu (ale nie na papierze). Daję im trochę czasu, aby do mnie wrócili i sprawdzili, jak to zrobili, jaki jest styl kodowania, jak wykorzystali sugerowane API itp.

Biorąc to wszystko pod uwagę, moim ulubionym pytaniem jest „czego nie lubisz w Javie?” (w duchu tego ). To naprawdę doskonałe pytanie, daje natychmiastową informację zwrotną na temat tego, jak bardzo kandydat używał Javy i badał jej API i czy po prostu wierzy w to, czy nie (jak napisał OP).

Aktualizacja: Zgodnie z sugestią CPerkins, lepsze sformułowanie pytania sugerowanego powyżej może brzmieć: „Co najbardziej chciałbyś zmienić w Javie?”. I rzeczywiście, wolę ten sposób.

Pascal Thivent
źródło
Nie lubię pytania „co ci się nie podoba w Javie?”, Skłamałbym, bo to brzmi jak „dlaczego opuściłeś swoją ostatnią firmę?”. plus mogą pomyśleć - „jeśli nienawidzisz javy, nie zaoferujemy Ci pracy”.
IAdapter
@ 01 Masz prawo, ale nie zgadzam się z tobą i myślę, że przegapiłeś sens tego pytania.
Pascal Thivent
1
Zwykle widziałem to, jak: „Co chciałbyś najbardziej zmienić w Javie”, a nie „nie podoba mi się”.
CPerkins
@CPerkins To rzeczywiście lepsze sformułowanie, lepsze niż „nie lubię” i znacznie lepsze niż „nienawiść” (w odsyłaczu). Dzięki.
Pascal Thivent
11

Co to jest „System”, „out”, „println” w System.out.println? Co się dzieje, gdy dzwonisz do HashMap?

Adisesha
źródło
jaka jest odpowiedź? nigdy nie myślę o klasie systemu !! Zastanawiam się, czy znać odpowiedź :)
palAlaa
10
  1. Wyjaśnij różne modyfikatory dostępu używane w Javie. Wiele osób borykało się z tym, szczególnie z domyślnym dostępem.
  2. Gdybyś mógł zmienić jedną rzecz w języku lub platformie Java, co by to było? Dobrzy programiści znajdą tutaj odpowiedź, podczas gdy ci, którzy nie są tak naprawdę zainteresowani programowaniem, prawdopodobnie nie obchodzą.
  3. Jeśli w ich CV jest napisane coś takiego, jak używają EJB2.1, zapytaj o EJB3, aby zobaczyć, co o nim wiedzą. Najlepsi programiści będą nadążać za najnowszymi osiągnięciami, nawet jeśli nie używają nowszych wersji.
Mark
źródło
3
Jeśli nie było tylko jedna rzecz, jaką może się zmienić, chciałbym dodać przeciążenia operatora do języka, prawdopodobnie tylko z ograniczonym zestawem operatorów przeciążania (czyli bez przeciążenia newlub ^lub >>, <<i >>>). Gdybym mógł zmienić inną rzecz, oznaczałoby to dodanie prawdziwej semantyki wywołania przez referencję. Trzecią rzeczą byłoby dodanie unsignedtypów całkowitych.
Chinmay Kanchi
1
delegatów i zamknięć i może wyrażenie lambda, ale nie jest to naprawdę konieczne. Metody rozszerzające również byłyby wspaniałe. Naprawdę mogą wyczyścić kod, jeśli są właściwie używane.
Joel
10
  • Co to jest umowa ogólna, gdy nadrzędne jest równe?
  • Czy lepsza opcja preferuje listy lub tablice?
  • Jakie są ogólnie przyjęte konwencje nazewnictwa?
  • Jak działa serializacja?
  • Jak wdrożyć porównywalne?
  • Jakie są zalety korzystania z przygotowanych wyciągów JDBC?
  • Co to jest Java EE?
  • Co to jest kontener i jakie usługi oferuje?
JuanZe
źródło
9

Jeśli zatrudniasz absolwentów z "doświadczeniem" w Javie, proste pytanie, takie jak Napisz kod, który spowoduje wyrzucenie wyjątku NullPointerException, może rozróżnić, którzy kandydaci ostatnio używali języka Java, i nie zatrzymują się po ukończeniu jednostki / kursu.

David
źródło
16
Czy „throw new NullPointerException ()” to poprawna odpowiedź?
Thorbjørn Ravn Andersen
1
Cóż, to zależy od ankietera. Gdyby pokazali przykład testowania zmiennej i rzucania NPE z pomocną wiadomością, byłbym szczęśliwy. Gdybym myślał, że użyli tej odpowiedzi, ponieważ nie mogli wymyślić kodu, który legalnie wyrzuciłby NPE, martwiłbym się.
David
9

Co zostanie wydrukowane?

public void testFinally(){
    System.out.println(setOne().toString());

}

protected StringBuilder setOne(){
    StringBuilder builder=new StringBuilder();
    try{
        builder.append("Cool");
        return builder.append("Return");
    }finally{
        builder.append("+1");
    }
}

Odpowiedź : CoolReturn + 1

Nieco trudniejsze:

public void testFinally(){
    System.out.println(setOne().toString());

}

protected StringBuilder setOne(){
    StringBuilder builder=new StringBuilder();
    try{
        builder.append("Cool");
        return builder.append("Return");
    }finally{
        builder=null;  /* ;) */
    }
}

Odpowiedź : CoolReturn

zaletniy
źródło
pierwszy kod wskazuje, że ostatecznie jest zawsze wykonywany, nawet jeśli instrukcja return była dostępna w bloku try, ale nie otrzymałem drugiego kodu? co się stało, gdy konstruktor instrukcji = null; zdarzyć ??
palAlaa
3
@Alaa, to prawie tak, jakby wartość tymczasowa została ustawiona dla konstruktora, konstruktor jest ustawiony na null w ostatnim bloku, a następnie zwracana jest wartość tymczasowa.
przerwać marsz
1
@VextoR, tak Alaa podał miły opis. Ten kod sprawdza, jak ankietowany rozumie try ... na końcu blok z powrotem w środku i zakres zmiennych w ogóle, obsługa zmiennych
zaletniy
4
Instrukcja return zwraca odwołanie do obiektu StringBuilder. Zmiana odwołania w elemencie ostatecznie nie wpływa na odwołanie, które jest faktycznie zwracane. Jednak zmiana zawartości obiektu ma wpływ na to, co jest zwracane, jak w pierwszym przykładzie.
Derek Litz
8

Jaka jest różnica między klasą abstrakcyjną a interfejsem? Kiedy użyłbyś każdego z nich?

Wielu programistów Javy o tym nie wie, pytałem większość ludzi na moim kursie informatyki na uniwersytecie i zdecydowana większość nie potrafiła na nie odpowiedzieć.

ZoFreX
źródło
Jedyną różnicą jest to, że klasa abstrakcyjna może zawierać metody nieabstrakcyjne.
TBH
1
To jest odpowiedź, którą miałbyś, gdybyś czytał książkę o Javie, oczywiście. Chociaż wtedy możesz również dodać, że mogą one również zawierać zmienne składowe: P Ale różnica w tym, kiedy ich używać i dlaczego, jest jeszcze bardziej interesująca.
ZoFreX
1
Użycie interfejsu daje mi bardzo potężną technikę, jaką jest polimofizm, który może wywołać dowolną nadpisaną metodę z klas implementujących interfejs w pozorny sposób, dzięki czemu nie musisz znać typu każdej klasy potomnej.
palAlaa
@TBH - nie zapominaj, że w jednym modelu dziedziczenia, z którego obecnie korzysta Java, można rozszerzyć tylko jedną klasę abstrakcyjną dla jednego zestawu funkcji - ale można łączyć wiele interfejsów w jednej klasie, aby zaimplementować wiele funkcji bez ograniczenie dziedziczenia.
MetroidFan2002
8

Proste pytania, takie jak:

  • Co to jest JRE i JDK?
  • Dlaczego java żąda współdziałania?

Chociaż są one bardzo podstawowe, wielu programistów nie zna odpowiedzi. Sugeruję, aby zadawać je przed zapytaniami związanymi z kodem.

Ravisha
źródło
Nie wiem o części JDK / JRE. Na przykład nie ma takiego rozróżnienia na komputerach Mac. Więc jako programista Java na Macu, naprawdę nie ma potrzeby, aby o tym wiedzieć.
Fabian Steeg
Myślę, że to dobre pytanie, a jeśli pomoże to ujawnić ludzi, którzy są na tyle błędni, aby podjąć poważne próby rozwoju Java na komputerze Mac, tym lepiej. Poważnie, jeśli twierdzisz, że jesteś programistą Java, ale nie wiesz, który link do pobrania należy kliknąć na java.sun.com, oznacza to problem.
Mark B
Będąc programistą Java, nie trzeba się w ogóle martwić o platformę, na której pracuje. Zrozumienie narzędzi java wydaje się podstawowym wymogiem. Uważam, że tak. o systemie operacyjnym, w którym pracuję.
Ravisha
@mbaird To raczej złośliwy komentarz. Chociaż programuję na komputerze Mac i wiem, czym są JRE / JDK, bądźmy szczerzy, w rzeczywistym rozwoju, czy to naprawdę ma znaczenie? Szczególnie w przypadku IDE, w których użycie wiersza poleceń należy do przeszłości, programista Java musi wiedzieć, jak używać tego języka bardziej niż cokolwiek innego.
Alexis King
6

5 najpopularniejszych pytań dotyczących J2EE / JEE

Lista pytań dotyczących oprogramowania pośredniego J2EE / JEE, z którymi się spotkałem, jest wyjątkowo długa, ale oto 5 najczęściej zadawanych mi pytań, które doprowadziły do ​​dobrych dyskusji:

  1. Co się dzieje, gdy MDB napotka wyjątek, którego nie może obsłużyć?
    To pytanie zwykle prowadzi do różnych interesujących dyskusji na temat trujących wiadomości, kolejek błędów itp.
  2. Biorąc pod uwagę temat JMS i kilku konsumentów na różnych maszynach JVM, pytania dotyczące różnych scenariuszy z trwałymi konsumentami i bez nich.
    To pytanie zazwyczaj pozwala mi omówić, kiedy używać stałych abonentów, kiedy korzystać z kolejek itp.,
  3. Jeśli utkniesz w sytuacji, w której dostęp do zawartości Hibernate / JPA POJO prowadzi do wyjątków, jak można to rozwiązać?
    Prowadzi to do wspaniałych dyskusji na temat leniwego ładowania, ponownego nawadniania itp. Doprowadziło nawet do porównania i przeciwstawienia JPA z fasolami Entity. Uważam, że warto być przygotowanym i mieć jasne koncepcje.
  4. Jak można zapewnić prostą usługę internetową?
    Każde rozwiązanie, od prostego serwera WWW, po zaawansowane rozwiązania SOAP / REST i inne, powinno być wystarczająco dobre. Ponadto, na podstawie ankietera, czasami prowadzi to do bardzo interesujących dyskusji na tematy takie jak niektóre pomysły projektowe - najpierw WSDL, styl doc, pośrednicy SOAP itp., Może to prowadzić do pytań, takich jak lista ulepszeń w JAX-WS nad JAX -RPC lub SOAP1.2 zamiast SOAP1.1, odpowiedzi na które są zwykle oparte na tym, ile pamiętam.
  5. Wstrzykiwanie zasobów JEE 5
    To pytanie jest zadawane na wiele sposobów, począwszy od wzorca lokalizatora usług, po javax.naming.Contextpytania.

Kolejne trudne pytanie, które wydaje mi się niepokojące, ale często się z nimi mierzyłem, brzmi: w jaki sposób biblioteki zależne są pakowane do archiwum?
lub Widoczność różnych klas w dołączonym archiwum.
Jeśli dyskusja nie prowadzi do hierarchii modułów ładujących klas różnych serwerów aplikacji, archiwów zasobów itp., Najlepiej zrezygnować i przejść dalej.

5 najważniejszych pytań dotyczących języka Java:

  1. Pytania na java.util.collections
    To jest matka wszystkich pytań. Kiedy już będziesz w stanie skutecznie wylądować ankietera w tym obszarze i jeśli jesteś przygotowany, reszta wywiadu zwykle zostaje tutaj. Bądź pewny, wiedząc Set, List, Map, oraz znaczenie Object.equals()i Object.hashCode()w każdej implementacji tych interfejsów.
  2. Pytania dotyczące refaktoryzacji
    Są dobre, jeśli ankieter ma otwarty umysł. Jeśli ankieter ma już na myśli konkretne rozwiązanie, a twoje nie pasuje do jego / jej, jesteś prawie skazany na zagładę. Najlepiej zgodzić się z odpowiedzią „Rozumiem, że inne rozwiązania są możliwe”.
  3. Pytania dotyczące wielowątkowości w JDK5, porównując z wcześniejszymi wersjami JDK stwierdziłem, że najlepiej jest przygotowywać je z klasami pakietów java.util.concurrent . Książka Douga Lea zawiera większość odpowiedzi.
  4. Co nowego w JDK1.6 / JDK1.7 ...?
    Jest to pewne pytanie zadane przez wielu ankieterów. Choć tego nienawidzę, najlepiej być przygotowanym. Przynajmniej pamiętanie kilku, z którymi pracowałem, i prowadzenie dyskusji w innym kierunku, w dużej mierze i skutecznie omija i rozwiązuje problem.
  5. Wzorce w Java API
    Wielokrotnie byłem proszony o wskazanie wzorca GoF w Java API. Lepiej bądź na to przygotowany.
CMR
źródło
5

Różnica między serwerem WWW a kontenerem WWW

user256777
źródło
5

Co najbardziej lubisz najmniej w Javie i dlaczego?

Carsten
źródło
5

dlaczego miałbyś zastąpić metodę toString ()?

SWD
źródło
4

Bardziej czyste pytanie o Javę:

Jaka jest różnica między poprawnie i słusznie i prawidłowo? Niewiele osób naprawdę rozumie, jak działa czekanie.

Jak należy sobie radzić z InterruptedExceptions?

David Nouls
źródło
4

To jest pytanie, które spotkałem w wywiadzie.

Dlaczego metoda main w Javie jest nazywana public static void main (String [] args)?

Odpowiedź:

1. Funkcja main () musi być zadeklarowana jako publiczna, ponieważ jest wywoływana przez maszynę JVM za każdym razem, gdy rozpoczyna się wykonywanie programu. JVM nie należy do naszego pakietu programu.

Aby uzyskać dostęp do maina poza pakietem, musimy zadeklarować go jako publiczny.Jeśli zadeklarujemy go jako coś innego niż publiczny, wyświetla się błąd wykonania, ale nie błąd czasu kompilacji

2. main () musi być zadeklarowane jako statyczne, ponieważ jeśli metoda jest zadeklarowana jako statyczna, wówczas możemy wywołać tę metodę poza klasą za pomocą ClassName.methodName ();

class Sample
{
     static void fun()
     {
           System.out.println("Hello");       
     }
}

class Test
{
      public static void main(String[] args)
      {
                Sample.fun();
      }
}

JVM najpierw załaduje klasę Test, sprawdzi argumenty wiersza poleceń i wywoła metodę główną jako Test.main ();

3. main () musi być zadeklarowane jako nieważne main (), ponieważ maszyna JVM nie oczekuje żadnej wartości z funkcji main ().

Jeśli podano inny typ zwracany, jest to RunTimeError, tj. NoSuchMethodFoundError.

4. Funkcja main () musi mieć argumenty typu String jako tablice, ponieważ JVM wywołuje metodę main, przekazując argument wiersza poleceń. Ponieważ są one przechowywane w obiekcie tablicy łańcuchowej, są one przekazywane jako argument do funkcji main ().

Sai Upadhyayula
źródło
Możesz użyć, public static void main(String... args)jeśli masz na to ochotę :-) Ma taki sam podpis jak[]
corsiKa
3

Jaka jest różnica między J2SE i J2EE (lub JSE i JEE)?

Deweloper powinien być w stanie wskazać, że edycja Enterprise jest w zasadzie definicją interfejsu (tj. Specyfikacją), którą mogą zaimplementować dostawcy. Natomiast edycja standardowa jest implementacją samą w sobie

oxbow_lakes
źródło
4
Czy umiejętność utrzymania prostej terminologii marketingowej jest naprawdę aż tak ważna pod koniec dnia?
Laurence Gonsalves
@Laurence - to śmieszne powiedzieć. Jest prawdziwa różnica między tymi dwiema rzeczami, których
zdziwiłbyś się,
Chodzi mi o to, że jeśli ktoś jest dobrym programistą, nie obchodzi mnie, czy zna różnicę między J2SE i J2EE.
Laurence Gonsalves
Odczytuję to pytanie jako „rzecz, którą powinien wiedzieć programista JEE + JSE”. W takim przypadku uważam, że zrozumienie różnicy między tymi dwiema technologiami jest istotne.
oxbow_lakes
4
@ Thorbjørn Ravn Andersen Wątpię, czy większość programistów Java, w tym dobrych, zdaje sobie sprawę z powyższego rozróżnienia: „wydanie dla przedsiębiorstw jest w zasadzie definicją interfejsu… Podczas gdy edycja standardowa jest implementacją samą w sobie”. Dla większości dobrych programistów Java ważne jest, które interfejsy API są dostępne. np .: Serwlety są częścią EE, itd. W każdym razie, tak jak uważam, że ważniejsze jest znalezienie dobrych programistów niż dobrych programistów języka X, myślę, że ważniejsze jest znalezienie dobrych programistów Java niż dobrych programistów JSE / JEE.
Laurence Gonsalves,
3

Jak volatilewpływa na optymalizację kodu przez kompilator?

rzymski
źródło
3
Ten wpis powinien również zawierać poprawną odpowiedź.
Thorbjørn Ravn Andersen
Nie pamiętam pełnej odpowiedzi, spójrz na tę lekcję youtube.com/ ... dla dobrego wyjaśnienia. W skrócie: załóżmy, że metoda używa w pewnym momencie zmiennej lotnej. Następnie kompilator nie optymalizuje kodu tej metody po tym momencie.
Roman
2

A co z tym, czym jest ziarno sesji i opisz niektóre różnice między fasolami sesyjnymi bezstanowymi i stanowymi.

Kristian
źródło
2

Napisz program akceptujący dwie liczby całkowite i wypisuj największą z dwóch liczb do pliku w wybranym przez Ciebie miejscu. Teraz opisz, co robi każde stwierdzenie.

Możliwe jest dość głębokie przeanalizowanie, począwszy od znaczenia instrukcji importu, aż do nieprawidłowego zakończenia

Wszyscy
źródło
2

Rdzeń: 1. Co to są wyjątki zaznaczone i niezaznaczone? 2. Podczas dodawania nowego wyjątku w kodzie jakiego typu (zaznaczone / niezaznaczone) użyć kiedy?

Servlet: 1. Jaka jest różnica między response.sendRedirect () a request.forward ()?

YoK
źródło
czy możesz odpowiedzieć na te pytania? Po raz pierwszy wiem o „zaznaczonych i niezaznaczonych wyjątkach” !!
palAlaa
Proste wyszukiwanie w Google może doprowadzić Cię do odpowiedzi: google.co.in/ ...
YoK
1

Jak threadsdziała Co to jest synchronized? Jeśli synchronizedw klasie są dwie metody, to mogą być wykonywane jednocześnie przez dwa wątki. Będziesz zaskoczony, gdy wiele osób odpowie „ tak” . Następnie wszystkie pytania związane z wątkami, np. Zakleszczenie , głód itp.

fastcodejava
źródło
2
To dlatego, że odpowiedź „brzmi tak…”
Fortega
@Fortega - Jak to możliwe? Każda metoda ma blokadę obiektu. Jeśli ktoś korzysta threadz metody, nikt inny nie threadmoże uzyskać blokady.
fastcodejava
1
Jeśli masz dwa obiekty tego samego typu, możesz jednocześnie wywołać pierwszą metodę na pierwszym obiekcie i drugą metodę na drugim obiekcie. Chyba że metody są oczywiście statyczne.
Fortega
2
Jeśli nie rozumiesz właściwie, jak odbywa się blokowanie, nie jest to oczywiste. Poza tym, choć może to być oczywiste, nie oznacza to, że moja odpowiedź była nieprawidłowa :-)
Fortega
1
Odpowiedź może wprowadzić zamieszanie dla programistów, którzy nie używali wątków w swojej pracy, ale myślę, że jest dobra :)
palAlaa
1

Jedną rzeczą, której wielu programistów Java nie wie, jest to, że ciągi znaków są niezmienne, więc używaj StringBuilder lub StringBuffer!

String s = "";
for(int i = 0; i < 100; i++) {
  s += "Strings " + "are " + "immutable, " + " so use StringBuilder/StringBuffer to reduce memory footprint";
}
Shervin Asgari
źródło
A liczby takie jak Integer, Long i tak dalej
Arthur Ronald
Jeśli chodzi o wydajność, nie ma już różnicy między konkatenacją niezmiennych ciągów a użyciem StringBuilder. Dzieje się tak, ponieważ nowoczesne kompilatory java zoptymalizują konkatenację: java.sun.com/docs/books/jls/third_edition/html/ ... Najlepiej jest używać dowolnej metody, która jest bardziej czytelna.
Brent Wilson
1
@BrentWilson to, co łączysz, nie zrobi tego, co myślisz. Zmieni s += "a" + "b" + "c"się w Stringbuilder.append(...)scenariusz. Ale to nie zoptymalizuje forpętli. Kod w tej odpowiedzi utworzy łącznie 201 ciągów char[]znaków , 100 obiektów StringBuilders i (w zależności od implementacji) 300 różnych elementów wewnątrz tych obiektów StringBuilders oraz szacunkowo ponad 425 tys. Znaków. Zmiana go na użycie StringBuilder bezpośrednio zredukuje to do 1 String, 1 StringBuilder i 13-15 wewnętrznych char[]znaków, używając tylko ~ 8k znaków zamiast tak, jak powinno.
corsiKa