Java eşzamanlılığıyla ilgili bu ileri / haksız mülakat soruları mı? [kapalı]


12

Son zamanlarda, Java eşzamanlılığını bildiğini söyleyen mülakat yapanlara sorduğum bazı sorular:

  1. "Bellek görünürlüğü" tehlikesini açıklayın - JVM'nin bir monitör tarafından korunmayan ve bildirilmeyen değişkenler üzerindeki belirli işlemleri yeniden sıralama şekli, volatileböylece bir iş parçacığı başka bir iş parçacığı tarafından yapılan değişiklikleri görmeyebilir. Genellikle bunu, bu tehlikenin bulunduğu kodu göstererek (örneğin, NoVisibilityGoetz ve arkadaşlarının "Uygulamada Java Eşzamanlılığı" ndan Liste 3.1'deki örnek) ve sorunun ne olduğunu sorarak soruyorum.
  2. volatileYalnızca bildirilen gerçek değişkeni değil volatile, aynı zamanda değişkeni değiştirmeden önce bir iş parçacığı tarafından yapılan değişkenlerde yapılan değişiklikleri nasıl etkilediğini açıklayın volatile.
  3. Neden volatileyerine kullanabilirsiniz synchronized?
  4. Bir durum değişkeni uygulamak wait()ve notifyAll(). Neden kullanmanız gerektiğini açıklayın notifyAll(). Koşul değişkeninin neden bir whiledöngü ile test edilmesi gerektiğini açıklayın .

Benim sorum şu - bunlar Java eşzamanlılığını bildiğini söyleyen birine sormak için uygun veya çok mu gelişmiş?

Ve biz oradayken, Java eşzamanlılığında çalışan bir kişinin Java çöp toplama ortalamasının üzerinde bir bilgiye sahip olması bekleniyor mu?


4
Endişelendiğim tek şey, "beceriler" yerine "ezberlenmiş gerçekler" yabani otlarına girmekten kaçınmaktır.
tylerl

5
Bu sorular, yüksek düzeyde eşzamanlılık gerektiren bir java pozisyonuna alınan herkes için son derece makul görünüyor.
Rig

2
Eşzamanlı gelişime ihtiyaç duyan bir pozisyon arıyorsanız, bunlar sadece başlangıçtır. Ama birisi notifyAll()"OS zamanlayıcı çalışma yaparken inanmıyorum, bu yüzden kullanıyorum notify()" ile ilgili sorunuza cevap verirseniz nasıl tepki vereceğini merak ediyorum
kdgregory

2
Ayrıca juc Kilitler, veri yapıları, İş Parçacığı Havuzları ve Güvensiz hakkında Q'lar ekliyorum :-)
Martijn Verburg

2
Diğerleri soruların karmaşıklığından bahsetti. Projeyle ilgili olduklarını varsayarsak, onlara daha basit bir soru yönelttiğinizden emin olun ve adayın derinliklerinin dışında olduğu açıkça görülüyorsa bu sorgulama çizgisini terk edin - bu onların zamanının kaybıdır ve sizinki ve enerjiyi mahveder. röportaj. Cevaplayamayacaklarını bildiğiniz sorular sormanın bir anlamı yok. Diğer konularda benzer derinliğe girmeye hazır olduğunuzdan emin olun - burada birinin zayıf olması, yetkin olmadıkları ve kendilerini diğer güçlü yönlerden kanıtlayamadıkları anlamına gelmez.
Sean McSomething

Yanıtlar:


11

Gerçekten 2 yıl Java deneyimi olan bir aday mı yoksa 7 yıl Java deneyimi olan bir aday mı soruyorsunuz. Bir mimar / teknik lider / kıdemli için uygun sorular gibi görünüyorlar, ancak bir genç ve orta seviye için de zor görünüyorlar.

Ayrıca, java.util.concurrentgünümüzde Java geliştirmenin yerini alan düşük seviyeli senkronizasyon mekanizmaları hakkında soru soruyorsunuz ; wait()/notify() kilit yerine tercih edilir. Etkili Java 2. sürümünün , bekleme / bildirim mekanizmasını ayrıntılı olarak açıklayan bir bölümü bıraktığını görebilirsiniz , çünkü yararlı olmadığı düşünülmüştür. Ayrıca, kap çoğu durumda çoklu iş parçacığını daha yüksek bir seviyede ele alır; bir EJB'nin yöntemleri, örneğin programcıdan endişe duymadan iş parçacığı için güvenlidir (bu, programcıların çoklu iş parçacığını bilmemesi gerektiği anlamına gelmez).

Aslında çoklu iş parçacığının bir programlama dilinin bir alt bölümü değil, işletim sistemlerinin bir alt bölümü olduğunu görüyorum. Bir kişinin muteksler, semaforlar veya çizelgeleme hakkında çok iş parçacıklı ve paralel programlama sorularını gerçekten anlayıp anlayamadığını görmek için öncelikle ve daha sonra belirli bir programlama dilinde uygulama hakkında ayrıntılar sorulmalıdır.


2
Wait () ve notify () yorumlarında +1 - ancak eşzamanlılık konusunda deneyimli bir geliştirici, Java'nın bu alandaki yeteneklerinin tarihini ve evrimini bilecektir (Java 7'de F&J'ye kadar dahil).
Martijn Verburg

@ M3th: Bu soruları sorduğum son kişi 10 yıllık Java deneyimine sahipti ve eşzamanlı programlamayı bildiğini iddia etti. Gönderiye lockkarşı teşekkür ederiz wait/notify- lockGoetz kitabından biliyordum ama artık eski yoldan tercih edildiğinin farkında değildim. @Martijn ile hemfikirim, ancak bu düzeyde deneyime sahip birinin eski yaklaşımlardan haberdar olması gerekir. Her neyse, soruyu tekrar sormak istemiyorum (özellikle cevapladığınız için işaretledim - sizin tarafınızdan :-)) ama 10 yıllık tecrübeye sahip birisinin bu soruları cevaplayabilmesi gerektiğini düşünürdüm, değil mi?
sparc_spread

1
@Martijn Verburg İkinize de katılıyorum; iyi bir Java geliştiricisi (özellikle eşzamanlılığı bildiğini söyleyen biri) wait () / notify () yönteminin nasıl kullanılacağını bilmelidir; en azından Object sınıfında neden göründükleri konusundaki merak için.
m3th0dman

1
@sparc_spread Java eşzamanlılığının cevapları bilmesi gerektiğini bildiklerini açıkça bildiren bir programcı (en azından son 3). Deneyim seviyesi ile ilgili olarak, dediğim gibi, mimar / teknik lider \ kıdemli geliştirici olduğunu iddia eden / isteyen bir programcı imo ve 5+ Java deneyimi (JSP ve MVC Frameworks değil arka uç) bilmelidir. lockVs ile ilgili olarak wait/notify, gerçekten düşük seviyeli özelliklere ihtiyacınız olduğunda kilitler tercih edilir, ancak çoğu durumda daha yüksek seviyeli bir alternatif mevcuttur; BlockingQueue özellikle yararlıdır.
m3th0dman

14

Bunlar Java eşzamanlılığını bildiğini söyleyen birine sormak için uygun veya çok gelişmiş mi?

Göreceli olarak ileri sorular olduklarını söyleyebilirim. Ancak, hileli sorular olmaması anlamında "haksız" değildirler.

Gerçekten de "adalet" gerçekten ilgili bir kriter değildir. (Bir görüşmeci olarak) endişelenmeniz gereken şey, soruların ve cevapları yorumlamanızın görüştüğünüz pozisyon veya pozisyonlar için en iyi adayları seçip seçmediğidir. (Ya da başka bir deyişle, bu soruları "doğru" cevaplamadıkları için adaylara gerçekten daha fazla dikkat etmeniz gerektiğini mi reddediyorsunuz ?)

Ve biz oradayken, Java eşzamanlılığında çalışan bir kişinin Java çöp toplama ortalamasının üzerinde bir bilgiye sahip olması bekleniyor mu?

Yine, bu gerçekten ilgili bir soru değil. Kendinize sormanız gereken soru , Java çöp toplama konusunda iyi bilgiye sahip birine ihtiyacınız olup olmadığıdır .


Bu yanıt için çok teşekkürler. Keşke her ikisini de cevap olarak işaretleyebilseydim. Burada yardım etmek için harcadığınız zamanı takdir ediyorum.
sparc_spread
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.