Berikut adalah beberapa pertanyaan yang baru-baru ini saya tanyakan kepada orang yang diwawancarai yang mengatakan bahwa mereka tahu Java concurrency:
- Jelaskan bahaya "visibilitas memori" - cara JVM dapat menyusun ulang operasi tertentu pada variabel yang tidak dilindungi oleh monitor dan tidak dideklarasikan
volatile
, sehingga satu utas mungkin tidak melihat perubahan yang dilakukan oleh utas lain. Biasanya saya bertanya yang ini dengan menunjukkan kode di mana bahaya ini hadir (misalnyaNoVisibility
contoh pada Listing 3.1 dari "Java Concurrency in Practice" oleh Goetz et al) dan menanyakan apa yang salah. - Jelaskan bagaimana
volatile
pengaruhnya tidak hanya terhadap variabel aktual yang dideklarasikanvolatile
, tetapi juga setiap perubahan pada variabel yang dibuat oleh utas sebelum mengubahvolatile
variabel. - Mengapa Anda menggunakan
volatile
bukansynchronized
? - Menerapkan variabel kondisi dengan
wait()
dannotifyAll()
. Jelaskan mengapa Anda harus menggunakannyanotifyAll()
. Jelaskan mengapa variabel kondisi harus diuji denganwhile
loop.
Pertanyaan saya adalah - apakah ini tepat atau terlalu canggih untuk bertanya kepada seseorang yang mengatakan mereka tahu Java concurrency?
Dan sementara kita melakukannya, apakah Anda berpikir bahwa seseorang yang bekerja di Java concurrency seharusnya diharapkan memiliki pengetahuan di atas rata-rata tentang pengumpulan sampah Jawa?
java
interview
concurrency
sparc_spread
sumber
sumber
notifyAll()
dengan "Saya tidak percaya dalam melakukan pekerjaan scheduler OS, jadi saya menggunakannotify()
"Jawaban:
Itu benar-benar tergantung apakah Anda meminta seorang kandidat dengan 2 tahun pengalaman Java atau satu dengan 7 tahun pengalaman Java. Untuk seorang arsitek / pemimpin teknis / senior, mereka tampaknya pertanyaan yang tepat tetapi untuk junior dan mungkin juga tingkat menengah, mereka tampaknya agak sulit.
Anda juga mengajukan pertanyaan tentang mekanisme sinkronisasi tingkat rendah yang sebagian besar telah digantikan oleh
java.util.concurrent
perkembangan Java saat ini; bukannyawait()/notify()
kunci lebih disukai. Anda dapat melihat bahwa edisi Java Efektif 2 telah menjatuhkan bab yang menjelaskan mekanisme tunggu / beri tahu secara rinci, karena itu tidak dianggap berguna. Juga, wadah menangani multithreading pada tingkat yang lebih tinggi dalam banyak kasus; metode-metode dari EJB yang aman-thread misalnya tanpa perhatian dari programmer (ini tidak berarti bahwa programmer tidak boleh tahu multithreading).Saya sebenarnya melihat multithreading sebagai bagian dari sistem operasi daripada bagian dari bahasa pemrograman. Untuk melihat apakah seseorang benar-benar memahami pertanyaan multithreading dan pemrograman paralel tentang mutex, semaphore atau penjadwalan harus ditanyakan terlebih dahulu dan hanya pada akhirnya, rincian tentang implementasi dalam bahasa pemrograman tertentu.
sumber
lock
vs.wait/notify
- Saya tahu tentanglock
dari buku Goetz tetapi tidak menyadari itu sekarang lebih disukai daripada cara lama. Saya setuju dengan @ Martijn bahwa seseorang dengan tingkat pengalaman ini harus mengetahui pendekatan yang lebih lama. Pokoknya saya tidak bermaksud mengajukan pertanyaan lagi (terutama karena saya sudah menandainya sebagai jawaban - oleh Anda :-)) tapi saya pikir seseorang dengan pengalaman 10 tahun harus bisa menjawab pertanyaan-pertanyaan itu, bukan?lock
vswait/notify
, kunci lebih disukai ketika Anda benar-benar membutuhkan fitur tingkat rendah tetapi dalam kebanyakan kasus alternatif tingkat yang lebih tinggi tersedia; BlockingQueue sangat berguna.Saya akan mengatakan mereka adalah pertanyaan yang relatif maju. Namun mereka tidak "tidak adil" dalam arti bahwa mereka tidak memperdayai pertanyaan.
Memang "keadilan" sebenarnya bukan kriteria yang relevan. Apa yang Anda (sebagai pewawancara) harus khawatirkan adalah apakah pertanyaan dan interpretasi Anda atas jawaban adalah memilih kandidat terbaik untuk posisi atau posisi yang Anda wawancarai. (Atau dengan kata lain, apakah Anda menolak kandidat yang benar - benar harus Anda pertimbangkan karena mereka tidak menjawab pertanyaan ini "dengan benar"?)
Sekali lagi, itu bukan pertanyaan yang relevan. Pertanyaan yang harus Anda tanyakan pada diri sendiri adalah apakah Anda membutuhkan seseorang yang memiliki pengetahuan yang baik tentang pengumpulan sampah Jawa.
sumber