Razrabotka polnofunktsional'nogo Spring/JPA Enterprise prilozheniia c avtorizatsiei i pravami dostupa na osnove rolei s ispol'zovaniem naibolee populiarnykh instrumentov i tekhnologii Java: Maven, Spring MVC, Security, JPA(Hibernate), REST(Jackson), Bootstrap (css,js), DataTables, jQuery + plugins, Java 8 Stream and Time API i khraneniem v bazakh dannykh Postgresql i HSQLDB.
Kogda vy slyshite chto-to, vy zabyvaete eto.
Kogda vy vidite chto-to, vy zapominaete eto.
No tol'ko kogda vy nachinaete delat' eto,
vy nachinaete ponimat' eto
Starinnaia kitaiskaia pogovorka
Obnovlennoe vvodnoe zaniatie (obiazatel'no smotret' vse video)
Obzor naibolee vostrebovannykh tekhnologii, kotorye budut izuchat'sia na kurse TopJava
2.3. Chast' 3: trendy
- VNIMANIE: vybiraite dlia proekta prostoi put' bez probelov i russkikh bukv, naprimer,
c:\projects\topjava\(Windows). Inache vposledstvii budut problemy - Plagin Git Intergation uzhe ne trebuetsia, a vkladku
Version controlv IDEA pereimenovali vGit - C Ultimate IDEA seichas slozhnosti, nadeemsia chto vremennye.
- Skachat' IDEA i ustanovlivat' plaginy mozhno po instruktsii
- Posle Trial 30 dnei sposoby prodlit' ispol'zovanie
Dlia perekliucheniia rezhima otobrazheniia izmenenii iz vkladki Commit v Git: Local Changes nuzhno perekliuchit' Settings/Preferences | Version Control | Commit | Use non-modal commit interface ili v kontekstnom meniu vkladki Commit:
Patch prepare_to_HW0.patch (skachat' i polozhit' v katalog vashego proekta)
Proekt postoianno uluchshaetsia, poetomu video inogda otlichaetsia ot koda proekta. Izmeneniia ukazyvaiu posle video:
- pereimenoval klass
UserMealWithExceedi ego poleexceedvUserMealWithExcess.excess- v
UserMeals/UserMealWithExcesspolia izmenilis' naprivate- obnovil dannye
UserMealsUtil.mealsi pereimenoval nekotorye peremennye, polia i metody- dobavil
UserMealWithExcess.toString()i metod dlia vypolneniia Optional domashnego zadaniia- metod fil'tratsii v
TimeUtilpereimenoval visBetweenHalfOpen(takzhe izmenilas' logika sravneniia:startTimevkliuchaetsia v interval, aendTime- ne vkliuchaetsia)
GitHub pomenial politiku: teper' pushit' nuzhno cherez token. IDEA predlozhit ego sgenerirovat' pri pushe, ili mozhno sozdat' token v nastroikakh
Instruktsiia po shagam (iz video):
- Ustanovit' PO (Git, JDK8, IntelliJ IDEA, Maven)
- Sozdat' akkaunt na GitHub
- Sdelat' Fork ETOGO proekta (https://github.com/JavaOPs/topjava)
- Sdelat' lokal'nyi repozitorii proekta: git clone https://github.com/[Vash akkaunt]/topjava.git
Vmesto Fork mozhno sdelat' klonirovanie proekta: on ne budet priviazan k iskhodnomu https://github.com/JavaOPs/topjava i u nego ne budet istorii.
- Otkryt' i nastroit' proekt v IDEA
- Vystavit' kodirovku UTF-8 v konsoli
- Postavit' kodirovku UTF-8
- Optsional'no: pomeniat' shrift po umolchaniiu na DejaVu ili na novyi JetBrains Mono
- Po khodu video sdelat'
Apply Patch...skachannogo patchaPrepare_to_HW0.patch - Zakommitit' i zapushit' izmeneniia (
commit+push) - Sdelat' vetku domashnego zadaniia
- Vypolnit' zadanie i zalit' na GitHub (
commit+push) - Perekliuchit'sia v osnovnuiu vetku proekta
master.
7. Maven
- Kak ustanovit' Maven 3 na Ubuntu ili Windows
- Rukovodstvo po Maven
- Wiki: Apache Maven
- The Central Repository
- Dopolnitel'no:
- Moi Wiki po Maven
- Osnovy Maven
- JavaRush: Osnovy Maven
- Instrument sborki proektov Maven
- Maven Getting Started Guide
- Video: Maven vs Gradle vs SBT (Arkhipov, Borisov, Sadogurskii)
- Build Lifecycle
- Dependency Mechanism
VNIMANIE: NE NADO v repozitorii delat' Pull Request so svoimi resheniiami! Sm. video vyshe ("Rabota s proektom")
Realizovat' metod UserMealsUtil.filteredByCycles cherez tsikly (forEach):
- dolzhny vozvrashchat'sia tol'ko zapisi mezhdu
startTimeiendTime - pole
UserMealWithExcess.excessdolzhno pokazyvat', prevyshaet li summa kalorii za ves' den' znacheniecaloriesPerDay
T. e. UserMealWithExcess - eto zapis' odnoi edy, no pole excess budet odinakovo dlia vsekh zapisei za etot den'.
- Prover'te rezul'tat vypolneniia DZ (mozhno proverit' logiku v http://javaops-demo.ru/topjava, spisok edy)
- Otsenite Time complexity algoritma. Esli ona bol'she O(N), naprimer O(NN) ili Nlog(N), sdelaite O(N).
Vnimanie: vnimatel'no prochitaite pro O(N). O - eto liuboi koeffitsient, 2*N eto tozhe O(N).
- Java 8 Date and Time API
- Algoritmy i struktury dannykh dlia nachinaiushchikh: slozhnost' algoritmov
- Slozhnost' algoritmov i Big O Notation
- Golovach: slozhnost' algoritmov v teme kollektsii
- Time complexity
- Vremennaia slozhnost' algoritma
- Vychislitel'naia slozhnost'
VNIMANIE: varianty Optional delaite v odnoi vetke v raznykh metodakh UserMealsUtil. Proshche delat', proshche proveriat'
Optional (Java 8 Stream API)
Realizovat' metod `UserMealsUtil.filteredByStreams` cherez Java 8 Stream API.
- Video: Dostupno o Java 8 Lambda
- Java 8: Lambda vyrazheniia
- Java 8: Potoki
- Pukovodstvo po Java 8 Stream
- Polnoe rukovodstvo po Java 8 Stream API v kartinkakh i primerakh
- 7 sposobov ispol'zovat' groupingBy v Stream API
- Liambda-vyrazheniia v Java 8
- A Guide to Java 8
- Shpargalka Java Stream API
- Aleksei Vladykin: Elementy funktsional'nogo programmirovaniia v Java
- Yakov Fain o novom v Java 8
- stream.map vs forEach
- Rukovodstvo po Java Stream v Java 8
- Dopolnitel'no
Optional 2 (+5 bonusov, tol'ko posle vypolneniia bazovogo i Optional zadaniia!)
- tsiklom za 1 prokhod po
List- bez tsiklov po drugim kollektsiiam/massivam (k nim takzhe otnosim metody kollektsii
addAll()/removeAll())
- bez tsiklov po drugim kollektsiiam/massivam (k nim takzhe otnosim metody kollektsii
- cherez Stream API za 1 prokhod po iskhodnomu spisku
meals.stream()- nel'zia ispol'zovat' vneshnie kollektsii, ne iavliaiushchiesia chast'iu kollektora
- vozmozhno dopolnitel'nye prokhody po chastiam spiska, pri etom prevyshenie dolzhno schitat'sia odin raz dlia vsego podspiska. Te naprimer nel'zia razbit' spisok na 2 podspiska s chetnymi i nechetnymi datami i zatem ikh ob'edinit', s podschetom prevysheniia dlia kazhdogo elementa.
Vremennaia slozhnost' realizatsii dolzhna byt' O(N) (obratite vnimanie na p. 13 zamechanii)
Reshenie dolzhno byt' rabochim v obshchem sluchae (dolzhno rabotat' v prilozhenii s mnogimi pol'zovateliami, ne tol'ko pri zapuske main)
Nel'zia 2 raza prokhodit' po iskhodnomu spisku (v tom chisle po ego otfil'trovannoi ili preobrazovannoi kopii)
Resursy:
- Baeldung: Custom Collectors
- Rukovodstvo po Java 8 Stream API: Collector
- Khvatit pisat' tsikly! Top-10 luchshikh metodov dlia raboty s kollektsiiami iz Java 8
- Poniat' Java Stream API
Zamechaniia po ispol'zovaniiu Stream API:
- Kogda vstrechaesh' chto-to neprivychnoe, prikhoditsia perestraivat' mozgi. Naprimer, perekhod s protsedurnogo na OOP-programmirovanie daetsia neprosto. Te, kto ne znaet shablonov (i ne khotiat uchit'), takzhe ikh vstrechaiut plokho. Khoroshaia novost' v tom, chto esli eto priniat' i nachat' ispol'zovat', to nachinaesh' poluchat' ot etogo udovol'stvie. I tut glavnoe ne vpast' v druguiu krainost':
- Esli vas bespokoit proizvoditel'nost' strimov, obiazatel'no prochitaite pro optimizatsiiu
Pri ispol'zovanii Stream API proizvoditel'nost' uluchshitsia tol'ko na bol'shikh zadachakh, gde vozmozhno rasparallelivanie. Eshche: prosto tak zapustit' i pomerit' skorost' JVM nel'zia (kak minimum nado dat' progret'sia i zapustit' ochen' bol'shoe chislo raz). Luchshe ispol'zovat' kakie-nibud' benchmarki, naprimer JMH, kotoryi my ispol'zuem na drugom proekte (Mastejava).
- 1: Kod proekta meniat' mozhno! Odna iz rasprostranennykh oshibok kak v testovykh zadaniiakh na sobesedovanii, tak i pri rabote na proekte, chto nichego nel'zia meniat'. Konechno, pri pravkakh v rabochem proekte obiazatel'no nuzhno prokonsul'tirovat'sia/prorev'iuirovat'sia u avtorov koda (nakhodiatsia po istorii VCS)
- 2: Nasledovat'
UserMealWithExcessotUserMealnel'zia, t. k. eto raznye sushchnosti: Transfer Object i Entity. My budem ikh prokhodit' na 2-m uroke. Eto otnositsia i k ikh zavisimosti drug ot druga. - 3: Pravil'naia realizatsiia dolzhna byt' prostoi i krasivoi, mozhno sdelat' 2-mia sposobami: cherez strimy i cherez tsikly. Slozhnost' dolzhna byt' O(N), t. e. bez vlozhennykh strimov i tsiklov.
- 4: Pri realizatsii cherez tsikly posmotrite v
Mapna metodygetOrDefaultilimerge - 5: Pri realizatsii cherez
StreamzameniaiteforEachoperatoromstream.map(..) - 6: Ob'iavliaite peremennye neposredstvenno pered ispol'zovaniem (esli vozmozhno - srazu s initsializatsiei). Pri ob'iavlenii kollektsii v kachestve tipa peremennoi ispol'zuite interfeis (Map, List, ..)
- 7: Esli IDEA predlagaet optimizatsiiu (zheltym podcherkivaet), naprimer, zamenit' liambdu na ssylku na metod (method reference), soglashaites' (Alt+Enter)
- 8: Pol'zuites' formatirovaniem koda v IDEA:
Alt+Ctrl+L - 9: Pered check-in (otpravkoi izmenenii na GitHub) prosmatrivaite vnesennye izmeneniia (Git -> Log -> kursor na fail i Ctrl+D): ne ostavliaite v kode nichego lishnego (zakommentirovannyi kod, TODO i pr.). Esli fail ne meniaetsia (naprimer tol'ko probely ili perevody strok), ne nado ego chekinit', delaite emu
revert(Git -> Revert /Ctrl+Alt+Z). - 10:
System.out.printlnnel'zia ispol'zovat' nigde, krome kak vmain. Pozzhe vvedem logirovanie. - 11: Rezul'taty, vozvrashchaemye
UserMealsUtil.filteredByStreams, my budem ispol'zovat' v nashem prilozhenii dlia fil'tratsii po vremeni i otobrazheniia edy pravil'nym tsvetom. - 12: Obrashchaite vnimanie na kommentarii k vashim kommitam v Git. Oni dolzhny byt' korotkie i informativnye (luchshe na english)
- 13: Ne polagaites' v reshenii na to, chto spisok edy budet podavat'sia otsortirovannym. Takogo usloviia net.
- DZ pervogo uroka budet sviazano s sozdaniem nebol'shogo CRUD-prilozheniia (v pamiati, bez bazy dannykh) na JSP i servletakh
- osnovy JavaScript neobkhodimy dlia ponimaniia proekta, nachinaia s 8-go zaniatiia
Poleznye resursy
HTML, JavaScript, CSS
- Basic HTML and HTML5
- Spravochnik po WEB
- Video po WEB-tekhnologiiam
- Izuchenie JavaScript v odnom videouroke za chas
- HTML, CSS, JAVASCRIPT, SQL, JQUERY, BOOTSTRAP
- Vvedenie v programmirovanie na JavaScript
- Standarty kodirovaniia dlia HTML, CSS i JavaScript'a
- Osnovy raboty s HTML/CSS/JavaScript
- JavaScript - Osnovy
- Osnovy JavaScript
- Bootstrap 3 - Osnovy
- jQuery dlia nachinaiushchikh
Java (bazovye veshchi)
- Sbornik video "Izuchaem Java"
- 1-i urok MasterJava: Mnogopotochnost'
- Osnovy Java garbage collection
- Razmer Java ob'ektov
- Vvedenie v Java Reflection API
- Struktury dannykh v kartinkakh
- Obzor java.util.concurrent.*
- Sinkhronizatsiia potokov
- String literal pool
- Malen'kie khitrosti Java
- A Guide to Java 8
Tutorialy, raznoe
- Otkrytyi kurs: Spring Boot + HATEOAS
- Chto nuzhno znat' o bekende novichku v veb-razrabotke
- Tutorialy: Spring Framework, Hibernate, Java Core, JDBC
Servlety
Tutorialy po Spring
- Iurii Tkach: Spring Framework - The Basics
- Java Brains: Spring Framework
- Timur Batyrshinov: Spring Core - osnovy freimvorka, iadro
- alishev: Spring Framework
JDBC, SQL
- Osnovy SQL na primere zadachi
- Uroki po JDBC
- Learn SQL
- Intuit. Osnovy SQL
- Try SQL
- Kurs "Vvedenie v bazy dannykh"
Raznoe
- Voprosy po sobesedovaniiu, resursy dlia podgotovki
- Effektivnaia rabota s kodom v IntelliJ IDEA
- Quizful- testy onlain
- Vvedenie v Linux
Knigi
- Dzhoshua Blokh: Java. Effektivnoe programmirovanie. Vtoroe izdanie
- Gamma, Khelm, Dzhonson: Priemy ob'ektno-orientirovannogo proektirovaniia. Patterny proektirovaniia
- Redmond E.: Sem' baz dannykh za sem' nedel'. Vvedenie v sovremennye bazy dannykh i ideologiiu NoSQL
- Brian Goetz: Java Concurrency in Practice
- G.L. McDowell: Cracking the Coding Interview