Kotlin साक्षात्कार कैसे पास करें: उन्नत प्रश्न

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Kotlin साक्षात्कार कैसे पास करें: उन्नत स्तर के शीर्ष प्रश्न

\n\n

Kotlin डेवलपर पद के लिए साक्षात्कार केवल सिंटैक्स की जाँच नहीं है। उन्नत स्तर पर, इंटरव्यूअर भाषा की गहरी समझ, इसकी विशेषताओं और कुशल, संक्षिप्त तथा सुरक्षित कोड लिखने की क्षमता देखना चाहते हैं। इस लेख में, हम तकनीकी साक्षात्कारों में अक्सर पूछे जाने वाले मुख्य विषयों को कवर करेंगे: कोरूटीन, इनलाइन फंक्शन, सील्ड क्लास, डेलीगेशन और लैम्ब्डा एक्सप्रेशन की बारीकियाँ। यह सामग्री PythonLib शैक्षिक पोर्टल के लिए तैयार की गई है, जहाँ हम डेवलपर्स को अपने ज्ञान को व्यवस्थित करने में मदद करते हैं।

\n\n

1. कोरूटीन (Coroutines) और स्ट्रक्चर्ड कंकरेंसी

\n

कोरूटीन Kotlin में एसिंक्रोनस प्रोग्रामिंग की नींव हैं। इस विषय पर प्रश्न यह दर्शाते हैं कि क्या आप समझते हैं कि शेड्यूलर, कॉन्टेक्स्ट और एक्सेप्शन हैंडलिंग कैसे काम करते हैं।

\n\n

स्ट्रक्चर्ड कंकरेंसी क्या है और इसकी आवश्यकता क्यों है?

\n

स्ट्रक्चर्ड कंकरेंसी (संरचित समवर्तीता) एक सिद्धांत है जिसमें कोरूटीन का जीवनचक्र एक स्कोप से बंधा होता है। यदि पैरेंट कोरूटीन रद्द हो जाता है, तो सभी चाइल्ड कार्य स्वचालित रूप से रद्द हो जाते हैं। यह मेमोरी लीक को रोकता है और कोड को पूर्वानुमानित बनाता है।

\n\n
fun main() = runBlocking {\n    launch {\n        delay(1000)\n        println("कार्य 1 पूर्ण")\n    }\n    launch {\n        delay(500)\n        println("कार्य 2 पूर्ण")\n    }\n    println("मुख्य थ्रेड ब्लॉक नहीं हुआ")\n}\n
\n\n

launch और async के बीच अंतर

\n

launch एक कोरूटीन शुरू करता है जो कोई परिणाम नहीं लौटाता (Unit)। async एक Deferred लौटाता है, जिससे await() के माध्यम से परिणाम प्राप्त किया जा सकता है। async समानांतर गणनाओं के लिए उपयोगी है।

\n\n
val deferred1 = async { calculateSum(10, 20) }\nval deferred2 = async { calculateSum(30, 40) }\nval result = deferred1.await() + deferred2.await()\nprintln("योग: $result")\n
\n\n

कोरूटीन में एक्सेप्शन हैंडलिंग

\n

कोरूटीन के अंदर try-catch का उपयोग करें या वैश्विक हैंडलिंग के लिए CoroutineExceptionHandler का उपयोग करें। याद रखें कि launch में एक्सेप्शन पदानुक्रम में ऊपर फैलते हैं, जबकि async में वे await() कॉल तक संग्रहीत रहते हैं।

\n\n
val handler = CoroutineExceptionHandler { _, exception ->\n    println("त्रुटि: ${exception.message}")\n}\n\nfun main() = runBlocking {\n    val job = launch(handler) {\n        throw RuntimeException("कुछ गलत हो गया")\n    }\n}\n
\n\n

2. इनलाइन फंक्शन, reified और क्रॉस-इनलाइन

\n

ये तंत्र प्रदर्शन को अनुकूलित करने और रनटाइम पर जेनेरिक के साथ काम करने की अनुमति देते हैं। इंटरव्यूअर अक्सर inline, noinline और crossinline के बीच अंतर के बारे में पूछते हैं।

\n\n

इनलाइन फंक्शन की आवश्यकता क्यों है?

\n

इनलाइन फंक्शन फंक्शन के बॉडी को सीधे कॉल साइट पर सम्मिलित करते हैं। यह लैम्ब्डा ऑब्जेक्ट बनाने के ओवरहेड को समाप्त करता है। यह विशेष रूप से higher-order फंक्शन के लिए उपयोगी है।

\n\n
inline fun measureTime(action: () -> Unit) {\n    val start = System.currentTimeMillis()\n    action()\n    println("समय: ${System.currentTimeMillis() - start} मि.से.")\n}\n
\n\n

reified क्या है?

\n

reified के साथ, आप इनलाइन फंक्शन के अंदर टाइप के बारे में जानकारी प्राप्त कर सकते हैं, जो टाइप इरेज़र के कारण सामान्य जेनेरिक के लिए संभव नहीं है।

\n\n
inline fun <reified T> isInstance(value: Any): Boolean {\n    return value is T\n}\n\nfun main() {\n    println(isInstance<String>("Hello")) // true\n}\n
\n\n

noinline और crossinline के बीच अंतर

\n
    \n
  • noinline — किसी विशेष लैम्ब्डा के इनलाइनिंग को प्रतिबंधित करता है (उदाहरण के लिए, यदि इसे किसी अन्य फंक्शन में पास किया जाता है)।
  • \n
  • crossinline — इनलाइनिंग की अनुमति देता है, लेकिन लैम्ब्डा से non-local return (गैर-स्थानीय वापसी) को प्रतिबंधित करता है, जो एसिंक्रोनस कॉल के लिए सुरक्षित है।
  • \n
\n

ब्लॉग

पुस्तक अनुशंसाएँ