Hvis du nogensinde har forberedt dig til et interview til en Java-programmørstilling eller bestået en certificeringseksamen (ikke nødvendigvis om programmering), så har du sikkert allerede bemærket, at de spørgsmål, der stilles der, er meget specifikke. Mange af dem tvinger dig til at tænke over sprogets design. Nogle er designet til at undersøge dybden af din viden. Der er spørgsmål, der ligner mere gåder end noget andet, mens andre vedrører nuancer af sproget, som er meget svære at opfatte uden øvelse. I denne artikel præsenterer udvikler Sarans Sing et par sådanne spørgsmål om Java. Med svar, selvfølgelig. 1. Hvad sker der, hvis jeg sætter en return-sætning eller System.exit() i en try/catch-blok? Dette er et meget populært og subtilt Java-spørgsmål. Tricket er, at mange programmører tror, at
finally
blokken altid udføres. Ved at placere et return
udsagn i en try/catch
blok eller kalde System.exit()
inde fra en try/catch
blok, sår spørgsmålet tvivl om denne tro. Svaret på dette vanskelige spørgsmål er: blokken finally
vil blive udført, når en return
sætning er placeret i en try/catch
blok, men vil ikke blive udført, når System.exit()
den kaldes inde fra en try/catch
blok. 2. Understøtter Java multipel nedarvning? Dette er et meget vanskeligt spørgsmål. Interviewere spørger ofte: "Hvis C ++ understøtter direkte multipel nedarvning, hvorfor kan Java så ikke?" Svaret _er en smule mere kompliceret end det ser ud til, da Java understøtter arv af flere typer. En Java-grænseflade kan trods alt udvide andre grænseflader. Når det er sagt, understøtter Java ikke multipel nedarvning af implementeringer. 3. Hvis en metode i en overordnet klasse kaster NullPointerException
s, kan den så tilsidesættes af en metode der kaster RuntimeException
s? Dette er endnu et vanskeligt spørgsmål relateret til overbelastning og tilsidesættelse. Svar: En tilsidesat metode kan sikkert kaste NullPointerException
sin overordnede klasse — RuntimeException, men du kan ikke gøre det samme med en markeret undtagelsestype som Exception
. 4. Hvordan garanterer du, at N
tråde kan få adgang til N
ressourcer uden dødvande? Hvis det ikke er din stærke side at skrive flertrådskode, kan du virkelig snuble over dette spørgsmål. Det kan være svært, selv for en erfaren programmør, der ikke er stødt på dødvande og racerforhold. Hele tricket her er i rækkefølgen: du kan forhindre dødvande ved at frigive ressourcer i den omvendte rækkefølge, som de blev erhvervet. 5. Hvad er forskellen mellem StringBuffer
og StringBuilder
klasserne i Java? Dette er et klassisk Java-sprogspørgsmål, som nogle udviklere finder svært og andre - meget enkelt. Klassen StringBuilder
dukkede op i JDK 1.5. Den eneste forskel mellem disse klasser er, at StringBuffer
deres metoder, såsom length()
, capacity()
, og append()
, er synkroniserede, mens de tilsvarende metoder iStringBuilder
er ikke. Denne grundlæggende forskel betyder, at strengsammenkædning er hurtigere med StringBuilder
end med StringBuffer
. Faktisk StringBuffer
anbefales det ikke at bruge, da strengsammenkædning udføres på den samme tråd 99% af tiden. 6. Hvad er resultatet af at evaluere udtrykket 1.0/0.0? Vil det producere en undtagelse eller en kompileringsfejl? Dette er endnu et vanskeligt spørgsmål om klassen. Java-udviklere er opmærksomme på eksistensen af en primitiv dobbelt datatype og en klasse, men når de udfører flydende kommaoperationer, er de ikke opmærksomme nok på , , , og reglerne for tilknyttede aritmetiske beregninger. Svaret på dette spørgsmål er enkelt: enDouble
Double
Double.POSITIVE_INFINITY
Double.NEGATIVE_INFINITY
NaN
-0.0
ArithmeticException
vil ikke blive kastet; udtrykket evalueres til Double.POSITIVE_INFINITY
. 7. Hvad sker der, hvis du forsøger at indsætte en nøgle i en HashMap
, der allerede indeholder den pågældende nøgle? Dette vanskelige spørgsmål er en del af et andet ofte stillet spørgsmål: hvordan fungerer det HashMap
i Java? HashMap
er en populær kilde til forvirrende og vanskelige spørgsmål om Java. Her er svaret: Hvis du forsøger at genindsætte en nøgle i en HashMap
, vil den gamle nøgle blive erstattet, da HashMap
klassen ikke tillader duplikerede nøgler. Og den samme nøgle får den samme hash-kode, hvilket betyder, at den ender samme sted i hash-bøtten. Baseret på Quora materialer
GO TO FULL VERSION