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

ऐसी Spring service को आप कैसे टेस्ट करते हैं जो डेटाबेस इस्तेमाल करती है और किसी दूसरे API को कॉल करती है?

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

छोटा जवाब

domain logic को सादे JUnit से, बिना किसी Spring context के टेस्ट करें, क्योंकि constructor injection से यह बहुत आसान है। persistence को container में चलते असली डेटाबेस पर टेस्ट करें, in memory विकल्प पर नहीं, क्योंकि dialects अलग होते हैं और migrations को भी टेस्ट होना चाहिए। controller या repository tests के लिए पूरी application बूट करने की जगह test slices लें, और बाहरी API को HTTP परत पर stub करें ताकि आपका client कोड, retries और parsing सब चलें।

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

इंटरव्यूअर जानना चाहते हैं कि आपके tests regressions पकड़ते हैं या सिर्फ mocks चलाते हैं। in memory के बजाय container में असली डेटाबेस पसंद करना, रफ्तार के लिए पूरे context की जगह slices लेना, और अपनी ही repository को mock करने के बजाय HTTP boundary पर mock करना, ये सब ऐसे suite के संकेत हैं जिस पर लोग सच में भरोसा करते हैं। tests का चलने का समय भी मायने रखता है, क्योंकि धीमा suite छोड़ दिया जाता है।

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

  • परतें बांटें और हर एक के लिए उपयुक्त test शैली चुनें।
  • container में असली डेटाबेस लें और test में migrations चलाएं।
  • अपने client को mock करने की जगह बाहरी HTTP को stub करें।
  • suite को तेज और अलग थलग रखें ताकि उस पर भरोसा बना रहे।

उदाहरण जवाब

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

ज्यादातर logic को बिना किसी framework के सादे unit tests मिलते हैं: constructor injection का मतलब है कि मैं class को उसके collaborators के test doubles के साथ बना सकता हूं और वह मिलीसेकंड में चलती है। persistence के लिए मैं container में उसी engine और version का असली डेटाबेस लेता हूं, और migrations test setup का हिस्सा होती हैं, ताकि हर बार migration खुद भी जांची जाए। in memory डेटाबेस तेज है पर dialects और constraints के बारे में झूठ बोलता है, और इसी वजह से मैंने एक ऐसी query भेजी है जो tests में चली और production में फेल हो गई। web परत के लिए मैं ऐसा slice लेता हूं जो सिर्फ controller और serialization लोड करे, पूरी application नहीं, क्योंकि हर test के लिए सब कुछ बूट करना ही suites को बीस मिनट लंबा बनाता है। बाहरी API को mock server से HTTP स्तर पर stub किया जाता है, ताकि मेरा client configuration, timeouts, retry logic और JSON mapping असल में चलें। मैं पूरे run में containers दोबारा इस्तेमाल करता हूं और हर test को transaction में rollback करता हूं, जिससे चीजें अलग थलग और parallel चलने लायक रहती हैं।

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

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

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

  • रफ्तार के लिए in memory डेटाबेस क्यों नहीं?
  • अपने client के retry और timeout बर्ताव को आप कैसे टेस्ट करते हैं?
  • test में N plus one query पकड़ने के लिए आप किस पर assert लगाते हैं?

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

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

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

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

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

GhostPilot पाएं