Techniki Zaawansowane
8 godz. 35 min · Java · Full-stack i Programowanie
Rafał SolarskiW poczatkowych lekcjach przyjrzymy sie pokladowi, na jakim bedziemy uruchamiali nasze programy. Wykorzystamy VisualVM do podgladania parametrów JVM. Zobaczymy równiez jakie zasoby sa tam dostepne oraz dowiesz sie jak monitorowac to, czy dobrze z nich korzystamy. Opowiemy Ci tez miedzy innymi o tym, jak zrobic heap i thread dump, oraz jak wlaczyc logi GC.
Kolejne lekcje kursu zostaly poswiecone wyrazeniom regularnym. Wyrazenia regularne mozemy wykorzystac nie tylko do walidacji danych wprowadzania przez uzytkownika, ale równiez do dzielenia tekstu oraz wyluskiwania wystapien wzorców w duzym tekscie. W tym rozdziale dowiemy sie miedzy innymi tego, jak mozemy wykorzystac ten potencjal z poziomu Javy.
Dzieki typom generycznym jestesmy w stanie osiagnac bezpieczenstwo typów w trakcie kompilacji przy zachowaniu elastycznosci pisanego kodu. W nastepnym rozdziale kursu przyjrzymy sie temu, jak mozemy je wykorzystac, oraz w jaki sposób czasami nalezy z tego bezpieczenstwa zrezygnowac.
Interfejsy funkcyjne to sposób na przeniesienie odrobiny swiata programowania funkcyjnego do Javy. Gdy polaczymy je z wyrazeniami lambda oraz API strumieni pozwola nam pisac te sama logike w duzo bardziej przejrzysty sposób.
Kolekcje, czyli listy, mapy, zbiory i kolejki to jedne z najczesciej wykorzystywanych klas w codziennej pracy. To jak dobrze poznamy ich mozliwosci ma ogromny wplyw na to, w jaki sposób bedziemy podchodzili do rozwiazywania wyzwan na naszej drodze.
System plików to zasób bez którego ciezko sobie poradzic. Pozwalaja nam na dostarczanie konfiguracji, danych wejsciowych i wyjsciowych, a przez to równiez integrowanie ze soba calych systemów.W tym rozdziale nauczymy sie korzystac z tych dobrodziejstw w bezpieczny sposób wykorzystujac m.in. IO Streams.
Trzymanie daty w String to niekoniecznie najwygodniejszy sposób. Juz od pewnego czasu Java dysponuje bardzo wygodnym Date&Time API - zobaczymy, co mozemy w nim znalezc.
Wielowatkowosc nie jest prosta... i dlugo tak jeszcze pozostanie. Nawet jesli korzystamy z frameworków, które próbuja ja przed nami ukryc, to ciagle musimy byc swiadomi problemów jakie sie z nia wiaza. W tym rozdziale poznamy glówne problemy na jakie mozna natrafic programujac wielowatkowo w Javie. Poznamy równiez klasy, które zdecydowanie pomoga nam zapanowac nad ta zlozonoscia.
JDBC to najbardziej podstawowy sposób laczenia sie z baza SQL z poziomu Javy. W wielu systemach/aplikacjach stosuje sie rozwiazania ORM takie jak JPA/Hibernate. Mimo wszystko warto wiedziec jak to pod spodem dziala oraz umiec poradzic sobie w aplikacjach, gdzie wybrano bardziej "lekkie" podejscie niz Hibernate.
Na koniec kursu wykorzystamy zdobyta wiedze, aby stworzyc prosta aplikacje pozwalajaca na przechowywanie danych o wydatkach. Po stworzeniu coreu aplikacji, mozesz spróbowac uzupelnic go za pomoca GUI.
Ten kurs stworzony zostal przede wszystkim z mysla o osobach, które juz poznaly podstawy jezyka, takie jak zmienne, mechanizmy kontroli wykonania, klasy, typy generyczne.Jezeli chcesz poczuc sie swobodnie nie tylko jesli chodzi o mechanizmy jezyka, ale równiez pod wzgledem znajomosci standardowej biblioteki Javy - to kurs w sam raz dla Ciebie. Materialy beda przydatne dla studentów, którzy znaja juz podstawowa skladnie Javy; programistów Javy chcacych poszerzyc lub uporzadkowac swoja wiedze; programistów innych jezyków, którzy chca poznac inny stack technologiczny.
Cześć pierwsza rzecz to gratuluję ci że doszedłeś
do tego miejsca a w tym rozdziale spróbujemy zaimplementować
taką prostą aplikacje do zarządzania wydatkami tak ta aplikacja
może mieć na przykład api konsolowe tak czyli
powiedzmy z poziomu na przykład właśnie jakiegoś terminala czy bash
fish'a czy jakichś innych powłok będziemy mogli używać tej aplikacji i
co będzie pozwalała robić ta aplikacja przede wszystkim będzie pozwalała
dodawać wydatki taki wydatek to może być powiedzmy
jakiś właśnie obowiązkowa jakaś suma oraz jakaś opcjonalna
data z czasem i komentarz na przykład tak poza
tym będzie pozwalała listować usuwać apdejtować jakiś powiedzmy istniejący
outcome tak oraz będzie umożliwiała jakąś taką prostą
operację analityczną powiedzmy właśnie na przykład wyliczenie
sumy wszystkich wydatków z jakiegoś okresu tak jeżeli
będziesz chciał nie ma problemu żeby dodać na przykład jakieś dodatkowe operacje
żeby poćwiczyć tak tutaj na przykład w przypadku właśnie tej operacji są
to będzie nic inne zrobienia jakichś operacji w salect
jakimś na bazie danych i później po prostu zwrócenie jakiegoś bigdecimala więc
nie ma problemu jeżeli będziesz chciał na przykład dodać czy to jakąś średnią
miesięczną czy jakąś inną operację poza tymi rzeczami które tutaj
powiedzmy są warto dodać jeszcze kilka rzeczy na przykład możliwość
eksportowania tych danych które są w naszej aplikacji do jakiejś csv
i tak czy do jakiegoś innego formatu na przykład do jsona czy czegoś takiego
oraz jako że możemy wyeksportować
te dane to też oczywiście możliwość ich importu tak poza tym jeżeli
będziesz używał na przykład tak jak do tej pory sqlite tak
ja implementując powiedzmy te rzeczy będę używał sqlite tak więc warto
wtedy dać możliwość wyspecyfikowania pod jakim pathem ma się znajdować
w moim znajduje się właśnie ta baza plikowa tak
no jeżeli sobie powiedzmy zaimplementujemy te wszystkie rzeczy nasza
aplikacja może wyglądać mniej więcej tak tutaj już po zaimplementowaniu
tego powiedzmy na koniec pewnie będziemy mieli jakiegoś jara
który zawiera wszystkie nasze zależności oraz nasz naszej aplikacji spakowany
używając po prostu maven assembly plugin czy powiedzmy jakiegoś innego rozwiązania
w zależności od tego którego systemu budowania używasz tak i
takim jarze możemy sobie zrobić po prostu java i może jar oraz
dać go tak po prostu ten ten ten jar no i powiedzmy w
przypadku mojej implementacji tutaj się pojawi taki help który
listuje komendy tak które możemy tutaj wstawić w tym miejscu i
te komendy prawie jeden do jednego mapuują się na te wymagania które tutaj
powiedzmy wylistowałem tak no i tutaj mniej więcej jest
w ogóle właśnie to add list i tak dalej możemy sobie na przykład dodać
jakiś autko na przykład dodać 100 zł z komentarzem
minus c tak na paliwo paliwo tak i on
nam się teraz doda możemy sobie wylistować te rzeczy tak
tutaj nam się wylistuje ten jeden outcome czyli powiedzmy jego id jakiś z bazy danych
prawdopodobnie suma data jakaś na przykład
zlokalizowana tutaj jest taka w takim polskim formacie trochę oraz
komentarz tak dodajmy sobie jeszcze jeden na przykład bilet tak
jak sobie wylistujemy to mamy dwa i teraz mamy możliwość usuwania
dodawania kolejnych na przykład usunięcia po id
tak usuń mi z numerem jeden no i też mamy możliwość na przykład
właśnie zsumowania możemy na przykład podać sum tutaj z jakąś
jak sobie damy help to nam poda że możemy jeszcze wykorzystać na
przykład te parametry ograniczające że te daty od daty tak i w
ten sposób możemy się zawęzić ten przedział oraz jeżeli damy sum to
w przypadku mojej implementacji on po prostu sumuje wszystkie wydatki
które obecnie są w bazie tak tak no
i poza tym możemy też wyeksportować te dane zrobić export i on w tym
momencie wyeksportuje to do jakiegoś pliku o
domyślnej nazwie na przykład u mnie to jest outcome registry dump csv
możemy sobie zobaczyć co w środku tak
to jest zawartość tego pliku wylistowana no i tutaj po prostu mamy
rozdzielone przecinkami tak zserializowane powiedzmy postaci
właśnie te dane z bazy danych tak z naszej aplikacji to są po prostu te
te wydatki tak komentarz jest na końcu tutaj jest właśnie
kwota oraz data zauważ że nie ma tutaj id
dlaczego nie ma tego id to się jeszcze dowiemy na etapie implementacji okej
i możemy na przykład sobie usunąć teraz wszystkie dane które mamy
u siebie w bazie na przykład zrobić delete z opcją tutaj jeszcze help
można zrobić z opcją minus a czyli minus all tak
i on usunie nam wszystkie dane z bazy teraz no
i jak zrobimy teraz import to
przy imporcie jest opcja f i możemy
sobie na przykład teraz wskazać z jakiego pliku chcemy załadować
dane tak czyli na przykład właśnie za outcome
registry dump csv i on teraz nam załadował te dane
jak zrobimy list to te wszystkie powiedzmy rzeczy
które mieliśmy w momencie zrobienia export tak później zrobiliśmy
delete to one się dalej tutaj pojawiły prawda okej i tak by
wyglądała taka aplikacja okej poza tym że powiedzmy są te wymagania
już mniej więcej wiesz jak powinna wyglądać ta aplikacja to jeszcze tutaj
opisałem ci powiedzmy możliwości jak podejść trochę do implementacji tego
ja jak będę implementował powiedzmy to rozwiązanie tak
to wykorzystam plain jdbc czyli wcale w takim natywnym jdbc
będę to implementował tak jak pokazywaliśmy w rozdziale o jdbc
poza tym nic nie stoi na przeszkodzie że jeżeli chcesz poeksperymentować czy
nauczyć się na przykład jakiejś dodatkowej biblioteki to jest jeszcze na przykład hibernate lub spring
data w przypadku spring data będziesz musiał dodać całego springa
do aplikacji co nie jest trudne ale powiedzmy wymaga
dodatkowego jakiegoś takiego lekkiego researchu i ja do
implementacji tutaj jeszcze jest możliwość wyboru na przykład parsera
czyli powiedz mi jakiejś takiej biblioteczki czy jakiegoś kawałku kodu który
będzie parsował te dane wejściowe tak jak tutaj powiedzmy ja podawałem
jakieś parametry jakieś nazwy bazy na przykład właśnie te
kwoty i tak dalej to te wszystkie rzeczy są parsowane
przez właśnie parser tak no i powiedzmy musimy
jakoś mieć możliwość odczytania tych wszystkich parametrów które podajemy do naszej aplikacji konsolowej
tak więc ja do tego sobie wykorzystam picocli to jest taka prosta
biblioteka na licencji apache dzięki temu darmowa
no i właśnie wykorzystując ją uzyskujemy takie fajne rzeczy czy mamy raz kolorowanie
tej składni dwa te helpy te helpy są takie w miarę spójne tak możemy sobie wejść
w każdą komendę i możemy wylistować dla niej możliwe parametry tak jest
to bardzo fajne jest analogiczna biblioteczka apache commons
cli oraz możemy też samodzielnie zaimplementować coś takiego
tak taka trochę bardziej nie jest to trudne jest to trochę toporne tak
a ze względu na to że wykorzystamy sobie właśnie te picocli to będzie dość proste
okej i zasadniczo możesz iść
razem ze mną i implementować krok po kroku tą aplikację albo
możesz też spróbować zaimplementować całość od początku do końca i
później na przykład porównać z moim rozwiązaniem tak no i wtedy może nawet
uda ci się lepiej to zrobić prawda zależy mi na tym abyś przy
implementowaniu tego rozwiązania wziął sobie do serca dwie rzeczy jedna
to to żebyś nie bał się eksperymentować tak powiedzmy tutaj
podałem różne rozwiązania nie bój się tego zrobić inaczej tak tutaj dałem
też jakieś możliwości powiedzmy dodatkowych jakichś featurów nie bój się dodać
jakichś swoich po prostu ważne to żebyś się trochę pobawił przy tym tymi wszystkimi rzeczami których się nauczyliśmy
druga rzecz to jest to nie staraj się aby ta aplikacja działała idealnie
tak tu nie muszą być wszystkie jakby wszystkie
exeptiony powiedzmy nie muszą być te komunikaty jakieś takie bardzo czytelne
dla użytkownika ważne jest powiedzmy to mięso tak czyli powiedzmy właśnie
praca z bazą danych tak czy czy właśnie parsowanie tych
tych danych wejściowych od użytkownika czy wykorzystanie tego picocli
tak ważne żebyś się po prostu tym pobawić i żeby na koniec mieć
coś co mniej więcej działa tak powiedzmy realizuje te te wymagania
tak nie ważne żeby realizowało je idealnie okej
w takim razie przystępujemy do implementacji trzymaj się i powodzenia