دليل مقابلة تصميم الأنظمة لمهندسي البرمجيات
الهدف من مقابلات تصميم الأنظمة هو تقييم مهارة المرشح في تصميم أنظمة برمجيات واقعية تتكون من مكونات متعددة. تُطرح أسئلة تصميم الأنظمة عادةً على المرشحين الأكثر خبرة (من ذوي عدة سنوات من الخبرة). ولا تُطرح عادةً على المتدربين، إذ يصعب توقع أن يكون لدى المتدربين خبرة صناعية كافية وذات صلة للإجابة عن هذا النوع من الأسئلة جيداً.
أنواع مقابلات تصميم الأنظمة
يمكن أن تأتي أسئلة تصميم الأنظمة بصيغ مختلفة:
- تصميم الواجهة الخلفية / الأنظمة الموزعة: يُطلب من المرشحين تصميم أنظمة تعمل عبر عدة خوادم أو مراكز بيانات. تشمل الموضوعات بنية الواجهة الخلفية، وتصميم مخططات قواعد البيانات، ونسخ البيانات، والتسامح مع الأخطاء، وMessage Queues، ونماذج الاتساق، وغير ذلك.
- تصميم واجهات برمجة التطبيقات (API): تصميم واجهات برمجة التطبيقات داخل نظام كبير، وقد تكون واجهات HTTP (مثل REST)، أو دوال داخل مكوّن برمجي.
- التصميم كائني التوجه: تركز مقابلات التصميم كائني التوجه على تصميم الأصناف (classes) والكائنات وعلاقاتها. ويُطلب من المرشحين غالباً إنشاء Class Diagrams وتعريف الواجهات ومناقشة أنماط التصميم.
- تصميم أنظمة الواجهة الأمامية: تصميم بنية تطبيقات العميل المعقدة أو مكونات واجهة المستخدم. ويُولى تركيز أكبر على ما يحدث في العميل وعلى تصميم واجهة برمجة التطبيقات بين العميل والخادم.
بصفتك مهندس برمجيات، فإن أكثر أنواع تصميم الأنظمة شيوعاً التي ستواجهها هو تصميم الواجهة الخلفية / الأنظمة الموزعة. وتشمل بعض أسئلة مقابلات تصميم أنظمة الواجهة الخلفية الشائعة:
- تصميم خدمة اختصار الروابط (مثل Bitly)
- تصميم موقع تواصل اجتماعي (مثل Twitter)
- تصميم موقع لمشاهدة الفيديو (مثل YouTube)
- تصميم خدمة دردشة (مثل Telegram، Slack، Discord)
- تصميم خدمة مشاركة ملفات (مثل Google Drive، Dropbox)
- تصميم خدمة مشاركة رحلات (مثل Uber، Lyft)
- تصميم خدمة مشاركة صور (مثل Flickr، Pinterest)
- تصميم موقع تجارة إلكترونية (مثل Amazon، eBay)
- تصميم بوابة وظائف (مثل LinkedIn، Indeed)
- تصميم زاحف ويب (مثل Google)
موارد عالية الجودة
- «Front End System Design Playbook» من GreatFrontEnd: دليل مجاني لتصميم الأنظمة من تأليفي، يركز على تصميم الأنظمة لتطبيقات الواجهة الأمامية، مثل كيفية تصميم آخر الأخبار (News Feed) في Facebook، والإكمال التلقائي في بحث Google، وعروض الصور المتحركة (Image Carousels) وغيرها.
- System Design in a Hurry: من تأليف مهندسين سابقين في Meta وAmazon، ويغطي أساسيات التقديم والمفاهيم عالية المستوى والتقنيات الأساسية. وتأخذك «المشكلات الشائعة» المحلولة عبر قرارات التصميم المختلفة في مشكلات واقعية وكيفية التعامل معها. يُحدَّث باستمرار ومعظم محتواه عالي الجودة ومجاني. ويرى كثير من المستخدمين أنه من المستغرب أن يكون بهذه الجودة ومجانياً في الوقت نفسه.
- System Design Newsletter: نشرة بريدية أسبوعية عن تصميم الأنظمة. احصل أيضاً على قالب تصميم الأنظمة القوي مجاناً.
- ByteByteGo: دورة جديدة في تصميم الأنظمة من Alex Xu، مؤلف كتب System Design Interview الأكثر مبيعاً على Amazon. تغطي الدورة أساسيات تصميم الأنظمة، ثم تنتقل إلى تحليلات معمقة لتصميم أكثر من 10 منتجات شائعة معروفة (مثل تصميم YouTube، وآخر الأخبار في Facebook، إلخ) وعدة أنظمة بيانات ضخمة وتخزين (مثل تصميم نظام دردشة). في كل تحليل معمق، تُشرح المفاهيم وتُستخدم Graphs شاملة، مما يجعلها سهلة المتابعة بغض النظر عن مستوى الخبرة.
- «Grokking the System Design Interview» من Design Gurus: هذه على الأرجح أشهر دورة لمقابلات تصميم الأنظمة على الإنترنت، وما يميزها عن معظم الدورات الأخرى أنها نصية بالكامل، وهو أمر رائع لمن يفضلون القراءة على مشاهدة الفيديوهات (مثلي!). تحتوي على مستودع لمشكلات تصميم الأنظمة الشائعة مع مسرد لأساسيات تصميم الأنظمة. لقد أكملت هذه الدورة شخصياً وأوصيت بها كثيرين غيري.
- «Grokking the Advanced System Design Interview» من Design Gurus: لم أجرب هذه الدورة، لكنها من نفس الفريق الذي أنتج «Grokking the System Design Interview»، لذا ينبغي أن تكون جيدة! وفي رأيي، لن تحتاجها على الأرجح إلا إذا كنت في مستوى أولي رفيع جداً أو تتقدم لمنصب متخصص.
- «System Design Interview Handbook» من Educative: دليل كامل يركز على المقابلات، يعلّمك كيف تستدل وتتواصل وتصمم أنظمة قابلة للتوسع بالطريقة التي تتوقعها كبرى شركات التكنولوجيا.
- دورة «Grokking Modern System Design Interview» من Educative: دورة منظمة من مهندسين سابقين في FAANG تعلّمك تصميم أنظمة قابلة للتوسع بوضوح وثقة لمقابلات التكنولوجيا الحديثة. تحتوي على العديد من موضوعات تصميم الأنظمة مع دراسات حالة.
- حزمة «Best of System Design» من Design Gurus: تتيح لك هذه الحزمة شراء دورتي مقابلات تصميم الأنظمة من Design Gurus بخصم. والأفضل من ذلك أنها مدى الحياة وليست قائمة على اشتراك.
- دورة «System Design Interview» من Exponent: تغطي هذه الدورة أساسيات تصميم الأنظمة ولديها قاعدة بيانات ضخمة لأسئلة تصميم الأنظمة الشائعة مع فيديوهات لمقابلات تجريبية. بعض الأسئلة لها إجابات نصية ومخطط قاعدة بيانات وواجهات برمجة تطبيقات للرجوع إليها (وهو ما أجده مفيداً). ومع أن الاشتراك قد يكون مكلفاً بعض الشيء لمحتوى مقابلات تصميم الأنظمة وحده، إلا أنهم يقدمون أيضاً محتوى تقنياً جيداً عن Data Structures والـAlgorithms والمقابلات السلوكية. وراحة وجود منصة واحدة تغطي جميع جوانب التحضير للمقابلات التقنية أمر مغرٍ للغاية.
- قائمة تشغيل «System Design» من Gaurav Sen: Gaurav Sen صانع محتوى مشهور على YouTube اكتسب شهرة واسعة بفيديوهاته عن تصميم الأنظمة. تقدم قائمة التشغيل الخاصة به عن تصميم الأنظمة دليلاً شاملاً لمهندسي البرمجيات الذين يستعدون للمقابلات التقنية أو يرغبون في تعلم المزيد عن تصميم أنظمة قابلة للتوسع. تتكون القائمة من عدة فيديوهات، يغطي كل منها موضوعاً مختلفاً يتعلق بتصميم الأنظمة. وصُممت الفيديوهات بطريقة تبسّط الموضوعات المعقدة وتسهّل فهمها على المبتدئين.
موارد مجانية
- System Design Primer: أشمل مورد عن تصميم الأنظمة المتاح. يُنصح به فقط إذا كان لديك وقت كبير لتخصيصه.
- System Design Interview: يحتوي على العديد من الروابط لنصائح حول تصميم الأنظمة وموضوعات ذات صلة بتصميم الأنظمة ومدونات هندسية لشركات مشهورة.
- System Design Cheatsheet: محتوى موجز ومختصر. يصلح كمراجعة جيدة قبل مقابلة تصميم الأنظمة مباشرة.
- System Design Roadmap: دليل خطوة بخطوة يتضمن روابط لمقالات وفيديوهات لتعلم الموضوعات الأساسية.
كتب
- System Design Interview – An insider's guide, Second Edition: مورد مناسب للمبتدئين لتعلم تصميم الأنظمة، ومحتواه سهل القراءة والفهم.
المصدر والرخصة
هذه الصفحة منسوخة من Tech Interview Handbook للمؤلف يانغشون تاي (Yangshun Tay)، النسخة المرجعية e1d28e8، وتُستخدم بموجب رخصة MIT — حقوق النشر (c) 2017-Present ليانغشون تاي. نص الرخصة محفوظ محلياً في /licenses/tech-interview-handbook.txt.
