Go साक्षात्कार कैसे पास करें: A से Z तक शीर्ष प्रश्न
\n\nGo डेवलपर पद के लिए साक्षात्कार केवल सिंटैक्स की जाँच नहीं है। नियोक्ता ऐसे उम्मीदवारों की तलाश करते हैं जो भाषा के दर्शन को समझते हैं: सरलता, समवर्तीता और कुशल मेमोरी प्रबंधन। इस लेख में, हम उन प्रमुख प्रश्नों पर चर्चा करेंगे जो आपसे निश्चित रूप से पूछे जाएंगे - बुनियादी से लेकर कोड उदाहरणों के साथ उन्नत विषयों तक। हमारी चेकलिस्ट के अनुसार तैयारी करें, और आप आत्मविश्वास महसूस करेंगे।
\n\n1. Go की मूल बातें: डेटा प्रकार, संरचनाएँ और मेमोरी प्रबंधन
\n\nआइए बुनियादी बातों से शुरू करें। इसके बिना कहीं नहीं जा सकता। साक्षात्कारकर्ता प्रकारों और उनके व्यवहार के बारे में प्रश्न पूछना पसंद करते हैं।
\n\nGo में कौन से अंतर्निहित डेटा प्रकार मौजूद हैं?
\n- \n
- बुनियादी:
int,float64,string,bool। \n - एकत्रित:
array,struct। \n - संदर्भित:
slice,map,channel,pointer,function। \n
एरे और स्लाइस में क्या अंतर है?
\nएरे की एक निश्चित लंबाई होती है, जो संकलन चरण में निर्धारित होती है। स्लाइस एक गतिशील संरचना है जो एक आधार एरे को संदर्भित करती है।
\n// एरे\nvar arr [3]int = [3]int{1, 2, 3}\narr[0] = 10 // ठीक है\n\n// स्लाइस\nslc := []int{1, 2, 3}\nslc = append(slc, 4) // लंबाई बढ़ सकती है\n\nमुश्किल सवाल: यदि स्लाइस की क्षमता पार हो जाती है तो append के साथ मेमोरी का क्या होता है? (उत्तर: Go एक नया एरे आवंटित करेगा जो 2 गुना बड़ा होगा और डेटा कॉपी करेगा)।
Go में मैप (map) कैसे काम करता है?
\nमैप एक हैश तालिका है। ट्रैवर्सल का क्रम गारंटीड नहीं है। गैर-मौजूद कुंजी से पढ़ने पर शून्य मान लौटाया जाता है (उदाहरण के लिए, int के लिए 0)।
m := make(map[string]int)\nm["key"] = 42\nvalue, ok := m["key"] // ok == true, यदि कुंजी मौजूद है\n\n\n2. समवर्तीता: गोरूटीन, चैनल और म्यूटेक्स
\nयह Go के लिए सबसे महत्वपूर्ण विषय है। इसके बिना साक्षात्कार पास नहीं किया जा सकता।
\n\nगोरूटीन क्या है और यह OS थ्रेड से कैसे अलग है?
\nगोरूटीन एक हल्का थ्रेड है जो Go रनटाइम द्वारा प्रबंधित होता है। गोरूटीन का स्टैक 2-4 KB से शुरू होता है (OS थ्रेड के 1 MB के विपरीत)। हजारों गोरूटीन कई OS थ्रेड्स पर काम करते हैं (M:N मॉडल)।
\n\nचैनल कैसे काम करते हैं? वर्कर पूल पैटर्न का उदाहरण दें।
\nfunc worker(id int, jobs <-chan int, results chan<- int) {\n for j := range jobs {\n results <- j * 2\n }\n}\n\nfunc main() {\n jobs := make(chan int, 100)\n results := make(chan int, 100)\n\n // 3 वर्कर शुरू करें\n for w := 1; w <= 3; w++ {\n go worker(w, jobs, results)\n }\n\n // कार्य भेजें\n for j := 1; j <= 5; j++ {\n jobs <- j\n }\n close(jobs)\n\n // परिणाम एकत्र करें\n for r := 1; r <= 5; r++ {\n <-results\n }\n}\n\n\nबफ़र्ड और अनबफ़र्ड चैनल में क्या अंतर है?
\n- \n
- अनबफ़र्ड: भेजने वाला तब तक ब्लॉक रहता है जब तक प्राप्तकर्ता संदेश नहीं ले लेता। सिंक्रोनस संचार। \n
- बफ़र्ड: भेजने वाला केवल तब ब्लॉक होता है जब बफ़र भर जाता है। एसिंक्रोनस संचार। \n
डेडलॉक से कैसे बचें?
\nटाइमआउट या default के साथ select का उपयोग करें:
select {\ncase msg := <-ch:\n fmt.Println(msg)\ncase <-time.After(1 * time.Second):\n fmt.Println("timeout")\n}\n\n\n3. इंटरफ़ेस, जेनेरिक और त्रुटि प्रबंधन
\nGo एक शुद्ध OOP भाषा नहीं है, लेकिन इंटरफ़ेस यहाँ महत्वपूर्ण भूमिका निभाते हैं।
\n\nGo में डक टाइपिंग कैसे काम करती है?
\nएक प्रकार अंतर्निहित रूप से इंटरफ़ेस को लागू करता है यदि उसके पास सभी आवश्यक विधियाँ हों। यह लचीला कोड लिखने की अनुमति देता है।
\ntype Stringer interface {\n String() string\n}\n\ntype User struct {\n Name string\n}\n\nfunc (u User) Str