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 lekcji zajmiemy się setami czyli po polsku
zbiorami które mają te własność że wrzucane do niej
dane są deduplikowane tak czyli powiedzmy wrzucamy tam
3 razy 5 czy 3 razy foo tak to dostaniemy
tylko jeden element tak po prostu on zaznacza że dany element występuje
w danym zbiorze lub nie występuje podstawową najczęściej używaną
implementacją seta jest hashset ale istnieje tutaj jest pewna analogia do
tej hierarchii mapy tak istnieje też tree set i tutaj również
jest sorted set i navigable set jak to było w mapach okej
przejdźmy do kodu tak jak mówiłem na secie możemy robić podstawowe operacje
typu add tak wrzucamy jakieś elementy możemy na przykład 2 razy wrzucić
jedynkę później jak sobie wyprintujemy ten set widzimy że ten element
występuje już tylko raz tutaj tak później kolejną taką najczęściej
wykorzystywaną operacją jest contains sprawdzam po prostu czy dany element występuje
jako że set już implementuje collections
mapa nie implementowała collections to na secie możemy dodatkowo robić
jeszcze oczywiście remove możemy go policzyć oraz możemy zrobić add all między
innymi prawda oraz wszystkie inne metody które możemy wywołać na samym collections
niestety bezpośrednio na samych setach w javie nie jesteśmy w stanie zrobić
od razu intersekcji a jest operacja która czasami się przydaje jednak
a intersekcja to przypominam ten fragment w którym mamy powiedzmy jeden
set i drugi set tak intersekcją jest fragment który zawiera się
w obu tych setach tak jeżeli chcemy coś takiego zrobić nie tracąc powiedzmy
niemutując istniejących dwóch setów to musimy zaimplementować
sobie jakąś metodę która będzie tworzyła kopię jednego z setów
a następnie będzie wykonywała retain all to jest metoda
która sprawia że wszystko w tym secie zostaje tak w tym pierwszym co
też jest w secie numer 2 prawda jak widzimy po wykonaniu intersekcji
dostaliśmy dwójkę i trójkę która jest wspólną częścią
tych dwóch setów tak jak już mówiłem jeszcze
poza hash setem mamy tree set który implementuje sorted set oraz navigable
set działają one praktycznie tak samo jak mapy zresztą ciekawostką
jest to że implementacją tree set pod spodem jest
tree mapa z hash setem i hash mapą
dokładnie jest tak samo okej taki set możemy używać dokładnie
tak samo jak hash set jeszcze mamy kilka dodatkowych metod które pozwalają
nam na wyciąganie pewnych zależności między wartościami które tam wrzucamy
jako że w czasie wrzucania elementów do sorted set tak
jak na przykładzie tree seta te elementy są układane odpowiednio tak są sortowane
dzięki temu że ten set jest sortowany
w momencie kiedy wrzucamy do niego elementy to stosunkowo szybko jesteśmy w stanie
wyciągnąć first i last a przynajmniej w ogóle jesteśmy w stanie to
zrobić tak w przykładzie hash setu on w ogóle nie wiedział jak sortować te
elementy więc w ogóle nie szło powiedzmy wyliczyć co jest pierwsze a co ostatnie
jeżeli zamienimy interfejs sorted set na navigable set możemy
dodatkowo wyciągać wartości mniejsze bądź większe dla danego elementu
tak dokładnie to samo co mogliśmy robić na navigable map również
możemy wyciągać ceiling bądź floor zdanego setu tak dla
danej wartości w przypadku ceiling dostaniemy równy bądź wyższy
bądź nieistniejący czyli null element tak wartość a w przypadku
floor dostaniemy ten sam niższy bądź null dla danej
wartości możemy też chcieć trzymać w naszym tym tree secie jakieś
obiekty tak niekoniecznie jakiś powiedzmy czy to klasy string czy
to klasy integer ale też zdefiniowane przez nas wtedy musimy
albo utworzyć klasę która jest z comparable tak
czyli tutaj implementuje interfejs comparable albo dostarczyć jaki customowy
komparator dla niej ja tu stworzyłem dla niej klasę box którą wrzucam do naszego
tree setu i chcę aby ich porównywanie tych obiektów było względem
wartości value tak tutaj jest pole value no i tutaj
podstawiłem comparator tutaj wykorzystuję comparing tak comparator
comparing i jeszcze żeby zadbać o sytuację kiedy mamy tutaj w value null
to jeszcze postawiłem drugi komparator tak tutaj można
dodać ten wewnętrzny komparator jeszcze tak key comparator
którym już porównuje wartości po wyciągnięciu też razem z
null'ami tak i wtedy nie muszę się bać o null pointer exception tutaj już mamy
poszczególne elementy tego seta posortowane według właśnie
tego komparatora możemy również wykorzystać klaskę collections and
modifable set tak tutaj tą metodę i stworzyć z naszego setu
nowy set który będzie immutable tak czyli dodawanie kolejnych elementów
do tego seta będzie się po prostu kończyło unsupported exception tak
tak jak tutaj okej to wszystko co chciałem ci opowiedzieć o zbiorach i w
kolejnej lekcji jeszcze poznamy queue i deque dzięki wielkie i do usłyszenia