Ha valaha készült egy interjúra Java programozói pozícióra, vagy letette a képesítési vizsgát (nem feltétlenül programozásról), akkor valószínűleg már észrevette, hogy az ott feltett kérdések nagyon konkrétak. Sokan arra késztetik az embert, hogy gondolkodjon a nyelv kialakításán. Némelyiket úgy tervezték, hogy megismerjék tudásának mélységét. Vannak olyan kérdések, amelyek inkább rejtvénynek tűnnek, mint bármi más, míg mások a nyelv olyan árnyalataihoz kapcsolódnak, amelyeket gyakorlás nélkül nagyon nehéz felfogni. Ebben a cikkben Sarans Sing fejlesztő néhány ilyen kérdést mutat be a Java-val kapcsolatban. Természetesen válaszokkal. 1. Mi történik, ha egy try/catch blokkba teszek egy return utasítást vagy System.exit()-et? Ez egy nagyon népszerű és finom Java-kérdés. A trükk az, hogy sok programozó azt hiszi, hogy a
finally
blokk mindig végrehajtásra kerül. Ha egy return
állítást blokkba helyezünk try/catch
, vagy System.exit()
egy blokkon belülről hívunk try/catch
, a kérdés megkérdőjelezi ezt a meggyőződést. A válasz erre a trükkös kérdésre a következő: a finally
blokk végrehajtásra kerül, amikor egy return
utasítást blokkba helyezünk try/catch
, de nem hajtódik végre, ha System.exit()
egy blokkon belülről hívják try/catch
. 2. A Java támogatja a többszörös öröklődést? Ez egy nagyon trükkös kérdés. Az interjúztatók gyakran kérdezik: "Ha a C ++ támogatja a közvetlen többszörös öröklődést, akkor miért nem a Java?" A válaszegy kicsit bonyolultabb, mint amilyennek látszik, mivel a Java támogatja a többféle típusú öröklődést. Végül is egy Java interfész más interfészeket is kiterjeszthet. Ennek ellenére a Java nem támogatja a megvalósítások többszörös öröklését. 3. Ha egy szülő osztály metódusa NullPointerException
s-t dob, felülbírálható-e olyan metódussal, amely RuntimeException
s-t dob? Ez egy másik trükkös kérdés a túlterheléssel és felülírással kapcsolatban. Válasz: Egy felülírt metódus nyugodtan dobhatja NullPointerException
a szülőosztályt — RuntimeException, de nem teheti meg ugyanezt egy ellenőrzött kivételtípussal, mint például a Exception
. 4. Hogyan garantálja, hogy a szálak holtpont nélkül N
hozzáférhetnek az erőforrásokhoz?N
Ha a többszálú kód írása nem az erősséged, akkor tényleg megbotlik ez a kérdés. Még egy tapasztalt programozó számára is nehéz lehet, aki még nem találkozott holtpontokkal és versenykörülményekkel. Az egész trükk a sorrendben van: megelőzheti a holtpontokat, ha az erőforrásokat a megszerzésükkel fordított sorrendben szabadítja fel. 5. Mi a különbség a StringBuffer
és a StringBuilder
Java osztályok között? Ez egy klasszikus Java nyelvi kérdés, amelyet egyes fejlesztők trükkösnek, mások pedig nagyon egyszerűnek találnak. Az StringBuilder
osztály a JDK 1.5-ben jelent meg. Az egyetlen különbség ezen osztályok között az, hogy StringBuffer
a metódusok, mint például length()
a , capacity()
, és append()
, szinkronizáltak, míg a megfelelő metódusokStringBuilder
ők nem. Ez az alapvető különbség azt jelenti, hogy a karakterlánc-összefűzés gyorsabb -val, StringBuilder
mint -val StringBuffer
. Valójában a használata StringBuffer
nem ajánlott, mivel a karakterlánc-összefűzés az esetek 99%-ában ugyanazon a szálon történik. 6. Mi az eredménye az 1.0/0.0 kifejezés kiértékelésének? Kivételt vagy fordítási hibát fog produkálni? Ez egy másik trükkös kérdés az osztályról . A Java fejlesztők tisztában vannak a primitív kettős adattípus és egy osztály létezésével , de a lebegőpontos műveletek végrehajtásakor nem fordítanak kellő figyelmet a , , , és a kapcsolódó számtani számításokat szabályozó szabályokra. A válasz erre a kérdésre egyszerű: anDouble
Double
Double.POSITIVE_INFINITY
Double.NEGATIVE_INFINITY
NaN
-0.0
ArithmeticException
nem dobják el; a kifejezés kiértékelődik Double.POSITIVE_INFINITY
. 7. Mi történik, ha olyan kulcsot próbál beszúrni, HashMap
amely már tartalmazza azt a kulcsot? Ez a trükkös kérdés egy másik gyakran feltett kérdés része: hogyan működik HashMap
a Java nyelven? HashMap
a Javával kapcsolatos zavaros és trükkös kérdések népszerű forrása. Íme a válasz: ha megpróbálsz újra beszúrni egy kulcsot egy HashMap
, akkor a régi kulcs lecserélődik, mivel az HashMap
osztály nem engedélyezi a duplikált kulcsokat. És ugyanaz a kulcs ugyanazt a hash kódot kapja, ami azt jelenti, hogy a hash vödörben ugyanazon a helyen végzi. Quora anyagok alapján
GO TO FULL VERSION