Yang berikut ini adalah pertanyaan yang relatif maju, dan mereka biasanya jarang ditanya selama wawancara karena mereka dapat mengeluarkan pewawancara. Tetapi Anda dapat menemukan waktu untuk melatihnya sendiri.
1. System.exit (0) akan melewatkan eksekusi blok akhirnya
System.setsecurityManager (new SecurityManager () {@Override public void checkexit (status int) {throw new threadDeath ();}}); coba {System.exit (0); } akhirnya {System.out.println ("Di blok akhirnya"); } Mengapa kode ini output di blok akhirnya? Mengapa Informasi Jejak Tumpukan Tidak Dicetak?
2. String str = "Hello"; dimana str adalah objek string
Tidak seperti C ++, variabel dalam Java adalah tipe dasar atau referensi. Variabel tidak bisa menjadi objek. Ini berarti ekspresi seperti ini:
String str = "halo"; String text = "bye"; str == teks; // Bandingkan dua referensi alih -alih konten str = teks; // Tetapkan referensi teks ke str
Dalam kebanyakan kasus, sebenarnya tidak ada banyak perbedaan, tetapi menulis seperti ini dapat dengan mudah menyebabkan kebingungan.
Final StringBuilder SB = New StringBuilder (); SB.Append ("Hello"); // Referensi ini adalah tipe akhir, bukan contoh ini. metode (SB); // Contoh ini dapat dimodifikasi melalui metode, tetapi variabel ini tidak dapat dimodifikasi 3. Kebocoran memori java sama dengan pemrogram C ++
Definisi kebocoran memori pada wikipedia adalah "dalam ilmu komputer, jika suatu program tidak mengelola alokasi memori dengan benar, kebocoran memori akan terjadi. Dalam pemrograman berorientasi objek, jika objek dalam memori tidak dapat diakses dalam kode, ini adalah kebocoran memori." Namun, di Java, objek selalu dapat dijangkau, dan mereka yang tidak memiliki referensi yang kuat akan dibersihkan. Istilah berarti bocor memori di Java: ada objek yang tidak boleh ada dalam memori, dan biasanya beberapa sumber daya yang tidak lagi digunakan masih disimpan dalam koleksi.
4. Pemrograman multithreaded sulit
Jika Anda tidak memiliki pengalaman, pemrograman multi-threading memang sulit. Jika Anda hanya melemparkan banyak kode ke dalam sekelompok utas dan menjalankannya, maka masalahnya tidak dapat diselesaikan sama sekali, itu akan berantakan. Tetapi jika Anda dapat melakukan alokasi utas sesuai permintaan, mengontrol interaksi antara utas, dan menggunakan pola sederhana yang juga dapat dipahami oleh beberapa anggota tim, masalahnya menjadi jauh lebih sederhana. Tentu saja, ada tantangan lain yang harus Anda buat semua orang di tim ikuti aturan Anda
5. Tidak peduli dengan berbagai kinerja antara operasi yang berbeda
Baru -baru ini saya mendengar bahwa ada masalah, yang melibatkan penambahan bilangan bulat, akses memori, modulus, dan output ke konsol. Meskipun masing -masing operasi ini merupakan urutan besarnya lebih lambat dari yang sebelumnya, orang ini hanya ingin mengoptimalkan operasi tercepat, penambahan, dan menggantinya dengan beberapa operasi yang lebih mahal. Jika Anda benar -benar ingin mengoptimalkan kinerja, Anda sebaiknya mengganti operasi mahal itu dengan operasi yang murah. Jika kemacetan Anda ada di perangkat keras, misalnya, Anda harus membaca sejumlah besar file dari hard disk, memodifikasi kode perangkat lunak tidak berguna, karena masalahnya tidak sama sekali.
6. Angka acak acak
Satu set angka acak spesifik seperti angka dari beberapa pola. Saya sudah membicarakan masalah ini di artikel ini. Banyak orang tidak percaya bahwa angka yang dihasilkan oleh generator bilangan acak sebenarnya tidak acak.
7. Titik mengambang harus dihindari karena mereka akan menghasilkan kesalahan acak
Untuk operasi yang sama, angka titik mengambang akan menghasilkan kesalahan yang sama setiap kali. Kesalahan dapat diprediksi dan karenanya dapat dikendalikan. Jika Anda tahu apa yang akan Anda lakukan dan tetap berpegang pada beberapa aturan sederhana, seperti membulatkan hasilnya, maka angka titik mengambang tidak akan membuat lebih banyak kesalahan daripada BigDecimal. Selain itu, lebih mudah dibaca dan lebih dari seratus kali lebih cepat (dan ada lebih sedikit objek sampah yang dihasilkan pada saat yang sama).
8. Zona waktu abadi
Alasan kesalahpahaman ini adalah bahwa ketika waktu berubah, zona waktu berubah. Ini berarti bahwa Eropa/London adalah 1970/1/1 01:00 bukannya 00:00. Mengapa? Karena London menggunakan waktu penghematan siang hari dalam dua tahun dari tahun 1968 hingga 1971.
Dalam beberapa tahun terakhir, banyak zona waktu juga telah berubah. Moskow dulunya adalah Distrik Ketiga Timur (GMT+3), tetapi sekarang ini adalah Distrik Keempat Timur (GMT+4) (mulai dari 27 Maret 2011). Jika Anda melihat waktu 2010, Anda akan menemukan bahwa itu adalah East 3 dan East 4.
Ada beberapa hal yang mungkin Anda terdengar terkejut:
Februari Swedia pada 1721 memiliki 30 hari.
Hari pertama di Inggris pada 1751 adalah 25 Maret, yang berada 11 hari di belakang Prancis.
Setelah Amerika Serikat mengadopsi kalender Gregorian, ia melacak ratusan tahun, sehingga tanggal yang awalnya dicatat dapat diekspresikan dalam dua kalender (biasanya dua tanggal disediakan pada saat yang sama untuk lebih tepatnya). Misalnya, ulang tahun George Washington berubah dari 11 Februari 1731 hingga 22 Februari 1732.
9. Saat Anda membaca variabel non-volatil di utas, Anda akhirnya dapat membaca nilainya diperbarui.
Masalah ini muncul dua kali di StackoverFlow beberapa hari yang lalu. Secara umum, ketika kompiler JIT mengoptimalkan kode, itu akan menyambungkan bidang tipe non-volatile yang belum dimodifikasi ke utas ini. Setelah kode ini dikompilasi (Anda dapat melihatnya dengan -xx:+printCompilation), kemungkinan tidak akan pernah terlihat jika Anda memodifikasi bidang ini di utas lain. Menambahkan blok sinkronisasi acak atau pernyataan cetak dapat menunda eksekusi optimasi ini atau mengganggu kompiler JIT sehingga tidak melakukan optimasi ini.
10. Pertanyaan wawancara java benar
Ada banyak pertanyaan wawancara Java yang sudah ketinggalan zaman (tidak diperbarui selama lebih dari 10 tahun dan tidak berhubungan dengan versi Java saat ini), atau mereka menyesatkan, atau mereka bahkan mungkin salah. Sayangnya, tidak satu pun dari jawaban ini yang dilewatkan tanpa memeriksanya.
Saya akan merujuk pada jawaban StackOverflow di atas karena peer review di sini melakukan pekerjaan yang lebih baik untuk meninjau jawabannya. Secara umum, jangan pergi ke situs web seperti Rose India, jawaban di atas memiliki kualitas yang konyol. Jika Anda ingin sampai ke bagian bawahnya, Anda dapat memeriksa berapa banyak kesalahan ejaan (nama kelas dan istilah profesional) atau komentar yang salah ditemukan dalam artikel di atas. Salah satu alasan untuk masalah ini adalah bahwa tidak ada mekanisme umpan balik yang efektif untuk memperbaiki kesalahan ini.
Saya ingin merekomendasikan beberapa pertanyaan wawancara Java:
50 Pertanyaan Wawancara Java yang paling berharga cocok untuk masuk ke programmer Java
10 pertanyaan wawancara metode utama java klasik
Diskusikan sepuluh pertanyaan wawancara paling umum di Java (super klasik)
10 pertanyaan wawancara XML untuk programmer java dirilis
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.