العودة للدورة|مقابلات مهندس الواجهات الأمامية: إتقان React وتصميم الأنظمة وأداء الويب
معمل

محاكي محرك JavaScript

20 دقيقة
متوسط
3 المحاولات المجانية

التعليمات

الهدف

نفّذ ثلاث دوال تختبر إتقانك لأنماط JavaScript غير المتزامنة — المهارات ذاتها التي تقيّمها مقابلات الواجهات الأمامية.

المهمة 1: توقع إخراج حلقة الأحداث

اكتب دالة predictOutput() تُرجع مصفوفة من السلاسل النصية بالترتيب الدقيق الذي ستُسجل به:

function predictOutput() {
  // أرجع ترتيب console.logs لهذا الكود:
  //
  // console.log('A');
  // setTimeout(() => console.log('B'), 0);
  // Promise.resolve()
  //   .then(() => console.log('C'))
  //   .then(() => console.log('D'));
  // queueMicrotask(() => console.log('E'));
  // console.log('F');

  return ['A', '?', '?', '?', '?', '?']; // استبدل بالترتيب الصحيح
}

المهمة 2: تنفيذ Promise.all

اكتب دالة promiseAll(promises) تعمل بشكل مطابق لـ Promise.all:

  • تُحل بمصفوفة نتائج عندما تُنجز جميع الوعود
  • النتائج يجب أن تحافظ على نفس ترتيب وعود الإدخال
  • ترفض فورًا عندما يرفض أي وعد
  • تتعامل مع القيم غير الـ Promise (تلفها بـ Promise.resolve)
  • تتعامل مع إدخال مصفوفة فارغة (تُحل بـ [])
function promiseAll(promises) {
  // تنفيذك هنا
}

المهمة 3: إعادة المحاولة مع التراجع الأسي

اكتب دالة retryWithBackoff(fn, maxRetries, baseDelay):

  • تستدعي fn() وتُرجع نتيجتها إذا نجحت
  • عند الفشل تتراجع أسّيًا: المحاولة 0 تنتظر نحو baseDelay، والمحاولة 1 نحو baseDelay * 2، والمحاولة 2 نحو baseDelay * 4
  • maxRetries تَعُدّ إعادات المحاولة بعد المحاولة الأولى، فـ maxRetries = 3 تعني حتى 4 استدعاءات لـ fn. وعند استنفادها كلها، أعِد رمي الخطأ الأخير
  • الاهتزاز (jitter) مقبول ومُستحسن — عشوَنة كل انتظار داخل نافذة تراجعه (مثلًا 50-100% منها) هي النسخة التي ينبغي أن تدافع عنها في المقابلة، والدرس يشرح السبب. والانتظار الصِّرف baseDelay * 2^attempt مقبول أيضًا
  • يجب أن تعمل مع الدوال المتزامنة وغير المتزامنة
async function retryWithBackoff(fn, maxRetries = 3, baseDelay = 1000) {
  // تنفيذك هنا
}

المتطلبات

  • يجب تنفيذ الدوال الثلاث جميعها
  • الكود يجب أن يكون JavaScript صالح (ES2022+)
  • لا يُسمح بمكتبات خارجية
  • أضف تعليقات موجزة تشرح منطقك للمهمة 1

ما يجب تقديمه

يجب أن يحتوي تقديمك على قسم ملف واحد في المحرر أدناه: ملف JavaScript يحتوي على الدوال الثلاث.

معايير التقييم

المهمة 1: يتوقع بشكل صحيح ترتيب إخراج حلقة الأحداث (A, F, C, E, D, B) مع تفسير دقيق حول طوابير المهام الصغيرة مقابل الكبيرة25 نقاط
المهمة 2: ينفذ Promise.all بشكل صحيح مع الحفاظ على الترتيب والرفض الفوري ومعالجة غير الـ Promise وحالة المصفوفة الفارغة35 نقاط
المهمة 3: ينفذ إعادة المحاولة بتراجع أسي مرتكز على baseDelay ومضاعَف في كل محاولة (والاهتزاز داخل نافذة التراجع صحيح ولا يجوز الخصم عليه)، ويجري maxRetries + 1 استدعاءً في أسوأ الحالات قبل إعادة رمي الخطأ الأخير، ويعمل مع الدوال المتزامنة وغير المتزامنة30 نقاط
جودة الكود: كود نظيف وقابل للقراءة مع تعليقات مناسبة تشرح منطق حلقة الأحداث10 نقاط

قائمة التحقق

0/7

حلك

3 محاولات مجانية متبقية