تحدي من شركة أجنبية أو كيف فشلت في مقابلة

بعد أن قررت تجربة يدي في السوق الأجنبية ، بدأت في إرسال السير الذاتية إلى مكاتب مختلفة. ليس حتى بهدف العثور على عمل ، ولكن ببساطة لتوسيع آفاق المرء. وقع الاختيار على وظيفة Java Developer. ليس لدي أي خبرة صناعية في العمل مع اللغة ، فقط تجربة شخصية ، شهادات من Oracle Certification Center ، الكتب ، إلخ. بصراحة ، في آخر مكان عمل لمدة عام ونصف ، لم أكتب أي شيء آخر غير "forov" و "ifas" (لكن هذه قصة مختلفة تمامًا) ، لذلك قررت لماذا لا أقوم بذلك في الواقع.

بعد تخطي تاريخ عمليات البحث والمحادثات مع أصحاب العمل ، سأصل إلى هذه النقطة. كتبت إحدى الشركات K من المدينة G أنهم مهتمون بمقابلتي بعد حل المشكلة.

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

أدناه هو النص الأصلي للمهمة.

ممارسة مطعم


الصورة

تمرين RESTAURANT (يرجى استخدام بناء جملة JAVA 7)

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

بمجرد الجلوس ، لا يمكن للمجموعة تغيير الجدول ، أي أنه لا يمكنك نقل مجموعة من جدول إلى آخر لإفساح المجال للعملاء الجدد.

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

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

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

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

public class Table { public final int size; // number of chairs } public class ClientsGroup { public final int size; // number of clients } public class RestManager { public RestManager (List<Table> tables) { // TODO } // new client(s) show up public void onArrive (ClientsGroup group) { // TODO } // client(s) leave, either served or simply abandoning the queue public void onLeave (ClientsGroup group) { // TODO } // return table where a given client group is seated, // or null if it is still queuing or has already left public Table lookup (ClientsGroup group) { // TODO } } 

تحليل المهمة


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

  1. "بالطبع يفترض النظام أن أي مجموعة أكبر قد تشعر بالملل من رؤية مجموعات أصغر تصل وتضع طاولاتها أمامها ، ثم يقرر المغادرة ، مما يعني أنها تتخلى عن قائمة الانتظار دون أن تقدم لها الخدمة."
  2. هيكل الطبقة RestManager

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

بشكل عام ، سلطت الضوء على نقطتين رئيسيتين:

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

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

أترك رابطًا إلى git مع الحل: RestaurantTask

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


All Articles