كيف هي أقسام الخوارزمية في المقابلات في ياندكس

يعد قسم الخوارزميات الذي يحتوي على كود كتابة على السبورة أو الورق أحد أهم مراحل مقابلة الوظائف للمطورين للحصول على وظيفة في ياندكس. قررنا التحدث بمزيد من التفاصيل حول كيفية تنظيم هذه الأقسام لمساعدة المرشحين في المستقبل في الإعداد. بالإضافة إلى ذلك ، آمل أن العديد من أولئك الذين لا يجرؤون على المجيء إلى ياندكس لإجراء مقابلة ، خوفًا من المحاكمات الصعبة للغاية ، بعد هذه القصة سوف يفهمون أن كل شيء في الواقع ليس مخيفًا للغاية!


لذلك قمنا بإعداد المواد التالية لك:


  • مسابقة خاصة تحتوي على مهام مشابهة لتلك التي نقدمها للمقابلة.
  • هذا المنصب . هذا ما يفسر لماذا تحتاج إلى إجراء مثل هذه الأقسام ، وكذلك فهم جميع مهام المسابقة.
  • مقطعان فيديو يتم فيه فرز المهام من المسابقة: في الأولى - المهمة أبسط ، والثانية - مهمتان أكثر صعوبة. سوف تتعرف من مقاطع الفيديو هذه على الأخطاء النموذجية التي تحدث عند المرور عبر الأقسام الخوارزمية وعند كتابة رمز الإنتاج.



كيف يمكننا مقابلة المطورين


تتكون المقابلة مع أي مطور من عدة مراحل:


  • القسم الأولي مع المجند.
  • مقابلة سكايب التقنية ؛
  • عدة أقسام بدوام كامل.
  • المقابلات النهائية مع مديري التوظيف.

في القسم التمهيدي ، يتعرف المجند على المرشح ، ويتعلم اهتماماته ودوافعه لفهم ما هي المواقف التي من المنطقي اعتبارها. المقصود من مقابلة سكايب التقنية هو إجراء تقييم أولي لمهارات المرشح ويزيل أولئك الذين لن يتمكنوا بالتأكيد من التعامل مع أقسام الدوام الكامل.


أقسام بدوام كامل - المرحلة الرئيسية. إنها أقسام بدوام كامل تعطي إجابة على سؤال عما يمكن للمرشح فعله. قسم الخوارزميات هو أحد الأقسام الفنية بدوام كامل. بالإضافة إلى اختبارات الخوارزميات ، هناك اختبارات وجهاً لوجه: على سبيل المثال ، يجب على المرشحين لكبار المطورين متابعة قسم الهندسة المعمارية ، وسيقوم قادة المستقبل أيضًا بالإجابة على الأسئلة المتعلقة بإدارة الفرق والمشاريع. بشكل عام ، إذا كان لدى المرشح نوعًا من القوة في مجال معين (التعلم الآلي أو التحسين على مستوى منخفض أو تطوير أنظمة محملة بدرجة كبيرة أو تطوير الهاتف المحمول أو أي شيء آخر) - سننظم بالتأكيد قسمًا مع متخصص متخصص.


يقوم القسم الخوارزمي بالتحقق مما إذا كان المرشح قادرًا على الخروج بخوارزميات لحل المشكلات البسيطة وتقييم مدى تعقيد هذه الخوارزميات وتنفيذها دون أخطاء ، مع الحفاظ على التوازن بين جودة الاختبار وسرعة الحل.


لماذا تكتب الكود على السبورة أو الورق


الحالة الطبيعية للمبرمج هي البرمجة في بيئة تطوير متكاملة مع تسليط الضوء على التركيب وإمكانية التتبع. لذلك ، فإن الفكرة في مقابلة حول كتابة رمز على السبورة أو الورقة في البداية لا تبدو طبيعية للغاية. ومع ذلك ، تتيح لك هذه الطريقة التحقق من خاصيتين مهمتين للغاية لكل مطور.


أولها القدرة على التعامل بسرعة مع أداء الكود "بالعين". تخيل أنه عند كتابة كل دورة تظهر في البرنامج ، يحتاج المطور إلى قضاء بعض الوقت في محاولة التحقق من أدائه من خلال التتبع ؛ أو أنه عند تعطل إحدى الخدمات في الإنتاج ، يحتاج دائمًا إلى تشغيل التعليمات البرمجية تحت مصحح الأخطاء. من الواضح أن الكتابة والتصحيح حتى البرامج البسيطة ستأخذه وقتًا طويلاً بشكل غير مقبول. بالطبع ، من المفيد أن تكون قادرًا على قراءة الكود مع مراجعات الكود.


الخاصية المهمة الثانية هي القدرة على التفكير من خلال خطة الحل مقدماً ثم متابعتها. إذا لم تكن هناك خطة ، فسيؤدي ذلك إلى عدد كبير من التصحيحات ، والإشارات الخطية (على الورق) وإعادة كتابة أجزاء كبيرة من التعليمات البرمجية. في الحياة الواقعية ، يبطئ كل هذا التطور إلى حد كبير ، ولكن يتم حجبه جزئيًا عن طريق سرعة العمل في محرر الشفرة. المجلس والورق بهذا المعنى سطوح لا ترحم.


بطبيعة الحال ، نأخذ في الاعتبار أن كتابة التعليمات البرمجية باليد ليست سريعة جدًا. لذلك ، عادة ما تتضمن مهامنا حل ما لا يزيد عن اثني عشر سطرًا ، ويكون عدد المهام التي تحتاج إلى حل في قسم واحد عادةً اثنين أو ثلاثة.


المقاطع الحسابية والبرمجة الرياضية


تتطور البرمجة الرياضية في المطور في المستقبل ، من بين أمور أخرى ، والقدرة على بسرعة ودون أخطاء تنفيذ خوارزميات بسيطة وفقا لخطة محددة سلفا. لذلك ، فإن المرشحين ذوي الخبرة في البرمجة الرياضية ، يقومون بعمل جيد مع الأقسام الخوارزمية في المقابلات. في كثير من الأحيان يمكنك ملاحظة موقف حيث يمكن للمتدربين في المستقبل التعامل بسهولة مع قسم الخوارزمية ، وحل جميع المشاكل في 15-20 دقيقة ، في حين أن المبرمجين الأكثر خبرة يقضون ساعة كاملة في نفس المهام.


في الوقت نفسه ، يعد قسم الخوارزميات الذي يحتوي على كود الكتابة مجرد جزء من الأقسام التي تختبر الحد الأدنى من المهارات اللازمة لأي مطور. سيتم التعامل مع هذا القسم ليس فقط من قبل مبرمجي Olympiad ، ولكن أيضًا من قِبل المطورين الصناعيين ذوي الخبرة. مطور المستقبل أو قائد الفريق المستقبلي ينتظر بالتأكيد القسم المعماري ، حيث سيكون قادرًا على الكشف عن نقاط قوته ؛ بالطبع ، لا يتم وضع هذا القسم على المتدربين والمطورين المبتدئين.


مقابلة إعداد المسابقة


خاصةً بحيث يمكنك أن تتخيل تقريبًا محتوى المهام التي نقدمها في أقسام الخوارزميات ، قمنا بتجميع مسابقة يمكن استخدامها في التحضير للمقابلات. حاول حل جميع المشكلات دون تشغيل المصحح مرة واحدة ؛ اكتب حلاً في برنامج "المفكرة" دون تمييز بناء الجملة ؛ التوصل إلى أقصر الحلول الممكنة التي ستجتاز جميع الاختبارات ؛ التفكير في جميع المشاكل المحتملة مقدما وتمرير الحل في المرة الأولى.


تحتوي المسابقة على خمس مهام. يمكنك محاولة حلها بنفسك ، أو يمكنك قراءة التحليل مقدمًا: سيظل ذلك مفيدًا ، لأنه ستكون قادراً على تدريب مهارة الترميز الخالي من الأخطاء لخوارزمية معروفة مسبقًا.


تحليل مهمة المسابقة

المهمة أ. الأحجار والمجوهرات


يتم إعطاء سطرين من الأحرف اللاتينية الصغيرة: السلسلة J والسلسلة S. الأحرف المضمنة في السلسلة J هي "جواهر" ويتم تضمينها في السلسلة S "أحجار". من الضروري تحديد عدد الأحرف من حرف S في نفس الوقت "جواهر". ببساطة ، تحتاج إلى التحقق من عدد الشخصيات من S الموجودة في J.

هذه مهمة بسيطة جدًا للتسخين ، والتي تتضمن حلولًا بعدة لغات برمجة ، بحيث يمكن للمشاركين التعود على نظام الاختبار.


الخوارزمية بسيطة للغاية: تحتاج إلى إنشاء مجموعة من سطر يحتوي على "جواهر" ، ثم تابع الخط مع "الأحجار" وتحقق من كل حرف لإدراجها في هذه المجموعة. استخدم مثل هذا التطبيق للمجموعة لضمان التعقيد الخطي للحل الناتج ، على الرغم من حقيقة أن خطوط الإدخال قصيرة جدًا وبالتالي يمكن تمرير حتى خوارزمية من الدرجة الثانية في التعقيد.


المشكلة ب. وحدات متتالية


يجب العثور على أطول سلسلة من الوحدات في المتجه الثنائي وطباعة طوله.

خوارزمية الحل هي كما يلي: المشي من خلال جميع عناصر الصفيف. عندما تقابل واحدًا ، فأنت بحاجة إلى زيادة العداد لطول التسلسل الحالي ، وعندما تقابل صفر ، فأنت بحاجة إلى إعادة تعيين هذا العداد. في النهاية ، تحتاج إلى عرض الحد الأقصى للقيم التي أخذها العداد.


تحقق من أنك تتعامل مع الموقف عندما تنتهي المصفوفة بالتسلسل المطلوب من الوحدات. مع التنفيذ الدقيق ، لا يتطلب هذا الموقف معالجة خاصة.


حاول استخدام فقط مقدار ثابت من الذاكرة الإضافية.


مهمة جيم مكررة إزالة


يتم تقديم صفيف من أعداد صحيحة 32 بت مرتبة بترتيب غير تنازلي. مطلوب لإزالة جميع التكرار منه.

تقوم الخوارزمية الصحيحة بمعالجة عناصر الصفيف بشكل متتابع ، ومقارنتها بالإخراج الأخير. يجب أن تتذكر تحديث المتغير الذي يحتوي على العنصر الأخير المعروض ، بالإضافة إلى عدم ارتكاب خطأ عند معالجة العنصر الأخير.


عند حل هذه المشكلة ، لا تحتاج أيضًا إلى استخدام ذاكرة إضافية.


المهمة D. توليد تسلسل قوس


إعطاء عدد صحيح نن . مطلوب لطباعة جميع تسلسل قوس الصحيح من الطول 2 cdotn أمر معجمي (انظر https://ru.wikipedia.org/wiki/Lexographic_order ). يتم استخدام الأقواس فقط في المهمة.

هذا مثال على مشكلة حسابية معقدة نسبيًا. سنولد سلسلة من شخصية واحدة. في كل لحظة ، يمكننا تعيين إما قوس فتح أو قوس إغلاق إلى التسلسل الحالي. يمكنك إضافة قوس فتح إذا تمت إضافة أقل من أقواس فتح من قبل ، وقوس إغلاق إذا كان عدد أقواس الفتح في التسلسل الحالي يتجاوز عدد أقواس الإغلاق. هذه الخوارزمية ، مع التنفيذ الدقيق ، تضمن تلقائيًا ترتيب المعاجم في الإجابة ؛ يعمل في وقت يتناسب مع ناتج عدد العناصر في الاستجابة لـ n ؛ هذا يتطلب كمية خطية من الذاكرة الإضافية.


فيما يلي مثال لخوارزمية غير فعالة: نقوم بإنشاء جميع تسلسلات القوس الممكنة ، ثم نخرج فقط تلك التي تبين أنها صحيحة. في الوقت نفسه ، لن يسمح حجم الإجابة بحل المشكلة بشكل أسرع من الخوارزمية التي ستنتج أعلاه.


مشكلة E. الجناس الناقصة


هذه المهمة البسيطة إلى حد ما هي مثال نموذجي للمشكلة ، والتي من الضروري حلها استخدام المصفوفات الترابطية. عند اتخاذ القرار ، يلزمك التفكير في أنه يمكن تكرار الأحرف ، لذلك يجب عليك استخدام مجموعات غير القواميس ، ولكن لا. لذلك ، سيكون الحل على النحو التالي: نقوم بتكوين قاموس من كل سطر ، والذي سيخزن لكل حرف عدد التكرارات الخاصة به ؛ ثم قارن القواميس الناتجة. إذا تزامن ذلك ، فمن الضروري طباعة وحدة ، وإلا - صفر.


الحل البديل: فرز خطوط الإدخال ، ثم قارنها. هذا الحل أسوأ من حيث أنه يعمل بشكل أبطأ كما يغير الإدخال. لكن هذا الحل لا يستخدم ذاكرة إضافية.


إذا كان لديك خلال المقابلة العديد من الحلول التي تختلف في خصائصها ، فأخبرنا عنها. يكون الأمر رائعًا دائمًا عندما يكون المطور على دراية بالعديد من الخيارات لحل المشكلة ويمكنه التحدث عن نقاط القوة والضعف لديهم.


المهمة F. دمج كك قوائم فرزها


دانا كك صفائف أعداد صحيحة غير سالبة مصنفة بترتيب غير تنازلي ، لا يتجاوز كل منها 100. يجب إنشاء نتيجة دمجها: صفيف مرتبة بترتيب غير تنازلي يحتوي على جميع عناصر الأصل كك المصفوفات. طول كل مجموعة لا يتجاوز 10 cdotk .

لكل صفيف ، قم بإنشاء مؤشر ؛ في البداية ، يوجد كل مؤشر في بداية الصفيف المقابل. سنضع العناصر المقابلة لمواضع المؤشرات في أي بنية بيانات تدعم استخراج الحد الأدنى - يمكن أن تكون مجموعة متعددة أو ، على سبيل المثال ، كومة. بعد ذلك ، سنقوم باستخراج الحد الأدنى للعنصر من هذه البنية ، ونضعها استجابة ، ونحول موضع المؤشر في المصفوفة المقابلة ونضع العنصر التالي من هذه المصفوفة في بنية البيانات.


في هذه المهمة ، يواجه العديد منهم صعوبة في تنسيق الإدخال. يرجى ملاحظة أن العناصر الأولى للخطوط لا تصف عناصر المصفوفات ، فهي تصف أطوال المصفوفات!


أسئلة وأجوبة مسابقة


ج: بالتأكيد كتبت الكود الصحيح ، لكن الاختبارات فشلت ؛ ربما خطأ في نفوسهم؟
س: لا ، كل الاختبارات صحيحة. فكر: ربما لم تتوقع أي موقف غير عادي.


ج: أكتب في X ، وهي بالتأكيد بحاجة إلى مزيد من الذاكرة في المهمة Y. ارفع الحدود!
س: يتم تعيين جميع الحدود بطريقة تجعل الحل ممكنًا باستخدام أي من اللغات المتاحة. حاول التحقق مما إذا كنت تقرأ ملف الإدخال بالكامل بطريق الخطأ في مهام ذات حدود ذاكرة صارمة.


ج: يمكن حل بعض المهام بشكل أسهل بسبب القيود المشار إليها. لماذا تفعل هذا؟
س: قمنا بتبسيط المدخلات في بعض المهام بشكل خاص ، بحيث يكون من الأسهل على المشاركين التركيز على تنفيذ الخوارزمية وعدم التفكير ، على سبيل المثال ، في سرعة تنزيل البيانات أو بعض الأشياء الأخرى المهمة في البرمجة الرياضية. حاول تنفيذ تلك الخوارزميات التي نوصي بها بالضبط - فقط في هذه الحالة ، ستحصل على أقصى فائدة من المسابقة.


ج: لا أريد اجتياز المسابقة. لا استطيع
س: بالطبع! المسابقة ليست ملزمة لجميع المرشحين. ومع ذلك ، ما زلت أوصي بحلها: سيكون ذلك مفيدًا على أي حال.


ج: ماذا تنصحين للتحضير؟
س: اقرأ نصائحنا على الصفحة الرسمية حول المقابلات في ياندكس: https://yandex.ru/jobs/ya-interview . سأضيف بمفردي أن حل المشكلات على leetcode.com مفيد للغاية لأي مطور ممارس ، بصرف النظر عما إذا كان يخطط لإجراء مقابلة في المستقبل القريب أو المشاركة في مسابقات البرمجة. حتى مقدار صغير من التدريب يتيح لك الشعور بثقة أكبر عند حل مهام العمل.


استنتاج


غالبًا ما أحضر مؤتمرات للمطورين ومديري التطوير ، وأنا عضو في العديد من محادثات التطوير ، وأجرت عدة مئات من المقابلات واستأجرت عددًا كبيرًا من المطورين على Yandex. تشير التجربة إلى أن الأقسام الحسابية التي تحتوي على شفرة كتابة على السبورة أو الورقة غالباً ما تثير أسئلة. في الختام ، سأجيب على أكثرهم شعبية.


لماذا المقابلة في ظروف مختلفة عن ظروف العمل الحقيقية للمطور؟
يتيح لك ذلك فهم ما إذا كان المرشح قادرًا على العثور على مشاكل في البرامج دون بدء تشغيل مصحح الأخطاء ؛ ما إذا كان بإمكانه وضع خطة للخوارزمية مقدمًا ثم متابعتها بدقة ؛ يمكن أن يأتي مع مجموعة صغيرة ولكن كافية من الاختبارات ومن ثم التحقق من تنفيذه ضد هذه المجموعة من الاختبارات.


هل تعطي هذه الأقسام ميزة غير عادلة للمبرمجين الرياضيين؟
تطور البرمجة الرياضية بعض المهارات المفيدة للغاية في المطورين ، لذا فإن المشاركين في برمجة الألعاب الأولمبية يحققون نتائج جيدة في الأقسام الخوارزمية. لذلك هناك ميزة ، لكنها عادلة. قسم الخوارزمية هو واحد فقط من العديد ، لذلك سيكون لكل مرشح فرص كافية لإظهار نقاط قوته!


لماذا إجراء المقاطع الحسابية إذا تم تنفيذ جميع الخوارزميات لفترة طويلة ، وتحتاج فقط إلى أن تكون قادرة على البحث عن تنفيذها في المكتبات الجاهزة؟
في الأقسام الخوارزمية المشتركة بين جميع المطورين ، نقوم باختبار الحد الأدنى من المهارات الضرورية فقط: القدرة على الخروج وبدون أخطاء لتنفيذ خوارزمية بسيطة تحتوي على حلقات ، والتحقق من الشروط ، وربما تتطلب استخدام المصفوفات الترابطية. تتم كتابة هذا النوع من التعليمات البرمجية باستمرار لتنفيذ خدمات المستخدم.


ما هي النقطة في القسم الذي لا يختبر كم هائل من مهارات المطور؟
القسم الخوارزمي ، في الواقع ، يتحقق فقط من مجموعة الحد الأدنى من المهارات اللازمة لأي مطور. نحن نختبر مهارات أخرى بمساعدة أقسام أخرى.


هل تجري أقسام حسابية للمطورين من جميع التخصصات؟
نعم. تُعقد أقسام الخوارزميات للمطورين الأساسيين والمحللين ومطوري الأجهزة المحمولة والأمامية ومطوري البنية الأساسية وطرق تعلم الآلة وما إلى ذلك.

Source: https://habr.com/ru/post/ar449890/


All Articles