Menu Zamknij

Kurs Java / Kotlin

Cena szkolenia

Cena szkolenia wynosi 120 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 Java Developer lub podobnym. Po zakończeniu szkolenia uczestnik kursu będzie w stanie tworzyć oraz rozwijać aplikacje webowe w języku Java. W aplikacjach wykorzysta komunikację bazodanową przy użyciu mechanizmów JDBC, JDBI lub Hibernate/JPA oraz framework Spark. Aplikacje zostaną skonteneryzowane za pomocą narzędzia Docker. 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. Uczestnik kursu wykorzysta języki i technologie w najnowszych wersjach. Kurs cały czas rozwijany jest pod kątem najbardziej aktualnych rozwiązań wymaganych w branży IT.

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.

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.

Plan szkolenia

  • 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
  • Różne postaci instrukcji switch
  • Tablice jednowymiarowe i wielowymiarowe
  • Rozszerzona pętla for
  • Zarządzanie tablicami z wykorzystaniem metod klasy Arrays
  • Podział programu na metody
  • Stos i sterta
  • Omówienie zasady działania garbage collector
  • 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
  • Zagadnienia uzupełniające
  • 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
  • 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
  • Przegląd ważnych wbudowanych klas Java
  • Statyczne klasy zagnieżdżone i klasy wewnętrzne
  • Klasy osłonowe
  • Typ wyliczeniowy
  • Kompozycja
  • Rekordy
  • Klasy zapieczętowane (sealed)
  • Klasy ukryte
  • Zagadnienia uzupełniające
  • 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 oraz mechanizm pattern matching
  • Metody i klasy z modyfikatorem final
  • Omówienie problemu diamentowego
  • Klasy i metody abstrakcyjne
  • Anonimowe klasy podrzędne
  • Zagadnienia uzupełniające
  • Klasa Class
  • Wczytywanie zasobów
  • Wyliczanie elementów klas
  • Tworzenie i kontrolowanie
  • Wywoływanie metod
  • Praca z tablicami
  • Klasa Proxy
  • Konwersja zawartości obiektów do różnych postaci z wykorzystaniem mechanizmu refleksji
  • Praktyczne przykłady wykorzystania programowania refleksyjnego
  • Zagadnienia uzupełniające obiektów
  • 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
  • Przegląd interfejsów wbudowanych
  • 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 w praktycznych przykładach
  • Zagadnienia uzupełniające
  • 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
  • Zagadnienia uzupełniające
  • 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
  • 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
  • Zagadnienia uzupełniające
  • Klasyfikacja wzorców projektowych
  • Implementacja wzorców kreacyjnych
  • Implementacja wzorców strukturalnych
  • Implementacja wzorców czynnościowych
  • Zagadnienia uzupełniające
  • 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
  • Zagadnienia uzupełniające
  • 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
  • Zastosowanie typu Optional w pracy ze strumieniami
  • Implementacja własnych Collector-ów
  • Strumienie typów prostych i strumienie równoległe
  • Praktyczne przykłady wykorzystania strumieni
  • Biblioteka StreamEx 
  • Zagadnienia uzupełniające
  • 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
  • Przechwytywanie informacji o typie w czasie wykonywania programu
  • Wykorzystanie programowanie uogólnionego w przykładowych aplikacjach
  • Zagadnienia uzupełniające
  • Omówienie architektury i sposobu działania aplikacji Maven
  • Analiza szablonów projektów
  • Przegląd pluginów Maven
  • Tworzenie oraz zarządzanie projektem z wykorzystaniem Maven
  • Praca z plikiem konfiguracyjnym aplikacji Maven
  • Cykle życia projektu
  • Praca z modułami zewnętrznymi
  • Implementacja aplikacji wielomodułowych w oparciu o Maven
  • Generowanie repozytoriów
  • Zarządzanie wersjami dependencies – BOM
  • Zarządzanie wersjami projektu – Maven Flatten Plugin
  • Zarządzanie wersjami narzędzi projektu – Maven Enforcer Plugin
  • Zarządzanie zasobami – Maven Resources Plugin
  • Przygotowanie aplikacji produkcyjnej w oparciu o Maven
  • Język Groovy
  • Omówienie architektury i sposobu działania aplikacji Gradle
  • Tworzenie oraz zarządzanie projektem z wykorzystaniem Gradle
  • Implementacja aplikacji wielomodułowych w oparciu o Gradle
  • Przygotowanie aplikacji produkcyjnej w oparciu o Gradle
  • Zagadnienia uzupełniające
  • Konfiguracja projektu do pracy z frameworkiem JUnit
  • Cykl życia obiektu klasy testującej
  • Adnotacje wykorzystywane w pracy z frameworkiem JUnit
  • Asercje wbudowane
  • 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
  • Testy równoległe
  • Interfejsy w pracy z testami jednostkowymi
  • Mechanizm rozszerzeń JUnit
  • 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
  • Zagadnienia uzupełniające
  • 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
  • Zagadnienia uzupełniające
  • Przedstawienie tematów projektów do implementacji
  • Omówienie wzorca architektury wielowarstwowej
  • Omówienie wzorca DDD
  • 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
  • Zagadnienia uzupełniające
  • 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
  • Zapoznanie się ze wzorcem 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ń
  • Zagadnienia uzupełniające
  • 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
  • Optimistic locking oraz pessimistic locking
  • Hibernate / JPA oraz mechanizmy cache
  • Wykorzystanie wzorców projektowych i programowania uogólnionego w zarządzaniu danymi
  • Architektura wielowarstwowa oraz architektura DDD
  • Architektura wielowarstwowa
  • Implementacja kompletnej aplikacji zarządzającej komunikacją bazodanową z wykorzystaniem Hibernate / JPA
  • Zagadnienia uzupełniające
  • Omówienie architektury aplikacji webowej
  • REST
  • Omówienie założeń frameworka Spark
  • Przygotowanie aplikacji do pracy z frameworkiem Spark
  • Uruchamianie i konfiguracja serwera
  • Routing
  • Zarządzanie obiektami request oraz response
  • Przechwytywanie parametrów żądania oraz nagłówków
  • Przechwytywanie i zarządzanie cookies
  • Zarządzanie sesją
  • Filtry aplikacji webowej
  • Przekierowania
  • Zarządzanie błędami aplikacji webowej
  • Implementacja mechanizmów security
  • Dokeryzacja aplikacji webowej opartej o framework Spark
  • Zagadnienia uzupełniające
  • 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
  • Livelock i deadlock
  • 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
  • Synchroniczna i asynchroniczna komunikacja HTTP
  • Algorytmy równoległe do zarządzania strumieniami i tablicami
  • Framework Fork/Join
  • RxJava
  • Zagadnienia uzupełniające
  • Omówienie Flow API
  • Implementacja aplikacji realizującej założenia programowania
    reaktywnego
  • Mechanizmy reaktywne do zarządzania strumieniami
  • Zagadnienia uzupełniające
  • Parametry wiersza poleceń
  • Pakiety
  • Generowanie dokumentacji
  • Rejestrowanie danych z wykorzystaniem loggerów
  • Projekt Lombok
  • Biblioteka GSON
  • Parsowanie XML
  • Debugowanie
  • Przetwarzanie danych wejściowych i wyjściowych
  • Zarządzanie ścieżkami, plikami, katalogami
  • Adnotacje
  • 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
  • Zagadnienia uzupełniające
  • 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
  • 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
  • Zagadnienia uzupełniające
  • 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
  • Zagadnienia uzupełniające
  • 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
  • Klasy ze specyfikatorem sealed
  • Klasy enum
  • Zagadnienia uzupełniające
  • 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
  • Zagadnienia uzupełniające
  • Omówienie architektury GIT
  • Konfiguracja i personalizacja ustawień GIT
  • Klasyfikacja repozytoriów
  • Tworzenie repozytorium lokalnego
  • Zarządzanie plikami w ramach obszarów repozytorium
  • Rozgałęzianie i scalanie
  • Przegląd wszystkich operacji GIT
  • Aplikacje i wtyczki do pracy z GIT
  • Praca ze zdalnym repozytorium
  • Dobre praktyki tworzenia repozytoriów GIT
  • GitHub Pages
  • Zagadnienia uzupełniające

Materiały video

Wstecz 1 z 6 Dalej
Wstecz 1 z 6 Dalej

Newsletter

Scroll Up