JavaRush /Java блогу /Random-KY /Жумушка орношуу үчүн тест тапшырмасы, аны аныктап көрөлү....
timurnav
Деңгээл

Жумушка орношуу үчүн тест тапшырмасы, аны аныктап көрөлү..

Группада жарыяланган
Достор, баарына салам. Мен орусиялык компанияда Java иштеп чыгуучусу кызматына тесттик тапшырманы чечүү боюнча өз тажрыйбам менен бөлүшкүм келет. Мен дароо айтайын, тапшырманын негизги функционалдуулугун ишке ашыруу анчалык деле кыйын эмес, бирок мурдагыдай эле, майда-чүйдөсүнө чейин жана майда-чүйдө нерселер маанилүү, бул мага аны өз убагында тапшырууга тоскоол болду; алар эч качан тапшырма боюнча эч нерсеге жооп беришкен эмес - алардын вакансиясы Мен аларга жөнөткөндө эле толгон болчу. Мен менден талап кылынган нерселердин бардыгын аткарганымды билүү үчүн тапшырманы карап чыгууну сунуштайм. Ал эми аны кантип жасоону билбегендер үчүн мен аны менен кантип күрөшкөнүм жөнүндө көп сууну кошом. Эгер кимдир бирөө буга кызыкса, кош келиңиз. Мен дароо эле айтам, мен бул жерде бүт чечимди жарыялабайм, бирок башталгычтар үчүн көптөгөн түшүндүрмөлөр болот, эгер кимдир бирөө менин билдирүүлөрүмдү окууга кызыкпаса, бул жерде github боюнча долбоор . тапшырманын тексти.
Тесттик тапшырма №1
Сүрөттөмө: API Server (JSON HTTP API) Иштеп чыгуу куралдары: Java Framework: Play Framework 2.4 (же андан жогору) же Жазгы жүктөө 1.2.3 (же андан жогору) Маалыматтар базасы: MySQL Протоколу: HTTP, порт 80 Функционалдык (суроолор):
  1. Жүктөгүч.
    • Биз файлды (JPG аватар сүрөтү) serverге өткөрүп беребиз.
    • Сүрөттү serverдеги каталогдо сактайбыз.
    • Сервердин жообу бул сүрөттүн ички URI'и.
  2. Жаңы колдонуучуну кошуу.
    • Биз колдонуучунун жеке маалыматтарын serverге өткөрүп беребиз (сүрөттүн URI, колдонуучунун аты, электрондук почта ж.б.).
    • Маалыматтарды базага сактайбыз.
    • Сервердин жообу жаңы колдонуучунун уникалдуу идентификатору.
  3. Колдонуучу жөнүндө маалымат алуу.
    • Биз serverге уникалдуу колдонуучу ID өткөрүп беребиз.
    • Маалыматтар базасынан маалыматты окуу.
    • Сервердин жообу бул колдонуучунун жеке маалыматтары (жогоруда караңыз).
  4. Колдонуучунун статусун өзгөртүү (Онлайн, Оффлайн).
    • Биз уникалдуу колдонуучу ID жана жаңы статусун (Онлайн, Оффлайн) serverге өткөрүп беребиз.
    • Колдонуучунун статусун өзгөртүү.
    • Server жооп - уникалдуу колдонуучу ID, жаңы жана мурунку статусу.
    Эскертүү: Сервер тышкы API/маалымат базасын сурап жатат. Бул жөнөкөйлөштүрүлгөн тесттик тапшырма болгондуктан, симуляцияланган кирүү мүмкүнчүлүгү жана 5-10 секунддук убакыт кечигүү менен "стубканы" ишке ашыруу керек.
  5. Сервер статистикасы.
    • Параметрлерди serverге өткөрүп беребиз: 1. кардар статусу (Онлайн, Оффлайн же жок), 2. Сурамдын уникалдуу ID (убакыт белгиси) (жок болушу мүмкүн)
    • Сервердин жообу – статустары жана URI сүрөтү бар колдонуучулардын тизмеси, ошондой эле сурамдын уникалдуу ID (убакыт белгиси).
    Эскертүү: Эгер сурамда параметрлер бар болсо, server алардын жообун чыпкалоосу керек. Эгерде сурам суроонун уникалдуу идентификаторун (убакыт белгисин) камтыса (мурда алынган), анда server статустары ушул уникалдуу ID (убакыт белгиси) кийин (убакыттын өтүшү менен) өзгөргөн колдонуучуларды гана кайтарышы керек.
Милдеттүү талаптар:
- Эс алуу. - Бардык маалыматтар JSON форматында. - API serverи 3 жана 5 суроо-талаптары эң жогорку артыкчылыкка ээ экендигин (1, 2, 4-суроолорго салыштырмалуу) эске алуу менен иштелип чыгышы керек жана мүмкүн болушунча тезирээк аткарылышы керек. - Ката иштетүү.
Кошумча талаптар (каалоочу):
- codeду documentтештирүү. - API Server архитектурасы жогорку жүктөө жана масштабдоо үчүн иштелип чыккан болушу керек. - Тесттер.
Сынактын жыйынтыгы:
- тесттик тапшырманын натыйжасы архивде жана аны жайылтуу боюнча деталдуу нускама менен берилүүгө тийиш. Сыноо тапшырмасы үчүн Docker контейнерин куруу үчүн Dockerfile тиркөө сунушталат. github.com жүктөп алса болот. - Түзүлгөн APIдин кыскача documentтерин камтышы керек (суроолордун тизмеси, суроо-талаптын параметрлери, суроо-талап форматтары, жооп форматтары ж.б.). - контекстте тесттик тапшырманы аткарууга кеткен убакыт жөнүндө маалымат: долбоорлоо, программалоо, documentтештирүү ж.б. Бул тест тапшырмасы бorмди жана көндүмдөрдү баалоо үчүн гана арналганын жана даяр продуктту (API serverин) түзүүнү максат кылбаганын, ошондуктан түшүндүрмөлөр жана себептер менен жөнөкөйлөтүүгө жол берилгенин эске алыңыз.
кунт коюп жана тажрыйбалуу программисттер кийинки бөлүмдү өткөрүп жибериши мүмкүн, бул жерде мен тапшырманын тексти менен алектенем. Тапшырманын "башчысы" түшүнүүдө эч кандай кыйынчылыктарды туудурbyte, ошондуктан мен жөн гана менин тандоом Жазгы Бутко туура келди деп айтам, бирок мен аны менен бир нерсе кылганым үчүн эмес, бирок мен буга чейин чыныгы долбоорду бүтүргөнүм үчүн. Жаз (бирок Boot жок болчу, мен аны жөнөкөйлүгүнөн түшүнөм). Сервердин иштөөсүнө ылайык: 1) Файл жүктөөчү. Негизинен бул жерде эч кандай татаал эч нерсе жок, мен жөн гана сүрөттөр serverде жалпысынан кантип сакталаарын түшүнүшүм керек болчу, эң ыңгайлуу жолу аларды жөн гана кандайдыр бир атайын каталогго жайгаштыруу экени белгилүү болду. Биз төмөндө конкреттүү ишке ашырууну карап чыгабыз. 2) Жаңы колдонуучуну кошуу, жөнөкөй операция, эгер сиз CRUD тиркемелерин жасаган болсоңуз, анда ал мени колдойт, эгер жок болсо, төмөндө бардыгын көрөсүз. 3) Колдонуучу жөнүндө маалымат алуу. суроолор жок - баары түшүнүктүү. 4) Колдонуучунун статусун өзгөртүү. тапшырманын алгачкы эки пункту күндөй эле түшүнүктүү, бирок сырткы өтүнүч жөнүндө эмне айтууга болот??? 100 граммсыз аны аныктоо мүмкүн эмес, мен туура түшүндүмбү, азыр да 100% ишенбейм. Толук маалымат төмөндө. 5) Сервер статистикасы. Бул да кызык. Биринчи пункт параметрлердин ар кандай варианттары бар ыкманы ишке ашырууну сунуштайт, муну кантип жасоо керектиги азырынча белгисиз, анткени бул контроллер ыкмасы болушу керек. экинчи пункт бир аз убакыт өткөндөн кийин статусу өзгөргөн бардык колдонуучулар сурайт, бул түшүнүктүү көрүнөт, бирок майда-чүйдөсүнө чейин бар.
Баштоо
оо, мен бул тапшырманы аткарып жатып, бул фразаны канча жолу окудум! Эгерде сиз качандыр бир убакта жазда долбоорду кантип түзүү керектигин түшүнгөнгө аракет кылган болсоңуз, бирок кандайдыр бир себептерден улам сиз Spring Boot-ну эч качан сынап көрбөгөн болсоңуз, куттуктайм, сиз мен төмөндө жаза турган нерсеге ыраазы болосуз. Мен бир жерден окуган элем, программисттер долбоордон долбоорго өтө чоң көлөмдөгү codeду өткөрүп беришкен, бул шаблондук code - маалымат базасына туташуу орнотуулары, сервлеттин картасы ж.б.у.с., мисалы, көлөмүн азайтуу үчүн. менен иштөө үчүн шаблон codeу Биз маалымат базалары үчүн JPA/Hibernate колдонобуз, алар кээ бир калыптарды жашырышат, бирок аларды конфигурациялоо үчүн кайрадан xml файлын же конфигурация класстарын жазышыңыз керек. жана эгерде сизде кичинекей долбоор болсо, анда сиз кем эмес code жазасыз, бирок тескерисинче. Андан кийин жазында JPA менен иштөөнү аяктайбыз; көптөгөн долбоорлор бар, бирок эң ыңгайлуусу, албетте, жазгы маалыматтар. Бул, балким, мүмкүн болгон нерселердин баары, анын ичинде JPA жана NoSQL жана ар кандай долбоорлор менен иштей турган абдан чоң долбоор, ал укмуштуудай сыйкырдуу, биз аны долбоордо колдонобуз. Жазды колдонуу менен биз дээрлик маалымат базасына туташуу жөндөөлөрүнөн кутулабыз, Spring биз үчүн бардыгын жасайт, жөн гана транзакция, кэш жана өзгөчө учурларда google (башкаларды караңыз) контексттик конфигурациядагы башка орнотуулар боюнча керектүү annotationларды кармашыбыз керек. Бирок, ошол эле учурда, башталгыч иштеп чыгуучулардын көбү жазында долбоорду кантип түзүүнү такыр бorшпейт. Долбоорду иштетүү үчүн аны кантип конфигурациялоону жана натыйжаны localhost:8080/* менен башталган шилтеме аркылуу браузерде алуу үчүн эч ким толук билбейт. Анан сүрөткө Spring Boot келет! Жазгы Бут жөнүндө конкреттүү бир мисал менен айткан жакшы! Келгиле, боштуктан баштайлы. Spring Boot долбоорун түзүү үчүн, Spring иштеп чыгуучулары калыптарды түзүү үчүн "конструктор" менен келишти. Сиз аны алардын веб-сайтында колдонсоңуз болот, бирок аны биздин сүйүктүү IDE, Intellij IDEAда жасоо оңой. Ошентип: Файл->Жаңы->Проект Терезеден Spring Initializr өтмөгүнө өтүңүз, анда jdk орнотулушу керек жана https://start.spring.io URL дареги, Интернет байланышын текшериңиз, андан кийин сизге керек болот. атын, андан кийин биз колдоно турган технологияларды тандоо үчүн, биринчи этапта бизге WEB гана керек - анын жанына белги коюп, андан кийин долбоор түзүлөт. Maven бардык көз карандылыктарды алып салуу үчүн, биз идеядагы Maven кошумча барагын ачып, жаңыртуу баскычын басышыбыз керек. Колдонмонун даяр үлгүсүн алдык, анда кардар-server байланышы үчүн бардык орнотуулар камтылган. Биринчи таасир алуу үчүн, келгиле, контроллер классын түзөлү (балким, баарыбыз MVC жөнүндө укканбыз). Жазгы бардык тиркемелерде контроллерлор кыйла жөнөкөй дизайнга ээ - бул класс @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 дарегинде orнип турат , бул класстын ичиндеги бардык методдор localhost:8080/hello префиксине ээ экенин билдирет. Андан кийин класстын биринчи ыкмасы болуп саналат, анын өз картасын түзүүдө Http протоколунун ыкмасы көрсөтүлөт - GET өтүнүчү (Http протоколунун ыкмалары жөнүндө өзүңүз окуңуз) Мунун баары эмнени билдирет? localhost:8080/hello дарегине GET өтүнүчүн жөнөтүү менен, биз “Hello World!” сап түрүндө жооп алабыз, Келгиле, текшерип көрөлү! 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-]. demo.DemoApplication: DemoApplication **** секунданын ичинде башталды (JVM 15.501 үчүн иштейт)
мында "****" - тиркемени ишке киргизүүнүн узактыгы :) Андан кийин, каалаган браузерде (же curl, же эмнени колдонсоңуз?) сиз контроллер ыкмасы көрсөтүлгөн даректи теришиңиз керек.
localhost: 8080/салам
Браузер канондукту көрсөтүшү керек
салам дүйнө
Мына сиз үчүн веб-тиркеме! Эгер сиз контроллерде башка ыкма бар экенин байкасаңыз, анын өзүнүн дарек картасы бар; учурдагы дарекке толтургуч кошулат. Бул ыкмага Spring тарабынан параметр катары өткөрүлөт. Буга @PathVariable annotationсы жооптуу экенин айтуу кыйын эмес. Ошентип, өтүнүчү боюнча
localhost:8080/салам/Сиздин атыңыз
браузер көрсөтөт
Саламатсызбы, сиздин атыңыз!
Биз Жазгы Буттун негиздерин тандап алдык. Андан кийин, биз маалымат базасын тиркейбиз, бирок бул кийинки билдирүүдө болот. баарына рахмат.
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION