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ść w trakcie tej lekcji dokładniej przyjrzymy się interfejsowi
listy oraz jej implementacją okej listy całkiem już znamy
zasadniczo mamy podstawową taką implementację listy z array list na
którą najczęściej raczej wykorzystujemy z tego względu że drugą znaną
implementacja jest linked lista i ją raczej wykorzystamy w kilku takich specyficznych
przypadkach no i tak array lista pod spodem trzyma
te wszystkie elementy w jakimś array'u możemy zejść tutaj nawet zobaczyć
co tam się dzieje można kiedyś sobie przeczytać jak to jest zaimplementowane element
data pewnie to jest to o okej tu się znajdują wszystkie nasze elementy
array w javie pamiętajmy że są nierozszerzalne więc jeżeli dodajemy
tych elementów trochę tak to one w którymś momencie musi stworzyć jakiś
większy array i przepisać te elementy na początek jak tworzymy array to on
ma jakiś default capacity tutaj jest powiedzmy dobrane z tego tak
jakiś możemy tu znaleźć i on mniej więcej default capacity czyli
na początek tworzymy array i on ma 10 miejsc tak czyli jak 11
wrzucamy no to on musi usunąć stary i dorzucić nowy tak no i to
może trochę trwać tak powiedzmy jeżeli bardzo szybko nam rośnie array
to lepiej od razu stworzyć go większy albo wykorzystać w tym momencie linked listę
tutaj zdecydowaną przewagą array listy nad linked listą jest to że wyciąganie
tych elementów czyli robienie tych getów tak jest bardzo szybkie
tak ponieważ nie musi zostać przeliczone tak jakby miejsce gdzie się znajduje
po prostu jest zrobione i jest brany piąty element
z tego array'a który jest pod spodem na linked liście on by przeleciał od
jednego do drugiego końca i wziął ten element prawda musiałby przejść trochę
tak okej na liście tradycyjnie możemy zrobić oczywiście size is empty możemy
tego geta zrobić możemy też bardzo łatwo przejść na interfejs stream'owy
i tu po prostu wywołać stream tutaj możemy zrobić jakiś map i jeszcze
przypomnijmy sobie taką sytuację kiedy chcemy przejść na przykład ze streamowego
api z powrotem na kolekcję i chcemy mieć listę to to możemy wtedy wykorzystać
collect i tu mamy collectors to list i znowu mamy jak sobie zobaczymy
dalej mamy listę prawda alternatywnie możemy sobie już utworzyć array
listę wykorzystując arrays as list taki tutaj po prostu dodajemy w
odpowiedniej kolejności nasze elementy to jest pod spodem operator arrity
jest takie łatwe jak widzimy implementacja też dostarcza array listę okej
alternatywną implementacją dla array listy jest link lista no
ona po prostu składa się pod spodem z elementów które do siebie linkują tak
i dodanie każdego nowego elementu jest stosunkowo tanie z
tego względu że nie ma tutaj tego przepisywania tego array'a w momencie kiedy utworzyliśmy
powiedzmy zbyt dużą kolekcję tutaj ta linked lista
jest listą dwukierunkową to znaczy że każdy element w tej
liście linkuje do następnego i do poprzedniego minusem takiej listy jest
to że na przykład pobranie elementu który jest 50 z kolei wymaga
od nas przejścia od początku lub od końca w zależności od której strony jest
bliżej każdego elementu aby uzyskać ten element następny i
tak przejść aż do tego 50 wtedy możemy go zwrócić tak albo
na przykład usunąć i poprawić referencję w poprzednim i następnym obiekcie tak
tym loadzie z tego względu pobieranie elementów jest kosztowne usuwanie elementów
też jest stosunkowo kosztowne w zależności od tego jak duża jest
ta lista tak w array liście nie mieliśmy tego problemu po prostu robiliśmy pobranie
jednego elementu tak po prostu robiliśmy wyciągnięcie go z array'a tak i
lista już zwracała na ten element niezależnie czy mamy linked
listę czy array listę to na samej liście na tym interfejsie możemy
jeszcze wywołać poza add może wywołać add all i dodać jakąś inną kolekcje
tak tutaj on przyjmuje już collections tak tu wyciągamy po prostu
te elementy które mają się tutaj znaleźć z listy możemy usuwać i tutaj
pierwszą rzeczą jest to że możemy usunąć wykorzystując
equal czyli mamy ileś elementów i chcemy usunąć nie po
indeksie tylko chcemy usunąć na przykład jedynkę tak no i tutaj możemy
wykorzystać remove i on ma kilka przeciążeń i remove który otrzymuje
obiekt tak object będzie usuwał właśnie wykorzystując equals w
w tym momencie i musimy zadbać żeby takie equals'y faktycznie pozwalały na
usunięcie tego elementu ale o tym później możemy również bez problemu
usunąć po indeksie tutaj wtedy wystarczy że podajemy int'a i w ten
sposób usuwamy element który jest na indeksie pierwszy czyli tutaj pamiętając
o tym że mamy numeracje od zera w prawda obie te implementacje
linked list i array list są mutowalne prawda możemy dodawać usuwać elementy
prawda i po nich chodzić i jeszcze możemy z takiej implementacji czy z każdej innej
możemy stworzyć kolekcje listę która jest niemutowalna
tak czyli powiedzmy możemy z niej czytać ale nie możemy do niej wrzucać i update'ować
elementu możemy wykorzystać metodę unmodifiable list z
klasy collections która jest taką klasą utilsową z różnymi metodami fajnymi
właśnie tą metodę i podać jej tutaj naszą listę dowolną
która zostanie zamieniona na niemutowalną listę możemy teraz to sobie uruchomić
jak widzimy dostajemy wyjątek unsupported operation exception w
momencie kiedy próbujemy zrobić set na takiej liście od razu możemy też stworzyć
pustą niemutowalną listę wywołując po prostu empty list i tutaj pod spodem jest
niemutowalne wersja tak i sobie zobaczymy w dokumentacji to jest immutable
prawda i do niej jak już spróbujemy coś dodać to jest coś
nie halo tak w tym momencie leci wyjątek okej listy zachowują
kolejność elementów które się w nim znajdują prawda to jest jedna z takich głównych ich
cech teraz jeżeli one mają jakąś swoją kolejność możemy je sobie sortować
tak tutaj możemy wykorzystać po prostu list sort która
sprawi że ta lista zostanie posortowana wykorzystując komparator który tutaj
podamy jako że trzymamy integery które są comparable
jak sobie zajrzymy to możemy wykorzystać natural order z comparator tak i
tutaj bez problemu sobie posortować te elementy możemy też ktoś zrobić prawdopodobnie reversed
przy wykorzystaniu revered musimy tutaj jeszcze pokazać że to jest integer ponieważ
kompilator się trochę gubi w tym momencie no i bez problemu w odwrotnej kolejności możemy
postartować wykorzystując metodę sort też modyfikujemy
te listy prawda czyli nie dostajemy nowej listy która jest posortowana
zmieniamy tę samą listwę którą dostaliśmy jeżeli chcemy na przykład posortować i
w wyniku tego dostać nową listę ale starej nic zmienić tak to możemy po prostu sobie
skopiować tę listę tutaj najłatwiejszy sposób kopiowania to jest po prostu wywołanie
utworzenie nowej listy na przykład array listy i podanie jej jakiejś kolekcji
na przykład tej naszej poprzedniej listy jako parametr w konstruktorze i w tym momencie możemy
sobie właśnie stworzyć takie sortowanie bez zmiany starej wersji tutaj
widzimy okej to wszystko co chciałem ci powiedzieć o listach dzięki
wielkie i do usłyszenia