JavaRush /Java блогы /Random-KK /Жұмысқа арналған тест тапсырмасы, анықтап көрейік..
timurnav
Деңгей

Жұмысқа арналған тест тапсырмасы, анықтап көрейік..

Топта жарияланған
Достар, бәріңе сәлем. Мен ресейлік компанияда Java әзірлеушісі лауазымына арналған тест тапсырмасын шешудегі тәжірибеммен бөліскім келеді. Мен бірден айтамын, тапсырманың негізгі функционалдығын жүзеге асыру аса қиын емес, бірақ әдеттегідей, егжей-тегжейлер мен ұсақ-түйектер маңызды, бұл маған оны уақытында тапсыруға кедергі болды; олар ешқашан тапсырма туралы ештеңе жауап бермеді - олардың бос орны Мен оларға жіберген кезде толтырылған болатын. Мен өзімнен талап етілгеннің барлығын орындадым ба, жоқ па, соны білу үшін тапсырманы қарауды ұсынамын. Ал оны қалай жасау керектігін білмейтіндер үшін мен онымен қалай күрескенім туралы көп су қосамын. Егер біреу бұған қызығушылық танытса, мысыққа қош келдіңіз. Мен бірден айтамын, мен бұл жерде бүкіл шешімді орналастырмаймын, бірақ жаңадан бастағандар үшін көптеген түсініктемелер болады, егер біреу менің баяндамамды оқуға қызығушылық танытпаса, міне github- тағы жоба. тапсырманың мәтіні.
Тест тапсырмасы No1
Сипаттама: API Server (JSON HTTP API) Әзірлеу құралдары: Java Framework: Play Framework 2.4 (немесе одан жоғары) немесе Spring boot 1.2.3 (немесе одан жоғары) Дерекқор: MySQL Протоколы: HTTP, порт 80 Функционалдық (сұраулар):
  1. Жүктеуші.
    • Біз файлды (JPG аватар суреті) serverге тасымалдаймыз.
    • Біз кескінді serverдегі каталогта сақтаймыз.
    • Сервер жауабы кескіннің ішкі URI codeы болып табылады.
  2. Жаңа пайдаланушы қосу.
    • Біз пайдаланушының жеке деректерін serverге жібереміз (суреттің URI, пайдаланушы аты, электрондық пошта және т.б.).
    • Ақпаратты дерекқорға сақтаймыз.
    • Сервер жауабы жаңа пайдаланушының бірегей идентификаторы болып табылады.
  3. Пайдаланушы туралы ақпарат алу.
    • Біз serverге бірегей пайдаланушы идентификаторын жібереміз.
    • Мәліметтер қорынан ақпаратты оқу.
    • Сервердің жауабы пайдаланушының жеке деректері болып табылады (жоғарыдан қараңыз).
  4. Пайдаланушы күйін өзгерту (Онлайн, Офлайн).
    • Біз бірегей пайдаланушы идентификаторын және жаңа күйді (Онлайн, Офлайн) serverге тасымалдаймыз.
    • Пайдаланушы күйін өзгерту.
    • Сервер жауабы – бірегей пайдаланушы идентификаторы, жаңа және алдыңғы күй.
    Ескерту: Сервер сыртқы API/деректер қорын сұрауда. Бұл оңайлатылған тест тапсырмасы болғандықтан, имитацияланған қол жеткізу және 5-10 секунд уақыт кешігуі бар «stub» енгізу қажет.
  5. Сервер статистикасы.
    • Параметрлерді serverге тасымалдаймыз: 1. клиент күйі (онлайн, желіден тыс немесе жоқ), 2. сұраудың бірегей идентификаторы (уақыт белгісі) (болмауы мүмкін)
    • Сервер жауабы күйлері мен сурет URI мекенжайлары бар пайдаланушылардың тізімі, сондай-ақ сұраудың бірегей идентификаторы (уақыт белгісі).
    Ескерту: Сұрауда параметрлер болса, server олардың жауабын сүзуі керек. Егер сұрауда сұраудың бірегей идентификаторы (уақыт белгісі) болса (бұрын алынған), server осы бірегей идентификатордан (уақыт белгісінен) кейін (уақыт бойынша) күйлері өзгерген пайдаланушыларды ғана қайтаруы керек.
Міндетті талаптар:
- ДЕМАЛЫС. - Барлық деректер JSON пішімінде. - API serverі 3 және 5 сұрауларының ең жоғары басымдылыққа ие болуы (1, 2, 4 сұрауларына қатысты) және мүмкіндігінше тез аяқталуы ескеріліп жобалануы керек. - Өңдеу қатесі.
Қосымша талаптар (қалаулы):
- codeты құжаттау. - API serverінің архитектурасы жоғары жүктеме мен масштабтауға арналған болуы керек. - Тесттер.
Тест нәтижесі:
- Тест тапсырмасының нәтижесі мұрағатта және оны қолдану бойынша егжей-тегжейлі нұсқаулармен қамтамасыз етілуі керек. Сынақ тапсырмасы үшін Docker контейнерін құру үшін Dockerfile файлын тіркеген жөн. github.com сайтынан жүктеп алуға болады. - Құрылған API қысқаша құжаттамасын (сұраулар тізімі, сұрау параметрлері, сұрау форматтары, жауап пішімдері және т.б.) қамтуы керек. - контекстте тест тапсырмасын орындауға кеткен уақыт туралы ақпарат: жобалау, бағдарламалау, құжаттау және т.б. Бұл тест тапсырмасы тек білім мен дағдыларды бағалауға арналғанын және дайын өнімді (API serverі) жасауды мақсат етпейтінін ескеріңіз, сондықтан түсініктемелер мен себептермен оңайлатуға рұқсат етіледі.
мұқият және тәжірибелі бағдарламашылар келесі бөлімді өткізіп жібере алады, мұнда мен тапсырманың мәтінімен айналысамын. Тапсырманың «тақырыбы» түсінуде ешқандай қиындық тудырмайды, сондықтан мен жай ғана менің таңдауым Spring Boot-қа түскенін айтқым келеді, бірақ мен онымен бірдеңе жасағандықтан емес, мен нақты жобаны пайдаланып үлгергендіктен. Көктем (бірақ Boot ол жерде болмады, мен оны қарапайымдылығына байланысты түсінемін). Сервер функциясына сәйкес: 1) Файлды жүктеп алу құралы. Мұнда негізінен күрделі ештеңе жоқ, мен тек суреттердің serverде қалай сақталатынын білуім керек еді, ең ыңғайлы әдіс оларды арнайы каталогқа жай ғана орналастыру болып шықты. Төменде нақты іске асыруды қарастырамыз. 2) Жаңа пайдаланушыны қосу, қарапайым операция, егер сіз бұрын CRUD қолданбаларын жасаған болсаңыз, онда ол мені қолдайды, егер жоқ болса, төменде бәрін көресіз. 3) Пайдаланушы туралы ақпаратты алу. сұрақтар жоқ - бәрі түсінікті. 4) Пайдаланушы күйін өзгерту. тапсырманың алғашқы екі тармағы күн сияқты түсінікті, бірақ сыртқы сұраныс туралы не айтасыз??? Оны 100 граммсыз анықтау мүмкін емес, тіпті қазір мен дұрыс түсінгеніме 100% сенімді емеспін. Төмендегі мәліметтер. 5) Сервер статистикасы. Бұл да қызық. Бірінші тармақ параметрлердің әртүрлі нұсқалары бар әдісті енгізуді ұсынады, бұл контроллер әдісі болуы керек екенін ескере отырып, мұны қалай жасау керектігі әлі белгісіз. екінші тармақ уақыт өткеннен кейін мәртебесі өзгерген барлық пайдаланушыларды сұрайды, бұл түсінікті сияқты, бірақ нәзіктіктер бар.
Бастау
о, мен осы тапсырмамен жұмыс істеп жатқанда бұл сөйлемді қанша рет оқыдым! Егер сіз көктемде жобаны қалай құруға болатынын анықтауға тырысқан болсаңыз, бірақ қандай да бір себептермен сіз Spring Boot-ты ешқашан қолданып көрмеген болсаңыз, құттықтаймыз, төменде жазатыныма қуанасыз. Мен бір жерден бағдарламашылар жобадан жобаға өте үлкен көлемдегі codeты тасымалдайтынын оқыдым, бұл шаблондық code - деректер базасына қосылу параметрлері, сервлет салыстыру және т.б., осылайша, мысалы, көлемін азайту үшін. жұмыс істеуге арналған үлгі codeы Біз дерекқорлар үшін JPA/Hibernate пайдаланамыз, олар кейбір үлгілерді жасырады, бірақ оларды конфигурациялау үшін қайтадан xml файлын немесе конфигурация сыныптарын жазу керек. және егер сізде шағын жоба болса, онда сіз кем емес code жазасыз, бірақ керісінше. Әрі қарай көктемде JPA-мен жұмысты аяқтаймыз; көптеген жобалар бар, бірақ ең қолайлысы, әрине, көктемгі деректер. Бұл мүмкін болатынның бәрімен, соның ішінде JPA және NoSQL және көптеген әртүрлі жобалармен жұмыс істей алатын өте үлкен жоба, бұл керемет сиқырлы, біз оны жобамызда қолданамыз. Spring көмегімен біз дерекқорға қосылу параметрлерінен құтыламыз, Spring біз үшін бәрін жасайды, бізге транзакциялық, кэштеу және ерекше жағдайларда google (басқаларды қараңыз) контекстік конфигурациядағы кейбір басқа параметрлер бойынша қажетті annotationларды сақтау керек. Бірақ сонымен бірге, көптеген жаңадан әзірлеушілер көктемде жобаны қалай жасау керектігін мүлде білмейді. Жобаны іске қосу үшін оны қалай конфигурациялау керектігін және localhost:8080/* арқылы басталатын сілтеме бойынша шолғышта нәтиже алуды ешкім толық білмейді. Содан кейін суретке Spring Boot келеді! Көктемгі аяқ киім туралы нақты мысалмен айтқан дұрыс! Бос орыннан бастайық. Spring Boot жобасын жасау үшін Spring әзірлеушілері шаблондарды жасауға арналған «конструкторды» ойлап тапты. Сіз оны олардың веб-сайтында пайдалана аласыз, бірақ оны біздің сүйікті IDE Intellij IDEA-да жасау оңайырақ. Сонымен: Файл->Жаңа->Жоба Терезеде Spring Initializr қойындысына өтіңіз, онда jdk орнатылуы керек және https://start.spring.io URL мекенжайы Интернет қосылымын тексеріңіз, содан кейін сізге қажет болады. атауды, содан кейін біз қолданатын технологияларды таңдау үшін бірінші кезеңде бізге тек WEB қажет - оның жанына құсбелгі қойыңыз, содан кейін жоба жасалады. Maven барлық тәуелділіктерді шығару үшін идеядағы Maven қойындысын ашып, жаңарту түймесін басу керек. Біз клиент пен server байланысының барлық параметрлерін қамтитын дайын қолданба үлгісін алдық. Алғашқы әсер алу үшін контроллер класын жасайық (мүмкін MVC туралы бәріміз естіген шығармыз). Барлық Spring қосымшаларында контроллерлердің жеткілікті қарапайым дизайны бар - бұл @Controller annotationсымен белгіленген класс (префикстер болуы мүмкін, мысалы, @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 . дәл мен жоғарыда жазған annotation. Біз демалыс контроллерін пайдаланамыз, өйткені біз нәтижені бірден көргіміз келеді және .jsp беттерін жазғымыз келмейді (wow), нәтижені шолғышта жол ретінде бірден көру бізге оңайырақ болады. @RequestMapping - бұл жай ғана мекен-жайға байланыстыру. Жалпыға ортақ мекенжай префиксі: localhost:8080 болады. Көріп отырғанымыздай, бүкіл сынып /hello мекенжайында ілулі тұрады , бұл осы сыныптағы барлық әдістерде localhost:8080/hello префиксі бар екенін білдіреді. Әрі қарай класстың бірінші әдісі, оның өзіндік салыстыруында Http протоколы әдісі көрсетіледі - GET сұрауы (Http протоколының әдістері туралы өзіңіз оқыңыз) Мұның бәрі нені білдіреді? localhost:8080/hello мекенжайына GET сұрауын жасау арқылы біз «Сәлем әлем!» жолы түрінде жауап аламыз, оны тексеріп көрейік! DemoApplication сыныбында көктемгі контексттің барлығын бір қолмен іске қосатын бір керемет annotation бар - @SpringBootApplication. Бұл класстың негізгі әдісі сиқырлы болады, ол SpringApplication ішінде жасырылған барлық сиқырды іске қосады, егер сіз осы сыныптағы контекстік мәзірге қоңырау шалсаңыз, Run жолында опциялар пайда болады, мен оны жасыл белгімен ерте іске қосуды ұсынамын, осылайша консоль әдемірек көрінеді және болашақта журналдарды одан тікелей оқу оңайырақ болады. Қолданбаны іске қосайық. консоль шығысы тоқтаған кезде, консольде көру керек
2015-09-02 09:25:36.895 INFO 5844 --- [ негізгі] sbcetTomcatEmbeddedServletContainer: Tomcat порт(лар)да басталды: 8080 (http) 2015-09-02 09:25:34 INFO [8-8-]. demo.DemoApplication : DemoApplication **** секундта іске қосылды (JVM 15.501 үшін жұмыс істейді)
мұндағы "****" - қолданбаны іске қосу ұзақтығы :) бұдан кейін кез келген шолғышта (немесе бұйралау немесе сіз қолданатын кез келген нәрсе?) контроллер әдісі салыстырылған мекенжайды теруіңіз керек.
localhost: 8080/сәлем
Браузер канондықты көрсетуі керек
Сәлем Әлем!
Міне, сізге арналған веб-қосымша! Контроллерде басқа әдіс бар екенін байқасаңыз, оның жеке мекенжай салыстыруы бар; ағымдағы мекенжайға толтырғыш қосылады. Бұл әдіске Spring параметрі ретінде беріледі. Бұған @PathVariable annotationсының жауапты екенін болжау қиын емес. Сондықтан сұраныс бойынша
localhost:8080/сәлем/Сіздің атыңыз
браузер көрсетіледі
Сәлем, атыңыз!
Біз Spring Boot негіздерін сұрыптадық. Әрі қарай, біз дерекқорды тіркейміз, бірақ бұл келесі постта болады. Барлығыңа Рақмет.
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION