دليل مقابلة System Design
يعني System Design تخطيط نظام برمجي كبير — كيف تتلاءم كل الأجزاء معًا لخدمة عدد كبير من المستخدمين. في هذا الدرس نتدرّب، خطوة بخطوة، على كيفية التعامل مع سؤال مقابلة في هذا الموضوع. سنتعلّم تحديد المتطلبات (ما الذي يجب أن يفعله النظام)، والنطاق (scope — ما المُدرَج وما غير المُدرَج)، والافتراضات، وب
System Design أشبه بتخطيط مدينة كاملة: طرق تحمل حركة المرور، ومستودعات تخزّن الأشياء، وإشارات مرور تُبقي التدفّق منظّمًا، وطواقم صيانة تُصلح الأعطال — كل ذلك كي تستمر المدينة في العمل بسلاسة حتى في ساعة الذروة، حين يخرج الجميع دفعة واحدة.
- المتطلبات والنطاق
- المهارة الأساسية في هذا الدرس: قبل تصميم نظام، توضّح ما الذي يجب أن يفعله (المتطلبات)، وما المُدرَج وما غير المُدرَج (النطاق — scope)، وما الافتراضات التي تفترضها، وكيف تبني إجابة واضحة. الأمر أشبه بأخذ الطلب كاملًا في مطعم قبل أن تبدأ الطبخ.
- Trade-off
- اختيار واعٍ بين خيارين، لكلٍّ منهما ميزة ولكن أيضًا ثمن. لا يوجد حل مثالي — تختار ما يناسب وتشرح للمُقابِل ما الذي تكسبه وما الذي تتنازل عنه. مثل الاختيار بين مسار سريع ومكلف ومسار رخيص وبطيء.
- مقياس تشغيلي
- رقم يمكنك قياسه لتعرف ما إذا كان القرار يعمل فعلًا بمجرد أن يصبح النظام حيًّا ويخدم مستخدمين حقيقيين (production). على سبيل المثال: latency (كم يستغرق رجوع الاستجابة)، وerror rate (نسبة الطلبات التي تفشل)، وqueue lag (كم عدد المهام المنتظرة في الطابور)، وcache hit ratio (كم مرة وجدنا الإجابة جاهزة في مخزن مؤقت سريع)، والمزيد.