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ść poznaliśmy już dużo takich
funkcjonalności jakie ma klasa files potrafimy wyciągać
i modyfikować metadane z danego powiedzmy pliku czy katalogu tak ale
są jeszcze w tej klasie takie operacje typowe powiedzmy jakie przeprowadzamy
w naszej przeglądarce plików takie operacje jak przenoszenie kopiowanie
dodatkowo jeszcze są takie rzeczy jak iterowanie na przykład po całej
strukturze katalogów tak czyli na przykład rekursywne schodzenie i wyciąganie każdego
pliku po kolei jak też również możliwość pracy z katalogami
plikami tymczasowymi czyli z takimi które po restarcie naszego systemu po
prostu znikną zacznijmy od takiej prostej operacji jaką jest po prostu kopiowanie
plików wykorzystujemy do tego metody copy która po prostu przyjmuje
source oraz target tak w postaci path skąd mają być
przekopiowane jakieś pliki do którego tak to może być też katalog oczywiście oraz
jeżeli chcemy podczas przekopiowania nadpisywać jakąś zawartość
to warto wtedy flagę replace existing domyślne
zachowanie bez tej flagi jest takie że jeżeli znajdzie się coś to byśmy nadpisali
to metoda copy po prostu wyrzuci wyjątek analogicznie
do copy istnieje metoda move która po prostu przenosi dane pliki tak tutaj
również wykorzystujemy flagę replace existing jeżeli chcemy nadpisać wszystko
co jest w targecie ponadto możemy wylistować wszystkie pliki które znajdują
się pod danym path'em tutaj tworzy path wykorzystując pusty string jest
to po prostu obecne working directory tak w wyniku działania tej metody
dostajemy stream który ja po prostu tutaj printuje jest to stream path tutaj
dostajemy pliki które znajdują się w danym katalogu tak wskazanym
przez nas zauważ że metoda list nie działa rekursywnie to znaczy
dostaniemy tylko jeden poziom tak nie możemy wchodzić w te katalogi ale
możemy to zrobić wykorzystując już metodę work tak ona wygląda podobnie też
dostaje path i też zwraca strumień path'ów tylko teraz dostajemy
już wszystkie pliki które powiedzmy znajdowały się i w katalogach i
podkatalogach możemy też sobie ograniczyć poziom jak
głęboko ma schodzić ta metoda na przykład do dwóch jeżeli nie wyspecyfikujemy
parametru max to w to miejsce jest max value z integera
a więc zostaną przejrzane wszystkie katalogi niezależnie jak głęboko się znajdują zauważ
że część tych metod które wykorzystywaliśmy rzucają io exeption
oraz inne exeptiony dziedziczą po tym ja ze względu na czytelność
przykładów po prostu przerzucam ten exeption dalej wykorzystując metodę
walk możemy przyjść po tych katalogach i na przykład wyszukać wszystkie pliki które
spełniają rozszerzenie kropka java tak w tym momencie dostaniemy tylko jedną taką
jeden taki plik tak też zauważ że ze
względu na to że zrobiłem to absolute path na na tym pliku który jest naszym rootem
to też te wszystkie path'y które tutaj są wylistowane tak
o tutaj one również zawierają jest lecz jeżeli usuniemy
na przykład to i będziemy mieli sam src to w metodzie walk dostaniemy path
które zaczynają się które mają jako to właśnie to src więc
później byśmy musieli na nich zrobić albo to absolute jeżeli byśmy nie chcieli się przejmować
zmianą current working directory tak albo po prostu robimy
to absolute i już nie mam tego problemu zauważmy że tutaj możemy dostać
też katalog który ma nazwę coś tam coś tam kropka java więc
powinniśmy też stworzyć sobie odpowiedni predykat który nam odfiltruje tylko
pliki tak które nie są katalogami na przykład w ten sposób is
regular file po prostu kolejnymi metodami które są bardzo przydatne
i które są w klasie files są metody służące do tworzenia plików
tymczasowych oraz katalogów tymczasowych metoda create temp file tworzy
nam plik tymczasowy w domyślnym katalogu tymczasowym dla systemu
zaraz zobaczymy jaki to jest katalog w moim przypadku w każdym razie to są
katalogi które zazwyczaj są clean'owane w momencie kiedy system jest restartowany
powiedzmy tam będą się znajdowały pliki które mają znaczenie
w czasie trwania powiedzmy jednego uruchomienia danego
programu tak na przykład jakaś pamięć taka którą chcemy mieć
w tym uruchomieniu powiedzmy jest to coś dużego ale nie chcemy mieć
tego powiedzmy w ramie tak nie chcę mieć tego na heap to możemy sobie właśnie utworzyć takiego temp file
albo na przykład jest to coś co będziemy chcieli obsłużyć w kolejnym
uruchomieniu programu ale tylko w ramach jednego uruchomienia systemu ta metoda zwróci
nam path do tego pliku ten plik jest już utworzony możemy to sobie też sprawdzić
wykorzystując files exist tak istnieje możemy też zobaczyć gdzie on istnieje
u mnie to będzie taki katalog tak to jest katalog
który zawiera w przypadku maca właśnie pliki tymczasowe u was
on będzie się inaczej pewnie nazywał tak ta ścieżka wygląda jakby była trochę wygenerowana
to co jest ważne to to że metoda create ten files dba o to aby
te nazwy plików w tym katalogu tymczasowym powiedzmy nawet w tym domyślnym
nie powodowały kolizji już już istniejącymi plikami ona wewnątrz
ma pętlę będzie generowała tę nazwę tak długo
aż znajdzoe taką nieistniejąca okej ważną rzeczą jest to że
ten plik nie zostanie usunięty w momencie wywłączenia programu tylko przy właśnie przy restarcie
systemu ale możemy sobie wymusić aby ten plik został zamknięty
tak na przykład przez wywołanie to file delete on exit
tak w ten sposób jeżeli wyłączymy nasz program tak skończy się ten
main to ten plik zostanie usunięty okej i co możemy zrobić z takim wynikiem możemy
z nim zrobić dokładnie to samo z każdym innym tak to jest zwykły plik który zostanie
usunięty przez system możemy do niego coś zapisać możemy z niego coś odczytać z poziomu
javy tutaj też zauważ że używam files write i files lines
które są po prostu takimi skrótami na utworzenie strumienia zapisanie czegoś i zamknięcie
tak bądź też odczytania linii tutaj w przypadku line dostajemy po prostu strumień
linii z danego pliku zauważ również że
metodę create ten file możemy też sparametryzować przez root
path tak tutaj przez path którym mają być tworzone te pliki tymczasowe
i tutaj dalej się podaje prefiks lub sufiks tak lub oba
i w tym momencie po prostu ten plik zostanie wygenerowany w tym miejscu obecnie
w naszym current working directory tak w tym miejscu się on pojawił i teraz
ten plik nie zostanie nam usunięty przez system po restarcie tak ponieważ
to nie jest ten to nie jest ten path to nie jest ten
czasowy katalog ale mamy za to gwarancję że
tworząc ten plik tak nie dostaniemy żadnej kolizji z istniejącymi
już plikami więc to jest powiedzmy taki taki plus a możemy również
usunąć ten plik przy wychodzeniu z tego programu właśnie tak jak pokazywałem robiąc
to file delete on exit okej analogicznie do tymczasowych
plików możemy utworzyć tymczasowe katalogi tak wygląda to w ten sposób też
możemy zobaczyć że to jest faktycznie katalog tak tych katalogów i plików tymczasowych
możemy użyć na przykład podczas wczytywania jakiegoś inputu od
użytkownika przykładowo użytkownik może nam wysłać formularz jakiś
duży plik przez na przykład aplikację webową i teraz
my na poziomie tej aplikacji nie chcemy w momencie otrzymywania
tej wiadomości interpretować na bieżąco ponieważ będziemy blokowali użytkownika
w tym momencie tak to wczytywanie tego pliku będzie długo trwało tylko chcemy
go jak najszybciej przerzucić sobie na dysk na przykład właśnie do tymczasowego katalogu
bądź jako tymczasowy plik i następnie sobie dopiero przetworzyć z dysku ten
plik i wysłać jakieś powiadomienie użytkownikowi okej to wszystko na tę
lekcje dzięki wielkie i do zobaczenia