أسئلة مقابلة JavaScript التي يجب أن تتوقعها
بقلم Aaron Cao · آخر تحديث

توقّع الأساسيات: closures، وevent loop، وthis binding، والprototypes، وscoping باستخدام var وlet وconst. ثم تمارين برمجية مثل تنفيذ debounce، وتسطيح array، أو كتابة أداة مساعدة لـpromise، إضافة إلى مواضيع المتصفح مثل event delegation. مقابلات المستوى senior تضيف أنماط async والأداء.
ما أساسيات JavaScript الأكثر شيوعًا في الأسئلة؟
تبدو قائمة أسئلة JavaScript بلا نهاية، ومحاولة تغطية أسئلة عشوائية هي أبطأ طريقة لإنهائها. يُضيّق هذا القسم القائمة إلى المفاهيم التي يعود إليها القائمون بالمقابلات في كل جولة تقريبًا، بحيث يتوافق تدريبك مع التوزيع الحقيقي للأسئلة. خمسة مواضيع تغطي معظم الجولات:
- Closures: ما الذي تلتقطه الدالة، وخطأ متغير الحلقة الكلاسيكي، ولماذا تعمل أنماط module.
- Event loop: call stack وtask queue وmicrotask queue، وترتيب طباعة السجلات في مثال مختلط.
- this binding: الافتراضي، والضمني، والصريح باستخدام call وapply، وكيف تختلف arrow function.
- Prototypes: البحث عن الخصائص عبر chain، وما الذي تتحول إليه صياغة class عند التصريف.
- Scoping: var مقابل let وconst، وhoisting، وtemporal dead zone.
التحويل القسري للمساواة بين == و===، وtruthiness، وطرق array مثل map وfilter وreduce تُكمل مستوى الفرز الأولي. إذا استطعت شرح كل نقطة أعلاه بصوت مسموع في أقل من دقيقة، فإن جولة الأساسيات تصمد.
ما تمارين البرمجة التي يجب التدرب عليها؟
إلى جانب الأسئلة المفاهيمية، تتضمن معظم جولات JavaScript تمرين تنفيذ قصير يُنجز مباشرة أثناء المقابلة. المجموعة المتكررة صغيرة، وتستحق التدريب حتى يستغرق كل تمرين دقائق لا محاولات متكررة:
- نفّذ
debounceوthrottle، واذكر متى يناسب كل منهما. - سطّح array متداخل مع recursion وبدونه.
- اكتب نسخة مبسطة من
Promise.allتقوم بـreject عند أول فشل. - ابنِ event emitter صغيرًا باستخدام on وoff وemit.
- نفّذ deep clone لكائن (object)، واذكر الحالات التي تفوتها نسختك.
على سبيل المثال، قد يحصل مرشح front-end يجري مقابلة لوظيفة mid-level على debounce كتمرين إحماء، ثم يُطلب منه ربطه بحقل بحث وشرح ما يحدث للطلبات التي ما زالت قيد التنفيذ. السؤال التوضيحي التالي هو الاختبار الحقيقي؛ يوسّع القائمون بالمقابلة التمرين ليروا أين ينتهي فهمك الذهني للغة.
التدرب على هذا بصوت مسموع أمام قائم بمقابلة يواصل الضغط هو ما يجعله يترسّخ؛ تشرح صفحة mock interview كيفية إجراء جلسات محسوبة بالوقت مع أسئلة توضيحية.
كيف تبدو أسئلة المتصفح وasync؟
تضيف الأدوار المرتبطة بالمتصفح طبقة فوق أساسيات اللغة. event delegation هو نقطة الارتكاز: لماذا يتفوق listener واحد على parent على ألف listener على children، وكيف يجعل bubbling ذلك ممكنًا، ومتى تهم capture phase. يظهر batching لتحديثات DOM، وlayout thrash، وما الذي يُحفّز reflow في الجولات ذات الطابع الأدائي.
تقاربت أسئلة async نحو شكل قياسي واحد: مقتطف كود يمزج setTimeout، وسلاسل promise، ودوال async، حيث يجب عليك توقع ترتيب المخرجات. تعتمد الإجابة على ترتيب microtask مقابل macrotask، ويهتم القائمون بالمقابلة بالسبب أكثر من التسلسل نفسه. معالجة الأخطاء عبر حدود await، وpromise chaining مقابل nesting، وتسابق الطلبات باستخدام Promise.race تُكمل هذه المجموعة.
كيف تختلف هذه الجولات بين صيغ coding وbehavioral وsystem design موضح في مركز أنواع المقابلات.
كيف تتدرب بحيث ينتقل ذلك إلى الجولة الحقيقية؟
قراءة الإجابات تبدو مثمرة لكنها لا تنقل شيئًا يُذكر عمليًا. الجولة منطوقة، ومحسوبة بالوقت، وتفاعلية، لذا يجب أن يكون تدريبك كذلك أيضًا. أجرِ جلسات تجريبية تروي فيها ما تفعله بصوت مسموع أثناء الكتابة، وتتعرض فيها للمقاطعة بأسئلة توضيحية، وتتسابق مع الساعة؛ هذا الضغط هو ما يجعل الاسترجاع تلقائيًا. تتوفر مجموعات خاصة بكل دور، للغات وstacks أخرى، في مركز بنوك الأسئلة.
ملاحظة صريحة: عادة ما تجري جولات JavaScript الحقيقية في محرر مشترك مع شاشتك ظاهرة، وتُسجَّل التقييمات المراقَبة ذلك. المساعد مخصص للتحضير والتدرب خارج ذلك، وليس للشاشة المشتركة مباشرة. أما حيث تكون المساعدة المباشرة مشروعة، أثناء مكالمات الفرز الهاتفية غير المشتركة أو جلسات تحضيرك الخاصة، تبقى طبقة SubcueAI محلية على جهازك، ولا ينضم أي bot إلى المكالمة.