في مدونتنا ، نكتب كثيرًا عن بناء مستقبل مهني في مجال تكنولوجيا المعلومات في بلدان مختلفة ، والعثور على وظيفة ، والاختلافات في عملية إجراء المقابلات مع الشركات الكبيرة. في مقال اليوم ، سنذهب إلى أبعد من ذلك ونغطي موضوع ما يسمى بمقابلات تصميم النظام - هذه إحدى مراحل المقابلات مع شركات التكنولوجيا المعروفة ، حيث يتم استبعاد العديد من المرشحين.
إذن ما هو تصميم النظام وكيف تجري هذا النوع من المقابلات؟
ما هذا
في عالم اليوم ، أصبحت أنظمة تكنولوجيا المعلومات معقدة للغاية. يجب أن تلبي كل "ميزة" جديدة في المنتج العديد من المتطلبات ، وهناك دائمًا قيود يتعين على المهندسين تحقيق التوازن بينها. ما يبدو سهلًا جدًا للمستخدم العادي - مثل إرسال استعلام بحث عبر Google أو Yandex - يحمل في الواقع مستوىً هائلاً من التعقيد.
الفرق بين مقابلات تصميم النظام والمقابلات الفنية المنتظمة هو أنهم يتوقعون أن يجيب المرشح على أسئلة غامضة حول هياكل البيانات والخوارزميات. كقاعدة عامة ، فإن المهام في هذه المرحلة بالنسبة لهم لا يوجد حل صحيح أو غير صحيح بشكل لا لبس فيه ، فهي تثير عملية التفكير - حيث يتم الكشف عن المرشح.
بشكل تقريبي ، مقابلة تصميم النظام هي شيء يشبه جلسة العصف الذهني ، حيث يفكر الشخص بصوت عالٍ ، ويخوض في الحلول الممكنة ويحلل أوجه القصور في كل منها في الوقت الفعلي. هذه هي الصعوبة ، ولكن أيضًا الإضافة الرئيسية - عملية التفكير أكثر أهمية هنا من النتيجة. كقاعدة عامة ، يتم إجراء مثل هذه المقابلات من قبل الشركات الكبيرة التي تقوم بتطوير أنظمة واسعة النطاق ( FAANG وما شابه ذلك).
كيف تحصل على مقابلة تصميم النظام؟ فيما يلي بعض النصائح العملية.
, , @g-jobbot. , Telegram , – , .
–
نظرًا لأن أهم شيء في مقابلة تصميم النظام هو كيفية حل مشكلة ما ، فمن المهم للغاية في المرحلة الأولى أن تفهمها بنفسك بوضوح. يوضح مهندس Microsoft و Facebook السابق في مقالته أهمية هذه الحقيقة بمثال عملي.
عادةً ما تكون المهمة شيئًا مثل "كيف تصمم Netflix في 45 دقيقة؟" للوهلة الأولى ، هذه الأسئلة هي محض هراء. تم تصميم هذه الأنظمة الكبيرة الحجم وتنفيذها بواسطة مئات وآلاف المهندسين على مر السنين. لن تكون خمس وأربعون دقيقة كافية حتى لبدء مناقشة واحد على الأقل من مكونات هذا المنتج!
هذا هو المكان الذي يكون فيه فهم المهمة مهمًا جدًا. أنت بحاجة إلى فهم ما يريده القائم بإجراء المقابلة. ومن الواضح أنه يريده أن:
- أعطى إجابة في شكل "عرض طائرة هليكوبتر" للنظام بأكمله ،
- ثم تحللها إلى مكونات
- وصف سبب الحاجة إلى كل منها (مركز البيانات ، وتخزين البيانات ، والواجهة الأمامية ، والخلفية ، والتخزين المؤقت ، والعمل مع قوائم الانتظار ، والشبكات وموازنة الحمل ، وما إلى ذلك)
Image: system-design-primer
يمكنك التركيز على بعض هذه المكونات بمزيد من التفصيل - سيوجهونك إلى هذا ، أو ستحتاج إلى السؤال. عادة ، لا تحتاج حتى إلى كتابة التعليمات البرمجية في مقابلة حول تصميم النظام ، وإذا تعمقت على الفور في الغابة التقنية ، دون مناقشة النظام بأكمله أولاً ، فسيكون هذا عيبًا.
اطرح أسئلة توضيحية
الغرض الرئيسي من مقابلة تصميم الأنظمة هو إعطاء المرشح الفرصة لإثبات معرفته وخبرته. كما ذكر أعلاه ، لا توجد إجابات صحيحة أو خاطئة. الأهم من ذلك بكثير عدم حل المشكلة على هذا النحو - لا سيما أنه قد يكون من المستحيل ببساطة في الوقت المخصص - ولكن إظهار عملية تفكيرك بكل مجدها.
لذلك ، من المهم للغاية طرح الأسئلة ، حتى لو تبين فجأة أنك تعرف بوضوح إجابة السؤال المطروح. في مثل هذه الحالة ، لا تحتاج فقط إلى كتابة حل للمشكلة ، فهذا يتعارض مع الغرض من المقابلة. تحتاج إلى نسيان الحل المعروف ، والبدء في البحث عن حل جديد ، وطرح الأسئلة على طول الطريق.
سيسمح ذلك للمحاور بفهم عدة أشياء في وقت واحد:
- كيف يقترب المرشح من تقييم المشكلة؟
- هل يقوم على الفور بتقييم القيود والاختناقات المحتملة للنظام؟
- هل يفكر على الفور من خلال تحسين الحلول وتجاوز القيود؟
في هذا المقال ، شارك مهندس تويتر تجربته في إجراء المقابلات. على وجه الخصوص ، قدم وصفًا جيدًا لكيفية طرح الأسئلة. تخيل أنه في مقابلة تم تكليفك بتصميم مربع. لا مزيد من المعلومات صراحة.
قد تكون الأسئلة:
- ما الذي يجب أن يكون النظام قادرًا على فعله بالضبط (كم عدد العناصر التي تتناسب مع الصندوق ، وما أحجامها)؟
- من هو الجمهور المستهدف للمنتج؟
- ما هي توقعات مستخدمي المنتج؟
ستسمح لك الإجابات عنهم بفهم أنك بحاجة إلى إنشاء صندوق أصفر به رمز مرسوم عليه ، والذي يتناسب مع كرة تنس واحدة على الأقل. ومع ذلك ، فإن الكرة ليست عادية تمامًا - يبلغ نصف قطرها نصف متر ووزنها حوالي 1 كجم. سيكون الصندوق سهل الحمل من خلال الإمساك بالجزء السفلي ، لذلك لا حاجة إلى مقابض.
هناك الكثير من المعلومات ، والآن يمكنك التفكير في حل مثل هذه المشكلة الدقيقة.
الصورة: freecodecamp.com
لا تحاول التأثير
خطأ شائع في المقابلات حول تصميم الأنظمة - يعتقد العديد من المرشحين أنه نظرًا لأنك في هذه المرحلة تحتاج إلى العمل على مستوى التجريد ، فسيكون من الكافي طرح مصطلحات وأسماء رائعة للتقنيات العصرية أثناء المحادثة لتمريرها كخبير. إنها لا تعمل بهذه الطريقة.
أولاً ، من المحتمل ألا تكون المقابلة حول تصميم الأنظمة مجرد موظف توظيف ، بل مهندس يبحث عن شخص للانضمام إلى فريقه. لا يكفي أن يسمع مثل هذا الشخص كلمات مثل No-SQL و Mongo DB و Hadoop. من الواضح أنه سيبدأ في طرح أسئلة توضيحية ، وإذا لم تكن لديك بالفعل خبرة كبيرة في التقنيات المذكورة ، فسوف يتضح هذا بسرعة كبيرة.
كن صادقا
مقابلة تصميم الأنظمة هي إحدى تلك الأوقات التي يكون فيها من المقبول ألا تعرف على وجه اليقين. لذلك ، فإن الإجابات مثل "لم أعمل مطلقًا مع هذه التقنية المعينة ، لكنني أعلم أنها تُستخدم غالبًا لحل مشكلات مماثلة" تعد خيارًا جيدًا. بالإضافة إلى الصدق ، أظهر المرشح هنا معرفة معينة وأوضح للمحاور أين سيبدأ في حل المشكلة (سيحاول حلًا معروفًا ، إذا لم ينجح ، فسوف "يحفر" أكثر).
بالإضافة إلى ذلك ، يجب ألا تمرر حلك على أنه مثالي ولا يحتوي على أي عيوب. هناك دائمًا قيود ، ويتفهم المحاور المهندس ذو الخبرة هذا أفضل من أي شخص آخر. لذلك ، أثناء المقابلة ، من المفيد أن نقول بصدق أن هناك اختناقات كذا وكذا في الحل ، ولكن يمكنك محاولة الالتفاف عليها بهذه الطريقة وبهذه الطريقة ، أو استخدام أدوات إضافية أو إجراء المزيد من البحث.
سيوضح هذا أن المرشح لا يتوصل إلى حل فقط ثم يحاول بصعوبة دفعه ، ولكن يمكن أن يكون مرنًا ، ويقوم بإجراء تعديلات ، وبشكل عام مناسب ويفهم أنه يمكنك دائمًا القيام بعمل أفضل.
إليك حوار خيالي جميل في مقابلة تصميم الأنظمة يوضح لك كيف لا تفعل:
: Twitter. ?
: NoSQL- MongoDB.
: MySQL?
: . MongoDB BigTable.
: Twitter MySQL, .
: , , , . - Facebook NO-SQL.
: Facebook MySQL.
: , , , . , MySQL , BigTable.
المذيع : لا يهم. أين سنخزن البيانات التحليلية؟
المرشح : من الواضح في MySQL.
المذيع : ولكن أليس هناك الكثير من MySQL؟ الآن لدينا HDFS لهذا الغرض.
المرشح : يبدو أنك بدأت في تطوير Twitter حتى قبل أن تتطور MongoDB بشكل كافٍ. يمكن لـ MongoDB استيعاب كل من التغريدات وبيانات التحليلات بسهولة.
المذيع : عظيم ، شكرا على وقتك. كان لطيفا للدردشة.
كيف تستعد للمقابلة: روابط مفيدة
في حين أن تصميم الأنظمة هو أحد الأجزاء الأكثر ضبابية في المقابلة ، يمكنك الاستعداد لذلك. لمساعدة المرشحين ، قمنا بتجميع قائمة من المواد المفيدة: