C# इंटरव्यू: परीक्षा नहीं, बल्कि एक संवाद
\n\nसोचिए: आप एक टीम लीड या सीनियर डेवलपर के सामने बैठे हैं। वे आपको दुश्मन की तरह नहीं, बल्कि एक भविष्य के सहकर्मी की तरह देख रहे हैं। लेकिन आपके दिमाग में कोहरा है, हाथ पसीने से तर हैं, और IDisposable के बारे में पूछे जाने पर आप भूल जाते हैं कि यह है क्या। परिचित लग रहा है?
C# इंटरव्यू स्कूल का टेस्ट नहीं है जहाँ आपको सिर्फ 'सही अक्षर' चुनना हो। यह आपकी इंजीनियरिंग सोच, तर्क करने की क्षमता और .NET प्लेटफॉर्म की बुनियादी समझ की जाँच है। इस लेख में हम उन मुख्य विषयों को कवर करेंगे जो वास्तव में इंटरव्यू में पूछे जाते हैं (स्पॉयलर: 80% सवाल बार-बार दोहराए जाते हैं)।
\n\nबुनियादी बातें जो आपको कंठस्थ होनी चाहिए
\n\nअगर आप एक घंटे में इंटरव्यू पर जा रहे हैं और तैयारी का समय नहीं है, तो यह सेक्शन पढ़ें। यह C# डेवलपर की 'रोटी' है। इन ज्ञान के बिना आपको जूनियर पद पर भी नहीं रखा जाएगा।
\n\n1. डेटा टाइप्स: Value vs Reference
\n\nयह शायद सबसे लोकप्रिय सवाल है। इंटरव्यूअर सिर्फ 'int वैल्यू टाइप है, class रेफरेंस टाइप है' सुनना नहीं चाहता। वह यह देखना चाहता है कि क्या आप समझते हैं कि यह अंदरूनी तौर पर कैसे काम करता है।
\n\n// इंटरव्यू में अक्सर दिया जाने वाला उदाहरण\nstruct Point {\n public int X;\n public int Y;\n}\n\nclass PointClass {\n public int X;\n public int Y;\n}\n\nvoid Main() {\n Point p1 = new Point { X = 10, Y = 20 };\n Point p2 = p1;\n p2.X = 999;\n Console.WriteLine(p1.X); // 10 — कॉपी\n\n PointClass pc1 = new PointClass { X = 10, Y = 20 };\n PointClass pc2 = pc1;\n pc2.X = 999;\n Console.WriteLine(pc1.X); // 999 — रेफरेंस\n}\n\nमुख्य बिंदु: struct पूरी तरह कॉपी होता है, class रेफरेंस से पास होता है। और हाँ, string एक रेफरेंस टाइप है, लेकिन इम्यूटेबल होने के कारण वैल्यू टाइप की तरह व्यवहार करता है। इसके बारे में भी अक्सर पूछा जाता है।
2. Boxing और Unboxing
\n\nएक आसान विषय, लेकिन इसे पसंद किया जाता है। कल्पना करें कि आप एक वैल्यू-टाइप (int) को object में डाल रहे हैं। यह boxing है। जब आप इसे वापस लेते हैं — unboxing। यह प्रदर्शन के लिहाज से महंगा है।
\n\nint number = 42;\nobject boxed = number; // boxing\nint unboxed = (int)boxed; // unboxing\n\nआधुनिक प्रोजेक्ट्स में यह दुर्लभ है, लेकिन इस तंत्र का ज्ञान दिखाता है कि आप समझते हैं कि .NET मेमोरी कैसे मैनेज करता है।
\n\n3. इंटरफेस और एब्सट्रैक्ट क्लासेस
\n\nक्लासिक सवाल: 'interface का उपयोग कब करें और abstract class का कब?'
\n\n- \n
- इंटरफेस — एक अनुबंध। जब आपके पास अलग-अलग क्लासेस हों जो एक ही काम कर सकें (जैसे, उड़ना: हवाई जहाज, पक्षी, ड्रोन)। \n
- एब्सट्रैक्ट क्लास — बेसिक इम्प्लीमेंटेशन। जब क्लासेस में साझा लॉजिक हो (जैसे, सभी जानवर सांस लेते हैं, लेकिन अलग-अलग तरीके से)। \n
public interface IFlyable {\n void Fly();\n}\n\npublic abstract class Animal {\n public abstract void MakeSound();\n public void Breathe() => Console.WriteLine("साँस लेना-छोड़ना");\n}\n\nC# 8.0+ में इंटरफेस में डिफ़ॉल्ट इम्प्लीमेंटेशन आ गया है, लेकिन इंटरव्यू में क्लासिक दृष्टिकोण के बारे में बात करना बेहतर है।
\n\nएडवांस्ड सवाल: कहाँ है पेंच
\n\nजब बुनियादी बातें हो जाती हैं, तो इंटरव्यूअर 'गहराई में खोदना' शुरू करता है। ये वे विषय हैं जो अक्सर अटकने का कारण बनते हैं।
\n\n4. Async/Await और थ्रेड्स
\n\nकई लोग एसिंक्रोनसिटी और मल्टीथ्रेडिंग में भ्रमित हो जाते हैं। याद रखें: async/await थ्रेड को मुक्त करने के बारे में है, नया थ्रेड बनाने के बारे में नहीं।
public async Task<string> GetDataAsync() {\n using HttpClient client = new HttpClient();\n // जवाब का इंतज़ार करते समय थ्रेड मुक्त हो जाता है\n string result = await client.GetStringAsync("https://example.com");\n return result;\n}\n\nअक्सर ConfigureAwait(false) के बारे में पूछा जाता है। जवाब: इसका उपयोग मूल सिंक्रोनाइज़ेशन कॉन्टेक्स्ट (जैसे, WPF के UI थ्रेड) में वापस न जाने के लिए किया जाता है। लाइब्रेरीज़ में हमेशा उपयोग करें, एप्लिकेशन में सावधानी से।