यहां कुछ प्रश्न दिए गए हैं, जो मैंने हाल ही में साक्षात्कारकर्ताओं से पूछे हैं जो कहते हैं कि वे जावा कंसीडर को जानते हैं:
- "मेमोरी विजिबिलिटी" के खतरे को समझाइए - जिस तरह से जेवीएम उन वेरिएबल्स पर कुछ ऑपरेशंस को रीऑर्डर कर सकता है जो एक मॉनिटर द्वारा असुरक्षित नहीं हैं और घोषित
volatile
नहीं किए गए हैं, जैसे कि एक थ्रेड दूसरे थ्रेड द्वारा किए गए परिवर्तनों को नहीं देख सकता है। आमतौर पर मैं इसे कोड दिखाते हुए पूछता हूं कि यह खतरा कहां मौजूद है (उदाहरण केNoVisibility
लिए Goetz et al द्वारा "Java Concurrency in Practice" से Listing 3.1 में उदाहरण) और पूछना कि क्या गलत है। - बताएं कि
volatile
घोषित किए गए वास्तविक चर को न केवल प्रभावित करता हैvolatile
, बल्कि चर को बदलने से पहले चर द्वारा किए गए परिवर्तन को भी बदलता हैvolatile
। volatile
इसके बजाय आप क्यों इस्तेमाल कर सकते हैंsynchronized
?- के साथ एक शर्त चर को लागू करें
wait()
औरnotifyAll()
। समझाएं कि आपको क्यों इस्तेमाल करना चाहिएnotifyAll()
। बताएं कि क्यों स्थिति चर को एकwhile
लूप के साथ परीक्षण किया जाना चाहिए ।
मेरा सवाल है - क्या ये उचित हैं या किसी ऐसे व्यक्ति से पूछने के लिए उन्नत हैं जो कहता है कि वे जावा कंसीडर को जानते हैं?
और जब हम इस पर होते हैं, तो क्या आपको लगता है कि जावा कंसर्ट में काम करने वाले किसी व्यक्ति से जावा कचरा संग्रह के बारे में उपरोक्त ज्ञान होना चाहिए?
notifyAll()
"अगर मैं ओएस अनुसूचक के काम करने में विश्वास नहीं करता, तो मैं इसका उपयोग कैसे करता हूं? notify()
"