JavaRush /Java blogi /Random-UZ /Ishga qabul qilish uchun test topshirig'i, keling, buni a...
timurnav
Daraja

Ishga qabul qilish uchun test topshirig'i, keling, buni aniqlaymiz..

Guruhda nashr etilgan
Do'stlar, hammaga salom. Men siz bilan Rossiya kompaniyasida Java dasturchisi lavozimi uchun test topshirig'ini yechish tajribamni baham ko'rmoqchiman. Men darhol aytamanki, topshiriqning asosiy funksiyasini amalga oshirish unchalik qiyin emas, lekin har doimgidek, tafsilotlar va kichik narsalar muhim, bu meni o'z vaqtida topshirishga xalaqit berdi; ular hech qachon topshiriq haqida hech narsaga javob bermadilar - ularning bo'sh joyi Men ularga yuborganimda allaqachon to'ldirilgan edi. Mendan talab qilingan hamma narsani bajarganimni bilish uchun vazifani ko'rib chiqishni taklif qilaman. Va buni qanday qilishni bilmaydiganlar uchun men uni qanday hal qilganim haqida ko'p suv qo'shaman. Agar kimdir bunga qiziqsa, mushukka xush kelibsiz. Men darhol aytamanki, men bu erda to'liq yechimni joylashtirmayman, lekin yangi boshlanuvchilar uchun juda ko'p tushuntirishlar bo'ladi, agar kimdir mening chiqishlarimni o'qishga qiziqmasa, mana github'dagi loyiha . Men boshlayman vazifaning o'zi matni.
Test topshirig'i № 1
Tavsif: API Server (JSON HTTP API) ishlab chiqish vositalari: Java Framework: Play Framework 2.4 (yoki undan yuqori) yoki Spring boot 1.2.3 (yoki undan yuqori) Maʼlumotlar bazasi: MySQL Protokol: HTTP, port 80 Funksionallik (soʻrovlar):
  1. Yuklagich.
    • Biz faylni (JPG avatar rasmi) serverga o'tkazamiz.
    • Tasvirni serverdagi katalogda saqlaymiz.
    • Server javobi tasvirning ichki URI sidir.
  2. Yangi foydalanuvchi qo'shilmoqda.
    • Biz foydalanuvchining shaxsiy ma'lumotlarini serverga o'tkazamiz (rasmning URI, foydalanuvchi nomi, elektron pochta va boshqalar).
    • Biz ma'lumotlarni ma'lumotlar bazasida saqlaymiz.
    • Server javobi yangi foydalanuvchining noyob identifikatoridir.
  3. Foydalanuvchi haqida ma'lumot olish.
    • Biz serverga noyob foydalanuvchi identifikatorini uzatamiz.
    • Ma'lumotlar bazasidan ma'lumotlarni o'qish.
    • Serverning javobi foydalanuvchining shaxsiy ma'lumotlaridir (yuqoriga qarang).
  4. Foydalanuvchi holatini o'zgartirish (Onlayn, Oflayn).
    • Biz noyob foydalanuvchi identifikatorini va yangi holatni (Onlayn, Oflayn) serverga o'tkazamiz.
    • Foydalanuvchi holatini o'zgartirish.
    • Server javobi - noyob foydalanuvchi identifikatori, yangi va oldingi holat.
    Eslatma: Server tashqi API/maʼlumotlar bazasini soʻramoqda. Bu soddalashtirilgan test topshirig'i bo'lganligi sababli, simulyatsiya qilingan kirish va 5-10 soniya vaqtni kechiktirish bilan "stub" ni amalga oshirish kerak.
  5. Server statistikasi.
    • Biz parametrlarni serverga o'tkazamiz: 1. mijoz holati (Onlayn, oflayn yoki yo'q), 2. so'rovning noyob identifikatori (vaqt tamg'asi) (yo'q bo'lishi mumkin)
    • Serverning javobi statuslar va rasm URI ga ega foydalanuvchilar roʻyxati, shuningdek, soʻrovning noyob identifikatori (vaqt tamgʻasi).
    Eslatma: Agar so'rovda parametrlar bo'lsa, server o'z javobini ular bo'yicha filtrlashi kerak. Agar so'rovda so'rovning noyob identifikatori (vaqt tamg'asi) bo'lsa (ilgari olingan), server faqat ushbu noyob identifikatordan (vaqt tamg'asi) keyin (vaqt o'tishi bilan) holati o'zgargan foydalanuvchilarni qaytarishi kerak.
Majburiy talablar:
- Tinch. - Barcha ma'lumotlar JSON formatida. - API server 3 va 5 so'rovlar eng yuqori ustuvorlikka ega ekanligini hisobga olgan holda ishlab chiqilishi kerak (1, 2, 4 so'rovlarga nisbatan) va imkon qadar tezroq bajarilishi kerak. - Qayta ishlashda xatolik.
Ixtiyoriy talablar (kerakli):
- kodni hujjatlashtirish. - API Server arxitekturasi yuqori yuklash va masshtablash uchun mo'ljallangan bo'lishi kerak. - Testlar.
Test natijasi:
- Test topshirig'ining natijasi arxivda va uni joylashtirish bo'yicha batafsil yo'riqnoma bilan taqdim etilishi kerak. Sinov topshirig'i uchun Docker konteynerini yaratish uchun Dockerfile faylini biriktirish tavsiya etiladi. github.com ga yuklab olish mumkin. - Yaratilgan API ning qisqacha hujjatlarini o'z ichiga olishi kerak (so'rovlar ro'yxati, so'rov parametrlari, so'rov formatlari, javob formatlari va boshqalar). - kontekstda test topshirig'iga sarflangan vaqt haqida ma'lumot: dizayn, dasturlash, hujjatlashtirish va boshqalar. E'tibor bering, ushbu test topshirig'i faqat bilim va ko'nikmalarni baholash uchun mo'ljallangan va tayyor mahsulot (API server) yaratish maqsadi emas, shuning uchun tushuntirishlar va sabablar bilan soddalashtirishga ruxsat beriladi.
diqqatli va tajribali dasturchilar keyingi bo'limni o'tkazib yuborishlari mumkin, bu erda men vazifaning o'zi bilan shug'ullanaman. Vazifaning "sarlavhasi" tushunishda hech qanday qiyinchilik tug'dirmaydi, shuning uchun men shunchaki aytamanki, mening tanlovim Spring Boot-ga to'g'ri keldi, lekin men u bilan biror narsa qilganim uchun emas, balki haqiqiy loyihani amalga oshirganim uchun. Bahor (lekin Boot u erda yo'q edi, chunki men buni soddaligi tufayli tushunaman). Server funksiyasiga ko'ra: 1) Faylni yuklab oluvchi. Bu erda hech qanday murakkab narsa yo'q, men shunchaki rasmlarning serverda qanday saqlanishini aniqlashim kerak edi, ma'lum bo'lishicha, eng qulay usul ularni qandaydir maxsus katalogga joylashtirishdir. Quyida biz aniq amalga oshirishni ko'rib chiqamiz. 2) Yangi foydalanuvchi qo'shish, oddiy operatsiya, agar siz CRUD ilovalarini yaratgan bo'lsangiz, u meni qo'llab-quvvatlaydi, agar bo'lmasa, quyida hamma narsani ko'rasiz. 3) Foydalanuvchi haqida ma'lumot olish. savol yo'q - hamma narsa aniq. 4) Foydalanuvchi holatini o'zgartirish. vazifaning dastlabki ikki bandi kundek aniq, lekin tashqi so'rov haqida nima deyish mumkin??? Buni 100 grammsiz aniqlashning iloji yo'q, hatto hozir ham men to'g'ri tushunganimga 100% ishonchim komil emas. Tafsilotlar quyida. 5) Server statistikasi. Bu ham qiziq. Birinchi nuqta, parametrlar uchun turli xil variantlarga ega usulni amalga oshirishni taklif qiladi, buni qanday qilish kerakligi hali aniq emas, chunki bu boshqaruvchi usul bo'lishi kerak. ikkinchi nuqta, bir lahzadan keyin holati o'zgargan barcha foydalanuvchilardan so'raydi, bu aniq ko'rinadi, ammo nozikliklar mavjud.
Ishni boshlash
oh, men bu vazifa ustida ishlayotganimda bu iborani necha marta o'qidim! Agar siz bahorda loyihani qanday tashkil qilishni tushunishga harakat qilgan bo'lsangiz, lekin biron sababga ko'ra siz hech qachon Spring Boot-ni sinab ko'rmagan bo'lsangiz, tabriklayman, quyida yozadiganlarimdan xursand bo'lasiz. Men bir joyda o'qidimki, dasturchilar loyihadan loyihaga juda katta hajmdagi kodlarni o'tkazishgan, bu shablon kodi - ma'lumotlar bazalariga ulanish sozlamalari, servlet xaritasi va boshqalar va hokazo, masalan, miqdorini kamaytirish uchun. bilan ishlash uchun shablon kodi Biz ma'lumotlar bazalari uchun JPA/Hibernate-dan foydalanamiz, ular ba'zi shablonlarni yashirishadi, lekin ularni sozlash uchun siz yana xml fayli yoki konfiguratsiya sinflarini yozishingiz kerak. va agar sizda kichik loyiha bo'lsa, unda siz kamroq kod yozasiz, lekin aksincha. Keyin JPA bilan ishlashni bahorda yakunlaymiz; ko'plab loyihalar mavjud, ammo eng qulayi, albatta, Spring Data. Bu juda katta loyiha bo'lib, ehtimol hamma narsa, jumladan JPA va NoSQL va turli xil loyihalar to'plami bilan ishlashi mumkin, bu juda sehrli, biz uni loyihamizda ishlatamiz. Spring-dan foydalanib, biz deyarli ma'lumotlar bazasiga ulanish sozlamalaridan xalos bo'lamiz, Spring biz uchun hamma narsani qiladi, biz faqat tranzaksiya, keshlash va maxsus holatlarda google (boshqalarga qarang) kontekst konfiguratsiyasidagi boshqa sozlamalar bo'yicha kerakli izohlarga yopishib olishimiz kerak. Biroq, ayni paytda, ko'pchilik Ajam ishlab chiquvchilar bahorda loyihani qanday yaratish haqida mutlaqo tasavvurga ega emaslar. Localhost:8080/* bilan boshlangan havolaga o'tib, loyihani ishga tushirish va natijani brauzerda olish uchun uni qanday sozlashni hech kim to'liq bilmaydi. Va keyin Spring Boot rasmga kiradi! Spring Boot haqida aniq bir misol bilan gapirish yaxshiroqdir! Bo'sh joydan boshlaylik. Spring Boot loyihasini yaratish uchun Spring dasturchilari shablonlarni yaratish uchun "konstruktor" bilan kelishdi. Siz uni ularning veb-saytida ishlatishingiz mumkin, lekin buni bizning sevimli IDE, Intellij IDEA-da qilish ancha oson. Shunday qilib: File->New->Project Oynada Spring Initializr yorlig'iga o'ting, unda jdk o'rnatilishi kerak va https://start.spring.io URL manzili Internetga ulanishni tekshiring, keyin sizga kerak bo'ladi. nomni va keyin biz foydalanadigan texnologiyalarni tanlash uchun birinchi bosqichda bizga faqat WEB kerak - uning yoniga belgi qo'ying va keyin loyiha yaratiladi. Maven barcha bog'liqliklarni tortib olish uchun biz g'oyadagi Maven yorlig'ini ochishimiz va yangilash tugmasini bosishimiz kerak. Biz mijoz-server aloqasi uchun barcha sozlamalarni o'z ichiga olgan tayyor dastur shablonini oldik. Birinchi taassurot qoldirish uchun keling, kontrollerlar sinfini yarataylik (ehtimol, MVC haqida hammamiz eshitganmiz). Barcha Spring ilovalarida kontrollerlar juda oddiy dizaynga ega - bu @Controller izohi bilan belgilangan sinf (prefikslar mumkin, masalan, @RestController), bu sinf kiruvchi so'rovlarni qayta ishlash uchun javobgardir. Tekshirish moslamasi ba'zi manzil so'rovini tan olishi uchun siz ushbu manzilni kontroller usuliga moslashtirishingiz kerak. 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 + "!"; } } Keling, bu erda nima bo'layotganini aniqlaylik. @RestController . aynan men yuqorida yozgan izoh. Biz dam olish boshqaruvchisidan foydalanamiz, chunki biz natijani darhol ko'rishni xohlaymiz va .jsp sahifalarini yozishni xohlamaymiz (voy), natijani brauzerda darhol satr sifatida ko'rish biz uchun osonroq bo'ladi. @RequestMapping - bu faqat manzilga bog'lash. Umumiy manzil prefiksi quyidagicha bo'ladi: localhost:8080. Ko'rib turganimizdek, butun sinf /hello manzilida osilgan , demak, bu sinf ichidagi barcha usullarda localhost:8080/hello prefiksi mavjud. Keyingi sinfning birinchi usuli, o'z xaritasida Http protokoli usuli ko'rsatilgan - GET so'rovi (o'zingiz uchun Http protokoli usullari haqida o'qing) Bularning barchasi nimani anglatadi? localhost:8080/salom manziliga GET so'rovini yuborish orqali biz “Salom Dunyo!” qatori ko'rinishida javob olamiz, buni tekshirib ko'ramiz! DemoApplication sinfida bir qo'l bilan bahor kontekstini ishga tushirish uchun ajoyib izoh mavjud - @SpringBootApplication. Ushbu sinfning asosiy usuli sehrli bo'ladi, u shunchaki SpringApplication-da yashiringan barcha sehrni ishga tushiradi, agar siz ushbu sinfdagi kontekst menyusiga qo'ng'iroq qilsangiz, Run qatorida variantlar paydo bo'ladi, men uni yashil belgi bilan erta ishga tushirishni tavsiya qilaman, shu tarzda konsol yanada chiroyli ko'rinadi va kelajakda undan jurnallarni to'g'ridan-to'g'ri o'qish osonroq bo'ladi. Keling, dasturni ishga tushiramiz. konsol chiqishi to'xtaganda, konsolda ko'rishingiz kerak
2015-09-02 09:25:36.895 INFO 5844 --- [asosiy] sbcetTomcatEmbeddedServletContainer: Tomcat port(lar)da ishga tushirildi: 8080 (http) 2015-09-02 09:25:34 INFO [8-]. demo.DemoApplication : DemoApplication **** soniyalarda ishga tushirildi (JVM 15.501 uchun ishlaydi)
bu erda "****" - dasturni ishga tushirish muddati :) Shundan so'ng, istalgan brauzerda (yoki jingalak yoki siz ishlatadigan har qanday narsadan qat'i nazar?) siz kontroller usuli xaritalangan manzilni kiritishingiz kerak.
localhost: 8080/salom
Brauzer kanonikni ko'rsatishi kerak
Salom Dunyo!
Mana siz uchun veb-ilova! Agar siz kontrollerda boshqa usul mavjudligini sezsangiz, uning o'z manzil xaritasi mavjud; joriy manzilga joy ushlagich qo'shiladi. Qaysi usulga Spring tomonidan parametr sifatida uzatiladi. Buning uchun @PathVariable izohi javobgar ekanligini taxmin qilish qiyin emas. Shunday qilib, so'rov bo'yicha
localhost: 8080/salom/Ismingiz
brauzer ko'rsatiladi
Salom, ismingiz!
Biz Spring Boot asoslarini saralab oldik. Keyinchalik, biz ma'lumotlar bazasini biriktiramiz, ammo bu keyingi postda bo'ladi. Barchangizga rahmat.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION