Pertanyaan wawancara utas Java
Pertanyaan tentang multi-threading dan konkurensi adalah bagian penting dari setiap wawancara Java. Jika Anda ingin mendapatkan posisi informasi front-office di bank investasi saham mana pun, maka Anda harus siap dengan banyak pertanyaan tentang multi-threading. Multithreading dan konkurensi adalah topik yang sangat populer di perbankan investasi, terutama yang berkaitan dengan perkembangan perdagangan elektronik. Mereka menanyakan banyak pertanyaan threading Java yang membingungkan kepada pewawancara. Pewawancara hanya ingin memastikan bahwa pewawancara memiliki pengetahuan yang cukup tentang thread Java dan konkurensi, karena banyak kandidat hanya mengetahui permukaannya saja. Sistem perdagangan elektronik bervolume tinggi dan berlatensi rendah untuk perdagangan langsung ke pasar pada dasarnya bersifat bersamaan. Berikut ini adalah pertanyaan threading Java yang ingin saya tanyakan pada waktu dan tempat berbeda. Saya tidak memberikan jawaban, tetapi jika memungkinkan saya memberi Anda petunjuk, dan terkadang petunjuk tersebut cukup untuk menjawab pertanyaan tersebut. Ada semakin banyak pertanyaan mengenai alat konkurensi dan koleksi konkuren yang merujuk pada Paket Konkurensi Java 5. Di antara masalah-masalah tersebut, ThreadLocal, Blocking Queue, Counting Semaphore dan ConcurrentHashMap lebih populer.
15 pertanyaan dan jawaban wawancara multi-threading Java
1) Sekarang ada tiga thread T1, T2, dan T3. Bagaimana Anda memastikan bahwa T2 dijalankan setelah T1 dijalankan, dan T3 dijalankan setelah T2 dijalankan?
Pertanyaan thread ini biasanya ditanyakan pada putaran pertama atau tahap wawancara telepon untuk menguji apakah Anda familiar dengan metode "gabung". Masalah multi-threading ini relatif sederhana dan dapat diimplementasikan menggunakan metode join.
2) Apa kelebihan antarmuka Kunci dibandingkan blok tersinkronisasi di Java? Anda perlu menerapkan cache yang efisien yang memungkinkan banyak pengguna untuk membaca, namun hanya mengizinkan satu pengguna untuk menulis, sehingga menjaga integritasnya.
Keuntungan terbesar dari antarmuka kunci dalam pemrograman multi-utas dan bersamaan adalah mereka menyediakan kunci terpisah untuk membaca dan menulis, yang memungkinkan Anda menulis struktur data berkinerja tinggi seperti ConcurrentHashMap dan pemblokiran bersyarat. Pertanyaan wawancara thread Java semakin banyak didasarkan pada jawaban pewawancara. Saya sangat menyarankan untuk membaca tentang Locks sebelum Anda melakukan wawancara multi-thread, karena Locks saat ini banyak digunakan dalam cache sisi klien dan ruang koneksi perdagangan untuk membangun terminal perdagangan elektronik.
3) Apa perbedaan antara metode wait dan sleep di java?
Pertanyaan wawancara thread Java yang biasanya ditanyakan dalam wawancara telepon. Perbedaan terbesarnya adalah wait melepaskan kunci sambil menunggu, sedangkan sleep selalu menahan kuncinya. Wait biasanya digunakan untuk interaksi antar thread, dan sleep biasanya digunakan untuk menjeda eksekusi.
4) Gunakan Java untuk mengimplementasikan antrian pemblokiran.
Ini adalah pertanyaan wawancara multi-utas yang relatif sulit dan memiliki banyak tujuan. Pertama, ini dapat menguji apakah kandidat benar-benar dapat menulis program menggunakan thread Java. Kedua, ini dapat menguji pemahaman kandidat tentang skenario konkurensi, dan Anda dapat mengajukan banyak pertanyaan berdasarkan hal ini. Jika dia menggunakan metode wait() dan notify() untuk mengimplementasikan antrian pemblokiran, Anda bisa memintanya untuk menulisnya lagi menggunakan kelas konkurensi terbaru di Java 5.
5) Tulis kode dalam Java untuk menyelesaikan masalah produsen-konsumen.
Ini sangat mirip dengan pertanyaan di atas, namun pertanyaan ini lebih klasik. Terkadang wawancara akan menanyakan pertanyaan berikut. Bagaimana cara mengatasi masalah produsen-konsumen di java? Tentu saja ada banyak solusinya. Kadang-kadang mereka bahkan bertanya bagaimana menerapkan masalah para filsuf makan.
6) Jika Anda memprogram program di Java yang menyebabkan kebuntuan, bagaimana cara mengatasinya?
Ini adalah pertanyaan wawancara thread Java favorit saya karena meskipun masalah kebuntuan sangat umum terjadi ketika menulis program multi-thread secara bersamaan, banyak kandidat tidak dapat menulis kode bebas kebuntuan (kode bebas kebuntuan?) dan mereka kesulitan. Cukup beri tahu mereka bahwa Anda memiliki N sumber daya dan N utas, dan Anda memerlukan semua sumber daya untuk menyelesaikan suatu operasi. Untuk mempermudah, n di sini bisa diganti dengan 2. Data yang lebih besar akan membuat soal terlihat lebih rumit. Dapatkan informasi lebih lanjut tentang kebuntuan dengan Menghindari Kebuntuan di Java.
7) Apa itu operasi atom? Apa operasi atom di Java?
Pertanyaan wawancara thread java yang sangat sederhana, pertanyaan selanjutnya adalah Anda perlu menyinkronkan operasi atom.
8) Apa peran kunci dari volatil di Java? Bagaimana cara menggunakannya? Apa bedanya dengan metode tersinkronisasi di Java?
Sejak Java 5 dan model memori Java berubah, masalah threading berdasarkan kata kunci volatil menjadi semakin populer. Anda harus siap menjawab pertanyaan tentang bagaimana variabel volatil memastikan visibilitas, keteraturan, dan konsistensi dalam lingkungan bersamaan.
9) Apa yang dimaksud dengan kondisi balapan? Bagaimana Anda mengidentifikasi dan mengatasi persaingan?
Ini adalah pertanyaan yang muncul pada tahap lanjutan wawancara multi-utas. Kebanyakan pewawancara akan bertanya tentang kondisi persaingan yang Anda alami baru-baru ini dan bagaimana Anda mengatasinya. Terkadang mereka akan menulis kode sederhana dan membiarkan Anda mendeteksi kondisi balapan dalam kode tersebut. Anda bisa merujuk ke artikel saya sebelumnya tentang kondisi balapan Java. Menurut pendapat saya ini adalah salah satu pertanyaan wawancara thread java terbaik, dapat secara akurat mendeteksi pengalaman kandidat dalam menyelesaikan kondisi balapan, atau menulis kode yang bebas dari data race atau kondisi balapan lainnya (kalimat yang bebas dari data race ini akan tidak menerjemahkan). Buku terbaik tentang hal ini adalah "Praktik konkurensi di Java".
10) Bagaimana Anda menggunakan thread dump? Bagaimana Anda menganalisis dump Thread?
Di UNIX Anda dapat menggunakan kill -3 dan thread dump akan mencetak log, di windows Anda dapat menggunakan "CTRL+Break". Pertanyaan wawancara thread yang sangat sederhana dan profesional, tetapi rumit jika dia menanyakan cara menganalisisnya.
11) Mengapa metode run() dijalankan ketika kita memanggil metode start()? Mengapa kita tidak dapat memanggil metode run() secara langsung?
Ini adalah pertanyaan wawancara multi-threading Java yang sangat klasik. Ini juga merupakan kebingungan saya ketika pertama kali mulai menulis program thread. Saat ini pertanyaan ini biasanya ditanyakan dalam wawancara telepon atau pada putaran pertama wawancara Java tingkat pemula hingga menengah. Jawaban atas pertanyaan ini seharusnya adalah ini, ketika Anda memanggil metode start() Anda akan membuat thread baru dan mengeksekusi kode dalam metode run(). Namun jika Anda memanggil metode run() secara langsung, metode tersebut tidak akan membuat thread baru dan tidak akan mengeksekusi kode thread pemanggil. Baca artikel saya sebelumnya "Perbedaan Antara Metode Start dan Run" untuk informasi lebih lanjut.
12) Bagaimana cara membangunkan thread yang diblokir di Java?
Ini adalah pertanyaan sulit tentang thread dan pemblokiran, dan memiliki banyak solusi. Saya rasa tidak ada cara untuk membatalkan thread jika menemui blok IO. Jika thread diblokir dengan memanggil wait(), sleep(), atau join(), Anda dapat menginterupsi thread dan membangunkannya dengan melemparkan InterruptedException. Artikel saya sebelumnya "Cara menangani metode pemblokiran di java" memiliki banyak informasi tentang cara menangani pemblokiran thread.
13) Apa perbedaan antara CycliBarriar dan CountdownLatch di Java?
Pertanyaan thread ini terutama digunakan untuk menguji apakah Anda familiar dengan paket bersamaan di JDK5. Perbedaan keduanya adalah CyclicBarrier dapat menggunakan kembali penghalang yang telah dilewati, sedangkan CountdownLatch tidak dapat digunakan kembali.
14) Apa yang dimaksud dengan objek yang tidak dapat diubah dan bagaimana objek tersebut membantu menulis aplikasi secara bersamaan?
Pertanyaan wawancara klasik lainnya tentang multi-threading, tidak terkait langsung dengan thread, tetapi banyak membantu secara tidak langsung. Pertanyaan wawancara Java ini bisa menjadi sangat rumit jika dia meminta Anda untuk menulis objek yang tidak dapat diubah, atau menanyakan mengapa String tidak dapat diubah.
15) Apa masalah umum yang Anda temui di lingkungan multi-thread? Bagaimana Anda mengatasinya?
Yang biasa ditemui dalam program multi-thread dan bersamaan adalah antarmuka memori, kondisi balapan, kebuntuan, livelock, dan kelaparan. Masalahnya tidak ada habisnya dan jika Anda salah, akan sulit untuk menemukan dan melakukan debug. Ini sebagian besar berbasis wawancara dan bukan pertanyaan threading Java berbasis aplikasi praktis.
Beberapa pertanyaan tambahan:
1) Apa perbedaan antara thread hijau dan thread lokal di Jawa?
2) Apa perbedaan antara thread dan proses?
3) Apa yang dimaksud dengan peralihan konteks dalam multithreading?
4) Apa perbedaan antara deadlock dan livelock, serta perbedaan antara deadlock dan pie?
5) Apa algoritma penjadwalan thread yang digunakan di Java?
6) Apa itu penjadwalan thread di Java?
7) Bagaimana Anda menangani pengecualian yang tidak dapat ditangkap di thread?
8) Apa itu grup thread dan mengapa tidak direkomendasikan di Java?
9) Mengapa lebih baik menggunakan kerangka Executor daripada menggunakan aplikasi untuk membuat dan mengelola thread?
10) Apa perbedaan antara Executor dan Executor di Java?
11) Bagaimana cara mengetahui thread mana yang paling banyak menggunakan waktu CPU di Windows dan Linux?