Failed to render content. Please refresh the page. Showing plain-text fallback.
"@/components/CTA" से CTA आयात करें
सॉफ्टवेयर इंजीनियरिंग साक्षात्कार प्रश्न: एसडीई भूमिकाओं के लिए पूरी गाइड (2025)
आखरी अपडेट: 7 फरवरी, 2025
चाबी छीन लेना
- सॉफ्टवेयर इंजीनियरिंग साक्षात्कार कोडिंग, सिस्टम डिजाइन और व्यवहार संबंधी प्रश्नों पर ध्यान केंद्रित करते हैं
- मास्टर डेटा संरचनाओं, एल्गोरिदम और डिजाइन पैटर्न
- समाधान और ट्रेड-ऑफ को स्पष्ट रूप से समझाने का अभ्यास करें
- वितरित प्रणालियों और मापनीयता अवधारणाओं को समझें
- व्यक्तिगत योगदानकर्ता और टीम सहयोग दोनों प्रश्नों के लिए तैयारी करें
🎯 प्रो टिप: सॉफ्टवेयर इंजीनियरिंग साक्षात्कार कोड लिखने, सिस्टम डिजाइन करने और दूसरों के साथ काम करने की आपकी क्षमता का परीक्षण करते हैं। बुनियादी बातों पर ध्यान केंद्रित करें, नियमित रूप से अभ्यास करें और पूरी प्रक्रिया के दौरान स्पष्ट सोच और संचार प्रदर्शित करें।
सॉफ्टवेयर इंजीनियरिंग साक्षात्कार संरचना
सॉफ्टवेयर इंजीनियरिंग साक्षात्कार में आमतौर पर विभिन्न दक्षताओं का आकलन करने वाले कई दौर शामिल होते हैं:
साक्षात्कार दौर:
- फ़ोन स्क्रीन: बुनियादी कोडिंग और व्यवहार संबंधी प्रश्न
- तकनीकी साक्षात्कार: कोडिंग समस्याएँ और सिस्टम डिज़ाइन
- ऑन-साइट/पैनल: एकाधिक साक्षात्कारकर्ता, विभिन्न विषय
- अंतिम दौर: वरिष्ठ नेतृत्व और सांस्कृतिक फिट
मूल्यांकन क्षेत्र:
- कोडिंग कौशल: डेटा संरचनाएं, एल्गोरिदम, समस्या-समाधान
- सिस्टम डिज़ाइन: स्केलेबिलिटी, आर्किटेक्चर, ट्रेड-ऑफ़
- व्यवहार: टीम वर्क, नेतृत्व, समस्या-समाधान दृष्टिकोण
- डोमेन ज्ञान: भाषा/रूपरेखा विशिष्ट प्रश्न
कोडिंग साक्षात्कार प्रश्न
आसान स्तर की समस्याएं
1. वैध कोष्ठक
समस्या: केवल '(', ')', '{', '}', '[' और ']' वर्णों वाली एक स्ट्रिंग को देखते हुए, निर्धारित करें कि इनपुट स्ट्रिंग मान्य है या नहीं।
विलयन:
'''अजगर
डीईएफ isvalid (ओं):
स्टैक = []
मैपिंग = {')': '(', '}': '{', ']': '['}
एस में चार के लिए:
यदि मानचित्रण में char:
# समापन ब्रैकेट
topelement = stack.pop() अगर स्टैक और '#'
यदि मानचित्रण [char] != topelement:
वापसी झूठी
के अलावा:
# ब्रैकेट खोलना
स्टैक.एपेंड(चार)
वापसी स्टैक नहीं
समय: ओ (एन + एम), अंतरिक्ष: ओ (1)
मुख्य अवधारणाएँ: लिंक की गई सूचियाँ, एल्गोरिदम मर्ज करें
मध्यम स्तर की समस्याएं
1. एलआरयू कैश
समस्या: एक LRU (कम से कम हाल ही में उपयोग किया गया) कैश डिज़ाइन और कार्यान्वित करें।
विलयन:
'''अजगर
कक्षा LRUCache:
डीईएफ init (स्वयं, क्षमता):
स्वक्षमता = क्षमता
self.cache = {} # कुंजी -> नोड
self.head = नोड (0, 0)
self.tail = नोड (0, 0)
self.head.next = self.tail
self.tail.prev = self.head
डीईएफ remove(स्वयं, नोड):
पिछला, nxt = node.prev, node.next
पिछला.अगला, nxt.prev = nxt, पिछला
डीईएफ add(स्वयं, नोड):
पिछला = self.tail.prev
पिछला.अगला = नोड
self.tail.prev = नोड
node.prev, node.next = पिछला, self.tail
डेफ गेट (स्वयं, कुंजी):
यदि self.cache में कुंजी है:
नोड = self.cache[कुंजी]
self.remove(नोड)
self.add(नोड)
node.value लौटाएं
वापसी -1
डेफ पुट (स्वयं, कुंजी, मान):
यदि self.cache में कुंजी है:
self.remove(self.cache[key])
नोड = नोड (कुंजी, मान)
self.add(नोड)
self.cache[कुंजी] = नोड
यदि len(self.cache) > self.capacity:
एलआरयू = सेल्फ.हेड.नेक्स्ट
self.remove(एलआरयू)
डेल सेल्फ.कैश[lru.key]
समय: ओ (एन), अंतरिक्ष: ओ (एच)
मुख्य अवधारणाएँ: ट्री ट्रैवर्सल, डायनेमिक प्रोग्रामिंग
सिस्टम डिज़ाइन साक्षात्कार प्रश्न
1. URL छोटा करने की सेवा डिज़ाइन करें (TinyURL)
आवश्यकताओं:
- लंबे URL को छोटे कोड में छोटा करें
- छोटे URL को मूल URL पर रीडायरेक्ट करें
- उच्च ट्रैफ़िक संभालें (लाखों अनुरोध/दिन)
- विशिष्टता सुनिश्चित करें और टकराव को रोकें
- URL उपयोग पर विश्लेषण प्रदान करें
डिज़ाइन संबंधी विचार:
- एन्कोडिंग: यूआरएल कोड के लिए बेस62 एन्कोडिंग
- भंडारण: यूआरएल मैपिंग को स्टोर करने के लिए डेटाबेस
- अनुमापकता: वितरित डेटाबेस और कैशिंग
- विशिष्टता: अद्वितीय कोड उत्पन्न करें
- समाप्ति: यूआरएल समाप्ति संभालें
स्थापत्यशैली:
- लोड बैलेंसर → एपीआई सर्वर → डेटाबेस (शार्डेड) + कैश (रेडिस)
- पढ़ने/लिखने वाले डेटाबेस को अलग करें
- वैश्विक वितरण के लिए सीडीएन
- निगरानी और विश्लेषण
प्रमुख घटक:
- हैश फ़ंक्शन: कोड जनरेशन के लिए MD5/SHA-256
- डेटाबेस स्कीमा: urlcode (पीके), originalurl, createddate, expiresdate, clickcount
- कैशिंग रणनीति: रेडिस में लोकप्रिय यूआरएल कैश करें
- दर सीमित करना: दुरुपयोग रोकें
2. एक अधिसूचना प्रणाली डिज़ाइन करें
आवश्यकताओं:
- कई चैनलों (ईमेल, एसएमएस, पुश) के माध्यम से सूचनाएं भेजें
- प्रतिदिन लाखों सूचनाओं को संभालें
- विभिन्न अधिसूचना प्रकारों और प्राथमिकताओं का समर्थन करें
- पुनः प्रयास के साथ विश्वसनीय डिलीवरी सुनिश्चित करें
- उपयोगकर्ता की प्राथमिकताओं और ऑप्ट-आउट की अनुमति दें
डिज़ाइन संबंधी विचार:
- अनुमापकता: उच्च मात्रा और स्पाइक्स को संभालें
- विश्वसनीयता: संदेश वितरण सुनिश्चित करें
- चैनल: कई डिलीवरी विधियों का समर्थन करें
- निजीकरण: उपयोगकर्ता प्राथमिकताएँ और अनुकूलन
- विश्लेषिकी: डिलीवरी और जुड़ाव पर नज़र रखें
स्थापत्यशैली:
- एपीआई गेटवे → संदेश कतार (काफ्का) → चैनल कार्यकर्ता → बाहरी एपीआई
- उपयोगकर्ता वरीयताओं और अधिसूचना इतिहास के लिए डेटाबेस
- घातीय बैकऑफ़ के साथ तंत्र का पुनः प्रयास करें
- असफल संदेशों के लिए मृत पत्र कतार
प्रमुख घटक:
- संदेश कतार: लोड को संभालने के लिए Async प्रसंस्करण
- कार्यकर्ता सेवाएँ: प्रत्येक चैनल के लिए अलग-अलग कर्मचारी
- टेम्पलेट इंजन: गतिशील सामग्री निर्माण
- वरीयता इंजन: उपयोगकर्ता सेटिंग्स और ऑप्ट-आउट हैंडलिंग
3. एक सोशल मीडिया फ़ीड डिज़ाइन करें
आवश्यकताओं:
- लाखों उपयोगकर्ताओं के लिए वैयक्तिकृत फ़ीड उत्पन्न करें
- पोस्ट, लाइक, कमेंट, फॉलो को संभालें
- वास्तविक समय अपडेट और सूचनाएं
- अरबों इंटरैक्शन तक स्केल करें
- कम विलंबता और उच्च उपलब्धता सुनिश्चित करें
डिज़ाइन संबंधी विचार:
- निजीकरण: प्रति उपयोगकर्ता सामग्री को रैंक और फ़िल्टर करें
- वास्तविक समय: सक्रिय उपयोगकर्ताओं के लिए लाइव अपडेट
- अनुमापकता: बड़े पैमाने पर पढ़ने/लिखने का भार संभालें
- संगति: कुछ कार्यों के लिए अंतिम स्थिरता
- गोपनीयता: उपयोगकर्ता की गोपनीयता और अवरोधन का सम्मान करें
स्थापत्यशैली:
- पथ लिखें: एपीआई → संदेश कतार → डेटाबेस + कैश
- पठन पथ: फ़ीड सेवा → कैश → डेटाबेस
- वास्तविक समय: लाइव अपडेट के लिए WebSocket कनेक्शन
- फैन-आउट: छोटे अनुयायियों के लिए पुश मॉडल, बड़े के लिए खींचें
प्रमुख घटक:
- फ़ीड रैंकिंग: सामग्री रैंकिंग के लिए मशीन लर्निंग
- कैशिंग परतें: मल्टी-लेवल कैशिंग (सीडीएन, रेडिस, स्थानीय)
- डेटाबेस शेयरिंग: कई डेटाबेस में डेटा वितरित करें
- वास्तविक समय पाइपलाइन: लाइव अपडेट के लिए स्ट्रीम प्रोसेसिंग
डिजाइन पैटर्न और ओओपी प्रश्न
1. सिंगलटन पैटर्न
प्रश्न: थ्रेड-सुरक्षित सिंगलटन पैटर्न लागू करें।
विलयन:
'''अजगर
कक्षा सिंगलटन:
instance = कोई नहीं
lock = थ्रेडिंग। ताला ()
डीईएफ new(सीएलएस):
यदि cls.instance कोई नहीं है:
cls.lock साथ:
यदि cls.instance कोई नहीं है: # डबल-चेक लॉकिंग
cls.instance = सुपर ().new(सीएलएस)
वापसी cls.instance
डीईएफ init(स्वयं):
यदि hasattr(स्वयं, 'प्रारंभीकरण') नहीं है:
# केवल एक बार आरंभ करें
self.data = {}
self.initialized = सत्य
मुख्य अवधारणाएँ: अमूर्तता, बहुरूपता, एनकैप्सुलेशन
सॉफ्टवेयर इंजीनियरों के लिए व्यवहार संबंधी प्रश्न
टीम वर्क और सहयोग
1. मुझे उस समय के बारे में बताएं जब तकनीकी दृष्टिकोण के बारे में आपके किसी सहकर्मी से असहमति थी।
मजबूत जवाब:
"मेरी पिछली भूमिका में, मेरे सहयोगी एक नई माइक्रोसर्विस के लिए एक अखंड वास्तुकला का उपयोग करना चाहते थे, जबकि मैंने इसे छोटी सेवाओं में तोड़ने की वकालत की। मैंने उद्योग के मामले के अध्ययन द्वारा समर्थित माइक्रोसर्विसेज के स्केलेबिलिटी लाभ और रखरखाव के फायदे दिखाते हुए तकनीकी तर्क तैयार किए।
हमने दोनों दृष्टिकोणों पर चर्चा करने के लिए अपने तकनीकी नेतृत्व के साथ एक बैठक निर्धारित की। मैंने विकास वेग और तैनाती आवृत्ति सुधार पर डेटा प्रस्तुत किया। मेरे सहयोगी ने अखंड दृष्टिकोण के सादगी के लाभों के बारे में बताया।
टेक लीड ने एक हाइब्रिड दृष्टिकोण पर निर्णय लिया - अखंड शुरू करना लेकिन भविष्य के अपघटन की योजना बनाना। इस अनुभव ने मुझे डेटा-संचालित तकनीकी चर्चाओं और समझौता समाधान खोजने का मूल्य सिखाया।
प्रमुख कौशल: तकनीकी संचार, समझौता, डेटा-संचालित निर्णय लेना
समस्या-समाधान दृष्टिकोण
2. किसी जटिल समस्या को डिबग करने के लिए अपनी प्रक्रिया का वर्णन करें.
मजबूत जवाब:
"जटिल मुद्दों को डिबग करते समय, मैं एक व्यवस्थित दृष्टिकोण का पालन करता हूं:
1. समस्या को पुन: उत्पन्न करें: समस्या को लगातार पुन: उत्पन्न करने के लिए एक न्यूनतम परीक्षण मामला बनाएं
2. जानकारी इकट्ठा करें: लॉग, मेट्रिक्स और सिस्टम स्थिति की जाँच करें
3. परिकल्पनाएँ बनाना: लक्षणों के आधार पर, संभावित मूल कारणों की पहचान करें
4. परीक्षण परिकल्पना: वैज्ञानिक पद्धति का उपयोग करें—एक समय में एक चर बदलें
5. फिक्स सत्यापित करें: सुनिश्चित करें कि फिक्स नई समस्याओं को पेश किए बिना समस्या का समाधान करता है
उदाहरण के लिए, जब हमारा एपीआई प्रतिक्रिया समय 30 सेकंड तक बढ़ गया, तो मैंने पहली बार स्टेजिंग में समस्या को पुन: पेश किया। लॉग विश्लेषण ने डेटाबेस क्वेरी टाइमआउट दिखाया। मैंने अपने ओआरएम में एक एन + 1 क्वेरी समस्या की पहचान की, उत्सुकता लोडिंग के साथ क्वेरी को अनुकूलित किया, और प्रतिक्रिया समय को 2 सेकंड से कम कर दिया।
प्रमुख कौशल: व्यवस्थित समस्या-समाधान, डिबगिंग पद्धति, प्रदर्शन अनुकूलन
सीखना और विकास
3. आप प्रौद्योगिकी रुझानों के साथ अद्यतित कैसे रहते हैं?
मजबूत जवाब:
"मैं निरंतर सीखने के लिए एक संरचित दृष्टिकोण बनाए रखता हूं:
- दैनिक पढ़ना: तकनीकी ब्लॉग, समाचार पत्र (हैकर न्यूज, टेकक्रंच)
- साप्ताहिक डीप डाइव: एक गहन लेख या शोध पत्र
- मासिक परियोजनाएँ: नई तकनीकों के साथ व्यक्तिगत परियोजनाएँ
- सम्मेलन में उपस्थिति: आभासी सम्मेलन और बैठकें
- सामुदायिक व्यस्तता: ओपन सोर्स योगदान और स्टैक ओवरफ्लो
हाल ही में, मैंने एक कमांड-लाइन टूल बनाकर रस्ट सीखा, रिएक्ट नेटिव लाइब्रेरी में योगदान दिया, और माइक्रोसर्विसेज पैटर्न पर हमारी कंपनी टेक टॉक में प्रस्तुत किया। यह मेरे कौशल को चालू रखता है और मुझे अपनी परियोजनाओं में नए विचार लाने में मदद करता है।
प्रमुख कौशल: स्व-निर्देशित शिक्षा, सामुदायिक जुड़ाव, ज्ञान साझा करना
उन्नत विषय
वितरित प्रणालियाँ
1. कैप प्रमेय और इसके निहितार्थों की व्याख्या करें।
हल:
"कैप प्रमेय बताता है कि एक वितरित प्रणाली में, आप केवल तीन गुणों में से दो की गारंटी दे सकते हैं:
- संगति: सभी नोड्स एक ही डेटा को एक साथ देखते हैं
- उपलब्धता: नोड विफलताओं के बावजूद सिस्टम चालू रहता है
- विभाजन सहिष्णुता: नेटवर्क विभाजन के बावजूद सिस्टम काम करना जारी रखता है
व्यवहार में, वितरित प्रणालियों के लिए विभाजन सहिष्णुता गैर-परक्राम्य है, इसलिए आप स्थिरता (HBase जैसे CP सिस्टम) या उपलब्धता (DynamoDB जैसे AP सिस्टम) के बीच चयन करते हैं। अधिकांश आधुनिक प्रणालियाँ तीनों को संतुलित करने के लिए अंतिम स्थिरता प्रदान करती हैं।
मुख्य अवधारणाएँ: संगति मॉडल, व्यापार-बंद, सिस्टम डिज़ाइन
डेटाबेस डिजाइन
2. आप सोशल मीडिया प्लेटफॉर्म के लिए डेटाबेस स्कीमा कैसे डिजाइन करेंगे?
हल:
"एक सोशल मीडिया प्लेटफॉर्म के लिए, मैं विचार करूंगा:
उपयोगकर्ता तालिका: userid (पीके), उपयोगकर्ता नाम, ईमेल, passwordhash, createdat
पोस्ट तालिका: postid (पीके), userid (एफके), सामग्री, createdat, updatedat
टिप्पणियाँ तालिका: commentid (पीके), postid (एफके), userid (एफके), सामग्री, createdat
तालिका पसंद है: likeid (पीके), userid (एफके), postid (एफके), createdat (कई-से-कई)
तालिका का अनुसरण करता है: followerid (एफके), followingid (एफके), createdat (कई-से-कई)
डिज़ाइन निर्णय:
- स्केलेबिलिटी के लिए यूयूआईडी का उपयोग करें
- अनुपालन के लिए सॉफ्ट डिलीट लागू करें
- अक्सर पूछे जाने वाले कॉलम पर इंडेक्स जोड़ें
- बड़ी तालिकाओं के लिए विभाजन पर विचार करें
- स्केलेबिलिटी के लिए रीड प्रतिकृतियों का उपयोग करें"
प्रमुख अवधारणाएँ: सामान्यीकरण, अनुक्रमण, मापनीयता, संबंध
सुरक्षा संबंधी विचार
3. आप सॉफ़्टवेयर डिज़ाइन में सुरक्षा कैसे अपनाते हैं?
हल:
"सुरक्षा को शुरू से ही डिजाइन किया जाना चाहिए, बाद में नहीं जोड़ा जाना चाहिए:
प्रमाणीकरण और प्राधिकरण:
- उचित समाप्ति के साथ JWT टोकन
- भूमिका-आधारित अभिगम नियंत्रण (RBAC)
- बहु-कारक प्रमाणीकरण
डेटा सुरक्षा:
- आराम से और पारगमन में संवेदनशील डेटा एन्क्रिप्ट करें
- इनपुट सत्यापन और स्वच्छता
- पैरामीटरीकृत प्रश्नों के साथ SQL इंजेक्शन की रोकथाम
बुनियादी ढांचे की सुरक्षा:
- नियमित सुरक्षा अद्यतन और पैच
- नेटवर्क विभाजन और फ़ायरवॉल
- खतरों की निगरानी और लॉगिंग
सर्वोत्तम प्रथाएं:
- कम से कम विशेषाधिकार का सिद्धांत
- गहराई से दृष्टिकोण में रक्षा
- नियमित सुरक्षा ऑडिट और प्रवेश परीक्षण"
मुख्य अवधारणाएँ: डिज़ाइन द्वारा सुरक्षा, OWASP सिद्धांत, अनुपालन आवश्यकताएँ
साक्षात्कार की तैयारी की रणनीति
कोडिंग अभ्यास
दैनिक दिनचर्या:
- LeetCode/HackerRank पर 1-2 कोडिंग समस्याएँ
- प्रत्येक सप्ताह विभिन्न विषयों पर ध्यान दें
- इष्टतम समाधान और समय जटिलता की समीक्षा करें
- समाधान को ज़ोर से समझाने का अभ्यास करें
साप्ताहिक फोकस क्षेत्र:
- सोमवार: सरणियाँ और तार
- मंगलवार: लिंक्ड लिस्ट एंड ट्री
- बुधवार: गतिशील प्रोग्रामिंग
- गुरुवार: ग्राफ़ और एल्गोरिदम
- शुक्रवार: सिस्टम डिजाइन
- सप्ताहांत: नकली साक्षात्कार
सिस्टम डिज़ाइन अभ्यास
अध्ययन विषय:
- स्केलेबिलिटी पैटर्न (लोड संतुलन,