KURS JAVA / KOTLIN
Cena szkolenia Cena szkolenia wynosi 90 zł za 60 min. Ilość godzin szkolenia jest zależna od postępów w nauce uczestnika kursu oraz ilości czasu, którą będzie potrzebował do realizacji zadań i projektów zleconych w ramach szkolenia. Opis kursu Szkolenie przygotowuje do pracy na stanowisku Programista Java, Java Junior Developer lub podobnym. Po zakończeniu szkolenia uczestnik kursu będzie w stanie tworzyć oraz rozwijać aplikacje w języku Java w standardzie Java 12. W aplikacjach z powodzeniem wykorzysta komunikację bazodanową przy użyciu biblioteki JDBC/JDBI lub frameworka Hibernate/JPA. Dodatkowo profil użytkownika będzie wzbogacony o umiejętność posługiwania się językiem Kotlin. Zapewnia to możliwość dalszego rozwijania się w kierunku tworzenia zarówno aplikacji webowych jak i mobilnych. Podczas szkolenia uczestnik kursu pozna dodatkowo wiele innych narzędzi wspomagających pracę z opisanymi wyżej technologiami. W ramach szkolenia uczestnik kursu rozwiąże ogromną ilość zadań teoretycznych i praktycznych, które skutecznie przygotują go do rozmowy kwalifikacyjnej. Wiedza uczestnika kursu będzie systematycznie sprawdzana w trakcie próbnych rozmów kwalifikacyjnych, które odbywają się w języku polskim lub angielskim. Po zakończeniu szkolenia uczestnik kursu będzie posiadał kilka dużych projektów, które potwierdzą jego praktyczne umiejętności posługiwania się narzędziami i językami programowania, które pojawiły się w kursie. Każdy kolejny etap projektu będzie indywidualnie sprawdzony i oceniony przez mentora. Zagwarantuje to zgodność projektów z przyjętymi założeniami oraz dobrymi praktykami programistycznymi, jak również wymusi systematyczną pracę nad projektami. Dodatkowo uczestnik kursu otrzyma zadania rozwijania lub modyfikowania istniejących już projektów oraz ich analizy pod kątem wyszukiwania błędów. 2
Szkolenie zawsze odbywać się będzie w formie spotkań indywidualnych, dzięki czemu tempo kursu zostanie dopasowane do konkretnych potrzeb uczestnika kursu. Potrzebne aplikacje i narzędzia Komputer / laptop z dowolnym systemem operacyjnym i zainstalowanym zestawem narzędzi do budowania aplikacji pojawiających się w trakcie szkolenia. Potrzebne oprogramowanie zostanie szczegółowo opisane oraz zainstalowane na pierwszym darmowym spotkaniu testowym lub w momencie, kiedy nastąpi konieczność jego wykorzystania w trakcie szkolenia. Aplikacje potrzebne do nawiązania połączenia: Team Viewer oraz Skype. Na życzenie uczestnika kursu będzie możliwość używania innej aplikacji zdalnego pulpitu lub komunikatora głosowego. Na pierwszym darmowym spotkaniu testowym oceniona zostanie jakość połączenia. Na tej podstawie przeprowadzona będzie konfiguracja, która pozwoli zapewnić najlepszą jakość dźwięku oraz obrazu podczas szkoleń. Umiejętności potrzebne przed rozpoczęciem kursu Kurs przeznaczony jest dla osób o różnym stopniu zaawansowania. W szkoleniu uczestniczyć mogą osoby, które nie miały do tej pory nic wspólnego z programowaniem, ale również osoby, które już posiadają doświadczenie na podobnym stanowisku. Celem szkolenia jest przygotowanie do pracy programisty, jak również podnoszenie kwalifikacji osób już pracujących w branży IT. Istnieje możliwość rozpoczęcia szkolenia od wybranego punktu w planie szkolenia. Kurs poprzedzony jest wtedy szczegółową rozmową kwalifikacyjną w języku polskim lub angielskim. Na podstawie rozmowy zostanie oceniony poziom uczestnika kursu z zakresu materiału przed wybranym punktem w planie szkolenia. 3
Plan szkolenia 1. Zagadnienia podstawowe Konfiguracja i uruchomienie środowiska programistycznego Zmienne Proste typy danych Słowo kluczowe final Klasy opakowujące proste typy danych Słowo kluczowe var Operatory Pobieranie i prezentacja danych Instrukcje sterujące i pętle Instrukcja switch w wersji Java 12 Tablice jednowymiarowe i wielowymiarowe Rozszerzona pętla for Zarządzanie tablicami z wykorzystaniem metod klasy Arrays Podział programu na metody Stos i sterta Przekazywanie argumentów do metod Metody o zmiennej ilości parametrów Zwracanie wartości przez metody Przeciążanie metod Obsługa zasobów tekstowych klasa String Zarządzanie pojedynczymi znakami klasa Character Konwersje z napisu na inny typ danych Konwersje z innego typu danych na napis Omówienie klas StringBuilder oraz StringBuffer Kodowanie znaków w języku Java Wyrażenia regularne 2. Programowanie obiektowe Definicja klasy i obiektu Referencja do obiektu Omówienie założeń enkapsulacji Praca z modyfikatorami dostępu Pola składowe klas Metody dostępowe i modyfikujące Referencja this 4
Przegląd wszystkich rodzajów konstruktorów Wywołanie jednego konstruktora z innego Domyślna inicjalizacja Bloki inicjalizujące Statyczne składniki klasy Statyczne bloki inicjalizujące Metody wytwórcze Klasa Object oraz klasa Objects Statyczne klasy zagnieżdżone i klasy wewnętrzne Klasy osłonowe Kompozycja 3. Dziedziczenie Klasy nadrzędne i podrzędne Słowo kluczowe super Konstruktory w dziedziczeniu Przesłanianie metod Składniki statyczne w dziedziczeniu Polimorfizm Przypisania klas nadrzędnych i rzutowanie w dziedziczeniu Operator instanceof Metody i klasy z modyfikatorem final Omówienie problemu diamentowego Klasy i metody abstrakcyjne Anonimowe klasy podrzędne 4. Refleksje Klasa Class Wczytywanie zasobów Wyliczanie elementów klas Tworzenie i kontrolowanie obiektów Wywoływanie metod Praca z tablicami Klasa Proxy Praktyczne przykłady wykorzystania programowania refleksyjnego 5
5. Interfejsy Deklarowanie interfejsu Metody abstrakcyjne, domyślne i statyczne w interfejsie Metody publiczne i prywatne w interfejsie Pola składowe w interfejsie Implementowanie interfejsu Konwersja do typu interfejsu Rzutowanie i operator instanceof w pracy z interfejsem Implementowanie wielu interfejsów rozstrzyganie konfliktów Omówienie wbudowanych interfejsów od Java 8 Anonimowa implementacja interfejsu Interfejsy funkcyjne Wyrażenia lambda Wyrażenia lambda i zasięg zmiennych Funkcje wyższych rzędów Referencje do metod i konstruktora Przykłady zastosowania interfejsów a praktycznych przykładach 6. Algorytmika Algorytmy badające właściwości geometryczne Algorytm badające właściwości matematyczne Konwersje pomiędzy systemami liczbowymi Badanie ciągów danych pod kątem wybranych właściwości Sortowanie ciągów danych Zastosowanie metody dziel i zwyciężaj Wybrane metody numeryczne Programowanie zachłanne Algorytmy na tekstach Wybrane algorytmy kryptograficzne Rekurencja Przegląd wybranych struktur danych 7. Obsługa wyjątków Hierarchia klas wyjątków Sposoby zgłaszania wyjątków Sposoby przechwytywania wyjątków Zarządzanie wyjątkami kontrolowanymi Wyrażenie try z określeniem zasobów 6
Klauzula finally Ponowne rzucanie wyjątków Implementacja własnych klas do obsługi wyjątków Dziedziczenie klas wyjątków Asercje Dobre praktyki wykorzystywania wyjątków 8. Wzorce projektowe Klasyfikacja wzorców projektowych Implementacja wzorców kreacyjnych Implementacja wzorców strukturalnych Implementacja wzorców czynnościowych 9. Kolekcje i mapy Omówienie hierarchii kolekcji Omówienie wzorca projektowego Iterator Listy Zestawy Kolejki Właściwości Zestawy bitów Zestawy wyliczeniowe Przegląd klas oraz interfejsów współpracujących z kolekcjami Mapy i widoki map Przegląd klas oraz interfejsów współpracujących z kolekcjami Implementacja kolekcji z wykorzystaniem metod statycznych Java 9 10. Strumienie Prezentacja założeń programowania funkcyjnego Omówienie zasady działania strumieni Tworzenie strumienia Przegląd wszystkich operacji strumieniowych Metody końcowe i pośrednie Zastosowanie wyrażeń lambda w pracy ze strumieniami Zastosowanie referencji do metod w pracy ze strumieniami Omówienie wzorca Lazy Evaluation podczas analizy pracy strumienia Typ Optional 7
Zastosowanie typu Optional w pracy ze strumieniami Strumienie typów prostych i strumienie równoległe Praktyczne przykłady wykorzystania strumieni 11. Programowanie uogólnione Klasy i metody uogólnione Ograniczenie typów Symbole wieloznaczne w typach podrzędnych Symbole wieloznaczne typów nadrzędnych Symbole wieloznaczne ze zmiennymi typami Nieograniczone symbole wieloznaczne Przechwytywanie symboli wieloznacznych Mechanizm wymazywania i metody pomostowe Ograniczenia wynikające z mechanizmu wymazywania Refleksje w programowaniu uogólnionym klasa Class<T> Przechwytywanie informacji o typie w czasie wykonywania programu Wykorzystanie programowania uogólnionego w przykładowych aplikacjach 12. Aplikacja Maven oraz Gradle Omówienie architektury i sposobu działania aplikacji Maven Analiza szablonów projektów Tworzenie oraz zarządzanie projektem z wykorzystaniem Maven Praca z plikiem konfiguracyjnym aplikacji Maven Cykle życia projektu Praca z modułami zewnętrznymi Generowanie repozytoriów Język Groovy Omówienie architektury i sposobu działania aplikacji Gradle Tworzenie oraz zarządzanie projektem z wykorzystaniem Gradle 13. Testy jednostkowe Konfiguracja projektu do pracy z frameworkiem JUnit 5 Cykl życia obiektu klasy testującej Adnotacje wykorzystywane w pracy z frameworkiem JUnit 5 Asercje wbudowane 8
Zwiększenie możliwości testujących framework Hamcrest Implementacja własnych klas do pracy z asercjami Testy powtarzalne Testy zagnieżdżone Testy parametryzowane Testy dynamiczne Interfejsy w pracy z testami jednostkowymi Konfiguracja projektu do pracy z frameworkiem Mockito Konfiguracja i przygotowanie mock obiektów Zarządzanie argumentami Partial mocks Konfiguracja obiektów spy Wstrzykiwania mock obiektów Dobre praktyki implementacji testów jednostkowych 14. Modułowość Omówienie założeń mechanizmu modułowości Prezentacja różnych rodzajów modułów Analiza pliku module-info.java Implementacja przykładowych aplikacji z wykorzystaniem mechanizmu modułowości 15. Implementacja kompletnych aplikacji Przedstawienie tematów projektów do implementacji Omówienie wzorca architektury wielowarstwowej Zarządzanie zasobami w formacie JSON komunikacja ze zdalnym API Zarządzanie zasobami w formacie JSON przechowywanie danych w generowanych plikach JSON Implementacja serwisu do wysyłania wiadomości email Implementacja serwisu do konwersji danych w formacie HTML Wykorzystanie poznanych mechanizmów do implementacji kompletnej aplikacji w architekturze wielowarstwowej 9
16. Aplikacje bazodanowe JDBC / JDBI Omówienie architektury aplikacji bazodanowej Instalacja środowiska bazodanowego Omówienie języka SQL Relacje w bazach danych Konfiguracja aplikacji do pracy z JDBC Przypomnienie wzorca architektury wielowarstwowej Implementacja kompletnej komunikacji bazodanowej z wykorzystaniem JDBC Przegląd bibliotek zewnętrznych do wygodnego zarządzania komunikacją bazodanową z poziomu JDBC Implementacja komunikacji bazodanowej z wykorzystaniem biblioteki JDBI Wykorzystanie wzorców projektowych, programowania uogólnionego oraz refleksji przy zarządzaniu komunikacją bazodanową Transakcje Zarządzanie wynikami zapytań 17. Aplikacje bazodanowe Hibernate / JPA Omówienie architektury ORM na przykładzie Hibernate / JPA Omówienie i prezentacja cyklu życia obiektu w Hibernate / JPA Konfiguracja aplikacji do pracy z Hibernate / JPA Klasy mapujące tabele i ich adnotacje Analiza strategii generowania kluczy głównych Przegląd oraz implementacja wszystkich rodzajów relacji bazodanowych Dziedziczenie i kompozycja w Hibernate / JPA Mapowanie kolekcji w Hibernate / JPA Język HQL oraz JPQL Sposoby optymalizacji komunikacji bazodanowej Hibernate / JPA oraz mechanizmy cache Wykorzystanie wzorców projektowych i programowania uogólnionego w zarządzaniu danymi Architektura wielowarstwowa Implementacja kompletnej aplikacji zarządzającej komunikacją bazodanową z wykorzystaniem Hibernate / JPA 10
18. Wielowątkowość Pojęcie procesu i wątku Różne sposoby implementacji i uruchamiania wątków Przerywanie wątku Różne sposoby implementacji i uruchamiania procesu Zarządzanie wartościami zmiennych lokalnych w wątku Wątki użytkownika oraz wątki daemon Problem współdzielenia zasobów Synchronizacja Omówienie metod wait i notify Locks Różne sposoby implementacji problemu producent konsument Semafory Synchronizacja pracy wielu wątków przy użyciu mechanizmu latch Zadania współbieżne Executor, interfejs ExecutorService Przechwytywanie wyników obliczeń Callable, Future Cykliczne wykonywanie wątków ScheduledExecutorService Wartości atomowe Kolejki blokujące Klasa ConcurrentHashMap Przegląd innych struktur danych bezpiecznych dla wątków Strategie bezpiecznego korzystania z wątków Obliczenia asynchroniczne klasa CompletableFuture Algorytmy równoległe do zarządzania strumieniami i tablicami Framework Fork/Join 19. Programowanie reaktywne Omówienie Flow API Implementacja aplikacji realizującej założenia programowania reaktywnego Mechanizmy reaktywne do zarządzania strumieniami 20. Java - zagadnienia dodatkowe Parametry wiersza poleceń Garbage collector Pakiety Generowanie dokumentacji 11
Wyliczenia Rejestrowanie danych loggery Projekt Lombok Debugowanie Przetwarzanie danych wejściowych i wyjściowych Zarządzanie ścieżkami, plikami, katalogami Adnotacje Data i czas 21. Kotlin zagadnienia podstawowe Przegląd języków programowania wykorzystujących JVM Konfiguracja i uruchomienie środowiska programistycznego Zmienne Podstawowe typy danych Typy bez znaku Typy nullable Literały Zmienne var oraz val Konwersje pomiędzy typami Operatory Tablice jednowymiarowe i wielowymiarowe Klasy specjalizowane uproszczony zapis typów Napisy Instrukcje sterujące oraz pętle Instrukcje break oraz continue 22. Kotlin - funkcje Definiowanie funkcji Parametry funkcji Argumenty domyślne Argumenty nazwane Funkcje o zmiennej ilości argumentów Wartość zwracana przez funkcję typ Unit Funkcje oznaczone specyfikatorem infix Funkcje inline Rekurencja i funkcje oznaczone specyfikatorem tailrec Funkcje wyższych rzędów Typy funkcyjne Funkcje anonimowe 12
Wyrażenia lambda Słowo kluczowe it Zwracanie wartości z wyrażenia lambda Operator _ dla nieużywanych parametrów wyrażenia lambda Destrukturyzacja w wyrażeniach lambda 23. Kotlin programowanie obiektowe Definiowanie klasy i obiektu Omówienie założeń enkapsulacji Pola składowe w klasie Backing fields Pola stałe w czasie kompilacji compile-time constants Pola inicjalizowane z opóźnieniem słowo kluczowe lateinit Metody składowe w klasie Konstruktory primary constructors, secondary constructors Blok inicjalizatora słowo kluczowe init Implementacja funkcji dostępowych oraz modyfikujących Klasy zagnieżdżone Klasy wewnętrzne i anonimowe klasy wewnętrzne Wyrażenia obiektowe Deklaracja obiektów Obiekty towarzyszące Kompozycja 24. Kotlin dziedziczenie Omówienie założeń dziedziczenia Klasa Any Słowo kluczowe open Klasy nadrzędne i podrzędne Odwołanie do klasy nadrzędnej słowo kluczowe super Przesłanianie metod Polimorfizm Metody i klasy final Przesłanianie pól składowych Klasy abstrakcyjne Klasy ze specyfikatorem data 13
Klasy ze specyfikatorem sealed Klasy enum 25. Kotlin interfejsy i rozszerzenia Deklaracja interfejsu Implementowanie interfejsu Przesłanianie pól składowych interfejsu Przesłanianie metod interfejsu Dziedziczenie interfejsów Rozwiązywanie konfliktów związanych z implementowaniem wielu interfejsów Omówienie zasady działania rozszerzeń Funkcje rozszerzające Właściwości rozszerzające Funkcje i właściwości rozszerzające dla obiektów towarzyszących Rozszerzenia jako składniki klasy 26. Zarządzanie projektami GIT Omówienie architektury GIT Przegląd instrukcji GIT Rozgałęzianie i scalanie w GIT Aplikacje i wtyczki do pracy z GIT Praca ze zdalnym repozytorium 14