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