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 tej i kilku kolejnych lekcjach będziemy się
trochę dokładnie przyglądali temu co się dzieje z naszym kodem w momencie kiedy go
uruchamiamy na wirtualnej maszynie javy nauczymy się też korzystać z narzędzia
jakim jest visualvm przyjrzymy się też czym są heap dump'y thread dump'y
jak możemy monitorować co się dzieje z tą aplikacją okej
teraz zanim przejdziemy dalej powinieneś mieć zainstalowane visualvm
możesz go sobie pobrać ze strony projektu lub możesz
też jeżeli posiadasz na przykład dystrybucję oracle jdk
to po prostu wykorzystać je sobie ona się po prostu znajduje wtedy w katalogu
z binarkami z jdk to narzędzie jest na licencji gnu
więc jest w zupełności darmowe okej nieważne w jaki sposób
zdobyłeś to narzędzie jak je uruchomić powinno ono wyglądać mniej więcej tak
ja używam wersji 1.4.2 ty możesz mieć inną w każdym
razie jeżeli uruchomimy powinniśmy widzieć tutaj listę wszystkich
procesów java do których mamy dostęp z poziom tego uruchomienia na
naszym hoście czyli tutaj w local ona widzi między innymi visualvm
jak i powiedzmy proces idei oraz jakiegoś runnera którego
ideału używa okej i teraz uruchomię pewien proces javowy który
po prostu będzie służył do powiedzmy uczenia
się tego narzędzia więc zaraz przyjdę do idei ten program
jest stosunkowo prosty i powiedzmy nudny po prostu w jakimś loop'ie
wypisuje jakiś napis oraz zamraża wątek na dwie sekundy
okej jak go sobie uruchomimy to
teraz jak już on tutaj działa to powinniśmy zobaczyć go na liście w naszym visualvm
znajdujemy nasz proces z listy tak
tutaj klikamy na niego dwa razy już na sam początek dostajemy garść informacji o
kontekście wykonania tego procesu dostajemy takie informacje jak to co
jest główną klasą tak ponieważ jeżeli odpalamy na przykład jara to tam może
się znajdować kilka main'ów i podczas jego uruchomienia będziemy wskazywali co
jest mainem takim głównym prawda dostajemy informację o tym na jakim
na jakiej maszynie jest uruchamiany program oraz dostajemy powiedzmy
listę argumentów jvm'owych oraz listę properties
dzięki tym argumentom możemy w
pewien sposób powiedzmy tweak'ować i dostrajać nasz jvm tak one są
przekazywane na przykład przez idee w tym momencie tak i
tutaj jeszcze jest system properties to jest taki powiedzmy mechanizm
dzięki któremu możemy powiedzmy trochę wysterowywać trochę aplikację z
tym properties możemy przekazywać przez jvm argumenty na przykład wykorzystując sobie
taki powiedzmy prefiks minus d teraz tutaj
jest wstawiony na przykład coś takiego jak file encoding czyli powiedzmy
jakaś taka taki properties który mówi o tym jakie jest kodowanie domyślne tak
i on też już tutaj pojawił później system properties a okej to są jakieś
podstaowe rzeczy tak jeżeli sobie coś weżmiemy jakiś inny proces też możemy zobaczyć z
jakimi innymi parametrami on jest odpalany jak widzimy w idei jest ich dość
sporo tutaj tak i wrócimy do naszego no
i ok i poza tym są jeszcze dwa interesujące nas powiedzmy tutaj okna
jednym z nich jest monitor i w monitor mamy takie rzeczy
jak na przykład to jak jest wykorzystywane w czasie aplikacji cpu
oraz garbage collector tak czym jest gt zaraz się dowiemy kolejną
z takich metryk która nas może interesować heap heap to jest taki
obszar pamięci w której trafiają powiedzmy wszystkie tworzone przez nas obiekty
tak czyli powiedzmy tworzymy nowe arrays listy nowe
jakieś obiekty one wszystkie tutaj trafiają nam właśnie do góry i używając tej metryki
możemy sobie to dość łatwo śledzić tutaj mamy załadowane
przez nasz program klasy tak na jvm mamy takie byty
jak class loader'y dzięki nim możemy dynamicznie doładować
klasy więc rozmiar tych załadowanych klas może się zmieniać w sensie ich liczba
dalej idąc mamy tutaj okienko
z thread'ami to są te wątki thready możemy wykorzystywać do
tego żeby sobie zrównoleglić wykonanie jakiegoś programu tak czy
powiedzmy mamy jakiś różne działania w naszym programie na przykład mamy jakiś
serwer http to będziemy mieli wątek ktoś na przykład odbiera
jakieś requesty i będziemy mieli na przykład jakąś pulę wątków
która będzie obsługiwała te requesty tak jak to dokładnie działa to
i co to jest to dowiemy się w rozdziale o wielowątkowości tutaj
tylko podkreślę że jak widzimy mamy coś co jest live threads
i mamy też podzbiór tych live thread'ów które są daemon
tak różnica między nimi jest taka że jeżeli mamy daemon thread
to jeżeli zostaną same daemon thready w naszej aplikacji czyli
powiedzmy daemonów i live będzie tyle samo no to w tym momencie nasza
aplikacja się zamknie tak to jest też powiedzmy mozemy z tego miejsca patrzeć
jak to wygląda mniej więcej okej przejdźmy teraz do threads skoro już przy tym
jesteśmy tutaj możemy sobie podejrzeć
poszczególne thready w naszej aplikacji niestety ja przynajmniej nie potrafię zobaczyć
które są daemon a które nie z tego miejsca ale zasadniczo możemy zobaczyć ile
czasu poszczególne thready powiedzmy są uruchamiane tak
czyli powiedzmy widzimy że w tym miejscu jest nasz main thread który zasadniczo śpi
w tym miejscu o tak i ja praktycznie tutaj powiedzmy nic nie
zużywam tak okej dobra też z tego miejsca
możemy zrobić coś co się nazywa thread dump'em czyli zrzutem wątków
ale o tym powiem w oddzielnej lekcji oraz tutaj z miejsca monitor
możemy sobie coś co się nazywa heap dump okej
i o tym też powiem w innej lekcji a te lekcje powiedzmy
to jest wszystko potrafimy już przejrzeć na przykład parametry z jakimi został uruchomiony jvm
teraz możemy podejrzeć takie podstawowe metryki okej dzięki
wielkie i do usłyszenia