जावास्क्रिप्ट साक्षात्कार कैसे पास करें: उन्नत स्तर

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

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

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

जावास्क्रिप्ट साक्षात्कार कैसे पास करें: उन्नत स्तर के शीर्ष प्रश्न



Senior या Middle JavaScript डेवलपर पद के लिए साक्षात्कार केवल सिंटैक्स की जाँच नहीं है। साक्षात्कारकर्ता भाषा के कार्य तंत्र की गहरी समझ देखना चाहते हैं, विशेष रूप से Node.js वातावरण में। इस लेख में, हम उन प्रमुख विषयों पर चर्चा करेंगे जो अक्सर कठिनाई पैदा करते हैं, और कोड उदाहरण देंगे जो आपको सबसे पेचीदा प्रश्नों का आत्मविश्वास से उत्तर देने में मदद करेंगे।



1. क्लोजर (Closures) और लेक्सिकल एनवायरनमेंट



क्लोजर के बारे में प्रश्न एक क्लासिक है। लेकिन उन्नत स्तर पर, केवल परिभाषा देना ही महत्वपूर्ण नहीं है, बल्कि यह दिखाना भी है कि क्लोजर let, const और लूप में कैसे काम करते हैं।



प्रश्न: निम्नलिखित कोड क्या आउटपुट देगा और क्यों?



for (var i = 0; i < 3; i++) {  setTimeout(() => console.log(i), 100);}// आउटपुट: 3, 3, 3


समस्या यह है कि var का स्कोप फंक्शनल है, ब्लॉक स्कोप नहीं। जब तक कॉलबैक कॉल होते हैं, लूप पहले ही समाप्त हो चुका होता है, और i का मान 3 होता है। समाधान let का उपयोग करना है (जो प्रत्येक पुनरावृत्ति पर एक नया बाइंडिंग बनाता है) या कॉल को क्लोजर में लपेटना है:



for (var i = 0; i < 3; i++) {  (function(j) {    setTimeout(() => console.log(j), 100);  })(i);}// आउटपुट: 0, 1, 2


Node.js में, प्राइवेट वेरिएबल और फंक्शन फैक्ट्री बनाने के लिए क्लोजर का सक्रिय रूप से उपयोग किया जाता है। उदाहरण के लिए, middleware लिखते समय:



function createLogger(prefix) {  return function(message) {    console.log(`[${prefix}] ${message}`);  };}const infoLog = createLogger('INFO');infoLog('सर्वर शुरू हुआ'); // [INFO] सर्वर शुरू हुआ


2. इवेंट लूप और माइक्रोटास्क (Microtasks)



इवेंट लूप की समझ मूल्यांकन के मुख्य मानदंडों में से एक है। साक्षात्कारकर्ता अक्सर एसिंक्रोनस कोड के आउटपुट क्रम पर आधारित कार्य देते हैं।



प्रश्न: console.log किस क्रम में निष्पादित होंगे?



console.log('1');

setTimeout(() => console.log('2'), 0);

Promise.resolve().then(() => console.log('3'));

process.nextTick(() => console.log('4'));

console.log('5');

// आउटपुट: 1, 5, 4, 3, 2


व्याख्या:

  • console.log('1') और console.log('5') सिंक्रोनस हैं, पहले निष्पादित होते हैं।
  • process.nextTick सबसे उच्च प्राथमिकता वाला माइक्रोटास्क है। यह वर्तमान चरण पूरा होने के तुरंत बाद निष्पादित होता है।
  • Promise.then भी एक माइक्रोटास्क है, लेकिन nextTick की तुलना में थोड़ी कम प्राथमिकता के साथ।
  • setTimeout(fn, 0) एक मैक्रोटास्क है, जो इवेंट लूप के अगले टिक में निष्पादित होता है।


Node.js के लिए process.nextTick और setImmediate को याद रखना महत्वपूर्ण है। अंतर यह है कि nextTick किसी भी I/O से पहले निष्पादित होता है, जबकि setImmediate बाद में।



3. प्रॉमिस और एसिंक्रोनस इटरेटर (Async/Await)



उन्नत स्तर का अर्थ है प्रॉमिस चेन, त्रुटि प्रबंधन और समानांतर निष्पादन के साथ काम करने की क्षमता।



प्रश्न: कई एसिंक्रोनस अनुरोधों को समानांतर में निष्पादित करने और सभी परिणामों की प्रतीक्षा करने के लिए उन्हें कैसे संभालें?



const fetchData = (id) => {  return new Promise((resolve) => {    setTimeout(() => resolve(`ID के लिए डेटा: ${id}`), id * 100);  });};

async function getAllData() { const ids = [1, 2, 3]; const promises = ids.map(id => fetchData(id)); const results = await Promise.all(promises); console.log(results); // ['ID के लिए डेटा: 1', 'ID के लिए डेटा: 2', 'ID के लिए डेटा: 3']}

getAllData();


महत्वपूर्ण बारीकी: Promise.all पहली त्रुटि पर पूरे प्रॉमिस को अस्वीकार कर देता है। यदि आप सभी परिणाम (त्रुटियों सहित) प्राप्त करना चाहते हैं, तो Promise.allSettled का उपयोग करें। यह साक्षात्कारों में एक सामान्य विषय है, विशेष रूप से Node.js के संदर्भ में।

ब्लॉग

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