Java डेवलपर इंटरव्यू सवाल

volatile असल में क्या गारंटी देता है, और कब यह काफी नहीं होता?

इंटरव्यूअर असल में क्या परख रहा है, अपना जवाब कैसे स्ट्रक्चर करें, और एक बोला हुआ उदाहरण जिसे आप अपना सकते हैं।

छोटा जवाब

volatile visibility और ordering की गारंटी देता है: एक write उस हर थ्रेड को दिखता है जो बाद में उस field को पढ़े, और यह एक happens before किनारा बनाता है, इसलिए उससे पहले की गई writes भी दिख जाती हैं। यह atomicity नहीं देता, तो count plus plus अब भी एक race है क्योंकि वह एक read, एक add और एक write है। compound actions के लिए synchronized, कोई lock, या AtomicLong जैसी atomic class इस्तेमाल करें।

इंटरव्यूअर यह क्यों पूछते हैं

यह पता करने का सबसे साफ तरीका है कि कोई Java memory model समझता है या बस इतना जानता है कि volatile का मतलब shared होता है। इंटरव्यूअर visibility बनाम atomicity का फर्क सटीक शब्दों में सुनना चाहते हैं, साथ में एक जायज इस्तेमाल जैसे stop flag। फॉलो अप अक्सर double checked locking, atomic classes, और synchronized कैसे mutual exclusion के साथ वही memory effects भी देता है, इस ओर जाते हैं।

अपना जवाब कैसे स्ट्रक्चर करें

  • गारंटी को visibility और ordering में बांटें।
  • साफ कहें कि यह क्या नहीं करता: compound operations racy ही रहते हैं।
  • एक जायज इस्तेमाल दें, जैसे कोई flag जो loop रोक दे।
  • बताएं कि atomicity चाहिए तो आप इसकी जगह क्या लेते हैं।

उदाहरण जवाब

बोला हुआ उदाहरण, पहले व्यक्ति में

volatile का मतलब है कि read हमेशा सबसे ताजा write देखे, न कि किसी register या core के cache में पड़ा पुराना value, और यह उसके आसपास compiler और processor की reordering रोक देता है। memory model की भाषा में यह एक happens before किनारा बनाता है, तो लिखने वाले थ्रेड ने volatile write से पहले जो कुछ किया वह उस थ्रेड को दिखता है जो बाद में उसे पढ़ता है। जो यह नहीं देता वह है atomicity। counter increment तीन operations हैं, तो दो थ्रेड्स एक ही value पढ़ सकते हैं और एक update खो जाता है, चाहे field कितनी भी volatile हो। मेरा आम जायज इस्तेमाल एक boolean flag है जो किसी background loop को रुकने को कहता है, जहां एक write और एक read ही पूरा पैटर्न है। जहां भी read modify write है वहां मैं AtomicInteger लेता हूं, या LongAdder अगर इतना गर्म है कि contention मायने रखने लगे, या lock अगर कई fields एक साथ बदलनी हों। memory model पर मैं एक और जगह भरोसा करता हूं, safe publication में, क्योंकि final fields construction के बाद दिखने की गारंटी रखती हैं, और यह चीजों को immutable रखने की अच्छी वजह है।

जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।

देखें यह कैसे काम करता है

फॉलो-अप सवाल जिनकी उम्मीद रखें

  • volatile ठीक होने से पहले double checked locking क्यों टूटा हुआ था?
  • synchronized आपको वही memory गारंटियां कैसे देता है?
  • आप AtomicLong की जगह LongAdder कब इस्तेमाल करेंगे?

Java डेवलपर के और सवाल

आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।

मेरे सवाल प्रेडिक्ट करें

मुश्किल सवाल पूछे जाने से पहले उनकी रिहर्सल कीजिए

एक लाइव कोपायलट के साथ प्रैक्टिस कीजिए, फिर तैयार होकर अंदर जाइए। $29 Session Pass आपको इंटरव्यू पार करा देता है, न कोई सब्सक्रिप्शन, न कोई लॉक-इन।

GhostPilot पाएं