العودة للدورة|مقابلات مهندس الواجهات الأمامية: إتقان 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() وتُرجع نتيجتها إذا نجحت
  • عند الفشل، تنتظر baseDelay * 2^attempt مللي ثانية قبل إعادة المحاولة
  • بعد maxRetries محاولات فاشلة، ترمي الخطأ الأخير
  • يجب أن تعمل مع الدوال المتزامنة وغير المتزامنة
async function retryWithBackoff(fn, maxRetries = 3, baseDelay = 1000) {
  // تنفيذك هنا
}

المتطلبات

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

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

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

حلك

يمكنك استخدام أي لغة برمجة
3 محاولات مجانية متبقية