Zaawansowane aspekty języka Java
Czas trwania szkolenia:2 dni (16h)
Kod kursu:J/EXT
Poziom zaawansowania:
O szkoleniu Zaawansowane aspekty języka Java
W cenie otrzymasz:
- Materiały szkoleniowe
- Certyfikat ukończenia szkolenia
- W przypadku szkolenia w trybie stacjonarnym zapewnimy Ci również lunch oraz sprzęt niezbędny do nauki
Dla kogo?
- Osób, które chcą poznać język Java na wyższym poziomie oraz dowiedzieć się, jakie są możliwości optymalizacji działania aplikacji z wykorzystaniem dostępnych narzędzi, i technik programistycznych
Wymagania
- Podstawowa umiejętność programowania w języku Java
Zalety
- Przekrojowe omawianie zagadnień oraz przykłady oparte o życiowe problemy
- Promowanie obowiązujących konwencji i dobrych praktyk programistycznych
- Minimalna teoria oparta na praktycznych przykładach i warsztatach
- Praktyczna wiedza uwzględniająca zmiany wprowadzone w najnowszych wydaniach Javy
Cele szkolenia
- Nabycie umiejętności zaawansowanego programowania w Javie z uwzględnieniem nowości wprowadzanych do języka
- Poznanie niuansów języka Java i ich wpływ na wydajność napisanego kodu
- Zastosowanie technik i standardowo dostępnych narzędzi dla osiągnięcia jeszcze bardziej wydajnej aplikacji końcowej
Program
Zaawansowane aspekty praktycznego użycia Javy
- Zasady tworzenia własnych adnotacji i ich procesowanie z wykorzystaniem refleksji
- Typy generyczne z operatorami extend / super / &
- Typy wyliczeniowe jako obiekty typu Singleton lub fabryki obiektów
- Wprowadzenie do typów zapieczętowanych (sealed types) i ich praktyczne zastosowanie
- (Opcjonalnie) Interpolacja Stringów oraz praktyczne tworzenie własnych implementacji String Template
Programowanie funkcyjne w Javie
- Zasady programowania funkcyjnego jako podstawa współczesnego programowania
- Lambdy i interfejsy funkcyjne
- Typowe błędy w tworzeniu typów niemutowalnych w Javie
- Rekordy a ich zastosowanie w programowaniu funkcyjnym
- Pattern matching z wykorzystaniem konstrukcji if / switch oraz typów zapieczętowanych
- Typowe błędy podczas używania typów Optional / Stream
- Prymitywne odpowiedniki strumieniu i interfejsów funkcyjnych
- NIO a funkcyjność
- Budowanie zaawansowanego procesowania danych z wykorzystaniem strumieni i złożonych kolektorów
- Obiektowe wzorce projektowe a programowanie funkcyjne
Optymalizacja obliczeń
- Wołanie natywnych aplikacji z wykorzystaniem Process API oraz Foreign Linker API
- Optymalizowanie procesowania Stringów w różnych praktycznych scenariuszach
- Vector API jako alternatywa dla bezpośredniego paralelizmu
Wirtualne wątki
- Porównanie wątków fizycznych i wirtualnych
- Potencjalne problemy w używaniu wirtualnych wątków
- Structured Concurrency - nowe spojrzenie na programowanie asynchroniczne w Javie
- Popularne frameworki a wirtualne wątki
Modularność Javy (JPMS)
- Wprowadzenie do JPMS
- Problemy we wprowadzaniu modułów do istniejących aplikacji
- Budowanie własnych, zoptymalizowanych obrazów JVM
- Budowanie modularnych aplikacji z wykorzystaniem serwisów
Rozszerzenia Języka Java z wykorzystaniem popularnych bibliotek (Opcjonalnie)
- Lombok - zastosowanie zaawansowanych adnotacje @ExtensionMethod, @SuperBuilder, @Accessors
- MapStruct - wykorzystanie jako konstruktor kopiujący / deep cloning
- Jackson / Gson - nietypowe przypadki związane z serializacją obiektów do formatu JSON