container beans बनाता है और उनके collaborators देता है, तो classes यह घोषित करती हैं कि उन्हें क्या चाहिए, खुद बनाती नहीं। constructor injection इसलिए बेहतर है क्योंकि dependencies अनिवार्य और साफ दिखती हैं, fields final हो सकती हैं जिससे ऑब्जेक्ट immutable और पूरी तरह बना हुआ होता है, class को सादे new से बिना reflection के टेस्ट किया जा सकता है, और circular dependency lazy field injection के पीछे छिपने के बजाय startup पर जोर से फेल होती है।
इंटरव्यूअर यह क्यों पूछते हैं
यह framework का लेबल पहने हुए डिजाइन का सवाल है। इंटरव्यूअर annotations की मशीनरी नहीं, testability और immutability के बारे में सुनना चाहते हैं, साथ में bean scopes की समझ और साझा bean में mutable state रखने का singleton वाला जाल। आप बिना Spring context के class को कैसे टेस्ट करेंगे, यह बता पाना उन्हें आपकी unit testing की आदतों के बारे में काफी कुछ कह देता है।
अपना जवाब कैसे स्ट्रक्चर करें
- एक वाक्य में inversion of control समझाएं।
- constructor injection के ठोस फायदे गिनाएं।
- scopes और singleton में state रखने का खतरा बताएं।
- समझाएं कि यह आपके tests की शक्ल कैसे तय करता है।
उदाहरण जवाब
container ऑब्जेक्ट बनाने का मालिक है, तो मेरी class अपने constructor में जो चाहिए वह मांगती है और Spring उसे हल करके inject कर देता है। मैं constructor injection इसलिए लेता हूं क्योंकि इससे contract साफ हो जाता है: अगर class पांच collaborators लेती है, तो यह पांच annotated fields में छिपने के बजाय signature में दिख जाता है, और आमतौर पर यही बता देता है कि class बहुत ज्यादा काम कर रही है। fields final हो सकती हैं, तो ऑब्जेक्ट पूरा बना होता है और थ्रेड्स के बीच publish करने लायक सुरक्षित होता है, और मैं उसे test में सादे constructor arguments के साथ, बिना किसी Spring context के, बना सकता हूं, जिससे unit tests तेज रहते हैं। circular dependencies भी startup पर नाकामी बनकर सामने आती हैं, उन पर पर्दा नहीं पड़ता। scope की बात करें तो beans डिफॉल्ट रूप से singleton होते हैं, इसलिए मैं उन्हें stateless रखता हूं; singleton service पर mutable field कनकरेंट requests का इंतजार करती race condition है। जब मुझे हर request की अपनी state चाहिए तो मैं उसे request scoped bean की तरफ हाथ बढ़ाने के बजाय method parameter में पास करता हूं। field injection से मैं जानबूझकर बचता हूं, क्योंकि वह dependencies छिपा देता है और test में सेट करने के लिए reflection मांगता है।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- एक ही type के दो beans होने पर आप क्या करेंगे?
- singleton में prototype bean inject करने पर क्या होता है?
- मौजूदा request पर निर्भर component को आप कैसे टेस्ट करेंगे?
Java डेवलपर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें