JavaRush /وبلاگ جاوا /Random-FA /تکلیف آزمایشی برای استخدام، بیایید آن را بفهمیم..
timurnav
مرحله

تکلیف آزمایشی برای استخدام، بیایید آن را بفهمیم..

در گروه منتشر شد
دوستان سلام به همه من می خواهم تجربه خود را از حل یک کار آزمایشی برای موقعیت یک توسعه دهنده جاوا در یک شرکت روسی با شما به اشتراک بگذارم. فوراً می گویم که اجرای عملکرد اصلی تکلیف چندان دشوار نیست، اما مانند همیشه، جزئیات و چیزهای کوچک مهم هستند، که مانع از ارائه به موقع آن شد؛ آنها هرگز چیزی در مورد تکلیف - جای خالی خود پاسخ ندادند. وقتی برایشان فرستادم قبلا پر شده بود. من به شما پیشنهاد می‌کنم کار را بررسی کنید تا ببینید آیا من تمام کارهایی را که از من خواسته شده بود انجام داده‌ام. و برای کسانی که نمی دانند چگونه آن را درست کنند، من مقدار زیادی آب در مورد نحوه برخورد من با آن اضافه می کنم. اگر کسی به این موضوع علاقه دارد، به گربه خوش آمدید. من فوراً می گویم که کل راه حل را اینجا پست نمی کنم، اما توضیحات زیادی برای مبتدیان وجود خواهد داشت، اگر کسی علاقه ای به خواندن مطالب خروجی من ندارد، این پروژه در github است . من با این شروع می کنم. متن خود کار
تکلیف تستی شماره 1
توضیحات: سرور API (JSON HTTP API) ابزارهای توسعه: چارچوب جاوا : Play Framework 2.4 (یا بالاتر) یا Spring boot 1.2.3 (یا بالاتر) پایگاه داده: پروتکل MySQL : HTTP، پورت 80 عملکرد (درخواست):
  1. لودر.
    • فایل (تصویر آواتار JPG) را به سرور منتقل می کنیم.
    • تصویر را در دایرکتوری روی سرور ذخیره می کنیم.
    • پاسخ سرور URI داخلی تصویر است.
  2. افزودن کاربر جدید
    • ما اطلاعات شخصی کاربر را به سرور منتقل می کنیم (URI تصویر، نام کاربری، ایمیل و غیره).
    • ما اطلاعات را در پایگاه داده ذخیره می کنیم.
    • پاسخ سرور شناسه منحصر به فرد کاربر جدید است.
  3. به دست آوردن اطلاعات در مورد کاربر.
    • ما یک شناسه کاربری منحصر به فرد را به سرور ارسال می کنیم.
    • خواندن اطلاعات از پایگاه داده
    • پاسخ سرور اطلاعات شخصی کاربر است (به بالا مراجعه کنید).
  4. تغییر وضعیت کاربر (آنلاین، آفلاین).
    • شناسه کاربری منحصر به فرد و وضعیت جدید (آنلاین، آفلاین) را به سرور منتقل می کنیم.
    • تغییر وضعیت کاربر
    • پاسخ سرور - شناسه کاربری منحصر به فرد، وضعیت جدید و قبلی.
    توجه: سرور در حال درخواست یک API/پایگاه داده خارجی است. از آنجایی که این یک کار آزمایشی ساده است، لازم است یک "خرد" با دسترسی شبیه سازی شده و تاخیر زمانی 5-10 ثانیه پیاده سازی شود.
  5. آمار سرور
    • ما پارامترها را به سرور منتقل می کنیم: 1. وضعیت مشتری (آنلاین، آفلاین یا غایب)، 2. شناسه منحصر به فرد (مهر زمانی) درخواست (ممکن است وجود نداشته باشد)
    • پاسخ سرور لیستی از کاربران با وضعیت ها و URI های تصویر، و همچنین یک شناسه منحصر به فرد (مهر زمانی) درخواست است.
    توجه: اگر درخواست حاوی پارامترهایی باشد، سرور باید پاسخ خود را با آنها فیلتر کند. اگر درخواست حاوی یک شناسه منحصر به فرد (مهر زمانی) درخواست (پیشتر دریافت شده) باشد، سرور باید فقط کاربرانی را که وضعیت آنها پس از (در زمان) این شناسه منحصر به فرد (مهر زمانی) تغییر کرده است، بازگرداند.
الزامات اجباری:
- آرام - تمام داده ها با فرمت JSON هستند. - سرور API باید با در نظر گرفتن اینکه درخواست های 3 و 5 بالاترین اولویت را دارند (نسبت به درخواست های 1، 2، 4) طراحی شده و باید در سریع ترین زمان ممکن تکمیل شوند. - پردازش خطا
الزامات اختیاری (مطلوب):
- مستندات کد. - معماری سرور API باید برای بارگذاری و مقیاس بندی بالا طراحی شود. - تست ها
نتیجه آزمایش:
- نتیجه تکلیف آزمایشی باید در بایگانی و همراه با دستورالعمل های دقیق برای استقرار آن ارائه شود. توصیه می‌شود یک Dockerfile را برای ساخت یک ظرف Docker برای کار آزمایشی ضمیمه کنید. را می توان در github.com دانلود کرد. - باید حاوی مستندات مختصری از API ایجاد شده (فهرست درخواست ها، پارامترهای درخواست، فرمت های درخواست، فرمت های پاسخ و غیره) باشد. - اطلاعاتی در مورد زمان صرف شده برای تکلیف تست در زمینه: طراحی، برنامه نویسی، مستندسازی و غیره. لطفاً توجه داشته باشید که این کار آزمایشی فقط برای ارزیابی دانش و مهارت است و هدف آن ایجاد محصول نهایی (سرور API) نیست، بنابراین ساده‌سازی با توضیحات و دلایل مجاز است.
برنامه نویسان با دقت و با تجربه می توانند از بخش بعدی صرف نظر کنند، در اینجا به متن خود کار می پردازم. "هدر" کار هیچ مشکلی در درک ایجاد نمی کند، بنابراین من فقط می گویم که انتخاب من روی Spring Boot افتاد، اما نه به این دلیل که قبلاً کاری با آن انجام داده بودم، بلکه به این دلیل که قبلاً یک پروژه واقعی را با استفاده از آن انجام داده بودم. بهار (اما بوت وجود نداشت، همانطور که من آن را به دلیل سادگی آن درک می کنم). با توجه به عملکرد سرور: 1) دانلود کننده فایل. در اینجا اساساً هیچ چیز پیچیده ای وجود ندارد ، من فقط باید بفهمم که چگونه تصاویر به طور کلی در سرور ذخیره می شوند ، معلوم شد که راحت ترین راه این است که آنها را به سادگی در یک فهرست خاص قرار دهیم. ما در زیر به اجرای خاص نگاه خواهیم کرد. 2) اضافه کردن یک کاربر جدید، یک عملیات ساده، اگر تا به حال برنامه های CRUD ساخته اید، او از من پشتیبانی می کند، اگر نه، همه چیز را در زیر مشاهده خواهید کرد. 3) کسب اطلاعات در مورد کاربر. بدون سوال - همه چیز روشن است. 4) تغییر وضعیت کاربر دو نکته اول تکلیف مثل روز مشخصه ولی درخواست خارجی چطور؟؟؟ تشخیص آن بدون 100 گرم غیرممکن است، حتی در حال حاضر 100٪ مطمئن نیستم که آیا درست متوجه شده ام. جزئیات زیر. 5) آمار سرور. این هم جالب است. نکته اول اجرای یک روش با گزینه های مختلف برای پارامترها را پیشنهاد می کند، با توجه به اینکه این باید یک روش کنترل کننده باشد، هنوز نحوه انجام این کار مشخص نیست. نکته دوم از همه کاربرانی که وضعیتشان بعد از مدتی تغییر کرده است می پرسد، به نظر واضح است، اما نکات ظریفی وجود دارد.
شروع شدن
آه، چند بار این عبارت را خواندم در حالی که مشغول این کار بودم! اگر تا به حال سعی کرده اید بفهمید که چگونه یک پروژه را در بهار راه اندازی کنید، اما به دلایلی هرگز Spring Boot را امتحان نکرده اید، به شما تبریک می گویم، به سادگی از آنچه در زیر خواهم نوشت خوشحال خواهید شد. جایی خواندم که برنامه نویسان مقدار بسیار زیادی کد را از پروژه ای به پروژه دیگر منتقل می کردند، این کد قالب است - تنظیمات اتصال به پایگاه داده، نقشه سرور و ... و غیره، به طوری که مثلاً مقدار کد قالب برای کار با ما از JPA/Hibernate برای پایگاه های داده استفاده می کنیم، آنها برخی از قالب ها را پنهان می کنند، اما برای پیکربندی آنها، دوباره باید یک فایل xml یا کلاس های پیکربندی بنویسید. و اگر پروژه کوچکی دارید، معلوم می شود که کد کمتری نمی نویسید، بلکه برعکس. در مرحله بعد کار با JPA را در بهار به پایان می‌رسانیم؛ پروژه‌های زیادی وجود دارد، اما راحت‌ترین آنها، البته Spring Data است. این یک پروژه بسیار بزرگ است که احتمالاً می تواند با هر چیزی که ممکن است کار کند، از جمله JPA و NoSQL و یکسری پروژه های مختلف، فوق العاده جادویی است، ما از آن در پروژه خود استفاده خواهیم کرد. با استفاده از Spring تقریباً از شر تنظیمات اتصال پایگاه داده خلاص می شویم، Spring همه چیز را برای ما انجام می دهد، فقط باید حاشیه نویسی های لازم را در مورد تراکنشی، حافظه پنهان و در موارد خاص گوگل (به دیگران نگاه کنید) برخی تنظیمات دیگر را در پیکربندی متن بچسبانیم. اما در عین حال، اکثر توسعه دهندگان تازه کار مطلقاً هیچ ایده ای از نحوه ایجاد یک پروژه در بهار ندارند. هیچ کس به طور کامل نمی داند که چگونه آن را برای اجرای پروژه و دریافت نتیجه در مرورگر با دنبال کردن پیوندی که با localhost:8080/* شروع می شود پیکربندی کند. و سپس بهار بوت وارد تصویر می شود! بهتر است در مورد چکمه بهار با یک مثال خاص صحبت کنیم! بیایید با جای خالی شروع کنیم. برای ایجاد یک پروژه Spring Boot، توسعه دهندگان Spring یک "سازنده" برای ایجاد الگوها ارائه کردند. می توانید از آن در وب سایت آنها استفاده کنید، اما انجام آن در IDE مورد علاقه ما، Intellij IDEA، بسیار ساده تر است. و به این ترتیب: File->New->Project در پنجره، به تب 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 + "!"; } } بیایید بفهمیم اینجا چه خبر است. @RestController . دقیقا همان حاشیه نویسی که در بالا نوشتم. ما از بقیه کنترلر استفاده می‌کنیم زیرا می‌خواهیم فوراً نتیجه را ببینیم و نمی‌خواهیم صفحات jsp. را بنویسیم (wow)، برای ما راحت‌تر خواهد بود که بلافاصله نتیجه را در مرورگر به عنوان یک رشته ببینیم. @RequestMapping فقط یک اتصال به یک آدرس است. پیشوند آدرس عمومی خواهد بود: localhost:8080. همانطور که می بینیم، کل کلاس در آدرس /hello قرار دارد ، به این معنی که همه متدهای داخل این کلاس دارای پیشوند localhost:8080/hello هستند. بعد روش اول کلاس است، در نقشه برداری خودش روش پروتکل Http نشان داده شده است - یک درخواست GET (در مورد روش های پروتکل Http برای خودتان بخوانید) این همه به چه معناست؟ با درخواست GET به آدرس localhost:8080/hello، ما پاسخی را در قالب رشته "Hello World!" دریافت خواهیم کرد، بیایید آن را بررسی کنیم! در کلاس DemoApplication، یک حاشیه نویسی جالب وجود دارد که می توان گفت به تنهایی کل زمینه Spring را راه اندازی می کند - @SpringBootApplication. روش اصلی این کلاس جادویی می شود، فقط تمام جادوهای پنهان شده در SpringApplication را راه اندازی می کند، اگر منوی زمینه را در این کلاس فراخوانی کنید، گزینه هایی در خط Run ظاهر می شود، توصیه می کنم آن را زودتر با یک علامت سبز اجرا کنید، به این ترتیب کنسول زیباتر به نظر می رسد و در آینده خواندن گزارش ها به طور مستقیم از او آسان تر خواهد بود. بیایید برنامه را راه اندازی کنیم. وقتی خروجی کنسول متوقف می شود، باید در کنسول ببینید
2015-09-02 09:25:36.895 INFO 5844 --- [ اصلی] sbcetTomcatEmbeddedServletContainer : Tomcat در پورت(ها) شروع به کار کرد: 8080 (http) 2015-09-02 09:205:34 --INFO main. demo.DemoApplication: DemoApplication در **** ثانیه شروع شد (JVM در حال اجرا برای 15.501)
که در آن "****" مدت زمان راه اندازی برنامه است :) پس از آن، در هر مرورگری (یا curl، یا هر چیزی که استفاده می کنید؟) باید آدرسی را که روش کنترلر به آن نگاشت شده است تایپ کنید.
localhost:8080/سلام
مرورگر باید Canonical را نمایش دهد
سلام دنیا!
در اینجا یک برنامه وب برای شما وجود دارد! اگر متوجه شده اید که روش دیگری در کنترلر وجود دارد، این روش نگاشت آدرس خاص خود را دارد؛ یک مکان نگهدار به آدرس فعلی اضافه می شود. که به عنوان پارامتر توسط Spring به متد ارسال می شود. حدس زدن اینکه حاشیه نویسی @PathVariable مسئول این امر است دشوار نیست. پس بنا به درخواست
localhost:8080/hello/نام شما
مرورگر نشان خواهد داد
سلام، نام شما!
ما اصول اولیه چکمه‌های بهار را مرتب کرده‌ایم. بعد، ما پایگاه داده را پیوست می کنیم، اما در پست بعدی خواهد بود. با تشکر از همه.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION