مشاكل خوارزمية في الواجهة الأمامية. أمثلة ياندكس والمنافسة

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

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



Blitz هو سبب وجيه للحديث عن تاريخ مشاكل الخوارزميات التي تنشأ في الواجهة الصناعية الصناعية ، وكيف تختلف عن تلك المنافسة.

حول المهام


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

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

كانت هناك أيضًا مهام مرتبطة بتطوير محرك قالب Yandex ، والمعروف بالكلمات الرئيسية XJST و BEMTHML. كانت الصعوبة الرئيسية هي جعلها سريعة بما يكفي ، مع الاحتفاظ بالتعبير الدلالي المطلوب. يمكن العثور على تفاصيل حول هذا الأمر في العديد من التقارير. وإليك بعض التقارير الأولى التي تحتوي على تفاصيل: events.yandex.ru/lib/talks/43 و events.yandex.ru/lib/talks/329 ، هناك العديد من التقارير الأخرى.

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

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

الاختلافات بين المهام الحقيقية والتنافسية


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

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

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

حول مسابقات الواجهة الأمامية الأخرى


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

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


All Articles