Ինչու՞ սովորել Java և ինչպես դա անել արդյունավետ: Յանդեքսի հաշվետվություն

Ինչպե՞ս է Java-ն տարբերվում այլ հայտնի լեզուներից: Ինչու՞ Java-ն պետք է լինի առաջին լեզուն, որը պետք է սովորել: Եկեք ստեղծենք մի ծրագիր, որը կօգնի ձեզ սովորել Java թե՛ զրոյից, թե՛ այլ լեզուներով ծրագրավորման հմտություններ կիրառելու միջոցով: Եկեք թվարկենք Java-ում արտադրական կոդ ստեղծելու և այլ լեզուներով մշակելու տարբերությունները: Միխայիլ Զատեպյակինը այս զեկույցը կարդաց ապագա մասնակիցների հանդիպման ժամանակ պրակտիկա Yandex-ը և այլ սկսնակ մշակողները՝ Java Junior meetup:


-Բարև բոլորին, ես Միշա եմ: Ես Yandex.Market-ի ծրագրավորող եմ, և այսօր ձեզ կասեմ, թե ինչու սովորել Java և ինչպես դա անել արդյունավետ: Դուք կարող եք ողջամիտ հարց տալ. ինչու՞ եմ ես պատմելու այս պատմությունը, և ոչ թե երկար տարիների փորձ ունեցող ուժեղ մշակողը: Փաստն այն է, որ ես ինքս վերջերս ուսումնասիրել եմ Java-ն՝ մոտ մեկուկես տարի առաջ, այնպես որ ես դեռ հիշում եմ, թե ինչպիսին էր այն և ինչ որոգայթներ կան:

Մեկ տարի առաջ ես պրակտիկա անցա Yandex.Market-ում։ Ես մշակել եմ բեքենդը Beru-ի համար, հենց շուկայի համար, հավանաբար դուք օգտագործել եք այն: Հիմա շարունակում եմ աշխատել այնտեղ՝ այլ թիմում։ Մենք Yandex.Market-ի համար վերլուծական հարթակ ենք ստեղծում բիզնես գործընկերների համար:

Ինչու՞ սովորել Java և ինչպես դա անել արդյունավետ: Յանդեքսի հաշվետվություն

Եկեք սկսենք. Ինչու՞ սովորել Java-ն գործնական տեսանկյունից: Փաստն այն է, որ Java-ն շատ հայտնի ծրագրավորման լեզու է։ Այն ունի շատ մեծ համայնք։

Օրինակ, կա այսպիսի TIOBE ինդեքս՝ ծրագրավորման լեզուների հանրաճանաչության հանրաճանաչ ինդեքս, և Java-ն այնտեղ առաջին տեղն է զբաղեցնում։ Նաև աշխատանքի կայքերում հավանաբար կնկատեք, որ թափուր աշխատատեղերի մեծ մասը վերաբերում է Java-ին, այսինքն՝ զարգանալով Java-ում, դուք միշտ կարող եք աշխատանք գտնել։

Քանի որ համայնքը շատ մեծ է, ձեր ցանկացած հարցի պատասխանը կգտնեք որոշ Stack Overflow-ում կամ այլ կայքերում: Բացի այդ, Java-ում զարգանալիս դուք իրականում կոդ եք գրում JVM-ում, այնպես որ կարող եք հեշտությամբ անցնել Kotlin, Scala և JVM օգտագործող այլ լեզուների:

Ինչու՞ սովորել Java և ինչպես դա անել արդյունավետ: Յանդեքսի հաշվետվություն

Ի՞նչն է լավ Java-ի մասին գաղափարական տեսանկյունից: Կան տարբեր ծրագրավորման լեզուներ։ Նրանք տարբեր խնդիրներ են լուծում, դուք դա գիտեք։ Օրինակ, Python-ը հիանալի է մեկ տողով սկրիպտներ գրելու համար՝ արագ խնդիրներ լուծելու համար:

Դրական կողմն այն է, որ դուք կարող եք լիովին վերահսկել գործարկվող կոդը: Օրինակ, մենք ունենք մեքենաներ, Yandex առանց վարորդի մեքենաներ, դրանց կոդը գրված է պլյուսներով։ Ինչո՞ւ։ Java-ն ունի նման բան՝ Աղբահան։ Այն մաքրում է RAM-ը ավելորդ օբյեկտներից: Այս բանը սկսվում է ինքնաբուխ և անում է stop-the-world, այսինքն՝ դադարեցնում է ծրագրի մնացած մասը և գնում է օբյեկտների հաշվման, օբյեկտների հիշողությունը մաքրելու: Եթե ​​նման բան աշխատում է անօդաչու թռչող սարքում, ապա դա թույն չէ։ Ձեր անօդաչու թռչող սարքը ուղիղ կքշի, այս պահին մաքրեք հիշողությունը և ընդհանրապես ճանապարհին չնայեք։ Հետեւաբար, դրոնը գրված է պլյուսների վրա:

Ինչու՞ սովորել Java և ինչպես դա անել արդյունավետ: Յանդեքսի հաշվետվություն

Ի՞նչ խնդիրներ է լուծում Java-ն: Այն հիմնականում մեծ ծրագրեր մշակելու լեզու է, որոնք գրվում են տարիների ընթացքում, տասնյակ կամ հարյուրավոր մարդկանց կողմից: Մասնավորապես, Yandex.Market-ում շատ backend-ը գրված է Java-ով: Մենք մի քանի քաղաքներում բաշխված թիմ ունենք՝ յուրաքանչյուրում տասը հոգի։ Իսկ կոդը հեշտ է պահպանել, այն ապահովվել է տասը տարի կամ ավելի, և միևնույն ժամանակ նոր մարդիկ են մտնում և հասկանում այս կոդը։

Ինչ հատկանիշներ պետք է ունենա լեզուն, որպեսզի դրանում առկա ծածկագիրը հեշտությամբ ապահովվի և այն հեշտությամբ մշակվի մեծ թիմերում: Առաջին հերթին այն պետք է լինի ընթեռնելի կոդ, և հեշտ լինի բարդ ճարտարապետական ​​լուծումներ իրականացնել։ Այսինքն՝ պետք է հեշտ լինի գրել բարձր մակարդակի աբստրակցիաներ և այլն։ Այս ամենը Java-ն է տալիս մեզ։ Սա օբյեկտի վրա հիմնված լեզու է: Իրոք, հեշտ է իրականացնել բարձր մակարդակի աբստրակցիաներ և բարդ ճարտարապետություններ:

Կան նաև շատ շրջանակներ և գրադարաններ Java-ի համար, քանի որ լեզուն ավելի քան 15 տարեկան է։ Այս ընթացքում դրա վրա գրված էր այն ամենը, ինչ կարելի էր գրել, ուստի կան տոննա գրադարաններ այն ամենի համար, ինչ ձեզ կարող է անհրաժեշտ լինել:

Ինչու՞ սովորել Java և ինչպես դա անել արդյունավետ: Յանդեքսի հաշվետվություն

Ի՞նչ հիմնական հմտություններ, ըստ իս, պետք է ունենա JA սկսնակ խաղացողը: Առաջին հերթին սա Java-ի հիմնական լեզվի իմացությունն է: Հաջորդը կախվածության ներարկման շրջանակն է: Այս մասին ավելի մանրամասն կխոսի հաջորդ բանախոսը՝ Կիրիլը։ Շատ չեմ խորանա. Հաջորդը ճարտարապետությունն ու դիզայնի նախշերն են: Մեծ հավելվածներ գրելու համար մենք պետք է կարողանանք ճարտարապետորեն գեղեցիկ կոդ գրել։ Եվ սա մի տեսակ SQL կամ ORM է տվյալների բազայի հետ աշխատելու առաջադրանքների համար: Եվ սա ավելի շատ վերաբերում է հետին պլանին:

Ինչու՞ սովորել Java և ինչպես դա անել արդյունավետ: Յանդեքսի հաշվետվություն

Գնա՛ Java միջուկը. Ես իսկապես այստեղ Ամերիկան ​​չեմ հայտնաբերի, դուք պետք է իմանաք հենց լեզուն: Ինչի վրա պետք է ուշադրություն դարձնել. Նախ, Java-ն վերջին տարիներին թողարկել է շատ տարբերակներ, այսինքն ՝ 2014-2015 թվականներին թողարկվել է յոթերորդը, հետո ութերորդը, իններորդը, տասներորդը, շատ նոր տարբերակներ, և դրանցում ներդրվել են շատ նոր թույն բաներ: Օրինակ, Java Stream API-ն, lambda-ն և այլն: Շատ զով, թարմ, զով բաներ, որոնք օգտագործվում են արտադրության կոդում, ինչի մասին են նրանք հարցնում հարցազրույցներում և որոնք դուք պետք է իմանաք: Հետեւաբար, դուք չպետք է գիրք վերցնեք Java-4 գրադարանի դարակից և գնաք սովորեք այն: Սա է մեր ծրագիրը. մենք սովորում ենք Java-8 կամ ավելի բարձր:

Մենք մեծ ուշադրություն ենք դարձնում այնպիսի նորարարություններին, ինչպիսիք են Stream API, var և այլն: Դրանք հարցվում են հարցազրույցների ժամանակ և անընդհատ օգտագործվում են արտադրության մեջ: Այսինքն, Stream API-ն շատ ավելի սառը է, քան loops-ը, ընդհանուր առմամբ, շատ թույն բան է: Համոզվեք, որ ուշադրություն դարձրեք.

Եվ կան բոլոր տեսակի բաներ, ինչպիսիք են կրկնողները, Բացառությունները և այլն: Բաներ, որոնք ձեզ անկարևոր են թվում, քանի դեռ դուք ինքներդ եք գրում մի փոքր կոդ: Ձեզ պետք չեն այս Բացառությունները, այնուամենայնիվ ո՞ւմ են դրանք պետք։ Բայց հարցազրույցների ժամանակ նրանց անպայման կհարցնեն, դրանք ձեզ անպայման օգտակար կլինեն արտադրության մեջ։ Ընդհանրապես, պետք է ուշադրություն դարձնել Բացառություններին, կրկնողներին և այլ բաներին։

Ինչու՞ սովորել Java և ինչպես դա անել արդյունավետ: Յանդեքսի հաշվետվություն

Տվյալների կառուցվածքներ. Դուք չեք կարող գնալ առանց կառույցների, բայց հիանալի կլինի, եթե պարզապես չիմանաք, որ կան հավաքածուներ, բառարաններ և թերթիկներ: Եվ նաև կառույցների տարբեր իրականացումներ։ Օրինակ, Java-ի նույն բառարանն ունի բազմաթիվ իրականացումներ, ներառյալ HashMap-ը և TreeMap-ը: Նրանք տարբեր ասիմպտոտիկներ ունեն, ներսում այլ կերպ են կառուցված։ Դուք պետք է իմանաք, թե ինչպես են դրանք տարբերվում և երբ օգտագործել դրանցից մեկը:

Նաև շատ լավ կլինի, եթե իմանաք, թե ինչպես են այս տվյալների կառուցվածքները աշխատում ներսում: Այսինքն՝ հեշտ չէ իմանալ նրանց ասիմպտոտիկները՝ որքանով է աշխատում խաղադրույքը, որքան ժամանակ է աշխատում անցաթուղթը, բայց ինչպես է գործում կառուցվածքը ներսում, օրինակ՝ ինչ է դույլը HashMap-ում:

Արժե նաև ուշադրություն դարձնել ծառերին և գրաֆիկներին: Սրանք այնպիսի բաներ են, որոնք այնքան էլ տարածված չեն արտադրության կոդում, բայց դրանք հայտնի են հարցազրույցներում: Համապատասխանաբար, դուք պետք է կարողանաք անցնել ծառերի, գրաֆիկների լայնությամբ և խորությամբ: Սրանք բոլորը պարզ ալգորիթմներ են:

Հենց որ սկսեք գրել որևէ մեծ կոդ, բարդ, օգտագործելով գրադարաններ, բազմակարգ կոդ, կհասկանաք, որ ձեզ համար դժվար է առանց համակարգեր կառուցելու և կախվածություններ լուծելու: Սրանք հիմնականում Maven-ն ու Gradle-ն են: Նրանք թույլ են տալիս մեկ տողով գրադարաններ ներմուծել ձեր նախագիծ: Այսինքն՝ գրում ես մեկ տողով xml և գրադարաններ ներմուծում նախագծի մեջ։ Հիանալի համակարգեր. Նրանք մոտավորապես նույնն են, օգտագործեք կամ մեկը՝ Maven կամ Gradle:

Հաջորդը `տարբերակների կառավարման մի տեսակ համակարգ: Ես խորհուրդ եմ տալիս Git-ին, քանի որ այն հայտնի է և կան տոննա ձեռնարկներ: Գրեթե բոլորն օգտագործում են Git-ը, դա հիանալի բան է, առանց դրա չես կարող ապրել:

Եվ ինչ-որ զարգացման միջավայր: Ես խորհուրդ եմ տալիս IntelliJ Idea-ին: Այն մեծապես արագացնում է զարգացման գործընթացը, շատ է օգնում ձեզ, գրում է կաթսայի բոլոր ծածկագիրը ձեզ համար, ընդհանուր առմամբ, դա հիանալի է:

Ինչու՞ սովորել Java և ինչպես դա անել արդյունավետ: Յանդեքսի հաշվետվություն

Հղումներ սլայդից. SQLZOO, habrapost

SQL. Մի փոքր հետինտերերի մասին: Այստեղ իրականում մի զավեշտալի դեպք կար. Իմ երկրորդ պրակտիկայի հարցազրույցից երկու օր առաջ մի HR աղջիկ զանգահարեց ինձ և ասաց, որ երկու օրից ինձ կհարցնեն SQL-ի և HTTP-ի մասին, ես պետք է սովորեմ այն: Եվ ես գրեթե ոչինչ չգիտեի SQL-ի կամ HTTP-ի մասին: Եվ ես գտա այս հիանալի կայքը - SQLZOO. Ես դրա վրա SQL սովորեցի 12 ժամում, նկատի ունեմ SQL շարահյուսությունը, ինչպես գրել SELECT հարցումներ, JOIN և այլն։ Շատ լավ կայք է, խորհուրդ եմ տալիս։ Փաստորեն, 12 ժամում ես սովորեցի այն ամենի 90%-ը, ինչ հիմա գիտեմ:

Եվ նաև հիանալի է իմանալ տվյալների բազայի ճարտարապետությունը: Սրանք բոլոր տեսակի բանալիներ են, ինդեքսներ, նորմալացում: Այս մասին մի շարք գրառումներ կան Habré-ում։

Ինչու՞ սովորել Java և ինչպես դա անել արդյունավետ: Յանդեքսի հաշվետվություն

Java-ում, բացի SQL-ից, կան բոլոր տեսակի Օբյեկտ-հարաբերական քարտեզագրման համակարգեր, ինչպիսին է JPA-ն: Որոշ ծածկագիր կա. Առաջին մեթոդում կա SQL կոդ՝ SELECT id name FROM info.users WHERE id IN userIds-ից: Օգտագործողների տվյալների բազայից, աղյուսակից ստացվում են նրանց ID-ները և անունները։

Հաջորդը, կա որոշակի քարտեզագրող, որը օբյեկտը հիմքից վերածում է Java օբյեկտի: Եվ ներքևում կա երրորդ մեթոդ, որն իրականում կատարում է այս կոդը: Այս ամենը JPA-ի միջոցով կարելի է փոխարինել մեկ տողով, որը գրված է ստորև։ Այն նույն բանն է անում՝ գտնել All ByIdIn-ը: Այսինքն, մեթոդի անվան հիման վրա այն ձեզ համար ստեղծում է SQL հարցում:

Շատ թույն բան. Ես ինքս, երբ չգիտեի SQL-ն, օգտագործում էի JPA: Ընդհանուր առմամբ, ուշադրություն դարձրեք. Եթե ​​դուք չափազանց ծույլ եք սովորել SQL, ապա դա աղետ է: Եվ, ընդհանրապես, կրակ.

Ինչու՞ սովորել Java և ինչպես դա անել արդյունավետ: Յանդեքսի հաշվետվություն

Գարուն։ Ո՞վ է լսել Spring Framework-ի նման բանի մասին: Տեսնու՞մ եք քանի հոգի եք։ Ոչ առանց պատճառի. Գարունը ներառված է Java backend-ի յուրաքանչյուր երկրորդ թափուր աշխատատեղի պահանջներում: Առանց դրա, իսկապես ոչ մի տեղ մեծ զարգացման մեջ չկա: Ի՞նչ է Գարունը: Առաջին հերթին, սա կախվածության ներարկման շրջանակ է: Այս մասին էլ կպատմի հաջորդ խոսնակը. Բայց մի խոսքով, սա մի բան է, որը թույլ է տալիս հեշտացնել որոշ դասերի կախվածությունները մյուսների վրա ներմուծելը: Այսինքն՝ կախվածությունների մասին իմացությունը պարզեցված է։

Spring Boot-ը Spring-ի մի կտոր է, որը թույլ է տալիս գործարկել ձեր սերվերի հավելվածը մեկ կոճակով: Դուք գնում եք THID, սեղմում եք մի քանի կոճակ և այժմ ունեք ձեր սերվերի հավելվածը և աշխատում է localhost 8080-ում: Այսինքն, դուք դեռ չեք գրել կոդի մեկ տող, բայց այն արդեն աշխատում է: Շատ թույն բան. Եթե ​​դուք ինչ-որ բան գրում եք ձեր սեփականը, կրակեք:

Գարունը շատ մեծ շրջանակ է: Այն ոչ միայն վերցնում է ձեր սերվերի հավելվածը և լուծում է կախվածության ներարկումը: Այն թույլ է տալիս անել մի շարք բաներ, ներառյալ REST API մեթոդների ստեղծումը: Այսինքն՝ դուք գրել եք ինչ-որ մեթոդ և դրան կցել «Get mapping» անոտացիան։ Եվ հիմա դուք արդեն ունեք որոշ մեթոդ localhost-ում, որը գրում է Hello world ձեզ: Երկու տող կոդ և այն աշխատում է: Թույն իրեր։

Գարունը նաև հեշտացնում է գրավոր թեստերը: Չկա ճանապարհ առանց փորձարկման մեծ զարգացման մեջ: Կոդը պետք է փորձարկվի: Այս նպատակով Java-ն ունի JUnit 5 հիանալի գրադարան: Եվ ընդհանրապես JUnit-ը, բայց վերջին տարբերակը հինգերորդն է: Ամեն ինչ կա թեստավորման համար, ամեն տեսակ պնդումներ և այլ բաներ։

Եվ կա Mockito-ի հիանալի շրջանակ: Պատկերացրեք, որ դուք ունեք որոշ գործառույթներ, որոնք ցանկանում եք փորձարկել: Ֆունկցիոնալությունը շատ բաներ է անում, այդ թվում, ինչ-որ տեղ մեջտեղում, այն մուտք է գործում VKontakte ձեր ID-ով, օրինակ, և ID-ից ստանում է VKontakte-ի օգտատիրոջ անունը և ազգանունը: Դուք հավանաբար VKontakte-ին չեք ներառի թեստերում, դա տարօրինակ է: Բայց դուք պետք է փորձարկեք ֆունկցիոնալությունը, այնպես որ դուք ստեղծեցիք այս դասը՝ օգտագործելով Mockito, mok it, իմիտացնելով այն:

Դուք կասեք, որ երբ հարցումը գալիս է այս դասին այս կամ այն ​​ID-ով, այն վերադարձնում է ինչ-որ ազգանուն, օրինակ՝ Վասյա Պուպկին։ Եվ դա կաշխատի: Այսինքն՝ դուք կփորձարկեք բոլոր ֆունկցիոնալությունը mok one դասի համար։ Շատ թույն բան.

Ինչու՞ սովորել Java և ինչպես դա անել արդյունավետ: Յանդեքսի հաշվետվություն

Հղում սլայդից

Դիզայնի նախշեր. Ինչ է դա? Սրանք կաղապարներ են մշակման ընթացքում առաջացող բնորոշ խնդիրների լուծման համար: Զարգացման ընթացքում հաճախ առաջանում են նույնական կամ նմանատիպ խնդիրներ, որոնք լավ կլիներ ինչ-որ կերպ լավ լուծել: Հետևաբար, մարդիկ հանդես եկան լավագույն փորձով, որոշակի ձևանմուշներով, թե ինչպես լուծել այդ խնդիրները:

Ամենահայտնի օրինաչափություններով կայք կա՝ refactoring.guru, կարող եք կարդալ այն, իմանալ, թե ինչ օրինաչափություններ կան, կարդալ մի փունջ տեսություն։ Խնդիրն այն է, որ այն գործնականում անօգուտ է: Իրականում, առանց պրակտիկայի նախշերը առանձնապես օգտակար չեն:

Դուք կլսեք որոշ նախշերի մասին, ինչպիսիք են Singleton-ը կամ Builder-ը: Ո՞վ է լսել այս խոսքերը: Շատ մարդիկ. Կան այնպիսի պարզ նախշեր, որոնք կարող եք ինքներդ իրականացնել։ Բայց նախշերի մեծ մասը՝ ռազմավարություն, գործարան, ֆասադ, պարզ չէ, թե որտեղ կիրառել դրանք:

Եվ քանի դեռ որևէ այլ անձի կոդում գործնականում չտեսնեք մի տեղ, որտեղ կիրառվում է այս օրինաչափությունը, դուք ինքներդ չեք կարողանա այն կիրառել: Հետեւաբար, պրակտիկան շատ կարեւոր է նախշերով: Եվ միայն refactoring.guru-ում դրանց մասին կարդալը շատ օգտակար չէ, բայց հաստատ արժե անել:

Ինչու՞ սովորել Java և ինչպես դա անել արդյունավետ: Յանդեքսի հաշվետվություն

Ինչու են անհրաժեշտ նախշերը: Ենթադրենք, դուք ունեք որոշակի Օգտատերերի դաս: Այն ունի ID և անուն: Յուրաքանչյուր օգտատեր պետք է ունենա և՛ ID, և՛ անուն: Վերևի ձախ մասում դասասենյակն է:

Որո՞նք են Օգտատիրոջ սկզբնականացման ուղիները: Երկու տարբերակ կա՝ կա՛մ կոնստրուկտոր, կա՛մ սեթեր: Որո՞նք են երկու մոտեցումների թերությունները:

Կոնստրուկտոր. նոր օգտվող (7, «Բոնդ»), լավ: Հիմա ասենք, որ մենք չունենք Օգտվողի դաս, այլ ունենք մեկ այլ դասակարգ՝ յոթ թվային դաշտերով։ Դուք կունենաք յոթ հաջորդական թվեր պարունակող կոնստրուկտոր: Անհասկանալի է, թե ինչ թվեր են դրանք, և դրանցից որոնք որ սեփականությանը են պատկանում։ Դիզայները մեծ չէ.

Երկրորդ տարբերակը սեթերն է: Դուք հստակ գրում եք՝ setId(7), setName(“Bond”): Դուք հասկանում եք, թե որ գույքը որ դաշտին է պատկանում։ Բայց սեթերը խնդիր ունի. Նախ, դուք կարող եք մոռանալ ինչ-որ բան նշանակել, և երկրորդը, ձեր օբյեկտը պարզվում է, որ փոփոխական է: Սա թեման անվտանգ չէ և մի փոքր նվազեցնում է կոդի ընթեռնելիությունը: Ահա թե ինչու մարդիկ մի թույն օրինաչափություն են մտածել՝ Շինարար։

Ինչու՞ սովորել Java և ինչպես դա անել արդյունավետ: Յանդեքսի հաշվետվություն

Ինչի՞ մասին է սա։ Փորձենք համատեղել երկու մոտեցումների՝ կարգավորողի և կոնստրուկտորի առավելությունները մեկում: Մենք պատրաստում ենք որոշակի օբյեկտ՝ Builder, որը կունենա նաև Id և Name դաշտեր, որոնք ինքնին կկառուցվեն սեթերի հիման վրա, և որը կունենա Build մեթոդ, որը ձեզ վերադարձնում է նոր Օգտատեր՝ բոլոր պարամետրերով։ Ստանում ենք անփոփոխ առարկա և սեթեր։ Հիասքանչ

Ի՞նչ խնդիրներ կան։ Այստեղ մենք ունենք դասական Builder: Խնդիրն այն է, որ մենք դեռ կարող ենք մոռանալ ստուգել ինչ-որ ոլորտում: Իսկ եթե մենք մոռացել ենք այցելել ID-ն, ապա այս դեպքում Builder-ում այն ​​զրոյականացվում է, քանի որ int տեսակը զրոյական չէ։ Իսկ եթե անունը դարձնենք «Բոնդ» և մոռանանք այցելել ID գրասենյակ, կունենանք «0» id-ով և «Բոնդ» անունով նոր Օգտատեր: Լավ չէ.

Փորձենք պայքարել սրա դեմ։ Builder-ում մենք կփոխենք int-ը int-ի, որպեսզի այն չեղյալ լինի: Հիմա ամեն ինչ հիանալի է։

Ինչու՞ սովորել Java և ինչպես դա անել արդյունավետ: Յանդեքսի հաշվետվություն

Եթե ​​փորձենք ստեղծել «Բոնդ» անունով Օգտատեր՝ մոռանալով դնել նրա ID-ն, կստանանք զրոյական ցուցիչի բացառություն, քանի որ ID-ն զրոյական չէ, իսկ Builder-ն ունի զրոյական, մասնավորապես՝ ցուցիչի բացառություն։

Ինչու՞ սովորել Java և ինչպես դա անել արդյունավետ: Յանդեքսի հաշվետվություն

Բայց մենք դեռ կարող ենք մոռանալ անուն դնել, այնպես որ մենք օբյեկտի վերարտադրումը սահմանեցինք null: Այժմ, երբ մենք կառուցում ենք մեր օբյեկտը Builder-ից, այն ստուգում է, որ դաշտը զրոյական չէ: Եվ սա դեռ ամենը չէ։

Դիտարկենք վերջին օրինակը։ Այս դեպքում, եթե մենք ինչ-որ կերպ null դնենք ID-ի գործարկման ժամանակում, լավ կլինի անմիջապես իմանալ, որ դուք դա արել եք, և լավ չէ, որ դուք հիմա սխալվում եք:

Ինչու՞ սովորել Java և ինչպես դա անել արդյունավետ: Յանդեքսի հաշվետվություն

Դուք պետք է սխալ գցեք ոչ թե Օգտատիրոջ ստեղծման պահին, այլ այն ժամանակ, երբ դուք null եք սահմանել ID-ն: Հետևաբար, Builder-ում մենք կփոխենք Setter Integer-ը int-ի, և նա անմիջապես երդվելու է, որ նրանք դուրս են նետել null:

Մի խոսքով, ո՞րն է իմաստը։ Գոյություն ունի Builder-ի պարզ օրինաչափություն, բայց նույնիսկ դրա իրականացումն ունի որոշ նրբություններ, ուստի շատ հաճելի է նայել օրինաչափությունների տարբեր իրականացումներին: Յուրաքանչյուր օրինակ ունի տասնյակ իրականացումներ: Այս ամենը շատ հետաքրքիր է:

Ինչու՞ սովորել Java և ինչպես դա անել արդյունավետ: Յանդեքսի հաշվետվություն

Ինչպե՞ս ենք մենք գրում Builder-ը արտադրության կոդում: Ահա մեր Օգտատերը: Մենք դրան կցում ենք Builder ռոտացիա Lombok գրադարանից, և այն ինքնին մեզ համար ստեղծում է Builder: Այսինքն, մենք ոչ մի կոդ չենք գրում, բայց Java-ն արդեն կարծում է, որ այս դասը ունի Builder, և մենք կարող ենք այն անվանել այսպես.

Ես արդեն ասացի, որ Java-ն ունի գրադարաններ գրեթե ամեն ինչի համար, ներառյալ Lombok-ը, հիանալի գրադարան, որը թույլ է տալիս խուսափել boilerplate գրելուց: Շինարար, ԳԵՏ:

Ինչու՞ սովորել Java և ինչպես դա անել արդյունավետ: Յանդեքսի հաշվետվություն

Նախշերը կարող են լինել ճարտարապետական՝ կապված ոչ միայն մեկ դասի, այլ ամբողջ համակարգի հետ: Համակարգի նախագծման մեջ կա այսպիսի հիանալի սկզբունք՝ միասնական պատասխանատվության սկզբունք: Ինչի՞ մասին է նա խոսում։ Այն փաստը, որ յուրաքանչյուր դաս պետք է պատասխանատու լինի իր որոշ գործառույթների համար: Այս դեպքում մենք ունենք Controller, որը շփվում է օգտվողների, JSON օբյեկտների հետ: Կա Facade, որը JSON օբյեկտները վերածում է մոդելների, որոնց հետ Java հավելվածը կաշխատի: Կա մի ծառայություն, որն ունի բարդ տրամաբանություն, որն աշխատում է այս մոդելների հետ: Կա տվյալների հասանելիության օբյեկտ, որը տեղադրում է այս մոդելները տվյալների բազայում և առբերում դրանք տվյալների բազայից: Եվ կա ինքնին տվյալների բազան: Այսինքն՝ ամեն ինչ մեկ դասարանում չէ, բայց մենք հինգ տարբեր դասեր ենք պատրաստում, և դա մեկ այլ օրինաչափություն է:

Ինչու՞ սովորել Java և ինչպես դա անել արդյունավետ: Յանդեքսի հաշվետվություն

Երբ քիչ թե շատ սովորեք Java-ն, հիանալի կլինի գրել ձեր սեփական նախագիծը, որը կունենա տվյալների բազա, կաշխատի այլ API-ների հետ և կներկայացնի ձեր սերվերի հավելվածը REST API-ի հաճախորդներին: Սա հիանալի բան կլինի ձեր ռեզյումեն ավելացնելու համար, դա կլինի ձեր կրթության հիանալի ավարտը: Սրանով կարող ես գնալ ու աշխատանք գտնել։

Ինչու՞ սովորել Java և ինչպես դա անել արդյունավետ: Յանդեքսի հաշվետվություն

Ահա իմ սերվերի հավելվածի օրինակ: Երկրորդ կուրսում տղաների հետ կուրսային աշխատանք գրեցի։ Մոբայլ հավելված էին գրում միջոցառումներ կազմակերպելու համար։ Այնտեղ օգտատերերը կարող էին մուտք գործել VKontakte-ի միջոցով, քարտեզի վրա կետեր տեղադրել, միջոցառումներ ստեղծել, իրենց ընկերներին հրավիրել դրանց մոտ, պահպանել իրադարձությունների պատկերները և այլն։

Ի՞նչ եմ արել ես նախագծում: Գրել է սերվերային հավելված Spring Boot-ում՝ առանց SQL-ի օգտագործման: Ես նրան չէի ճանաչում, օգտվել եմ JPA-ից։ Ի՞նչ կարող էր դա անել: Մուտք գործեք VK OAuth-2-ի միջոցով: Վերցրեք օգտատիրոջ նշանը, դրանով գնացեք VK, ստուգեք, որ իրական օգտատեր է։ Ստացեք տեղեկություններ օգտվողների մասին VKontakte-ի միջոցով: Այն կարողացավ պահպանել տեղեկատվությունը տվյալների բազայում, նաև JPA-ի միջոցով: Հմտորեն պահեք նկարները և այլ ֆայլերը համակարգչի հիշողության մեջ և պահեք դրանց հղումները տվյալների բազայում: Այն ժամանակ ես չգիտեի, որ տվյալների բազայում կան CLOB օբյեկտներ, ուստի ես դա արեցի այս կերպ. Կար REST API օգտվողների, հաճախորդների հավելվածների համար: Եվ կային միավորի թեստեր հիմնական ֆունկցիոնալության համար:

[...] Java-ի իմ հաջող ուսուցման փոքրիկ օրինակ: Համալսարանում սովորելուս առաջին տարում ինձ դասավանդեցին C# և հասկացա OOP ծրագրավորումը. ինչ են դասերը, ինտերֆեյսները, աբստրակցիան և ինչու են դրանք անհրաժեշտ: Դա ինձ շատ օգնեց։ Առանց դրա, Java սովորելը բավականին դժվար է, պարզ չէ, թե ինչու են անհրաժեշտ դասերը:

Ինչու՞ սովորել Java և ինչպես դա անել արդյունավետ: Յանդեքսի հաշվետվություն

Համալսարանում իմ երկրորդ կուրսում նրանք կրկին դասավանդեցին Java core, բայց ես դրանով չսահմանափակվեցի, ես ինքս գնացի Գարուն ուսումնասիրելու և գրեցի կուրսային աշխատանք, իմ նախագիծը, որը ես վերը նշեցի: Եվ այս ամենի հետ մեկտեղ ես գնացի Yandex-ում պրակտիկա, հարցազրույց անցա և մտա Yandex.Market։ Այնտեղ ես գրեցի Բերուի համար, սա մեր շուկան է, և հենց Yandex.Market-ի համար:

Դրանից հետո՝ վեց ամիս առաջ, ես տեղափոխվեցի մեկ այլ թիմ՝ նույն շուկայի կազմում։ Մենք վերլուծություններ ենք անում բիզնես գործընկերների համար: Մենք վերլուծական հարթակում ենք, մենք երեք հոգի ենք հետնամասում, այնպես որ ես նախագծի վրա շատ մեծ ազդեցություն ունեմ: Շատ հետաքրքիր է, իրականում: Այսինքն՝ մենք իրականում տրամադրում ենք տվյալներ շուկայի վերաբերյալ՝ ինչ վաճառքներ կան, ինչ կատեգորիաներով, ինչ մոդելներով, բիզնես գործընկերների, խոշոր հայտնի ընկերությունների համար։ Եվ մենք ընդամենը երեքն ենք, մենք գրում ենք այս կոդը, և դա շատ հիանալի է:

Շնորհակալություն! Օգտակար հղումներ.
- «Java 8. Սկսնակների ուղեցույց».
- Տվյալների կառուցվածքներ.
- SQLZOO.
- Տվյալների բազայի նորմալացում.
- Դիզայնի նախշեր.
- Դիզայնի նախշերով.
- Մաքուր կոդ.
- Արդյունավետ Java.

Source: www.habr.com

Добавить комментарий