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ść witam cię w rozdziale poświęconym wielowątkowości
w javie jest to prawdopodobnie jeden z najcięższych tematów w tym kursie
ale zarazem jest najciekawszy zacznijmy
od tego czym jest wielowątkowość i do czego ona nam jest potrzebna pierwszym
faktem który nas może zainteresować jest to że procesory mają wiele rdzeni i
są w stanie obsłużyć wiele wątków jednocześnie też część
operacji które wykonujemy które my wywołujemy czy to jakieś requesty do
jakiegoś serwera http czy wysłanie jakichś mail i różne takie operacje one trwają
prawda część z nich czasami się zdarza że mogą zostać zrównoleglone
trochę wynika z wymagań jaki nam stawia klient prawda no
ale jeżeli mogą być zrównoleglone czy mają pewną taką specyfikę to jesteśmy
w stanie jej odpalić na wielu wątkach dzięki temu możemy na przykład mieć
trzy operacje które między którymi na przykład nie ma żadnych zależność tak
jedna na drugą nie musi czekać ale one nie muszą się palić powiedzmy muszą
się wykonać żebyśmy mogli na przykład oddać użytkownikowi sterowanie
tak wczytać mu jakąś kolejną stronę no i dzięki temu jeżeli
mamy wiele wątków tak na naszym procesorze to możemy to wszystko odpalić na trzech
wątkach na przykład tak i przez to nie czekać na trzy operacje tylko
powiedzmy czekać tak naprawdę na najdłuższą z nich w tym momencie okej
to jest pewnie fajne tak i
powiedzmy daje wiele możliwości ale niestety w związku
z tym pojawiają się też pewne problemy aplikacje które są wielowątkowe serwery
jakieś takie programy są dużo bardziej skomplikowane tutaj
tylko wylistuje pewne problemy które my jeszcze później poznamy pierwszym z
nich są visibility problem on pojawia się w javie w momencie kiedy mamy
jakiś mutowalny state tak i mamy wiele wątków jeden
wątek może na przykład zmienić jakąś zmianę tak problem
polega na tym że zmienne które zmieniamy one nie być widoczne
dla pozostałych wątków tak to co ustawiliśmy w jakiejś zmiennej wątku
1 może nie być widoczne w wątku 2 od razu albo w ogóle tak
są w javie sposoby żeby to obejść nie są zbyt trudne
ale jest problem z tym żeby o tym pamiętać po prostu kolejnym problemem jest race
conditions w momencie gdy mamy kilka wątków i jakiś znowu mutowalny
state pomiędzy to na przykład jeden wątek może chcieć przykładowo
najgorszy przykład jest zaimplementować jakąś zmienną tak inkrementacja
nie jest atomowa czyli powiedzmy odczyt i zapis są dwie oddzielne
operacje no i teraz jeżeli wątek na przykład odczytuje wartość
jakieś longa tak na podstawie tego dodaje do tego jedynkę i później zwraca i
tam zapisuje tą wartość to w międzyczasie już inny wątek mógł to zmienić tak to jest
przykład race conditions kolejną rzeczą są deadlocki tak
z tego względu że jeżeli mamy jakieś blokowanie tak czyli jakiś wątek
nie może kontynuować pracy zanim inny nie skończy a ten
drugi może mieć taką sytuację że on nie zacznie dopóki ten pierwszy nie skończy tak
no i w tym deadlock jest czymś takim że mamy takie zazębienie
między wymaganiami poszczególnych wątków też zobaczymy jeszcze jak
to działa w kodzie jeszcze kolejną rzeczą jest resource starvation mamy
takie sytuacje kiedy nasze zasoby na naszym komputerze czyli takie na przykład cpu
ram jakiś system plików czy na przykład network
tak one mogą być na przykład za bardzo wykorzystywane
przez niektóre wątki i przez to nie są dostępne dla innych przykładowo
jeżeli mamy na przykład cpu i naprodukujemy sobie tyle wątków nie damy
żadnego ograniczenia każda operacja będzie mogła tworzyć kolejny wątek to
możemy skończyć z tym że mamy 100 200 wątków i każdy
na przykład chce czas cpu w tym momencie i teraz nasz procesor tylko skupia się na przełączeniu
kontekstu tak no to wtedy tak naprawdę nasz program może w ogóle nie iść do przodu
w tym momencie jedną pewnie z najbardziej takich problematycznych
rzeczy jest to że pomijanie tych wszystkich wcześniejszych problemów
tak rozwiązywanie ich wykorzystuje pewne abstrakcje które
sprawiają że nasz program nie jest już taki klarowny jak był na początku w momencie kiedy mieliśmy
co prawda długo trwający program synchroniczny tak czyli
którym po prostu lecieliśmy linijka po linijce każdą operację tak
tutaj mamy go odpalonego na wielu wątkach i on już wygląda dużo dziwniej
tak jest dużo cięższy tak jakby do debugowania do naprawienia
problemu do rozwijania tego kodu tak celem tego rozdziału
to jest po pierwsze naocznienie tych problemów i
też podanie pełnych wskazówek jak sobie z nimi radzić są pewne koncerty w javie
które pozwalają rozwiązywać te problemy w pewnym stopniu tak mimo
wszystko programowanie współbieżne przynajmniej tutaj nawet w javie ciągle
jest ciężkim problemem mam nadzieję że mimo wszystko sobie poradzimy
startujmy