JavaRush /مدونة جافا /Random-AR /مهمة اختبارية للتوظيف، فلنكتشف ذلك..
timurnav
مستوى

مهمة اختبارية للتوظيف، فلنكتشف ذلك..

نشرت في المجموعة
الأصدقاء، مرحبا بالجميع. أريد أن أشارككم تجربتي في حل مهمة اختبارية لمنصب مطور Java في شركة روسية. سأقول على الفور أن تنفيذ الوظيفة الرئيسية للمهمة ليس بالأمر الصعب بشكل خاص، ولكن كما هو الحال دائمًا، فإن التفاصيل والأشياء الصغيرة مهمة، مما منعني من إرسالها في الوقت المحدد، ولم يجيبوا أبدًا على أي شيء بخصوص المهمة - منصبهم الشاغر تم ملؤها بالفعل عندما أرسلتها إليهم. أقترح عليك النظر في المهمة لمعرفة ما إذا كنت قد قمت بكل ما هو مطلوب مني. وبالنسبة لأولئك الذين ليس لديهم أي فكرة عن كيفية صنعه، سأضيف الكثير من الماء حول كيفية تعاملي معه. إذا كان أي شخص مهتمًا بهذا، فمرحبًا بك في القطة. سأقول على الفور أنني لن أنشر الحل بأكمله هنا، ولكن سيكون هناك الكثير من التوضيحات للمبتدئين، إذا لم يكن أي شخص مهتمًا بقراءة تدفقاتي، فإليك المشروع على جيثب . سأبدأ بـ نص المهمة نفسها
مهمة الاختبار رقم 1
الوصف: أدوات تطوير خادم API (JSON HTTP API) : Java Framework: Play Framework 2.4 (أو أعلى) أو Spring boot 1.2.3 (أو أعلى) قاعدة البيانات: بروتوكول MySQL : HTTP، المنفذ 80 الوظيفة (الطلبات):
  1. محمل.
    • نقوم بنقل الملف (صورة JPG الرمزية) إلى الخادم.
    • نقوم بحفظ الصورة في دليل على الخادم.
    • استجابة الخادم هي عنوان URI الداخلي للصورة.
  2. إضافة مستخدم جديد.
    • نقوم بنقل البيانات الشخصية للمستخدم إلى الخادم (URI للصورة واسم المستخدم والبريد الإلكتروني وما إلى ذلك).
    • نقوم بحفظ المعلومات في قاعدة البيانات.
    • استجابة الخادم هي المعرف الفريد للمستخدم الجديد.
  3. الحصول على معلومات عن المستخدم.
    • نقوم بإرسال معرف مستخدم فريد إلى الخادم.
    • قراءة المعلومات من قاعدة البيانات.
    • استجابة الخادم هي البيانات الشخصية للمستخدم (انظر أعلاه).
  4. تغيير حالة المستخدم (متصل، غير متصل).
    • نقوم بنقل معرف المستخدم الفريد والحالة الجديدة (متصل، غير متصل) إلى الخادم.
    • تغيير حالة المستخدم.
    • استجابة الخادم - معرف المستخدم الفريد والحالة الجديدة والسابقة.
    ملاحظة: يقوم الخادم بالاستعلام عن واجهة برمجة التطبيقات/قاعدة البيانات الخارجية. نظرًا لأن هذه مهمة اختبار مبسطة، فمن الضروري تنفيذ "كعب روتين" مع وصول محاكاة وتأخير زمني من 5 إلى 10 ثوانٍ.
  5. إحصائيات الخادم.
    • نقوم بنقل المعلمات إلى الخادم: 1. حالة العميل (متصل أو غير متصل أو غائب)، 2. المعرف الفريد (الطابع الزمني) للطلب (قد يكون غائبًا)
    • استجابة الخادم عبارة عن قائمة بالمستخدمين الذين لديهم حالات وعناوين URI للصور، بالإضافة إلى معرف فريد (الطابع الزمني) للطلب.
    ملاحظة: إذا كان الطلب يحتوي على معلمات، فيجب على الخادم تصفية استجابته حسب هذه المعلمات. إذا كان الطلب يحتوي على معرف فريد (الطابع الزمني) للطلب (تم استلامه سابقًا)، فيجب على الخادم إرجاع المستخدمين الذين تغيرت حالاتهم فقط بعد (في الوقت المناسب) هذا المعرف الفريد (الطابع الزمني).
متطلبات الزامية:
- مريح. - جميع البيانات بتنسيق JSON. - يجب تصميم خادم API مع الأخذ في الاعتبار أن الطلبين 3 و5 لهما الأولوية القصوى (بالنسبة للطلبات 1 و2 و4) ويجب إكمالهما في أسرع وقت ممكن. - معالجة الأخطاء.
المتطلبات الاختيارية (مرغوب فيه):
- توثيق الكود. - يجب أن تكون بنية خادم API مصممة للتحميل والقياس العالي. - الاختبارات.
نتيجة الاختبار:
- يجب تقديم نتيجة مهمة الاختبار في الأرشيف ومع تعليمات مفصلة لنشرها. يُنصح بإرفاق ملف Dockerfile لإنشاء حاوية Docker لمهمة الاختبار. يمكن تنزيله على github.com. - يجب أن يحتوي على وثائق مختصرة لواجهة برمجة التطبيقات (API) التي تم إنشاؤها (قائمة الطلبات، ومعلمات الطلب، وتنسيقات الطلب، وتنسيقات الاستجابة، وما إلى ذلك). - معلومات عن الوقت المستغرق في مهمة الاختبار في سياق: التصميم والبرمجة والتوثيق وما إلى ذلك. يرجى ملاحظة أن مهمة الاختبار هذه تهدف فقط إلى تقييم المعرفة والمهارات، ولا تهدف إلى إنشاء منتج نهائي (خادم واجهة برمجة التطبيقات)، وبالتالي يُسمح بالتبسيط مع التوضيحات والأسباب.
يمكن للمبرمجين اليقظين وذوي الخبرة تخطي القسم التالي، وهنا سأتعامل مع نص المهمة نفسها. "رأس" المهمة لا يسبب أي صعوبات في الفهم، لذلك سأقول فقط أن اختياري وقع على Spring Boot، ولكن ليس لأنني فعلت شيئًا به بالفعل، ولكن لأنني أكملت بالفعل مشروعًا حقيقيًا باستخدام الربيع ( ولكن التمهيد لم يكن هناك، كما أفهمه بسبب بساطته). وفقًا لوظيفة الخادم: 1) تنزيل الملفات. لا يوجد شيء معقد هنا بشكل أساسي، كنت بحاجة فقط لمعرفة كيفية تخزين الصور بشكل عام على الخادم، وتبين أن الطريقة الأكثر ملاءمة هي وضعها ببساطة في دليل خاص. سننظر في التنفيذ المحدد أدناه. 2) إضافة مستخدم جديد، عملية بسيطة، إذا كنت قد قمت بإنشاء تطبيقات CRUD من قبل، فسوف يدعمني، وإذا لم يكن الأمر كذلك، فسترى كل شيء أدناه. 3) الحصول على معلومات عن المستخدم. لا توجد أسئلة - كل شيء واضح. 4) تغيير حالة المستخدم. أول نقطتين من المهمة واضحة كالنهار، لكن ماذا عن الطلب الخارجي؟؟؟ من المستحيل معرفة ذلك بدون 100 جرام، وحتى الآن لست متأكدًا بنسبة 100٪ إذا كنت قد فهمت بشكل صحيح. التفاصيل أدناه. 5) إحصائيات الخادم. وهذا مثير للاهتمام أيضًا. تقترح النقطة الأولى تنفيذ طريقة تحتوي على خيارات مختلفة للمعلمات، وليس من الواضح بعد كيفية القيام بذلك، نظرًا لأن هذه يجب أن تكون طريقة تحكم. النقطة الثانية تسأل جميع المستخدمين الذين تغيرت حالتهم بعد لحظة من الزمن، يبدو الأمر واضحًا، لكن هناك تفاصيل دقيقة.
ابدء
آه، كم مرة قرأت هذه العبارة وأنا أعمل على هذه المهمة! إذا سبق لك أن حاولت معرفة كيفية إعداد مشروع في Spring، ولكن لسبب ما لم تجرب Spring Boot مطلقًا، تهانينا، سوف تكون سعيدًا بما سأكتبه أدناه. قرأت في مكان ما أن المبرمجين اعتادوا نقل كمية كبيرة جدًا من التعليمات البرمجية من مشروع إلى آخر، وهذا هو رمز القالب - إعدادات الاتصال بقواعد البيانات، ورسم خرائط servlet، وما إلى ذلك، وما إلى ذلك، على سبيل المثال، لتقليل كمية القالب رمز للعمل مع نحن نستخدم JPA/Hibernate لقواعد البيانات، فهي تخفي بعض القوالب، ولكن لتكوينها، تحتاج مرة أخرى إلى كتابة ملف xml أو فئات التكوين. وإذا كان لديك مشروع صغير، فقد اتضح أنك لا تكتب كودًا أقل، بل حتى العكس. بعد ذلك، ننتهي من العمل مع JPA في الربيع؛ هناك العديد من المشاريع، ولكن الأكثر ملاءمة بالطبع هو Spring Data. هذا مشروع كبير جدًا يمكنه العمل مع كل شيء ممكن، بما في ذلك JPA وNoSQL ومجموعة كاملة من المشاريع المختلفة، إنه أمر سحري بشكل لا يصدق، وسوف نستخدمه في مشروعنا. باستخدام Spring، نتخلص تقريبًا من إعدادات اتصال قاعدة البيانات، ويفعل Spring كل شيء من أجلنا، نحتاج فقط إلى الالتزام بالتعليقات التوضيحية الضرورية حول المعاملات، والتخزين المؤقت، وفي حالات خاصة، google (انظر إلى الآخرين) بعض الإعدادات الأخرى في تكوين السياق. ولكن في الوقت نفسه، ليس لدى معظم المطورين المبتدئين أي فكرة على الإطلاق عن كيفية إنشاء مشروع في الربيع. لا أحد يعرف تمامًا كيفية تكوينه لتشغيل المشروع والحصول على النتيجة في المتصفح باتباع الرابط الذي يبدأ بـ localhost:8080/*. ثم يأتي Spring Boot في الصورة! من الأفضل التحدث عن Spring Boot بمثال محدد! لنبدأ بالفراغ. لإنشاء مشروع Spring Boot، توصل مطورو Spring إلى "مُنشئ" لإنشاء القوالب. يمكنك استخدامه على موقعهم الإلكتروني، ولكن من الأسهل القيام بذلك في بيئة التطوير المتكاملة (IDE) المفضلة لدينا، Intellij IDEA. وهكذا: ملف->جديد->مشروع، في النافذة، انتقل إلى علامة التبويب Spring Initializr، ويجب تعيين jdk فيه، وعنوان URL https://start.spring.io، وتحقق من اتصال الإنترنت، ثم ستحتاج لتحديد الاسم، ثم التقنيات التي سنستخدمها، في المرحلة الأولى نحتاج فقط إلى WEB - ضع علامة بجانبه ثم يتم إنشاء المشروع. لكي يتمكن Maven من سحب جميع التبعيات، نحتاج إلى فتح علامة التبويب Maven في الفكرة والنقر فوق زر التحديث. لقد تلقينا نموذج طلب جاهزًا، والذي يحتوي على جميع إعدادات الاتصال بخادم العميل. للحصول على انطباع أول، فلنقم بإنشاء فئة تحكم (ربما سمعنا جميعًا عن MVC). في جميع تطبيقات Spring، تتمتع وحدات التحكم بتصميم بسيط إلى حد ما - هذه فئة تم تمييزها بالتعليق التوضيحي @Controller (البادئات ممكنة، على سبيل المثال، @RestController)، هذه الفئة مسؤولة عن معالجة الطلبات الواردة. لكي تتعرف وحدة التحكم على طلب لبعض العناوين، تحتاج إلى تعيين هذا العنوان لأسلوب وحدة التحكم. import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping(value = "/hello") public class DemoController { @RequestMapping(method = RequestMethod.GET) public String halloWorld() { return "Hello World!"; } @RequestMapping(value = "/{name}", method = RequestMethod.GET) public String halloName(@PathVariable("name") String name) { return "Hello, " + name + "!"; } } دعونا معرفة ما يحدث هنا. @ ريست كونترولر . بالضبط الشرح الذي كتبت عنه أعلاه. نستخدم وحدة التحكم المتبقية لأننا نريد أن نرى النتيجة على الفور ولا نريد كتابة صفحات .jsp (واو)، سيكون من الأسهل بالنسبة لنا أن نرى النتيجة على الفور في المتصفح كسلسلة. @RequestMapping هو مجرد ربط لعنوان ما. ستكون بادئة العنوان العام هي: المضيف المحلي: 8080. كما نرى، فإن الفصل بأكمله معلق على العنوان /hello ، وهذا يعني أن جميع الطرق داخل هذا الفصل لها البادئة localhost:8080/hello. التالي هو الطريقة الأولى للفئة، في تعيينها الخاص، تتم الإشارة إلى طريقة بروتوكول Http - طلب GET (اقرأ بنفسك عن طرق بروتوكول Http) ماذا يعني كل هذا؟ من خلال تقديم طلب GET إلى العنوان localhost:8080/hello، سنتلقى استجابة في شكل سلسلة "Hello World!"، دعنا نتحقق من ذلك! في فئة DemoApplication، يوجد تعليق توضيحي رائع يمكن القول أنه يقوم بتشغيل سياق Spring بأكمله بمفرده - @SpringBootApplication. الطريقة الرئيسية لهذه الفئة تصبح سحرية، فهي فقط تطلق كل السحر المخفي في SpringApplication، إذا قمت باستدعاء قائمة السياق في هذه الفئة، ستظهر الخيارات في سطر التشغيل، أوصي بإطلاقها مبكرًا بعلامة خضراء، بهذه الطريقة ستبدو وحدة التحكم أجمل وفي المستقبل سيكون من الأسهل قراءة السجلات مباشرة منها. لنبدأ تشغيل التطبيق. عندما يتوقف إخراج وحدة التحكم، يجب أن ترى في وحدة التحكم
02-09-2015 09:25:36.895 معلومات 5844 --- [ رئيسي] sbcetTomcatEmbeddedServletContainer : بدأ Tomcat على المنفذ (المنافذ): 8080 (http) 2015-09-02 09:25:36.900 معلومات 5844 --- [ رئيسي] demo.DemoApplication: تم بدء DemoApplication خلال **** ثانية (يعمل JVM لـ 15.501)
حيث "****" هي مدة تشغيل التطبيق :) بعد ذلك، في أي متصفح (أو حليقة، أو أي شيء تستخدمه؟) تحتاج إلى كتابة العنوان الذي تم تعيين طريقة التحكم عليه
المضيف المحلي: 8080/مرحبا
يجب أن يعرض المتصفح الملف الأساسي
مرحبا بالعالم!
وهنا تطبيق ويب بالنسبة لك! إذا لاحظت وجود طريقة أخرى في وحدة التحكم، فهي تحتوي على تعيين عنوان خاص بها؛ تتم إضافة عنصر نائب إلى العنوان الحالي. والتي يتم تمريرها إلى الطريقة كمعلمة بواسطة Spring. ليس من الصعب تخمين أن التعليق التوضيحيPathVariable هو المسؤول عن ذلك. لذلك عند الطلب
المضيف المحلي: 8080/مرحبا/اسمك
سوف يظهر المتصفح
مرحبا، اسمك!
لقد قمنا بفرز أساسيات Spring Boot. بعد ذلك، سنقوم بإرفاق قاعدة البيانات، ولكن ذلك سيكون في المشاركة التالية. شكرا للجميع.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION