Jika anda pernah bersedia untuk temu duga untuk jawatan pengaturcara Java atau lulus mana-mana peperiksaan pensijilan (tidak semestinya tentang pengaturcaraan), maka anda mungkin telah perasan bahawa soalan yang ditanya di sana adalah sangat khusus. Ramai daripada mereka memaksa anda berfikir tentang reka bentuk bahasa. Sesetengahnya direka untuk menyelidik kedalaman pengetahuan anda. Terdapat soalan yang kelihatan lebih seperti teka-teki daripada yang lain, manakala yang lain berkaitan dengan nuansa bahasa yang sangat sukar untuk difahami tanpa latihan. Dalam artikel ini, pembangun Sarans Sing membentangkan beberapa soalan sedemikian tentang Java. Dengan jawapan, sudah tentu.
1. Apakah yang berlaku jika saya meletakkan penyata pulangan atau System.exit() dalam blok cuba/tangkap? Ini adalah soalan Java yang sangat popular dan halus. Caranya ialah ramai pengaturcara percaya bahawa

finally
blok itu sentiasa dilaksanakan. Dengan meletakkan return
pernyataan dalam try/catch
blok atau memanggil System.exit()
dari dalam try/catch
blok, soalan itu menimbulkan keraguan terhadap kepercayaan ini. Jawapan kepada soalan rumit ini ialah: blok finally
akan dilaksanakan apabila return
pernyataan diletakkan dalam try/catch
blok, tetapi tidak akan dilaksanakan apabila System.exit()
dipanggil dari dalam try/catch
blok. 2. Adakah Java menyokong pelbagai warisan? Ini adalah soalan yang sangat rumit. Penemu bual sering bertanya, "Jika C ++ menyokong warisan berbilang langsung, maka mengapa Java tidak boleh?" Jawapannya _adalah sedikit lebih rumit daripada yang mungkin kelihatan, kerana Java menyokong warisan pelbagai jenis. Lagipun, antara muka Java boleh memanjangkan antara muka lain. Yang berkata, Java tidak menyokong pelbagai warisan pelaksanaan. 3. Jika kaedah dalam kelas induk membuang NullPointerException
s, bolehkah ia ditindih dengan kaedah yang membuang RuntimeException
s? Ini adalah satu lagi soalan rumit yang berkaitan dengan terlebih muatan dan mengatasi. Jawapan: Kaedah yang diganti boleh membuang NullPointerException
kelas induk dengan selamat — RuntimeException, tetapi anda tidak boleh melakukan perkara yang sama dengan jenis pengecualian yang diperiksa seperti Exception
. 4. Bagaimanakah anda menjamin bahawa N
benang boleh mengakses N
sumber tanpa jalan buntu? Jika menulis kod berbilang benang bukan kemahiran anda, anda mungkin benar-benar tersandung pada soalan ini. Ia boleh menjadi sukar walaupun untuk pengaturcara berpengalaman yang tidak mengalami kebuntuan dan keadaan perlumbaan. Keseluruhan helah di sini adalah mengikut urutan: anda boleh mengelakkan kebuntuan dengan melepaskan sumber dalam susunan terbalik di mana ia diperoleh. 5. Apakah perbezaan antara StringBuffer
dan StringBuilder
kelas di Jawa? Ini ialah soalan bahasa Java klasik yang sesetengah pembangun mendapati rumit dan lain-lain - sangat mudah. Kelas itu StringBuilder
muncul dalam JDK 1.5. Satu-satunya perbezaan antara kelas ini ialah StringBuffer
kaedah, seperti length()
, capacity()
, dan append()
, disegerakkan, manakala kaedah yang sepadan dalamStringBuilder
bukan. Perbezaan asas ini bermakna penggabungan rentetan lebih cepat dengan StringBuilder
daripada dengan StringBuffer
. Sebenarnya, penggunaan StringBuffer
tidak digalakkan, kerana penggabungan rentetan dilakukan pada benang yang sama 99% daripada masa. 6. Apakah hasil daripada penilaian ungkapan 1.0/0.0? Adakah ia akan menghasilkan pengecualian atau ralat kompilasi? Ini adalah satu lagi soalan rumit tentang kelas. Pembangun Java menyedari kewujudan jenis data berganda primitif dan kelas , tetapi apabila melaksanakan operasi titik terapung mereka tidak memberi perhatian yang cukup kepada , , , dan peraturan yang mengawal pengiraan aritmetik yang berkaitan. Jawapan kepada soalan ini adalah mudah: a
Double
Double
Double.POSITIVE_INFINITY
Double.NEGATIVE_INFINITY
NaN
-0.0
ArithmeticException
tidak akan dibuang; ungkapan menilai kepada Double.POSITIVE_INFINITY
. 7. Apakah yang berlaku jika anda cuba memasukkan kunci ke dalam HashMap
yang sudah mengandungi kunci itu? Soalan rumit ini adalah sebahagian daripada satu lagi soalan yang sering ditanya: bagaimana HashMap
berfungsi di Jawa? HashMap
ialah sumber popular soalan mengelirukan dan rumit tentang Java. Inilah jawapannya: jika anda cuba memasukkan semula kunci dalam a HashMap
, kunci lama akan diganti, kerana kelas HashMap
tidak membenarkan kunci pendua. Dan kunci yang sama akan mendapat kod cincang yang sama, yang bermaksud ia akan berakhir di tempat yang sama dalam baldi cincang. Berdasarkan bahan Quora
GO TO FULL VERSION