Dalam artikel ini, kami akan membahas berbagai jenis pertanyaan wawancara dalam wawancara Java yang memungkinkan pengusaha untuk menguji java kandidat dan kemampuan pemrograman yang berorientasi objek umum. Bab -bab berikut dibagi menjadi dua artikel sebelumnya dan berikutnya. Artikel pertama akan membahas pemrograman berorientasi objek dan karakteristiknya, pertanyaan umum tentang Java dan fungsinya, kelas koleksi Java, pengumpul sampah, dan artikel kedua terutama akan membahas penanganan pengecualian, applet Java, ayunan, JDBC, panggilan metode jarak jauh (RMI), servlets dan JSP.
awal!
Daftar isi
Pemrograman Berorientasi Objek (OOP)
Masalah Jawa Umum
Utas java
Kelas Koleksi Java
Pengumpul sampah
Pemrograman Berorientasi Objek (OOP)
Java adalah bahasa pemrograman komputer yang mendukung bersamaan, berbasis kelas, dan berorientasi objek. Keuntungan dari pengembangan perangkat lunak yang berorientasi objek tercantum di bawah ini:
Pemrograman berorientasi objek memiliki banyak fitur penting, seperti: enkapsulasi, warisan, polimorfisme dan abstraksi. Dalam bab -bab berikut, kami akan menganalisis karakteristik ini satu per satu.
Kemasan
Enkapsulasi memberikan objek dengan kemampuan untuk menyembunyikan fitur dan perilaku internal. Suatu objek menyediakan beberapa metode yang dapat diakses oleh objek lain untuk mengubah data di dalamnya. Di Java, ada 3 pengubah: publik, pribadi dan terlindungi. Setiap pengubah memberikan hak akses yang berbeda ke objek lain yang terletak di paket yang sama atau di bawah paket yang berbeda.
Berikut adalah beberapa manfaat menggunakan enkapsulasi:
Lihat dokumen ini untuk detail lebih lanjut dan contoh tentang enkapsulasi.
Polimorfik
Polimorfisme adalah kemampuan bahasa pemrograman untuk menunjukkan antarmuka yang sama untuk tipe data yang mendasari yang berbeda. Operasi pada tipe polimorfik dapat diterapkan pada jenis nilai lainnya.
mewarisi
Warisan memberikan objek dengan kemampuan untuk mendapatkan bidang dan metode dari kelas dasar. Warisan menyediakan baris kode yang digunakan kembali, dan juga dapat menambahkan fitur baru ke kelas yang ada tanpa memodifikasinya.
abstrak
Abstraksi adalah langkah memisahkan ide -ide dari contoh konkret, jadi buat kelas berdasarkan fungsionalitasnya daripada detail implementasi. Java mendukung pembuatan kelas abstrak yang hanya mengekspos antarmuka tetapi tidak termasuk implementasi metode. Tujuan utama dari teknik abstrak ini adalah untuk memisahkan perilaku kelas dari detail implementasi.
Perbedaan antara abstraksi dan enkapsulasi
Abstraksi dan enkapsulasi adalah konsep pelengkap. Di satu sisi, abstrak berfokus pada perilaku objek. Di sisi lain, enkapsulasi berfokus pada detail perilaku objek. Secara umum, enkapsulasi dicapai dengan menyembunyikan informasi keadaan internal objek. Oleh karena itu, enkapsulasi dapat dianggap sebagai strategi untuk memberikan abstraksi.
Masalah Jawa Umum
1. Apa mesin virtual Java? Mengapa Java disebut "bahasa pemrograman platform-independen"?
Mesin virtual Java adalah proses mesin virtual yang dapat menjalankan Java bytecode. File sumber Java dikompilasi ke dalam file bytecode yang dapat dieksekusi oleh mesin virtual Java.
Java dirancang untuk memungkinkan aplikasi berjalan pada platform apa pun tanpa mengharuskan programmer untuk menulis ulang atau mengkompilasi ulang setiap platform secara terpisah. Mesin virtual Java memungkinkan hal ini karena mengetahui panjang instruksi dan fitur lain dari platform perangkat keras yang mendasarinya.
2. Apa perbedaan antara JDK dan JRE?
Java Runtime Environment (JRE) adalah mesin virtual Java yang akan menjalankan program Java. Ini juga termasuk plugin browser yang diperlukan untuk menjalankan applet. Java Development Toolkit (JDK) adalah paket pengembangan perangkat lunak Java lengkap yang mencakup JRE, kompiler, dan alat lainnya (seperti Javadoc, Java Debugger), yang memungkinkan pengembang untuk mengembangkan, mengkompilasi, dan melaksanakan aplikasi Java.
3. Apa arti kata kunci "statis"? Bisakah saya mengganti metode pribadi atau statis di Java?
Kata kunci "statis" menunjukkan bahwa variabel anggota atau metode anggota dapat diakses tanpa variabel instance dari kelas yang menjadi miliknya.
Metode statis dalam Java tidak dapat ditimpa karena metode ditimpa didasarkan pada ikatan dinamis runtime, sedangkan metode statis mengikat statis pada waktu kompilasi. Metode statis tidak terkait dengan contoh kelas, sehingga tidak berlaku secara konseptual.
4. Apakah mungkin untuk mengakses variabel non-statis di lingkungan statis?
Variabel statis milik kelas di Java, dan nilainya di semua contoh adalah sama. Ketika kelas dimuat oleh mesin virtual Java, variabel statis akan diinisialisasi. Jika kode Anda mencoba mengakses variabel non-statis tanpa contoh, kompiler akan melaporkan kesalahan karena variabel-variabel ini belum dibuat dan belum dikaitkan dengan contoh apa pun.
5. Apa tipe data yang didukung oleh Java? Apa itu pembongkaran otomatis?
Jenis data dasar yang didukung oleh bahasa Java adalah:
Tinju otomatis adalah konversi yang dibuat oleh kompiler Java antara tipe data dasar dan tipe pembungkus objek yang sesuai. Misalnya: Konversi int menjadi integer, ganda menjadi ganda, dll. Jika tidak, itu adalah unboxing otomatis.
6. Apa arti metode overriding dan metode kelebihan metode di java?
Metode kelebihan beban di java terjadi ketika dua atau lebih metode memiliki nama metode yang sama tetapi parameter yang berbeda di kelas yang sama. Sebaliknya, override metode berarti bahwa subclass mendefinisikan kembali metode kelas induk. Metode overrides harus memiliki nama metode yang sama, daftar parameter, dan jenis pengembalian. Penimpalan mungkin tidak membatasi akses ke metode yang dicakupnya.
7. Apa konstruktor di Java? Apa itu konstruktor kelebihan beban? Apa itu konstruktor copy?
Ketika objek baru dibuat, konstruktor dipanggil. Setiap kelas memiliki konstruktor. Ketika programmer tidak menyediakan konstruktor ke kelas, kompiler Java akan membuat konstruktor default untuk kelas.
Overloading konstruktor dan kelebihan metode di Java sangat mirip. Beberapa konstruktor dapat dibuat untuk kelas. Setiap konstruktor harus memiliki daftar parameter uniknya sendiri.
Java tidak mendukung konstruktor copy seperti di C ++. Perbedaan ini adalah karena jika Anda tidak menulis sendiri konstruktor, Java tidak akan membuat konstruktor copy default.
8. Apakah Java mendukung banyak warisan?
Tidak didukung, Java tidak mendukung banyak warisan. Setiap kelas hanya dapat mewarisi satu kelas, tetapi dapat menerapkan beberapa antarmuka.
9. Apa perbedaan antara antarmuka dan kelas abstrak?
Java menyediakan dan mendukung penciptaan kelas dan antarmuka abstrak. Implementasinya memiliki kesamaan, dan perbedaannya adalah:
Anda juga dapat merujuk pada perbedaan antara kelas abstrak dan antarmuka di JDK8
10. Apa nilai lewat dan referensi lewat?
Objek dilewatkan oleh nilai, yang berarti bahwa salinan objek dilewatkan. Oleh karena itu, bahkan jika salinan objek diubah, nilai objek sumber tidak akan terpengaruh.
Suatu objek dilewatkan dengan referensi, yang berarti bahwa itu bukan objek aktual yang dilewati, tetapi referensi objek. Oleh karena itu, perubahan eksternal pada objek yang direferensikan akan tercermin pada semua objek.
Utas java
11. Apa perbedaan antara suatu proses dan utas?
Suatu proses adalah aplikasi yang mengeksekusi, dan utas adalah urutan eksekusi dalam proses. Suatu proses dapat memiliki banyak utas. Benang juga disebut proses ringan.
12. Berapa banyak cara berbeda untuk membuat utas? Yang mana yang kamu suka? Mengapa?
Ada tiga cara untuk membuat utas:
Menerapkan antarmuka runnable lebih populer karena tidak memerlukan mewarisi kelas utas. Ketika objek lain telah diwarisi dalam desain aplikasi, ini membutuhkan banyak warisan (sementara Java tidak mendukung warisan berganda), ia hanya dapat mengimplementasikan antarmuka. Pada saat yang sama, kumpulan utas juga sangat efisien dan mudah diimplementasikan dan digunakan.
13. Penjelasan ringkasan dari beberapa status utas yang tersedia.
Selama eksekusi, utas dapat di negara -negara berikut:
14. Apa perbedaan antara metode sinkronisasi dan blok kode sinkronisasi?
Dalam bahasa Java, setiap objek memiliki kunci. Utas dapat menggunakan kata kunci yang disinkronkan untuk mendapatkan kunci pada objek. Kata kunci yang disinkronkan dapat diterapkan pada level metode (kunci berbutir kasar) atau pada tingkat blok kode (kunci berbutir halus).
15. Bagaimana cara menyinkronkan utas di dalam monitor? Tingkat sinkronisasi apa yang harus dilakukan program?
Monitor dan kunci digunakan bersama dalam mesin virtual Java. Monitor memantau blok kode sinkron, memastikan bahwa hanya satu utas yang menjalankan blok kode sinkron sekaligus. Setiap monitor dikaitkan dengan referensi objek. Utas tidak mengizinkan kode sinkronisasi dieksekusi sebelum memperoleh kunci.
16. Apa kebuntuan?
Ketika kedua proses menunggu pihak lain menyelesaikan eksekusi sebelum terus mengeksekusi, kebuntuan terjadi. Hasilnya adalah bahwa kedua proses itu terperangkap dalam menunggu yang tak terbatas.
17. Bagaimana cara memastikan bahwa N utas dapat mengakses sumber daya tanpa menyebabkan kebuntuan?
Saat menggunakan multithreading, cara yang sangat sederhana untuk menghindari kebuntuan adalah dengan menentukan urutan di mana kunci diperoleh dan memaksa utas untuk memperoleh kunci dalam urutan yang ditentukan. Oleh karena itu, jika semua utas mengunci dan melepaskan kunci dalam urutan yang sama, tidak akan ada kebuntuan.
Kelas Koleksi Java
18. Apa antarmuka dasar dari kerangka kelas Koleksi Java?
Kelas koleksi Java menyediakan serangkaian antarmuka dan kelas yang dirancang dengan baik yang mendukung operasi pada satu set objek. Antarmuka paling dasar di kelas koleksi Java adalah:
19. Mengapa kelas pengumpulan tidak mengimplementasikan antarmuka yang dapat dikloning dan serial?
Antarmuka kelas koleksi menentukan satu set objek yang disebut elemen. Setiap kelas implementasi spesifik dari antarmuka kelas koleksi dapat memilih untuk menyimpan dan mengurutkan elemen dengan caranya sendiri. Beberapa kelas koleksi memungkinkan kunci duplikat, sementara yang lain tidak.
20. Apa itu Iterator?
Antarmuka Iterator menyediakan banyak cara untuk mengulangi elemen pengumpulan. Setiap kelas koleksi berisi metode berulang yang dapat mengembalikan instance iterator. Iterator dapat menghapus elemen dari koleksi yang mendasarinya selama iterasi.
Semantik dan makna kloning atau serialisasi terkait dengan implementasi spesifik. Oleh karena itu, implementasi spesifik dari kelas pengumpulan harus menentukan cara dikloning atau diserialisasi.
21. Apa perbedaan antara Iterator dan Listiterator?
Perbedaannya tercantum di bawah ini:
22. Apa perbedaan antara kegagalan cepat (gagal-cepat) dan kegagalan yang aman (gagal-aman)?
Kegagalan keamanan Iterator didasarkan pada membuat salinan koleksi yang mendasarinya, sehingga tidak terpengaruh oleh modifikasi pada koleksi sumber. Semua kelas koleksi di bawah paket java.util gagal dengan cepat, sementara semua kelas di bawah paket java.util.concurrent gagal dengan aman. Iterator yang gagal cepat akan melempar pengecualian Exception ConcurrentModification, sedangkan iterator yang gagal yang tidak akan pernah melempar pengecualian seperti itu.
23. Apa prinsip kerja hashmap di java?
Hashmap di elemen toko Java dalam bentuk pasangan nilai kunci. HashMap membutuhkan fungsi hash yang menggunakan metode hashcode () dan equals () untuk menambah dan mengambil elemen ke/dari koleksi. Ketika metode put () dipanggil, hashmap akan menghitung nilai hash kunci dan kemudian menyimpan pasangan nilai kunci pada indeks yang sesuai dalam set. Jika kunci sudah ada, nilainya akan diperbarui ke nilai baru. Beberapa fitur penting dari hashmap adalah kapasitas, faktor beban, dan pengubah ukuran ambang batas.
24. Di mana pentingnya metode hashcode () dan setara ()?
HashMap di Java menggunakan metode hashcode () dan setara () untuk menentukan indeks pasangan nilai kunci. Kedua metode ini juga akan digunakan saat mendapatkan nilai berdasarkan kunci. Jika kedua metode ini tidak diimplementasikan dengan benar, dua kunci yang berbeda mungkin memiliki nilai hash yang sama dan karenanya dapat dianggap sama dengan set. Selain itu, kedua metode ini juga digunakan untuk menemukan elemen duplikat. Oleh karena itu, implementasi kedua metode ini sangat penting untuk keakuratan dan kebenaran hashmap.
25. Apa perbedaan antara hashmap dan hashtable?
26. Apa perbedaan antara array (array) dan daftar (arraylist)? Kapan saya harus menggunakan array bukan arraylist?
Berikut ini mencantumkan perbedaan antara array dan arraylist:
27. Apa perbedaan antara ArrayList dan LinkedList?
Baik ArrayList maupun LinkedList mengimplementasikan antarmuka daftar, dan mereka memiliki perbedaan berikut:
ArrayList adalah antarmuka data berbasis indeks, dan lapisan yang mendasarinya adalah array. Ini memungkinkan akses acak ke elemen dengan kompleksitas waktu O (1). Sejalan dengan itu, LinkedList menyimpan datanya dalam bentuk daftar elemen, setiap elemen terkait dengan elemen sebelumnya dan berikutnya. Dalam hal ini, kompleksitas waktu menemukan elemen adalah O (n).
Dibandingkan dengan ArrayList, penyisipan, penambahan dan penghapusan LinkedList lebih cepat karena ketika elemen ditambahkan ke posisi apa pun dalam koleksi, tidak perlu menghitung ulang ukuran atau memperbarui indeks seperti array.
LinkedList mengambil lebih banyak memori daripada ArrayList karena LinkedList menyimpan dua referensi untuk setiap node, satu menunjuk ke elemen sebelumnya dan satu menunjuk ke elemen berikutnya.
Anda juga dapat merujuk ke ArrayList vs LinkedList.
28. Apa yang dilakukan antarmuka yang sebanding dan pembanding? Sebutkan perbedaan mereka.
Java menyediakan antarmuka yang sebanding yang hanya berisi satu metode compareTo (). Metode ini dapat mengurutkan dua objek. Secara khusus, ia mengembalikan angka negatif, 0, dan angka positif untuk menunjukkan bahwa objek input kurang dari, sama dengan, dan lebih besar dari objek yang sudah ada.
Java menyediakan antarmuka pembanding yang mencakup dua metode: perbandingan () dan sama (). Metode perbandingan () digunakan untuk mengurutkan dua parameter input, mengembalikan angka negatif, 0, dan angka positif menunjukkan bahwa parameter pertama kurang dari, sama dengan, dan lebih besar dari parameter kedua. Metode Equals () membutuhkan objek sebagai parameter, yang digunakan untuk menentukan apakah parameter input sama dengan pembanding. Metode ini mengembalikan true hanya ketika parameter input juga merupakan pembanding dan parameter input dan hasil penyortiran pembanding saat ini sama.
29. Apa itu antrian prioritas Java?
PriityQueue adalah antrian yang tidak terikat berdasarkan tumpukan prioritas, dan unsur -unsurnya diurutkan dalam urutan alami. Saat dibuat, kami dapat menyediakannya dengan pembanding yang bertanggung jawab untuk penyortiran elemen. PriityQueue tidak mengizinkan nilai nol karena mereka tidak memiliki urutan alami, atau mereka tidak memiliki pembanding terkait. Akhirnya, PrioritasqueUe tidak aman dari benang, dan kompleksitas waktu yang masuk dan dequeueing adalah O (log (n)).
30. Apakah Anda memahami simbol O besar (notasi besar)? Bisakah Anda memberikan contoh struktur data yang berbeda?
Simbol O besar menjelaskan seberapa baik skala atau kinerja algoritma dalam skenario terburuk ketika elemen dalam struktur data meningkat.
Simbol O besar juga dapat digunakan untuk menggambarkan perilaku lain, seperti konsumsi memori. Karena kelas koleksi sebenarnya adalah struktur data, kami umumnya menggunakan simbol O besar untuk memilih implementasi terbaik berdasarkan waktu, memori dan kinerja. Simbol O besar dapat memberikan penjelasan yang baik tentang kinerja sejumlah besar data.
31. Bagaimana cara menukar apakah akan menggunakan array yang tidak tertib atau array yang dipesan?
Keuntungan terbesar dari array yang dipesan adalah bahwa kompleksitas waktu pencarian adalah O (log n), sedangkan array yang tidak tertib adalah O (n). Kerugian dari array yang dipesan adalah bahwa kompleksitas waktu dari operasi penyisipan adalah O (n), karena elemen dengan nilai besar perlu dipindahkan ke belakang untuk memberikan ruang bagi elemen baru. Sebaliknya, kompleksitas waktu penyisipan dari array yang tidak berurutan adalah O (1) yang konstan.
32. Apa praktik terbaik untuk kerangka kelas koleksi java?
Memilih dengan benar jenis koleksi yang akan digunakan sesuai dengan kebutuhan aplikasi sangat penting untuk kinerja. Misalnya: Jika ukuran elemen diperbaiki dan dapat diketahui sebelumnya, kita harus menggunakan array alih -alih arraylist.
Beberapa kelas koleksi memungkinkan menentukan kapasitas awal. Oleh karena itu, jika kita dapat memperkirakan jumlah elemen yang disimpan, kita dapat menetapkan kapasitas awal untuk menghindari penghitungan ulang nilai hash atau memperluasnya.
Untuk keamanan tipe, keterbacaan, dan ketahanan, obat generik selalu digunakan. Pada saat yang sama, menggunakan obat generik juga dapat menghindari ClassCastException saat runtime.
Menggunakan kelas tidak dapat disediakan oleh JDK sebagai kunci dari peta dapat menghindari penerapan metode hashcode () dan setara () untuk kelas kita sendiri.
Antarmuka lebih baik daripada implementasi saat pemrograman.
Ketika koleksi yang mendasarinya benar -benar kosong, kembalikan set atau array dengan panjang 0, dan jangan kembali nol.
33. Apa perbedaan antara antarmuka enumerasi dan antarmuka iterator?
Pencacahan dua kali lebih cepat dari iterator, sambil mengonsumsi lebih sedikit memori. Namun, Iterator jauh lebih aman daripada enumerasi, karena utas lain tidak dapat memodifikasi objek dalam koleksi yang dilalui oleh Iterator. Pada saat yang sama, Iterator memungkinkan penelepon untuk menghapus elemen dalam koleksi yang mendasarinya, yang tidak mungkin untuk enumerasi.
34. Apa perbedaan antara hashset dan treeset?
Hashset diimplementasikan oleh tabel hash, sehingga elemennya tidak berurutan. Kompleksitas waktu dari ADD (), lepas (), dan berisi () metode adalah O (1).
Di sisi lain, Treeset diimplementasikan oleh struktur berbentuk pohon, dan elemen-elemen di dalamnya dipesan. Oleh karena itu, kompleksitas waktu dari add (), lepas (), dan berisi () metode adalah O (LOGN).
Kolektor sampah
35. Apa tujuan pengumpulan sampah di java? Kapan sampah akan dikumpulkan?
Tujuan pengumpulan sampah adalah untuk mengidentifikasi dan membuang objek yang tidak lagi digunakan aplikasi untuk membebaskan dan menggunakan kembali sumber daya.
36. Apa yang akan dilakukan System.gc () dan runtime.gc ()?
Kedua metode ini digunakan untuk meminta JVM untuk melakukan pengumpulan sampah. Namun, mulai segera atau menunda pengumpulan sampah tergantung pada JVM.
37. Kapan metode finalisasi () dipanggil? Apa tujuan destruktor?
Sebelum membebaskan memori yang ditempati oleh objek, pengumpul sampah memanggil metode Finalize () objek. Secara umum disarankan untuk melepaskan sumber daya yang dipegang oleh objek dalam metode ini.
38. Jika referensi objek diatur ke NULL, akankah pengumpul sampah segera melepaskan memori yang ditempati oleh objek?
Tidak, objek ini akan dapat didaur ulang dalam siklus pengumpulan sampah berikutnya.
39. Seperti apa struktur tumpukan java? Apa ruang Perm Gen di tumpukan?
Tumpukan JVM adalah area data runtime, dan semua instance dan array kelas dialokasikan memori pada tumpukan. Ini dibuat ketika JVM dimulai. Memori tumpukan yang ditempati oleh objek dikumpulkan oleh sistem manajemen memori otomatis, yaitu, pengumpul sampah.
Heap memori terdiri dari objek yang bertahan dan mati. Objek yang masih hidup dapat diakses oleh aplikasi dan tidak akan dikumpulkan sampah. Objek mati adalah objek yang tidak dapat diakses oleh aplikasi dan belum didaur ulang oleh pengumpul sampah. Mereka akan menempati tumpukan ruang memori sampai pengumpul sampah merebut kembali benda -benda ini.
40. Apa perbedaan antara kolektor serial dan pengumpul throughput?
Kolektor throughput menggunakan versi paralel dari pengumpul sampah generasi berikutnya, yang digunakan untuk aplikasi dengan data skala besar dan besar. Kolektor serial sudah cukup untuk sebagian besar aplikasi kecil (membutuhkan sekitar 100m memori pada prosesor modern).
41. Di Java, kapan benda bisa dikumpulkan?
Ketika suatu objek menjadi tidak terjangkau ke aplikasi saat ini menggunakan objek ini, objek dapat didaur ulang.
42. Akankah pengumpulan sampah terjadi pada generasi permanen JVM?
Pengumpulan sampah tidak akan terjadi pada generasi permanen. Jika generasi permanen penuh atau melebihi nilai kritis, itu akan memicu pengumpulan sampah penuh (GC penuh). Jika Anda dengan hati -hati memeriksa informasi output dari pengumpul sampah, Anda akan menemukan bahwa generasi permanen juga didaur ulang. Inilah sebabnya mengapa ukuran generasi permanen yang benar sangat penting untuk menghindari GC penuh. Silakan merujuk ke Java 8: Dari generasi permanen ke area metadata
(Catatan penerjemah: Generasi permanen telah dihapus di Java 8, dan area memori asli baru yang disebut area metadata telah ditambahkan)
Di atas adalah kompilasi informasi untuk pertanyaan wawancara Java. Kami akan terus menambahkan informasi yang relevan di masa mendatang. Terima kasih atas dukungan Anda untuk situs ini!