Perchè amparà Java è cumu fà in modu efficace. Rapportu Yandex

Cumu hè Java differente da altre lingue populari? Perchè Java deve esse a prima lingua per amparà? Creemu un pianu chì vi aiuterà à amparà Java da zero è applicà e cumpetenze di prugrammazione in altre lingue. Elenchimu e differenze trà a creazione di codice di produzzione in Java è u sviluppu in altre lingue. Mikhail Zatepyakin leghje stu rapportu in una reunione per i futuri participanti stages Yandex è altri sviluppatori principianti - Java Junior meetup.

Play video

- Salute à tutti, mi chjamu Misha. Sò un sviluppatore di Yandex.Market, è oghje vi dicu perchè amparà Java è cumu fà in modu efficace. Puderete dumandà una quistione raghjone: perchè diceraghju sta storia, è micca un sviluppatore forte cù parechji anni di sperienza? U fattu hè ch'e aghju studiatu Java pocu tempu, circa un annu è mezu fà, per quessa, mi ricordu sempre di ciò chì era cum'è è chì trappule ci sò.

Un annu fà aghju avutu un stage in Yandex.Market. Aghju sviluppatu u backend per Beru, per u Mercatu stessu, probabilmente avete usatu. Avà cuntinuu à travaglià quì, in una squadra diversa. Creemu una piattaforma analitica per Yandex.Market per i partenarii cummerciale.

Perchè amparà Java è cumu fà in modu efficace. Rapportu Yandex

Cuminciamu. Perchè amparà Java da un puntu di vista praticu? U fattu hè chì Java hè una lingua di prugrammazione assai famosa. Hà una cumunità assai grande.

Per esempiu, ci hè un tali indice TIOBE, un indice populari di a popularità di i linguaggi di prugrammazione, è Java si trova in prima. Inoltre, nantu à i siti di travagliu, vi prubabilmente nutà chì a maiò parte di i posti vacanti sò nantu à Java, vale à dì, sviluppendu in Java, pudete sempre truvà un impiegu.

Siccomu a cumunità hè assai grande, ogni quistione chì avete truverete una risposta in certi Stack Overflow o altri siti. Inoltre, quandu si sviluppa in Java, si scrive veramente codice nantu à a JVM, cusì pudete facilmente passà à Kotlin, Scala è altre lingue chì utilizanu JVM.

Perchè amparà Java è cumu fà in modu efficace. Rapportu Yandex

Chì ci hè bonu di Java da un puntu di vista ideologicu? Ci sò diverse lingue di prugrammazione. Risolvenu diversi prublemi, sapete chì. Per esempiu, Python hè grande per scrive script d'una linea per risolve i prublemi veloci.

In u latu più, pudete cuntrullà cumplettamente u codice eseguibile. Per esempiu, avemu vitture, Yandex driverless cars, u so codice hè scrittu in pluses. Perchè? Java hà una tale cosa - Garbage Collector. Pulisce a RAM di oggetti inutili. Sta cosa accumincia spontaneamente è faci stop-the-world, vale à dì, ferma u restu di u prugramma è và à cuntà l'ogetti, memoria chjaru di l'uggetti. Se una cosa cusì funziona in un drone, ùn hè micca bellu. U vostru drone guidarà drittu, in questu mumentu sguassate a so memoria è ùn fighjate micca a strada. Dunque, u drone hè scrittu annantu à i prufessiunali.

Perchè amparà Java è cumu fà in modu efficace. Rapportu Yandex

Chì prublemi risolve Java? Hè principalmente una lingua per u sviluppu di grandi prugrammi chì sò scritti annantu à anni, da decine o centinaie di persone. In particulare, assai di u backend in Yandex.Market hè scrittu in Java. Avemu una squadra distribuita in parechje cità, dece persone in ognunu. È u codice hè faciule di mantene, hè statu supportatu per deci anni o più, è à u stessu tempu entra nova ghjente è capisce stu codice.

Chì caratteristiche deve avè una lingua per chì u codice in questu hè facilmente supportatu è per esse facilmente sviluppatu in grande squadre. Prima di tuttu, deve esse codice leggibile, è deve esse faciule d'implementazione di suluzioni architettoniche cumplesse. Questu hè, duverebbe esse faciule per scrive astrazioni d'altu livellu, etc. Tuttu questu hè ciò chì Java ci furnisce. Questa hè una lingua orientata à l'ughjettu. Hè veramente faciule implementà astrazioni d'altu livellu è architetture cumplesse.

Ci hè ancu assai frameworks è biblioteche per Java, perchè a lingua hè più di 15 anni. Duranti stu tempu, tuttu ciò chì puderia esse scrittu hè statu scrittu annantu, cusì ci sò tunnellate di biblioteche per tuttu ciò chì pudete bisognu.

Perchè amparà Java è cumu fà in modu efficace. Rapportu Yandex

Chì cumpetenze basiche, in u mo parè, duverebbe avè un principiante JA player? Prima di tuttu, questu hè a cunniscenza di a lingua core Java. Dopu hè una sorta di framework di Iniezione di Dipendenza. U prossimu parlante, Kirill, parlerà di questu più cumpletamente. Ùn andaraghju troppu in fondu. A seguita hè l'architettura è i mudelli di design. Avemu bisognu di pudè scrive un codice architetturale bellu per scrive grandi applicazioni. È questu hè un tipu di SQL o ORM per i travaglii di travaglià cù a basa di dati. È questu hè più appiicatu à u backend.

Perchè amparà Java è cumu fà in modu efficace. Rapportu Yandex

Vai ! core Java. Ùn aghju micca veramente scopre l'America quì - avete bisognu di cunnosce a lingua stessa. Ciò chì deve esse attentu. Prima, Java hà liberatu assai versioni in l'ultimi anni, vale à dì, in 2014-2015 u settimu hè statu liberatu, dopu l'ottava, a novena, a decima, assai versioni novi, è assai novi cose cool sò stati introdotti in elli. , per esempiu, u Java Stream API , lambda, etc. Cose assai fresche, fresche, fresche chì sò usate in codice di produzzione, ciò chì dumandanu in entrevista è chì avete bisognu di sapè. Dunque, ùn deve micca piglià un libru da u scaffale in a biblioteca Java-4 è vai à amparà. Questu hè u nostru pianu: avemu amparatu Java-8 o più altu.

Fighjemu assai attenti à l'innuvazioni cum'è Stream API, var, etc. Sò dumandati durante l'entrevista è sò constantemente utilizati in a produzzione. Questu hè, l'API Stream hè assai più cool di i loops, in generale, una cosa assai cool. Assicuratevi di prestu attenzione.

È ci sò ogni tipu di cose cum'è iteratori, Eccezzioni è cusì. Cose chì ùn vi parenu micca impurtanti, basta chì scrivite un picculu codice. Ùn avete micca bisognu di queste eccezzioni, quale ne hà bisognu in ogni modu? Ma certamente seranu dumandati à l'entrevista, certamenti seranu utili à voi in a produzzione. In generale, deve esse attentu à Eccezzioni, iteratori è altre cose.

Perchè amparà Java è cumu fà in modu efficace. Rapportu Yandex

Strutture di dati. Ùn pudete micca andà senza strutture, ma serà grande s'ellu ùn sapete micca solu chì ci sò setti, dizziunarii è fogli. È ancu diverse implementazioni di strutture. Per esempiu, u stessu dizziunariu in Java hà parechje implementazioni, cumprese HashMap è TreeMap. Hanu diversi asintotichi, sò strutturati in modu diversu à l'internu. Avete bisognu di sapè cumu si sò diffirenti è quandu aduprà quale.

Serà ancu assai cool se sapete cumu queste strutture di dati funzionanu internamente. Questu hè, ùn hè micca faciule di cunnosce i so asintotichi - quantu travaglia a scumessa, quantu travaglia u passu, ma cumu a struttura funziona in l'internu - per esempiu, ciò chì hè un bucket in HashMap.

Hè ancu vale a pena attente à l'arburi è i grafici. Quessi sò cose chì ùn sò micca assai cumuni in u codice di produzzione, ma sò populari in entrevista. In cunsiquenza, avete bisognu di pudè attraversà l'arburi, i grafici in larghezza è prufundità. Quessi sò tutti algoritmi simplici.

Appena vi principiatu à scrive ogni codice grande, cumplessu, usu di biblioteche, codice multi-classi, vi capiscia chì hè difficiule per voi senza custruì sistemi è risolviri dependencies. Questi sò principalmente Maven è Gradle. Permettenu di impurtà biblioteche in u vostru prughjettu in una linea. Questu hè, scrivite un xml di una sola linea è impurtate biblioteche in u prugettu. Grandi sistemi. Sò apprussimatamente listessi, aduprate unu - Maven o Gradle.

Next - qualchi tipu di sistema di cuntrollu di versione. Aghju cunsigliatu Git perchè hè populari è ci sò tunnellate di tutoriali. Quasi tutti usanu Git, hè una cosa fresca, ùn pudete micca campà senza ellu.

È un certu ambiente di sviluppu. Aghju cunsigliatu IntelliJ Idea. Accelera assai u prucessu di sviluppu, vi aiuta assai, scrive tuttu u codice boilerplate per voi, in generale, hè cool.

Perchè amparà Java è cumu fà in modu efficace. Rapportu Yandex

Ligami da a slide: SQLZOO, abrapost

SQL. Un pocu nantu à i backenders. Ci era veramente un casu divertente quì. Dui ghjorni prima di a mo seconda entrevista di stasgiu, una ragazza HR m'hà chjamatu è hà dettu chì in dui ghjorni mi dumandavanu nantu à SQL è HTTP, avia bisognu di amparà. È ùn sapia quasi nunda di SQL o HTTP. È aghju trovu stu situ bellu - SQLZOO. Aghju amparatu SQL nantu à questu in 12 hours, I mean, SQL syntax, how to write SELECT queries, JOIN, etc. Very cool site, I highly recommend it. In fatti, in 12 ore aghju amparatu u 90% di ciò chì cunnoscu avà.

È hè ancu grande per cunnosce l'architettura di basa di dati. Quessi sò tutti i tipi di chjave, indici, nurmalizazione. Ci hè una seria di posti nantu à questu nantu à Habré.

Perchè amparà Java è cumu fà in modu efficace. Rapportu Yandex

In Java, in più di SQL, ci sò tutti i tipi di sistemi di mapping Object-relational cum'è JPA. Ci hè qualchì codice. In u primu mètudu ci hè qualchì codice SQL - SELECT id name FROM info.users WHERE id IN userIds. Da a basa di dati di l'utilizatori, da a tavula, i so ID è i nomi sò ottenuti.

Dopu, ci hè un certu mapper chì trasforma un ughjettu da a basa in un ughjettu Java. È ci hè un terzu mètudu sottu chì eseguisce veramente stu codice. Tuttu chistu pò esse rimpiazzatu cù JPA cù una linea, chì hè scrittu quì sottu. Face a stessa cosa - truvate All ByIdIn. Questu hè, basatu annantu à u nome di u metudu, genera una dumanda SQL per voi.

Una cosa assai bella. Eiu stessu, quandu ùn cunnosci micca SQL, aghju utilizatu JPA. In generale, fate attenzione. Sè vo site troppu pigro per amparà SQL, hè un disastru. È, in generale, u focu !

Perchè amparà Java è cumu fà in modu efficace. Rapportu Yandex

Primavera. Quale hà intesu parlà di una cosa cum'è u framework Spring? Avete vistu quanti di voi site ? Micca senza ragione. A primavera hè inclusa in i requisiti di ogni seconda vacanza di backend Java. Senza ellu, ùn ci hè veramente nudda in un grande sviluppu. Chì ghjè a primavera? Prima di tuttu, questu hè un framework di Iniezione di Dipendenza. Riguardu à questu ancu dirà u prossimu parlante. Ma in corta, questu hè una cosa chì vi permette di fà più faciule per impurtà e dipendenze di certi classi à l'altri. Vale à dì, a cunniscenza di e dipendenze hè simplificata.

Spring Boot hè un pezzu di Spring chì vi permette di eseguisce a vostra applicazione di u servitore cù un buttone. Andate à THID, appughjà un paru di buttoni, è avà avete a vostra applicazione di u servitore in funzione in localhost 8080. Questu hè, ùn avete micca scrittu una sola linea di codice, ma hè digià travagliatu. Una cosa assai bella. Sè vo scrivite qualcosa di u vostru propiu, focu !

A primavera hè un quadru assai grande. Ùn coglie micca solu a vostra applicazione di u servitore è risolve l'Iniezione di Dependency. Permette di fà una mansa di cose, cumprese a creazione di metudi REST API. Questu hè, avete scrittu qualchì metudu è aghjustatu l'annotazione Get mapping à questu. È avà avete digià qualchì metudu nantu à localhost chì vi scrive Hello world à voi. Dui linii di codice è funziona. Roba cool.

A primavera facilita ancu e teste di scrittura. Ùn ci hè manera senza pruvà in un grande sviluppu. U codice deve esse pruvatu. Per questu scopu, Java hà una libreria fresca JUnit 5. È JUnit in generale, ma l'ultima versione hè a quinta. Ci hè tuttu per pruvà, ogni tipu d'affirmazioni è altre cose.

È ci hè un quadru Mockito fantasticu. Imagine chì avete qualchì funziunalità chì vulete pruvà. A funziunalità face assai cose, cumpresu, in un locu in u mezu, accede à VKontakte cù u vostru ID, per esempiu, è riceve u nome è u cognome di l'utilizatore VKontakte da l'ID. Probabilmente ùn includerete micca VKontakte in i testi, questu hè stranu. Ma avete bisognu di pruvà a funziunalità, cusì avete fattu sta classa, usendu Mockito, mok it, imitation it.

Dicerete chì quandu una dumanda vene à sta classa cù un ID tali è cusì, torna qualchì cognome, per esempiu, Vasya Pupkin. È hà da travaglià. Questu hè, testerete tutte e funziunalità per mok one class. Una cosa assai bella.

Perchè amparà Java è cumu fà in modu efficace. Rapportu Yandex

Link da slide

Modelli di disignu. Chì ghjè ? Quessi sò mudelli per risolve i prublemi tipici chì si sviluppanu in u sviluppu. In u sviluppu, i prublemi idèntici o simili spessu si sviluppanu chì saria bella per risolve in qualchì modu bè. Per quessa, a ghjente hà vinutu cù e migliori pratiche, certi mudelli, nantu à cumu risolve questi prublemi.

Ci hè un situ web cù i mudelli più populari - refactoring.guru, pudete leghje, scopre chì mudelli ci sò, leghje una mansa di teoria. U prublema hè chì hè praticamenti inutile. In fatti, mudelli senza pratica ùn sò micca particularmente utili.

Senterete parlà di certi mudelli cum'è Singletone o Builder. Quale hà intesu ste parolle ? Assai genti. Ci sò mudelli cusì simplici chì pudete implementà sè stessu. Ma a maiò parte di i mudelli: strategia, fabbrica, facciata - ùn hè micca chjaru induve applicà.

È finu à chì vi vede in pratica in u codice di qualchì altra persona un locu à quale stu mudellu hè appiicatu, ùn puderà micca applicà sè stessu. Dunque, a pratica hè assai impurtante cù mudelli. E solu leghje nantu à elli nantu à refactoring.guru ùn hè micca super utile, ma vale a pena di fà.

Perchè amparà Java è cumu fà in modu efficace. Rapportu Yandex

Perchè i mudelli sò necessarii? Dicemu chì avete una certa classa User. Hà un Id è un Nome. Ogni User deve avè sia un Id è un Nome. In cima à manca hè l'aula.

Chì sò i modi per inizializà l'Usuariu? Ci hè duie opzioni - un custruttore o un setter. Chì sò i svantaghji di i dui approcci?

Custruttore. novu User (7, "Bond"), va bè. Avà dicemu chì ùn avemu micca una classe d'Usuariu, ma qualchì altru, cù sette campi numerichi. Averete un custruttore chì cuntene sette numeri consecutivi. Ùn hè micca chjaru quale sò questi numeri è quale di elli appartene à quale pruprietà. U designer ùn hè micca grande.

A seconda opzione hè setter. Scrivite chjaramente: setId(7), setName ("Bond"). Avete capitu chì pruprietà appartene à quale campu. Ma setter hà un prublema. Prima, pudete scurdà di assignà qualcosa, è in segundu, u vostru ughjettu diventa mutabile. Questu ùn hè micca un filu sicuru è riduce ligeramente a leggibilità di u codice. Hè per quessa chì a ghjente hè stata cun un mudellu cool - Builder.

Perchè amparà Java è cumu fà in modu efficace. Rapportu Yandex

Chì hè questu? Pruvemu di cumminà i vantaghji di i dui approcci - setter è constructor - in unu. Facemu un certu ughjettu, Builder, chì averà ancu campi Id è Nome, chì ellu stessu serà custruitu basatu annantu à u setter, è chì hà da avè un metudu Build chì vi torna un novu User cù tutti i paràmetri. Avemu un ughjettu immutable è un setter. Cool!

Chì sò i prublemi ? Quì avemu u classicu Builder. U prublema hè chì pudemu ancu scurdà di verificà in qualchì campu. E se avemu scurdatu di visità l'ID, in questu casu in Builder hè inizializatu à zero, perchè u tipu int ùn hè micca nullable. È se facemu u Nome "Bond" è scurdate di visità l'uffiziu ID, avemu un novu User cù id "0" è u nome "Bond". Micca cool.

Pruvemu di cumbatte questu. In Builder cambieremu int in int in modu chì hè nullable. Avà tuttu hè grande.

Perchè amparà Java è cumu fà in modu efficace. Rapportu Yandex

Se pruvemu di creà un User cù u nome "Bond", scurdendu di mette u so ID, avemu da ottene una eccezzioni di puntatore nulla, perchè l'ID ùn hè micca nullable, è u Builder hà una eccezzioni nulla, specificamente puntatore.

Perchè amparà Java è cumu fà in modu efficace. Rapportu Yandex

Ma pudemu ancu scurdà di mette un nome, cusì ponemu u replay di l'ughjettu à null. Avà, quandu avemu custruitu u nostru ughjettu da Builder, verifica chì u campu ùn hè micca nullable. È ùn hè micca tuttu.

Fighjemu l'ultimu esempiu. In questu casu, s'ellu ci mette in qualchì manera null in u runtime ID, saria bellu sapè immediatamente chì l'avete fattu è ùn hè micca bellu chì fate un sbagliu avà.

Perchè amparà Java è cumu fà in modu efficace. Rapportu Yandex

Avete bisognu di scaccià un errore micca in u mumentu di a creazione di l'Usuariu, ma quandu avete stabilitu null à l'ID. Dunque, in Builder, cambiamu u setter Integer à int, è ghjurà immediatamente chì anu cacciatu null.

In corta, chì hè u puntu? Ci hè un mudellu simplice di Builder, ma ancu a so implementazione hà qualchì sutilezza, per quessa, hè assai cool per vede diverse implementazioni di mudelli. Ogni mudellu hà decine di implementazioni. Questu hè tuttu assai interessante.

Perchè amparà Java è cumu fà in modu efficace. Rapportu Yandex

Cumu scrivemu Builder in u codice di produzzione? Eccu u nostru User. Attachemu una rotazione di Builder da a biblioteca di Lombok, è ellu stessu genera un Builder per noi. Questu hè, ùn scrivemu micca codice, ma Java pensa digià chì sta classa hà un Builder, è pudemu chjamà cusì cusì.

Aghju digià dettu chì Java hà biblioteche per quasi tuttu, cumpresu Lombok, una libreria fresca chì permette di evità di scrive boilerplate. Custruttore, GET.

Perchè amparà Java è cumu fà in modu efficace. Rapportu Yandex

I mudelli ponu esse architectural - ligati micca solu à una classe, ma à u sistema in tuttu. Ci hè un principiu cusì bellu in u disignu di u sistema: Principiu di Responsabilità Unicu. Di chì parla ? U fattu chì ogni classa deve esse rispunsevuli di qualchi di e so funziunalità. In questu casu, avemu un Controller chì cumunicà cù l'utilizatori, l'uggetti JSON. Ci hè Facade, chì cunverte l'uggetti JSON in mudelli chì l'applicazione Java hà da travaglià. Ci hè un serviziu chì hà una logica cumplessa chì travaglia cù sti mudelli. Ci hè un Oggettu di Accessu di Dati chì mette questi mudelli in a basa di dati è li recupera da a basa di dati. È ci hè a basa di dati stessu. In altre parolle, ùn hè micca tuttu in una classe, ma facemu cinque classi diffirenti, è questu hè un altru mudellu.

Perchè amparà Java è cumu fà in modu efficace. Rapportu Yandex

Una volta chì avete più o menu amparatu Java, hè bellu di scrive u vostru propiu prughjettu chì averà una basa di dati, travaglià cù altre API, è espone a vostra applicazione di u servitore à i clienti REST API. Questu seria una grande cosa per aghjunghje à u vostru curriculum vitae, seria una fine fresca per a vostra educazione. Cù questu pudete andà è uttene un travagliu.

Perchè amparà Java è cumu fà in modu efficace. Rapportu Yandex

Eccu un esempiu di a mo applicazione di u servitore. In u mo secondu annu, aghju scrittu un documentu termale cù i picciotti. Scrivanu una applicazione mobile per urganizà avvenimenti. Là, l'utilizatori puderanu login via VKontakte, piazzate punti nantu à a mappa, creà avvenimenti, invità i so amichi à elli, salvà l'imaghjini di l'avvenimenti, etc.

Chì aghju fattu in u prugettu? Scrive una applicazione di u servitore in Spring Boot senza aduprà SQL. Ùn l'aghju micca cunnisciutu, aghju utilizatu JPA. Chì puderia fà ? Accedi à VK via OAuth-2. Pigliate u token di l'utilizatore, andate à VK cun ellu, verificate chì hè un veru utilizatore. Riceve infurmazione nantu à l'utilizatori attraversu VKontakte. Hè stata capace di salvà l'infurmazioni in una basa di dati, ancu attraversu JPA. Salvà abilmente e ritratti è altri fugliali in a memoria di l'urdinatore, è salvate ligami per elli in a basa di dati. À quellu tempu ùn sapia micca chì ci eranu oggetti CLOB in a basa di dati, cusì aghju fattu cusì. Ci era una API REST per l'utilizatori, l'applicazioni cliente. E ci sò stati teste di unità per a funziunalità basica.

[…] Un picculu esempiu di u mo apprendimentu successu di Java. In u mo primu annu à l'università, m'hà insignatu C # è datu una cunniscenza di a prugrammazione OOP - chì classi, interfacce, astrazione sò, è perchè sò necessarii. M'hà aiutatu assai. Senza questu, l'apprendimentu di Java hè abbastanza difficiule, ùn hè micca chjaru perchè e classi sò necessarii.

Perchè amparà Java è cumu fà in modu efficace. Rapportu Yandex

In u mo secondu annu à l'università, anu insignatu di novu Java core, ma ùn aghju micca firmatu quì, andò à studià Spring me stessu è hà scrittu un documentu di corsu, u mo prughjettu, chì aghju mintuatu sopra. E cun tuttu questu, andò per un stage in Yandex, passava una entrevista, è ghjuntu in Yandex.Market. Quì aghju scrittu u backend per Beru, questu hè u nostru mercatu, è per Yandex.Market stessu.

Dopu questu, sei mesi fà, aghju trasfirutu à un altru squadra in u stessu Mercatu. Facemu analisi per i partenarii cummerciale. Semu in a piattaforma analitica, ci sò trè di noi nantu à u backend, cusì aghju una parte assai grande di influenza nantu à u prugettu. Hè assai interessante, in realtà. Questu hè, in realtà furnimu dati nantu à u mercatu - chì vendite sò, in quali categurie, in quali mudelli, per i partenarii di cummerciale, grande cumpagnie famose. E ci sò solu trè di noi, scrivimu stu codice, è hè assai cool.

Grazie! Ligami utili:
- "Java 8. Guida per principianti".
- Strutture di dati.
- SQLZOO.
- Normalizazione di basa di dati.
- Modelli di cuncepimentu.
- Modelli di cuncepimentu.
- Clean Code.
- Java efficace.

Source: www.habr.com

Cumprate un hosting affidabile per i siti cù prutezzione DDoS, servitori VPS VDS 🔥 Cumprate un hosting di siti web affidabile cù prutezzione DDoS, servitori VPS VDS | ProHoster