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ść do tej pory poznaliśmy sety listy i mapy
i są to tak naprawdę najczęściej wykorzystywane na co dzień przez nas struktury
jest jednak pewna jeszcze odnoga która jest rzadziej wykorzystywana jest to queue
i deque teraz do czego one służą queue jak nazwa
wskazuje jest to po prostu kolejka ta struktura narzuca nam pewną taką semantykę
pracy z danymi która pozwala nam nam na wrzucanie z jednej strony elementów
oraz wyciągania z drugiej deque zaś pozwala nam na wrzucanie
i wyciąganie z każdej strony tak deque jest double-ended queue no
i teraz używając queue możemy wrzucać elementy i wyciągać je w tej samej
kolejności natomiast używając deque możemy je wrzucać
i na przykład wyciągać w odwrotnej kolejności czyli osiągnąć efekt który daje
nam stos taka struktura deque jest implementowany przez link listę
i to jest prawdopodobnie najczęściej wykorzystywana implementacja ale
też są jeszcze implementacje oparte o array ok stwórzmy sobie
kolejkę integerów oraz podstawmy implementację w postaci link listy oraz
na początek zobaczymy sobie jakie możliwości daje nam ten interfejs mamy przede wszystkim tutaj
metodę add która jest dziedziczona z collection w parze do metody add
mamy metodę pool która powiedzmy wyciąga jeden element i nam go zwraca
poza tym do metody pool jest jeszcze metoda remove one robią dokładnie
to samo tylko jest inne zachowanie tych metod w momencie kiedy nie
ma elementów już prawda w tej kolekcji polł jeżeli jest powiedzmy
element nam go zwróci jeżeli go nie ma to po prostu zwróci nam null natomiast
remove jeżeli nie istnieje element w kolekcji no to rzuci nam
w tym momencie wyjątkiem podobnie jest z metodami peek i element peek
w stosunku do pull i remove zwraca nam element ale nie usuwa
go z kolejki element tak samo bo to jest też różnica w zachowaniu
jeżeli nie ma elementów kolekcji peek zwróci nam null a element rzuci
nam wyjątkiem za to metoda offer jest metodą która ma znaczenie
w momencie kiedy wykorzystujemy ograniczonych jeżeli chodzi o maksymalny
rozmiar kolejki add ona pozwala nam dodać jakiś element
tylko wtedy jeżeli jest na nią miejsce i tutaj właśnie jest ta flaga boolean tak
która nam mówi że udało się dorzucić ten element do kolekcji albo nie warto
również podkreślić że jeżeli użyjemy add na kolekcji która jest
ograniczona rozmiarem tak to jeżeli nie ma miejsca w tej kolekcji to
zamiast dostać powiedzmy false'a dostaniemy w tym momencie wyjątek
tak add na queue zawsze jeżeli nie rzuci wyjątkiem zawsze
zwróci true okej spróbujmy sobie zaimplementować jakieś zachowanie wykorzystując
te metody pierwsza rzecz to dodajemy sobie kilka elementów do tej kolejki oraz
wyprintujmy co się znajduje w środku jak widzimy zachowanie jest tutaj bardzo intuicyjne
teraz spróbujmy wyciągnąć te elementy razem z usuwaniem ich więc wykorzystuje
metodę poll w ten sposób tak tutaj wyciągałem po kolei te elementy w tej samej
kolejności jak zostały wrzucone tutaj zauważ że jeżeli wywołamy
o jeden za dużo operacji poll dostaniemy po prostu null'a zachowanie
remove jest takie samo jak poll z tym wyjątkiem że na koniec
kiedy wywołujemy remove na pustej kolekcji to po prostu dostajemy w tym momencie
wyjątek jeżeli chcemy tylko podejrzeć co znajduje się w kolekcji
zostanie wyciągnięty przy następnym wywołaniu poll bądź remove możemy
wykorzystać peek lub element zachowanie tych metod zmieni się jeżeli nie zostanie
żaden element w kolekcji jak widzimy operacja peek zwróci nam
null a operacja element po prostu rzuci wyjątkiem teraz zamiast
linked list podstawmy sobie inną implementację jest to na przykład array blocking
queue jest to implementacja w której można ograniczyć capacity tak
czyli powiedzmy maksymalny rozmiar tej kolekcji tak dzięki temu
możemy sobie zobaczyć jak różni się działanie add od offer jak sobie wywołamy ten przykład
po prostu damy dwie piątki do naszej kolekcji później bez problemu możemy je
wyciągnąć tak wykorzystując poll teraz jeżeli dodamy trzeciego add'a
i próbujemy to wywołać to dostaniemy exception że queue jest full natomiast
jeżeli wykorzystamy w tym miejscu offer oraz wypiszemy co zwraca
ta metoda to nie dostaniemy już wyjątku tylko po prostu dostaniemy false
z tego względu że nie udało się znaleźć tego elementu zwiększymy teraz capacity na przykład
na 3 to bez problemu uda się dodać kolejny element i dostaniemy w tym miejscu true
okej jeżeli teraz sobie podmienimy interfejs queue na
deque czyli double ended queue to możemy dalej wykorzystywać wszystkie te metody
które mieliśmy w queue ale teraz te metody mają dodatkowo rozróżnienie
możemy wywołać add ale możemy zamiast tego wywołać add first
lub add last tak i dokładnie wskazać na który koniec
tej kolejki ma być dodany element tak żeby zachować to samo zachowanie teraz
zrobimy add last tak sobie wyprintujemy co tam da i teraz
możemy w tej samej kolejności ściągnąć w jaki dodaliśmy tak czyli wykorzystamy
poll first prawda teraz moglibyśmy zrobić zamiast
poll first możemy zrobić na przykład poll last tak na queue nie byliśmy w
stanie tego zrobić i teraz zauważ że ściągamy elementy powiedzmy
z tej kolejki w odwrotnej kolejności niż je wrzucaliśmy tak i w ten sposób możemy
uzyskać właśnie efekt stosu tak okej cała reszta metod między
queue a deque nie różni po prostu wykorzystując add czy powiedzmy
jakiegoś polla element remove i tak dalej musimy wyspecyfikować
o który koniec tej kolejki nam chodzi okej to jest koniec tej lekcji
jest to również koniec rozdziału o kolekcjach bardzo dziękuję ci za
poświęcony czas i mam nadzieję że zdobyta wiedza pomoże ci w rozwiązywaniu codziennych
problemów dzięki wielkie do usłyszenia