JavaRush /Java блогу /Random-KY /Жаз жөнүндө эмнени билишиңиз керек: тарых, негизги модулд...
Константин
Деңгээл

Жаз жөнүндө эмнени билишиңиз керек: тарых, негизги модулдар, Java EE менен салыштыруу

Группада жарыяланган
Салам! Азыркы учурда, Java бorми бар иштеп чыгуучу үчүн эң популярдуу өнүгүү багыты веб-иштеп чыгуу болуп саналат. Албетте, бул адистик үчүн окуу үчүн зарыл болгон технологиялардын тизмеси бар. Алардын негизгилеринин бири - Жаз . Жаз жөнүндө эмнени бorшиңиз керек: тарых, негизги модулдар, Java EE менен салыштыруу - 1Анын ордуна Java EE үйрөнө аласыз деп талаша аласыз . Бул, албетте, чындык, бирок азыр жаңы долбоорлордун басымдуу бөлүгү Spring колдонушат , бул аны Java веб-иштеп чыгуучусу үчүн демейки, милдеттүү технологияга айлантты. Ал эми рыноктун талабына жооп бергиң келсе, аны изилдөөгө туура келет. Бүгүн мен Жаз жөнүндө сүйлөшкүм келет , тактап айтканда, ал тууралуу өз көз карашыңызды бир аз кеңейтүү үчүн: анын жаралуу тарыхы, Java EE стекинен негизги айырмачылыктары жөнүндө айтып бергим келет жана Spring стекинин негизги компоненттерине кыскача сереп салып бергим келет . Баштайлы! Жаз жөнүндө эмнени бorшиңиз керек: тарых, негизги модулдар, Java EE менен салыштыруу - 2

1. Жаз кантип жана качан пайда болгон жана убакыттын өтүшү менен ал эмнеге айланган

Мунун баары 2002-жылдын октябрында , Род Джонсон "Эксперттин бирден-бир J2EE Дизайн жана өнүктүрүү" китебин жазганда башталган : WroxЖаз жөнүндө эмнени бorшиңиз керек: тарых, негизги модулдар, Java EE менен салыштыруу - 3 тарабынан басылып чыккан бул китепте автор ошол кездеги Java өнүгүүсүнүн абалын сүрөттөйт жана бир катар иш-аракеттерди көрсөтөт. Java EE жана компонентке негизделген (Enterprise Java Bean)EJB кемчorктери . Ошол эле учурда, Род Джонсон кадимки Java класстарына (POJO - жөнөкөй эски Java an objectилерине) жана көз карандылык инъекциясына негизделген жөнөкөйраак чечимди сунуштайт. Китепте ал EJB колдонбостон кантип жогорку сапаттагы, масштабдуу онлайн ээлөө тиркемесин түзө аларыңызды түшүндүрөт. Ошол. ал тиркемени иштеп чыгуунун татаалдыгын кантип алып салууну жана EJB аркылуу мурда мүмкүн болгон нерселердин бардыгына жетүү үчүн жөнөкөй JavaBeans колдонууга мүмкүнчүлүк түзүүнү ачык-айкын көрсөттү. Бирок, Жаздын масштабы server тарапта иштеген программалык компоненттерди иштеп чыгуу менен эле чектелбейт. Ар бир Java тиркемесинин жөнөкөйлүгү, сыналышы жана бош байланышы жагынан алHowтын артыкчылыктарынан пайдалана алат. Анын J2EE өнүктүрүү дизайны заматта хит болуп калды. Китептин бир бөлүгү катары бекер берилген тиркеме codeунун көп бөлүгүн кайра колдонууга мүмкүн болгон жана көп өтпөй бир катар иштеп чыгуучулар аны өз долбоорлорунда колдоно башташты. Wrox булак codeу жана патчтары бар китеп үчүн веб-баракчага ээ болгон. Алар ошондой эле китеп үчүн онлайн форумду камсыз кылышкан. 2003-жылдын февралында иштеп чыгуучулар Юрген Хеллер жана Янн Кароф Род Джонсонду алHowтын codeунун негизинде ачык булактуу долбоорду түзүүгө көндүрүшкөн. Ошол учурдан тартып, Род, Юрген жана Янн таптакыр жаңы нерсени жаратуу үчүн кызматташууга киришти. Чынында, жаңы алHow үчүн "Жаз" деген ат менен келген Янн Кароф болгон. Бул жерде жаз жазга окшош: салттуу J2EEнин “кышынан” кийин жаңы башталгыч дегенди билдирет.
  • 2003-жылы июнда, Spring 0.9 Apache 2.0 лицензиясы астында чыгарылган.
  • Spring 1.0 2004-жылдын март айында чыгарылган. Кызыгы, Spring 1.0 чыкканга чейин эле мурунку 0.9 versionсы абдан жакшы кабыл алынып, кеңири кабыл алынган.
  • 2004-жылдын августунда Род Джонсон, Юрген Хеллер, Кит Дональд жана Колин Сампалеану жазгы консалтинг, окутуу жана колдоо көрсөтүүчү Interface21 компаниясын негиздешкен .
  • 2006-жылдын октябры: XML конфигурация файлдарын жөнөкөйлөткөн жаз 2.0 чыгарылды.
  • 2007-жылы ноябрда чыккан Spring 2.5 annotation конфигурацияларын киргизген.
  • 2012-жылдын декабрь айында чыккан Spring 3.2 Java конфигурациясын киргизди, Java 7, Hibernate 4, Servlet 3.0 колдогон, ошондой эле кеминде Java 1.5 талап кылынат.
  • Янн Кароф командадан эрте кеткен. Род Джонсон 2012-жылы жазгы командадан кеткен. Юрген Хеллер дагы эле Жазды өнүктүрүү командасынын активдүү мүчөсү.
  • Spring 4.0, 2014-жылы чыгарылган, Java 8ге колдоо кошкон.
  • Ошондой эле 2014-жылы Жазгы Бут дүйнөгө таанылган.
  • Spring 5.0 2017-жылы чыккан. Spring 5ти колдогон Spring Boot 2.x сыяктуу.
  • Чынында, бул биздин сүйүктүү алHow азыр биз билген нерсе болуп калды.

2. Жаз vs Java EE

Келгиле, веб-иштеп чыгуучулар үчүн эки негизги Java стектерин кичине салыштырып көрөлү : Spring жана Java EE. Жаз жөнүндө эмнени бorшиңиз керек: тарых, негизги модулдар, Java EE менен салыштыруу - 4
Java EE
Артыкчылыктары Кемчorктер
  • Java EEде жазылган тиркемелер ишенимдүү, коопсуз жана масштабдуу деп эсептелет
  • Java EE - бул тармак тарабынан бекитилген API стандарты
  • Негизинен жаз сыяктуу annotationларга жана CDIге (контекст жана көз карандылык инъекциясына) негизделген
  • EJB контейнерлерине жана POJOларга негизделген ишке ашыруу
  • Көптөгөн транзакциялары бар татаал тиркемелер JEE тарабынан абдан жакшы иштетилет
  • Масштабдуу монолиттик колдонмо үчүн колдонууда ийгorктүү
  • Java EE белгилүү бир стилди жана синтаксисти камтыган өзүнүн OOP тor бар
  • Жаңы баштагандар үчүн (кээде улгайган адамдар үчүн да) түшүнүү кыйын болгон өтө татаал тиркемени иштеп чыгуу чөйрөсү
  • Долбоордун акыркы баасы, анын ичинде долбоорлоо, жайылтуу жана тиркемени иштеп чыгуу, өтө чоң болушу мүмкүн
Java EE, Oracle тарабынан лицензияланган, массалык рыноктук тиркемелерди куруу үчүн кеңири ыңгайлаштырылган, бөлүштүрүлүүчү чөйрөнү талап кылган уюмдар жана компаниялар үчүн иштелип чыккан. Spring сыяктуу, Java EE маалымат базасына кирүү үчүн кошумча китепканаларды (JDBC, JPA), алыстан инженердик чакыруу (RMI), маалымат (JMS), веб-башкаруу, XML иштетүү жана ишкана JavaBeans, портлеттер, Сервлеттер, Java Server баракчалары үчүн стандарттуу API'лерди мүнөздөйт. ж.б. Жаз жөнүндө эмнени бorшиңиз керек: тарых, негизги модулдар, Java EE менен салыштыруу - 5Java EEнин негизги максаты - ар кандай API'лерди колдонуу менен учурдагы тиркемелерди курууда иштеп чыгуучулар туш болгон негизги маселелерди чечүү. Ошол эле учурда, Java EEде иштеп чыгуу татаалдыктын жогорку деңгээлине ээ, бул жаңы башталгычтар үчүн гана эмес, чекти өтө жогору көтөрөт. Тажрыйбалуу адистер үчүн буга чейин жазылган функцияларды түшүнүү кыйын болушу мүмкүн, ошондуктан Java EEде иштеп чыгуу көбүрөөк убакытты талап кылат жана ошого жараша кымбатыраак. Java EE жөнүндө кыскача биз муну айта алабыз: Татаал, бирок ийкемдүү. Эми жаз жөнүндө бир аз сүйлөшөлү . Жаз жөнүндө эмнени бorшиңиз керек: тарых, негизги модулдар, Java EE менен салыштыруу - 6
Жаз
Артыкчылыктары Кемчorктер
  • Объекттердин өз ара аракеттенүүсүн натыйжалуу уюштурууга мүмкүндүк берет
  • Java EEге караганда жөнөкөй
  • IOC жана AOP негизинде ишке ашырылган , бул тиркемелерди эркин бириктирүүнү камсыз кылат
  • XML, Groovy же annotation конфигурациясынын негизинде иштейт
  • Жөнөкөй эски Java an objectилерин колдонууга мүмкүндүк берет - POJOs, иштеп чыгуучуларга колдонмо serverи сыяктуу ишкана контейнеринин кереги жок
  • Java иштеп чыгуучуларына модулдуктун жогорку деңгээлин камсыз кылат
  • Java EE китепканаларынын ишке ашырылышын камсыз кылат, бирок өз жолу менен, аларды колдонууну бир топ жеңилдетет
  • Open Source License
  • Spring Boot колдонмонун баштапкы орнотуусун абдан жеңилдетет
  • Жазгы колдонмо codeун сыноо үчүн жалпысынан жеңил
  • Жаздын өнүгүүсү салыштырмалуу кыйын, анткени ал так фокус жок
  • Жаңы Java иштеп чыгуучусу үчүн Spring алкагын үйрөнүү кыйын болушу мүмкүн (бирок Java EEге караганда оңой)
  • Жаз Java EEге караганда жайыраак
Жаз чоң бизнес үчүн ачык булак Java негизи болуп саналат. Жазгы алHow J2EE идеяларын мүмкүн болушунча жөнөкөй ишке ашырууну камсыз кылууга жана POJO негизиндеги программалоо моделинин мүмкүнчүлүктөрүн кеңейтүү аркылуу эң сонун программалоо практикасын колдонууга багытталган. Ошол. Java EE расмий стандарт болуп саналат, ал эми Spring бул стандартты өз алдынча ишке ашырган алHow болуп саналат.

Салыштыруу натыйжалары

Менин түшүнүгүмдө, Java EE жана Spring JDBC жана Hibernate сыяктуу, бул жерде JDBC ылдамыраак технология, бирок ошол эле учурда керексиз codeдор көп. Ал эми Hibernate буга чейин JDBC колдонот, бирок ошол эле учурда өнүгүүнү кыйла жөнөкөйлөтүп жана азайтат (айрым чектөөлөрдү киргизсе да). Алардын кайсынысы жакшы экенин так айтуу мүмкүн эмес. Бул дагы бир аз суроону эске салат: кайсынысы жакшы - ArrayList же LinkedList. Анткени, жооп бирдей болот - кырдаалга жараша. Алардын ар биринин өзүнүн күчтүү жана алсыз жактары бар, жана сиз алардын арасынан кылдаттык менен тандап, өзүңүздүн кырдаалыңызды таразалап, алардын кайсынысы азыр көбүрөөк пайда алып келерин түшүнүшүңүз керек. Жаз жөнүндө эмнени бorшиңиз керек: тарых, негизги модулдар, Java EE менен салыштыруу - 7

3. Жазгы компоненттер

Эми жазды түзгөн алHowтар ​​жөнүндө бир аз сүйлөшөлү.

Жазгы рамка

Бул заманбап Java негизиндеги ишкана тиркемелери үчүн комплекстүү программалоону жана конфигурациялоо моделин камсыз кылган негизги модул – каалаган жайылтуу платформасында. Ал көптөгөн негизги (негизги) Жаз технологияларын камтыйт :
  • негизги - IoC (башкаруу инversionсы) жана DI (көз карандылык инъекциясы) концепцияларын ишке ашырган негизги функционалдуулук ;
  • AOP - Aspect-Oriented Programming - акырына чейин логиканы ишке ашырууга багытталган аспектиге багытталган программалоо;
  • MVC жана WebFlux - веб өз ара аракеттенүү үчүн алHowтар;
  • JDBC , ORM - маалымат базалары менен иштөө технологиялары;
  • Тест - жазгы контейнер маалыматтарын ачык-айкын, татаал тестирлөө үчүн функционалдуулук;
  • SpEL - Spring Expression Language - Жазгы экспрессия тor;
  • жана башкалар.

Жазгы бут

Колдонмонун баштапкы орнотууларын азайтуу жана Spring колдонмонун элементтерин автоматтык түрдө конфигурациялоо аркылуу Жазга негизделген тиркемелерди түзүүнү жөнөкөйлөтөт. Жазгы жүктөөнү 5 мүнөттө баштоонун мисалы

Жазгы маалыматтар

Маалыматтарга жетүү технологияларын, реляциялык жана реляциялык эмес маалымат базаларын колдонууну кыйла жөнөкөйлөтөт (кайталануучу codeду жок кылат жана маалыматтар менен өз ара аракеттенүүнү жөнөкөйлөтөт). Бул макалада жазгы маалыматтарды туташтыруу боюнча жакшы окуу куралы бар.

Жазгы булут

Ал микросервис архитектурасында колдонулат, микросервистердин бири-бири менен өз ара аракеттенүүсүн жөнөкөйлөштүрүү жана AWS , Azure жана башкалар сыяктуу булут платформаларында тиркемелерди жайылтууну автоматташтыруу. Жазгы булут боюнча кеңири окуу куралын бул жерден көрүңүз , бирок мен бул тема оңой эмес жана жогорку даражадагы адистерге багытталгандыгын эскертем.

Жазгы коопсуздук

Колдонмо үчүн күчтүү жана өзгөчөлөштүрүлүүчү аутентификация (аныктыгын текшерүү) жана мүмкүндүк алууну башкаруу (авторизация) куралын камсыз кылат. Бул посттон Spring Securityти тиркемеңизге туташтыруунун жөнөкөй мисалын таба аласыз . Жаз жөнүндө эмнени бorшиңиз керек: тарых, негизги модулдар, Java EE менен салыштыруу - 8

Жазгы GraphQL

Бул модуль GraphQL Java-да курулган жазгы тиркемелерди колдоону камсыз кылат. GraphQL - бул API'лер үчүн сурам тor, ал кардарларга керектүү маалыматтардын чектелген топтомун суроого мүмкүндүк берет, ал өз кезегинде маалыматты чектелген сандагы сурамдарда чогултууга мүмкүндүк берет. Эгер сиз JPA менен мурдатан тааныш болсоңуз, окшош (же ошол эле) түшүнүк менен EntityGraph менен таанышкан болушуңуз мүмкүн. Сиз бул жерден GraphQL жөнүндө көбүрөөк окуй аласыз .

Жазгы сессия

Жазгы алHowтын бул бөлүгү колдонуучу сессиясынын маалыматын башкаруу үчүн API'лерди жана ишке ашырууларды камсыз кылат (колдонуучунун сессиясынын маалыматтары Redis , MongoDb , HazelCast ж.б. сыяктуу туруктуу сактагычта сакталат ). Жазгы сессияны колдонуунун мисалын бул жерден тапса болот .

Жазгы интеграция

Бул модул жазга негизделген тиркемелерде билдирүү алмашууну жөнөкөйлөтүү жана декларативдик адаптер аркылуу тышкы системалар менен интеграцияны колдоо үчүн иштелип чыккан. Бул адаптерлер алыстан башкаруу, билдирүү жөнөтүү жана пландоо үчүн Springтин колдоосуна караганда абстракциянын жогорку деңгээлин камсыз кылат. Толук макала .

Жазгы эс алуу

REST API иштеп чыгууну жөнөкөйлөтүүчү инструменттердин бай топтомун камсыз кылат: суроо-талаптарды багыттоо, JSON/XMLди керектүү типтеги an objectтерге айландыруу жана башкалар. Жаздагы RESTful кызматынын мисалын бул материалдан тапса болот .

Жазгы желе агымы

Spring Web Flow Spring MVCге негизделген жана веб тиркемесинин "агымдарын" ишке ашырууга мүмкүндүк берет. Мындай агымдар колдонуучуну кандайдыр бир бизнес тапшырманы аткарууга жетектөөчү кадамдардын ырааттуулугун камтыйт. Алар бир нече HTTP суроо-талаптарын камтыйт, абалды билдирет, транзакциялык маалыматтар менен иштешет, кайра колдонууга болот жана динамикалуу жана туруктуу мүнөзгө ээ болушу мүмкүн. Spring Web Flow туташтыруунун мисалын англис тorндеги бул колдонмодон көрүүгө болот .

Spring WebServices

Бул модул XML пайдалуу жүктөрдү башкаруунун көптөгөн жолдорунун бирин колдонуу менен ийкемдүү веб-кызматтарды түзүүгө мүмкүндүк берүү менен келишимге негизделген SOAP кызматтарын иштеп чыгууну жеңилдетүү үчүн иштелип чыккан. SOAP - Simple Object Access Protocol - Объекттерге жетүү үчүн жөнөкөй протокол.

Жаз HATEOAS

Модуль Spring жана өзгөчө Spring MVC менен иштөөдө HATEOAS принцибин карманган REST контроллерлорун түзүүнү жеңилдетүү үчүн кээ бир API'лерди камсыз кылат. HATEOAS - Гипермедиа Колдонмо абалынын кыймылдаткычы катары - Гипермедиа колдонмо абалынын кыймылдаткычы катары. Бул Жаз китепканасынын колдонулушун бул жерден көрө аласыз .

Жаз партиясы

Бул модуль корпоративдик системалардын күнүмдүк иштеши үчүн өтө маанилүү болгон маалыматтарды пакеттик иштетүү (маалыматтар чоң бөлүктөрдө - партиялар менен иштетилгенде) үчүн функцияны камсыз кылат. Spring Batch катталуу/көзөмөл, транзакцияларды башкаруу, жумушту кайра иштетүү статистикасы, жумушту кайра баштоо, өткөрүп жиберүү жана ресурстарды башкарууну камтыган чоң көлөмдөгү жазууларды иштетүү үчүн зарыл болгон кайталануучу функцияларды берет. Spring Batch боюнча кызыктуу серепти бул шилтемеден таба аласыз .

Жаз AMQP

Модуль AMQP негизиндеги билдирүү чечимдерин иштеп чыгуу үчүн жазгы негизги түшүнүктөрдү колдонот. Ал билдирүүлөрдү жөнөтүү жана кабыл алуу үчүн жогорку деңгээлдеги абстракция катары калыпты камсыз кылат. Ал ошондой эле угуучу контейнери менен билдирүүгө негизделген POJOларды колдоону камсыз кылат. AMQP - Advanced Message Queuing Protocol - Advanced Message Queuing Protocol. Долбоор эки бөлүктөн турат: spring-amqp - бул базалык абстракция, ал эми жаз-коён - RabbitMQ үчүн ишке ашыруу . Spring колдонуу менен RabbitMQ байланышы менен мисал Жаз жөнүндө эмнени бorшиңиз керек: тарых, негизги модулдар, Java EE менен салыштыруу - 9

Апачи Кафка үчүн жаз

Бул долбоор Кафка негизиндеги кабарлашуу чечимдерин иштеп чыгуу үчүн Жаздын негизги концепцияларын колдонот . Шаблон билдирүүлөрдү жөнөтүү үчүн жогорку деңгээлдеги абстракция катары берилген. Ал ошондой эле керектүү annotationлары жана угуучу контейнери бар билдирүүгө негизделген POJOларды колдоону камсыз кылат. Бул жерде Spring AMQP менен так окшоштук бар, бирок бул модул Кафка үчүн атайын ылайыкташтырылган. Жазгы Кафканы туташтыруунун мисалын бул жерден көрүүгө болот .

Spring CredHub

Cloud Foundry платформасында иштеген CredHub serverинен эсептик дайындарды сактоо, алуу жана жок кылуу үчүн кардар тарабынан колдоо көрсөтөт . CredHub - ар кандай түрдөгү эсептик дайындарды коопсуз сактоо, түзүү, алуу жана жок кылуу үчүн API менен камсыз кылат. Spring CredHub CredHub API үчүн Java байланышын камсыздайт, бул жазгы тиркемелерди CredHub менен интеграциялоону жеңилдетет.

Жаз FLO

Бул JavaScript китепканасы, ал түтүктөр үчүн жөнөкөй HTML5 орнотулган визуалдык дизайнерди жана агымды жана пакеттик маалыматтарды көзөмөлдөө үчүн жөнөкөй графиктерди сунуш кылат. Бул технологиянын демосу шилтемедеги видеодо .

Жазгы LDAP

Бул китепкана LDAP операцияларын жөнөкөйлөштүрөт жана Spring JdbcTemplateге негизделген. АлHow контекстти издөө жана жабуу, натыйжаларды көрүү, codeдоо/деcodeдоо баалуулуктары, чыпкалар жана башка көп нерселерге мүмкүндүк берет (Spring Jdbc сыяктуу эле принциптерге негизделген) Жазгы LDAPтын үлгүсүн бул жерден тапса болот .

Spring Roo

Бул модуль жазгы тиркемеңизди түзүп, башкара турган RAD куралын камсыз кылат. Анын максаты Java иштеп чыгуучулардын өндүрүмдүүлүгүн жогорулатуу болуп саналат. Ал колдонмоңуздун бизнес логикасын жаза алbyte, бирок конфигурацияны жана инфраструктураны чече алат.

Spring Shell

Китепкана Spring Shell банкаларына таянуу жана өз буйруктарыңызды кошуу менен толук өзгөчөлөнгөн кабык (буйрук сабы деп да белгилүү) тиркемесин түзүүнү жеңилдетет (бул жазгы буурчактагы ыкмалар катары келет). Буйрук сабы тиркемесин түзүү, мисалы, долбоордун REST API менен өз ара аракеттенүү же жергorктүү файл мазмуну менен иштөө үчүн пайдалуу болушу мүмкүн. Бул жерде ошондой эле , бул жерде дагы окуйбуз .

Жазгы мамлекеттик машина

Бул модул тиркемени иштеп чыгуучуларга жазгы тиркемелер менен мамлекеттик машина түшүнүктөрүн колдонууга мүмкүндүк берет . Бул функцияны колдонуунун кеңири мисалын бул жерден жана бул жерден тапса болот .

Spring Vault

Spring Vault тааныш жазгы абстракцияларды жана сырларга кирүү, сактоо жана жокко чыгаруу үчүн кардар тарабынан колдоо көрсөтөт. Ал Vault менен өз ара аракеттенүү үчүн төмөнкү деңгээлдеги жана жогорку деңгээлдеги абстракцияларды сунуштайт , бул колдонуучуну инфраструктура көйгөйлөрүнөн бошотот. Spring Vault ишке ашыруунун мисалы Жаз жөнүндө эмнени бorшиңиз керек: тарых, негизги модулдар, Java EE менен салыштыруу - 10"Мен мунун баарын үйрөнүшүм керекпи?" – деп таң калып сурайсың. Коркпо! Бул андай эмес! Тагыраак айтканда, андай эмес. Бул жазында жеткorктүү технологиялардын толук тизмеси болгон. Баштоочу бorши керек болгон технологиялардын тизмеси кыйла жөнөкөй:
  • Жаз өзөгү
  • Жазгы бут
  • Spring Web (MVC жана REST)
  • Жазгы маалыматтар (Жазгы ORM, Жазгы JDBC, Жазгы JPA)
  • Жазгы сыноо
Долбоорлордо көп кездешкен башка технологиялар да бар, бирок алардын татаалдыгынан улам, алар менен адатта жашыл үйрөнчүктөр эмес, тажрыйбалуу иштеп чыгуучулар алектенишет. Бирок, үйрөнчүктөр үчүн, жок эле дегенде, жалпы түшүнүккө ээ болуу пайдалуу:
  • Жазгы коопсуздук
  • Жаз AOP
  • Жазгы булут
Башка технологиялар алда канча сейрек колдонулат, ошондуктан белгилүү бир долбоордун үстүндө иштөө үчүн аларды олуттуу изилдөө керек. Айтмакчы, сиз менин башка макаламдан Java иштеп чыгуучусу бorши керек болгон толук тизмени таба аласыз. Бүгүн мен үчүн баары ушул, жакында көрүшкөнчө! Жаз жөнүндө эмнени бorшиңиз керек: тарых, негизги модулдар, Java EE менен салыштыруу - 11
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION