Als je je ooit hebt voorbereid op een sollicitatiegesprek voor een functie als Java-programmeur of bent geslaagd voor een certificeringsexamen (niet noodzakelijkerwijs over programmeren), dan heb je waarschijnlijk al gemerkt dat de vragen die daar worden gesteld heel specifiek zijn. Velen van hen dwingen je na te denken over het ontwerp van de taal. Sommige zijn ontworpen om de diepten van uw kennis te peilen. Er zijn vragen die meer op puzzels lijken dan wat dan ook, terwijl andere betrekking hebben op nuances van de taal die heel moeilijk waar te nemen zijn zonder oefening. In dit artikel presenteert ontwikkelaar Sarans Sing enkele van dergelijke vragen over Java. Met antwoorden natuurlijk. 1. Wat gebeurt er als ik een return-statement of System.exit() in een try/catch-blok plaats? Dit is een zeer populaire en subtiele Java-vraag. De truc is dat veel programmeurs denken dat het
finally
blok altijd wordt uitgevoerd. Door een return
uitspraak in een try/catch
blok te plaatsen of System.exit()
vanuit een try/catch
blok te bellen, zet de vraag deze overtuiging in twijfel. Het antwoord op deze lastige vraag is: het finally
blok wordt uitgevoerd als een return
statement in een blok wordt geplaatst try/catch
, maar niet als System.exit()
het vanuit een try/catch
blok wordt aangeroepen. 2. Ondersteunt Java meervoudige overerving? Dit is een erg lastige vraag. Interviewers vragen vaak: "Als C ++ directe meervoudige overerving ondersteunt, waarom kan Java dan niet?" Het antwoordis een beetje ingewikkelder dan het lijkt, aangezien Java overerving van meerdere typen ondersteunt. Een Java-interface kan immers andere interfaces uitbreiden. Dat gezegd hebbende, ondersteunt Java geen meervoudige overerving van implementaties. 3. Als een methode in een bovenliggende klasse NullPointerException
s genereert, kan deze dan worden overschreven door een methode die RuntimeException
s genereert? Dit is een andere lastige vraag met betrekking tot overbelasting en overheersing. Antwoord: Een overschreven methode kan veilig NullPointerException
de bovenliggende klasse - RuntimeException - gooien, maar u kunt niet hetzelfde doen met een aangevinkt uitzonderingstype zoals Exception
. 4. Hoe garandeer je dat N
threads toegang hebben tot N
bronnen zonder een impasse? Als het schrijven van multithreaded code niet jouw sterkste punt is, kun je echt op deze vraag stuiten. Het kan moeilijk zijn, zelfs voor een ervaren programmeur die geen impasses en racecondities is tegengekomen. De hele truc hier zit in de volgorde: je kunt impasses voorkomen door middelen vrij te geven in de omgekeerde volgorde waarin ze zijn verkregen. 5. Wat is het verschil tussen de klassen StringBuffer
en StringBuilder
in Java? Dit is een klassieke Java-taalvraag die sommige ontwikkelaars lastig vinden en andere heel eenvoudig. De StringBuilder
klas verscheen in JDK 1.5. Het enige verschil tussen deze klassen is dat StringBuffer
de methoden, zoals length()
, capacity()
, en append()
, worden gesynchroniseerd, terwijl de corresponderende methoden inStringBuilder
zijn niet. Dit fundamentele verschil betekent dat stringaaneenschakeling sneller gaat met StringBuilder
dan met StringBuffer
. Het gebruik ervan wordt eigenlijk StringBuffer
niet aanbevolen, aangezien string-aaneenschakeling 99% van de tijd op dezelfde thread wordt uitgevoerd. 6. Wat is het resultaat van het evalueren van de uitdrukking 1.0/0.0? Zal het een uitzondering of een compilatiefout opleveren? Dit is een andere lastige vraag over de klas. Java - ontwikkelaars zijn op de hoogte van het bestaan van een primitief dubbel gegevenstype en een klasse, maar bij het uitvoeren van drijvende-kommabewerkingen besteden ze onvoldoende aandacht aan , , en de regels voor bijbehorende rekenkundige berekeningen. Het antwoord op deze vraag is eenvoudig: anDouble
Double
Double.POSITIVE_INFINITY
Double.NEGATIVE_INFINITY
NaN
-0.0
ArithmeticException
zal niet worden gegooid; de uitdrukking evalueert naar Double.POSITIVE_INFINITY
. 7. Wat gebeurt er als u een sleutel probeert in te voegen in een kaart HashMap
die die sleutel al bevat? Deze lastige vraag maakt deel uit van een andere veelgestelde vraag: hoe werkt het HashMap
in Java? HashMap
is een populaire bron van verwarrende en lastige vragen over Java. Hier is het antwoord: als je probeert een sleutel opnieuw in te voegen in een HashMap
, wordt de oude sleutel vervangen, aangezien de HashMap
klasse geen dubbele sleutels toestaat. En dezelfde sleutel krijgt dezelfde hashcode, wat betekent dat hij op dezelfde plek in de hash-bucket terechtkomt. Gebaseerd op Quora -materialen
GO TO FULL VERSION