Dark Mode

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

JavaOPs/topjava

Repository files navigation

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

  • 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 control v IDEA pereimenovali v Git
  • C Ultimate IDEA seichas slozhnosti, nadeemsia chto vremennye.

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 UserMealWithExceed i ego pole exceed v UserMealWithExcess.excess
  • v UserMeals/UserMealWithExcess polia izmenilis' na private
  • obnovil dannye UserMealsUtil.meals i pereimenoval nekotorye peremennye, polia i metody
  • dobavil UserMealWithExcess.toString() i metod dlia vypolneniia Optional domashnego zadaniia
  • metod fil'tratsii v TimeUtil pereimenoval v isBetweenHalfOpen (takzhe izmenilas' logika sravneniia: startTime vkliuchaetsia v interval, a endTime - 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):

Vmesto Fork mozhno sdelat' klonirovanie proekta: on ne budet priviazan k iskhodnomu https://github.com/JavaOPs/topjava i u nego ne budet istorii.

7. Maven

Domashnee zadanie HW0

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 startTime i endTime
  • pole UserMealWithExcess.excess dolzhno pokazyvat', prevyshaet li summa kalorii za ves' den' znachenie caloriesPerDay

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).

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.

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())
  • 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:

Zamechaniia po ispol'zovaniiu Stream API:

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).

Zamechaniia k HW0

  • 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' UserMealWithExcess ot UserMeal nel'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 Map na metody getOrDefault ili merge
  • 5: Pri realizatsii cherez Stream zameniaite forEach operatorom stream.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.println nel'zia ispol'zovat' nigde, krome kak v main. 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

Java (bazovye veshchi)

Tutorialy, raznoe

Servlety

Tutorialy po Spring

JDBC, SQL

Raznoe

Knigi

About

Java Enterprise: Maven/ Spring/ Security/ JPA(Hibernate)/ REST(Jackson)/ Bootstrap(CSS)/ jQuery

Resources

Readme

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

Languages