Menu Zamknij

Kurs Java

Opis kursu

  • Płacisz za jeden miesiąc nauki.
  • Uczysz się tak długo, jak potrzebujesz.
  • Pełne wsparcie na każdym etapie nauki.
  • Pytasz o wszystko, tyle razy, ile potrzebujesz i wtedy, kiedy chcesz. Szybko otrzymasz odpowiedź.
  • Spotkania 1:1 online + nagranie ze spotkania.
  • Plan nauki dopasowany do Ciebie.
  • Dużo zadań i projektów praktycznych.
  • Stały feedback na Twój kod i strukturę projektów.
  • Uczysz się w swoim tempie.
  • Motywuję Cię do pracy i dbam o Twoje postępy.
  • Portfolio w kilka miesięcy.
  • Szukasz pracy w trakcie kursu.
  • Otrzymasz certyfikat ukończenia kursu.
promocja ikona
PROMOCJA – pierwsze spotkanie GRATIS

Już teraz

zapisz się na kurs​

Zostaw swoje namiary, a skontaktuję się z Tobą w sprawie kursu

    * - pola obowiązkowe

    Administratorem danych osobowych jest KM PROGRAMS KRZYSZTOF MAKOWSKI z siedzibą przy ul. Cicha 7, 42-454 Niegowonice, Polska. Dane osobowe osób korzystających z formularza kontaktowego przetwarzane są w celu identyfikacji nadawcy oraz obsługi zapytania przesłanego przez udostępniony formularz. Więcej informacji o przetwarzaniu danych osobowych, w tym o przysługujących Ci uprawnieniach, znajduje się w Polityce Prywatności.

    Plan kursu

    • Opis sposobu działania aplikacji Java
    • Różnica pomiędzy JVM, JRE, JDK
    • Różnica pomiędzy kompilatorem oraz interpreterem
    • Bytecode
    • Instalowanie i zarządzanie pluginami w IDE
    • Przegląd wersji języka Java
    • Instalacja narzędzi potrzebnych do uruchamiania aplikacji napisanej w Java
    • Przegląd i wybór najlepszego IDE do tworzenia aplikacji w Java
    • Pierwszy program w Java
    • Typowanie statyczne i dynamiczne
    • Typ i zmienna, słowo kluczowe var
    • Parametry typów liczbowych
    • Typy liczbowe całkowite i zmiennoprzecinkowe
    • Problem precyzji w liczbach zmiennoprzecinkowych
    • Stałe
    • Operacje na zmiennych liczbowych, różne wersje operacji dzielenia
    • Pobieranie, formatowanie i prezentacja danych
    • Pseudolosowość, generowanie wartości pseudolosowych różnego typu
    • Warunek logiczny i sposoby sprawdzania warunków logicznych
    • Instrukcje warunkowe, operator trójargumentowy warunkowy, warunki rozłączne
    • Switch oraz switch expressions
    • Pętle while, do while, for, foreach, instrukcje break oraz continue
    • W tej sekcji napiszesz kilkadziesiąt programów, które wspólnie przeanalizujemy
    • Podział kodu na metody
    • Sygnatura metody i jej różne postaci
    • Różnica pomiędzy parametrem oraz argumentem metody
    • Sprawdzanie poprawności argumentów metody
    • Zwracanie wyniku działania metody – słowo kluczowe return
    • Metody o zmiennej ilości argumentów
    • Method overloading
    • Metoda główna main  i jej parametry
    • Struktury aplikacji oparta na metodach
    • Praktyczne przykłady wykorzystania metod
    • Implementacja popularnych algorytmów – ćwiczymy podstawowe instrukcje i metody
    • W tej sekcji napiszesz kilkadziesiąt programów, które wspólnie przeanalizujemy
    • Teoria tablic
    • Uzasadnienie potrzeby wykorzystania tablic w języku Java
    • Tablice jednowymiarowe i dwuwymiarowe
    • Klasy Arrays i przykłady wykorzystania jej metod
    • Kopiowanie płytkie i głębokie
    • Porównywanie elementów w tablicach
    • Tablice nieregularne
    • Implementacja popularnych algorytmów – ćwiczymy tablice
    • W tej sekcji napiszesz kilkadziesiąt programów, które wspólnie przeanalizujemy
    • Sposoby kodowania znaków
    • Typ char
    • Omówienie obiektu typu String (jak działa pod spodem)
    • String Pool
    • Właściwości obiektu typu String
    • Zalety niemodyfikowalności napisów
    • Metody klasy String
    • Parsowanie i formatowanie napisów
    • Operacje na tablicy znaków
    • Klasa Character i jej metody
    • Klasy StringBuffer, StringBuilder oraz StringJoiner
    • Teoria wyrażeń regularnych
    • Przykłady wykorzystania wyrażeń regularnych
    • Wykorzystanie wartości Unicode w wyrażeniach regularnych
    • Klasy Pattern oraz Matcher.
    • Przegląd innych klas do przetwarzania napisów
    • Implementacja popularnych algorytmów – ćwiczymy napisy
    • W tej sekcji napiszesz kilkadziesiąt programów, które wspólnie przeanalizujemy
    • Stos i sterta
    • Zasady przechowywania w pamięci typów prostych i referencyjnych
    • Ggarbage collection
    • Garbage Collection Roots
    • Fazy mechanizmu garbage collection (mark, sweep, compact)
    • Obszary pamięci zarządzanych przez GC
    • Young Generation oraz Old Generation
    • Klasyfikacja i opis poszczególnych rodzajów GC
    • Przygotowanie aplikacji Java do pracy z konkretnym GC
    • Klasyfikacja błędów i wyjątków
    • Wyjątki kontrolowane i niekontrolowane
    • Słowa kluczowe throw oraz throws
    • Propagacja wyjątków
    • Blok try-catch, sekcja finally
    • Obsługa wyjątków niekontrolowanych oraz kontrolowanych
    • Ponowne rzucanie wyjątków
    • Sposoby rejestrowania informacji o błędach i ostrzeżeniach
    • Dobre praktyki rzucania i przechwytywania wyjątków
    • Zapisywanie danych do pliku tekstowego w podanej lokalizacji
    • Prezentacja różnych trybów pracy przy zapisie do plików tekstowych
    • Odczytywanie danych różnej postaci z pliku tekstowego
    • Omówienie sposobów prawidłowego zamykania połączenia z zasobem
    • Wykorzystanie sekcji try-catch do pracy z zasobami
    • Parsowanie, walidacja, filtrowanie, formatowanie danych z plików tekstowych
    • Przetwarzanie danych z plików innych niż tekstowe (np. CSV)
    • W tej sekcji napiszesz kilkadziesiąt programów, które wspólnie przeanalizujemy
    • Klasa, obiekt
    • Hermetyzacja, enkapsulacja
    • Pola składowe, specyfikatory dostępu
    • Różne postaci konstruktorów, wywołanie konstruktora w innym konstruktorze
    • Metody składowe instancyjne
    • Gettery, settery
    • Piszemy aplikacje, wprowadzając pierwsze klasy z zachowaniem dobrych praktyk OOP
    • Słowo kluczowe this
    • Klasy zagnieżdżone i wewnętrzne
    • Rekordy
    • Typy wyliczeniowe enum
    • Klasy Object, Objects
    • Metody equals, hashCode, kontrakt equals – hashCode
    • Metoda toString
    • Pola i metody statyczne
    • Bloki inicjujące
    • Piszemy aplikacje, wprowadzając podział na paczki i klasy, budujemy strukturę aplikacji
    • BigDecimal, BigInteger, klasy do przechowywania daty i czasu
    • Klasy lokalne, klasy osłonowe
    • Dziedziczenie i zasady dziedziczenia
    • Przesłanianie metod
    • Metody oraz klasy final
    • Utility class
    • Polimorfizm statyczny oraz dynamiczny
    • Operator instanceof
    • Kompozycja, agregacja, asocjacja
    • Klasy abstrakcyjne
    • Interfejsy
    • Implementacja anonimowa klasy abstrakcyjnej oraz interfejsu
    • Interfejsy funkcyjne
    • Składniki możliwe do umieszczenia w interfejsie
    • Piszemy aplikacje, wprowadzając warstwy połączone przez interfejsy
    • Typy generyczne
    • Interfejsy wbudowane
    • Metody domyślnych i statyczne z interfejsów wbudowanych
    • Wyrażenia lambda
    • Wyrażenia lambda a zasięg zmiennych
    • Funkcje wyższych rzędów
    • Klasy oraz interfejsy zapieczętowane
    • Dziedziczenie wielokrotne, problem diamentowy
    • Omówienie dobrych praktyk programowania obiektowego i nie tylko (np. DRY, SOLID, TDA, SOC)
    • Interfejs Cloneable
    • Rzutowanie obiektów
    • Interfejs Serializable
    • W tej sekcji napiszesz kilkadziesiąt programów, które wspólnie przeanalizujemy
    • Hierarchia kolekcji w Java
    • Wzorzec Iterator, interfejsy Iterable, Spliterator, Collection
    • Interfejsy List, Set, Queue, Deque i ich implementacje
    • Omówienie różnic w złożoności obliczeniowej i pamięciowej metod różnych kolekcji
    • Klasa Collections
    • Metody statyczne do tworzenia i kopiowania kolekcji
    • Klasy abstrakcyjne ułatwiające implementację właściwości kolekcji
    • Omówienie zasady usuwania duplikatów (hash function, hash table).
    • Interfejs Map i jego implementacje
    • Interfejsy funkcyjne do pracy z metodami kolekcji
    • Widoków i zakresy w pracy z kolekcjami i mapami
    • Mechanizm słabych referencji
    • Klasy Properties, BitSet, EnumSet, EnumMap
    • Praktyczne przykłady wykorzystania kolekcji i map
    • W tej sekcji napiszesz aplikacje, przygotowujące do implementowania warstwy biznesowej aplikacji
    • Programowanie funkcyjne
    • Sposoby tworzenia strumieni
    • Przygotowanie kolekcji i map do pracy ze strumieniami
    • Zasada działania strumieni
    • Metody pośrednie i końcowe, wyrażenia lambda w strumieniach
    • Przegląd różnych sposobów przetwarzania strumieni
    • Typ Optional
    • Wykorzystanie kolektorów w strumieniach
    • Implementacja własnych kolektorów 
    • Strumienie typów prostych
    • Strumienie równoległe
    • Przegląd elementów języka Java pod kątem pracy ze strumieniami
    • Referencje do metod
    • Praktyczne przykłady wykorzystania strumieni
    • W tej sekcji napiszesz aplikacje, przygotowujące do implementowania warstwy biznesowej aplikacji
    • Klasa Class oraz metoda getClass()
    • Pozyskiwanie informacji o elementach znajdujących się w klasie
    • Dostęp do składników prywatnych
    • Tworzenie i kontrolowanie obiektów, wywoływanie metod
    • Praca z tablicami
    • Wzorzec projektowy Proxy oraz klasa Proxy
    • Praktyczne przykłady wykorzystania programowania obiektowego
    • JavaBeans
    • Klasy i metody uogólnione
    • Ograniczenia typów
    • Zmienność typów
    • Symbole wieloznaczne
    • Wymazywanie typów
    • Metody pomostowe
    • Prezentacja ograniczeń uogólnień
    • Połączenie mechanizmów refleksyjności i uogólnienia
    • Informacje o ogólnych typach w JVM
    • Praktyczne przykłady wykorzystania mechanizmów programowania refleksyjnego i uogólnionego
    • Omówienie założeń projektu, projekt realizujemy razem krok po kroku
    • Omówienie struktury danych, która będzie przetwarzana
    • Przygotowanie warstw aplikacji
    • Implementacja logiki przetwarzającej strukturę danych
    • Optymalizacja kodu pod kątem najnowszych rozwiązań Java i wydajności
    • Umieszczenie projektu w publicznym repozytorium GitHub i przygotowanie dokumentacji
    • Klasyfikacja wzorców projektowych
    • Implementacja w przykładowych programach wzorców kreacyjnych (metoda wytwórcza, fabryka abstrakcyjna)
    • Implementacja w przykładowych programach wzorców kreacyjnych (builder, prototyp, singleton)
    • Implementacja w przykładowych programach wzorców strukturalnych (adapter, bridge, kompozyt, dekorator)
    • Implementacja w przykładowych programach wzorców strukturalnych (fasada, pyłek, proxy)
    • Implementacja w przykładowych programach wzorców czynnościowych (łańcuch zobowiązań, command, iterator)
    • Implementacja w przykładowych programach wzorców czynnościowych (mediator, memento, obserwator, stan)
    • Implementacja w przykładowych programach wzorców czynnościowych (strategia, metoda szablonowa, visitor)
    • Omówienie architektury i sposobu działania aplikacji Maven
    • Instalacja i konfiguracja aplikacji Maven
    • Analiza szablonów projektów Maven
    • Tworzenie oraz zarządzanie projektem z wykorzystaniem Maven
    • Omówienie Maven Coordinates.
    • Analiza pliku konfiguracyjnego pom.xml
    • Cykl życia, fazy i cele projektu Maven
    • Praca z bibliotekami zewnętrznymi – dependencies
    • Zarządzanie parametrami scope oraz version w dependencies
    • Optional dependencies oraz dependency exclusions 
    • Klasyfikacja repozytoriów Maven (central, local, remote) 
    • Zarządzanie wersją projektu Maven 
    • Implementacja aplikacji wielomodułowych w oparciu o Maven 
    • Zarządzanie wersjami dependencies – BOM 
    • Przegląd pluginów Maven 
    • Praca z pluginem Flatten Maven Plugin 
    • Wymuszanie wersji – Maven Enforcer Plugin 
    • Zarządzanie zasobami projektu – Maven Resources Plugin
    • Generowanie pliku wynikowego JAR – Maven Assembly Plugin 
    • Generowanie dokumentacji – Maven Site Plugin
    • Parametry, profile oraz filtrowanie 
    • Generowanie repozytoriów 
    • Projekt Lombok oraz inne często używane dependencies 
    • Loggery (Log4j2, SLF4J)
    • StringUtils, ArrayUtils, Commons Lang3, Commons Collections4 i inne zewnętrzne dependencies
    • Nexus Repository Manager
    • Przygotowanie kompletnej aplikacji produkcyjnej w oparciu o Maven
    • Konfiguracja projektu do pracy z narzędziami do testowania
    • Wprowadzenie do Test-Driven Development (TDD) na praktycznym przykładzie 
    • Wprowadzenie do Behavior-Driven Development (BDD) na praktycznym przykładzie
    • Implementacja asercji za pomocą JUnit, Hamcrest, AssertJ
    • Implementacja klas rozszerzających możliwości asercji 
    • Omówienie i zarządzanie cyklem życia obiektów klasy testowej
    • Adnotacje i metody cyklu życia obiektów klasy testowej 
    • Argumenty metod testujących 
    • Testowanie wyjątków 
    • Testy powtarzalne, zagnieżdżone, parametryzowane, dynamiczne, równoległe
    • Testy integracyjne
    • Przygotowanie danych dla testów, praca z zasobami zewnętrznymi 
    • Zastosowanie interfejsów w pracy z testami 
    • Mechanizm rozszerzeń frameworka JUnit (extensions) 
    • Tags
    • Mockowanie, Mockito 
    • Adnotacje Mockito
    • Given When Then
    • Praktyczne przykłady definiowania mocków
    • Przechwytywanie i zarządzanie argumentami mockowanych metod
    • Weryfikacja zachowania i wywołań mocków (verify)
    • Generowanie sekwencji wywołań mocków
    • Partial mocks, spy objects 
    • Wstrzykiwanie mocków do klas testowych. 
    • Mockito w podejściu BDD 
    • Wykaz dobrych praktyk implementowania testów jednostkowych
    • Pokrycie testów (JaCoCo) 
    • Generowanie raportów z wynikami testów i pokrycia kodu testami
    • W tej sekcji napiszesz testy do aplikacji w Swoim portfolio, wspólnie przeanalizujemy strukturę testów
    • Struktura frameworka Spring
    • Przegląd wersji frameworka Spring
    • Tight Coupling, Loosely Coupling, Dependency Injection, Inversion of Control
    • Zasada działania kontenera Spring i kontekstu aplikacji Spring
    • Konfiguracja ręczna, automatyczna, wstrzykiwanie beanów
    • Cykl życia komponentu Spring
    • Adnotacje frameworka Spring 
    • Automatyczne i manualne wiązanie komponentów Spring
    • Przygotowanie konfiguracji Java do pracy z komponentami Spring 
    • Łączenie kilku konfiguracji 
    • Problem niejednoznaczności podczas wstrzykiwania komponentów 
    • Zasięg komponentów Spring 
    • Spring Expression Language (SpEL)
    • Pobieranie danych konfiguracyjnych z plików konfiguracyjnych
    • Sposoby wstrzykiwania danych konfiguracyjnych do komponentów 
    • Programowanie aspektowe z wykorzystaniem frameworka Spring (AOP)
    • Praktyczne przykłady wykorzystania programowania aspektowego
    • Zarządzanie profilami aplikacji
    • W tej sekcji przygotujesz aplikacje w Swoim portfolio do pracy z frameworkiem Spring
    • Format JSON
    • Biblioteka GSON i jej zaawansowana konfiguracja
    • Przygotowanie warstwy generycznej do komunikacji z plikami JSON
    • Format XML
    • DOM, SAX, StAX, JAXB
    • Przygotowanie warstwy generycznej do komunikacji z plikami XML
    • Przygotowanie aplikacji do portfolio, komunikującej się z zasobami zewnętrznymi w formacie JSON, XML
    • Omówienie założeń projektu oraz struktury aplikacji, projekt zrealizujemy razem krok po kroku
    • Instalacja potrzebnych zależności i pluginów, konfiguracja Maven
    • Warstwa do pobierania danych z plików JSON, XML
    • Dodanie frameworka Spring
    • Testowanie warstwy do pobierania danych z plików JSON, XML
    • Walidacja pobranych danych, testowanie warstwy walidującej
    • Konwersja danych z plików do domeny biznesowej, testowanie warstwy konwertującej
    • Implementacja logiki biznesowej aplikacji, testowanie warstwy biznesowej
    • Generowanie raportów dla pobranych danych, testowanie warstwy generowania raportów
    • Wysyłanie raportów na wskazany adres email w formacie HTML
    • Testowanie warstwy do wysyłania wiadomości email w formacie HTML
    • Implementacja cache
    • Sprawdzenie poprawności działania aplikacji
    • Uzyskanie wysokiego pokrycia kodu testami
    • Przygotowanie wersji produkcyjnej programu
    • Umieszczenie programu na GitHub, przygotowanie dokumentacji
    • Współbieżność, wielowątkowość, równoległość, asynchroniczność – porównanie
    • Proces i wątek
    • Klasa Thread, interfejs Runnable
    • Cykle życia wątku
    • Wyścigi
    • Synchronizacja wątków
    • Słowo kluczowe volatile
    • Metody wait, notify, notifyAll
    • Problemy wielowątkowości, starvation, deadlock, livelock
    • Problem producent – konsument
    • Lock, implementacja problemu producent – konsument z wykorzystaniem Lock
    • Executor Service, ForkJoinPool, RecursiveTask
    • Typy Callable<T>, Future<T>
    • ThreadFactory
    • Semaphore
    • Synchronizacja za pomocą CountDownLatch, CyclicBarrier, Phaser
    • Kontenery synchroniczne, ArrayBlockingQueue, PriorityBlockingQueue, LinkedBlockingQueue
    • Kontenery synchroniczne, ConcurrentLinkedQueue, LinkedTransferQueue
    • AtomicInteger
    • Implementacja problemu producent – konsument za pomocą LinkedTransferQueue
    • Kontenery synchroniczne, SynchronousQueue, LinkedBlockingDeque, DelayeQueue, ConcurrentLinkedDeque
    • Kontenery synchroniczne, ConcurrentMap, ConcurrentHashMap, ConcurrentSkipListMap, ConcurrentSkipListSet
    • Metody klasy Collections do tworzenia kontenerów synchronicznych
    • Kontenery synchroniczne, CopyOnWriteArrayList
    • Typ CompletableFuture
    • Zarządzanie poziomami asynchroniczności w CompletableFuture
    • Obsługa błędów w CompletableFuture
    • Przegląd kolejnych metod CompletableFuture (runAfterEither, runAfterEitherAsync, resultNow)
    • Przegląd kolejnych metod CompletableFuture (thenAcceptBoth, thenAcceptBothAsync, thenCombine, thenCombineAsync)
    • Przegląd kolejnych metod CompletableFuture (thenCompose, thenComposeAsync, minimalCompletionStage)
    • Przegląd kolejnych metod CompletableFuture (newIncompleteFuture, obtrudeException, whenComplete)
    • W tej sekcji przygotujesz aplikacje do portfolio komunikującą się z REST API za pomocą klienta HTTP w wersji synchronicznej
    • W tej sekcji przygotujesz aplikacje do portfolio komunikującą się z REST API za pomocą klienta HTTP w wersji asynchronicznej
    • Programowanie równoległe, strumienie równoległe, metody parallel, parallelStream
    • Biblioteka Parallel Collectors
    • Virtual Threads i sposoby ich tworzenia
    • Zasada działania Virtual Threads (Carrier Threads, Pinned Virtual Threads)
    • Zarządzanie pamięcią w procesie życia Virtual Thread
    • Structured concurrency, StructuredTaskScope
    • StructuredTaskScope.ShutdownOnFailure, StructuredTaskScope.ShutdownOnSuccess
    • Scoped Values, porównanie Scoped Values oraz Thread Local Variable
    • W tej sekcji przygotujesz aplikację do portfolio, która wykorzysta structured concurrency oraz Scoped Values
    • Język SQL – tworzenie i zarządzanie tabelami, klucz główny, klucze obce, composite keys
    • Język SQL – CRUD, relacje, many-to-one, one-to-one, many-to-many 
    • Język SQL – pobieranie danych z tabel w relacjach, joins, grupowanie, agregacja 
    • Język SQL – optymalizacja struktury tabel i zapytań, subqueries, indeksy 
    • Język SQL – praktyczne przykłady zarządzania danymi w tabelach. 
    • Instalacja środowiska bazodanowego, serwera bazy danych za pomocą Docker, Docker Compose 
    • Schemat aplikacji bazodanowej 
    • Omówienie zasady działania biblioteki JDBC
    • Zalety i wady bezpośredniego wykorzystania JDBC
    • Przegląd bibliotek zewnętrznych do komunikacji bazodanowej 
    • Wprowadzenie do biblioteki JDBI 
    • Przygotowanie aplikacji Java do pracy z wybraną bazą danych (MySQL) oraz z biblioteką JDBI  
    • Połączenie aplikacji z bazą danych z wykorzystaniem JDBI
    • Tworzenie tabel w bazie danych z wykorzystaniem JDBI 
    • Implementacja operacji CRUD z wykorzystaniem JDBI
    • Parametryzacja zapytań z wykorzystaniem JDBI 
    • Konwersja pobranych danych z wykorzystaniem JDBI 
    • Optymalizacja wstawiania dużej ilości danych do bazy danych (batching)
    • Transakcje z wykorzystaniem JDBI 
    • Implementacja uogólnionej warstwy zarządzania danymi z bazy danych
    • Konfiguracja Spring dla aplikacji wykorzystującej warstwę bazodanową w oparciu o JDBI 
    • Przygotowanie warstwy serwisowej aplikacji bazodanowej (wstrzykiwanie warstwy bazodanowej)
    • Dynamiczne generowanie zapytań sql do tworzenia tabel w bazie danych
    • Konfiguracja loggerów dla aplikacji bazodanowej
    • Przygotowanie testowej bazy danych z wykorzystaniem Testcontainers
    • Testowanie warstwy bazodanowej za pomocą Testcontainers
    • Testowanie warstwy bazodanowej z wykorzystaniem własnego kontenera Docker dla testowej bazy danych
    • Testowanie warstwy serwisowej w aplikacji bazodanowej (mockowanie warstwy bazodanowej)
    • W tej sekcji napiszesz projekt do Swojego portfolio, w którym połączysz warstwy do komunikacji z plikami i bazą danych
    • Koncepcja ORM
    • Struktura aplikacji ORM wykorzystującej JPA / Hibernate
    • Różnice pomiędzy JPA oraz Hibernate
    • Konfiguracja aplikacji Java do pracy z bazą danych (Docker + MySQL) oraz JPA / Hibernate
    • Plik persistence.xml
    • Nawiązywanie połączenia z bazą danych, sesja, transakcja
    • Przygotowanie pierwszej encji
    • Adnotacja @Column i jej atrybuty
    • Właściwość hibernate.hbm2ddl.auto
    • Adnotacje @Table, @Check i ich atrybuty
    • Adnotacja @GeneratedValue i strategie generowania id
    • Cykl życia encji
    • Realizacja operacji CRUD
    • Mapowanie dla typów reprezentujących datę i czas
    • Adnotacje @Formula, @PostLoad
    • Konfiguracja loggerów do podglądania komend SQL z podstawionymi wartościami
    • Mapowanie typu wyliczeniowego
    • Mapowanie niestandardowych wartości w kolumnie do typu wyliczeniowego
    • Zapytania zagnieżdżone i widoki
    • Natural id
    • Dobre praktyki implementowania metod equals oraz hashCode dla encji
    • Mapowanie relacji many to one, one to one, many to many
    • Mapowanie listy elementów innych niż encje
    • Mapowanie pola będącego mapą
    • Mapowanie dziedziczenia (trzy strategie)
    • JPQL
    • Audytowanie encji
    • Listenery
    • Dobre praktyki klonowania encji
    • Adnotacja @MapsId
    • Optimistic locking, pessimistic locking
    • Implementacja uogólnionej warstwy zarządzania danymi z bazy danych z wykorzystaniem JPA / Hibernate
    • Konfiguracja Spring dla aplikacji wykorzystującej warstwę bazodanową w oparciu o JPA / Hibernate 
    • Przygotowanie warstwy serwisowej aplikacji bazodanowej (wstrzykiwanie warstwy bazodanowej JPA / Hibernate)
    • Przygotowanie testowej bazy danych z wykorzystaniem Testcontainers
    • Testowanie warstwy bazodanowej JPA / Hibernate za pomocą Testcontainers
    • Testowanie warstwy bazodanowej JPA / Hibernate z wykorzystaniem własnego kontenera Docker dla testowej bazy danych
    • Testowanie warstwy serwisowej w aplikacji bazodanowej (mockowanie warstwy bazodanowej JPA / Hibernate)
    • W tej sekcji napiszesz projekt do Swojego portfolio, w którym wykorzystasz JPA / Hibernate

    Ten moduł realizujesz równolegle z kursem – poinformuję Cię, kiedy należy go przerobić

    • Omówienie architektury platformy Docker
    • Zasada działania obrazu oraz kontenera
    • Różnica pomiędzy kontenerem Docker oraz maszyną wirtualną
    • Instalacja platformy Docker
    • Praca z Docker CLI
    • Tworzenie i zarządzanie obrazami platformy Docker
    • Image Layers
    • Wprowadzenie do pracy z Docker Hub
    • Osadzenie przygotowanego obrazu w repozytorium Docker Hub
    • Tworzenie i zarządzanie kontenerami w platformie Docker
    • Omówienie cyklu życia kontenera
    • Kopiowanie plików z maszyny lokalnej do kontenera
    • Kopiowanie plików z kontenera do maszyny lokalnej
    • Klasyfikacja rodzajów danych przechowywanych w kontenerach
    • Tworzenie i zarządzanie volumes w platformie Docker
    • Różnica pomiędzy anonymous volumes oraz named volumes
    • Tworzenie i zarządzanie bind mounts w platformie Docker
    • Omówienie różnic pomiędzy volumes oraz bind mounts
    • Tworzenie volumes tylko do odczytu
    • Instalacja i uruchamianie przykładowych narzędzi z wykorzystaniem platformy Docker
    • Omówienie struktury pliku konfiguracyjnego Dockerfile
    • Praca z argumentami oraz zmiennymi środowiskowymi
    • Konteneryzacja aplikacji webowej z wykorzystaniem Docker
    • Komunikacja kontenera z zewnętrznym REST API
    • Komunikacja kontenera z narzędziami osadzonymi w localhost
    • Komunikacja container to container z użyciem networks w platformie Docker
    • Przegląd sterowników do konfiguracji zachowania networks
    • Omówienie zasady działania narzędzia Docker Compose
    • Instalacja narzędzia Docker Compose
    • Struktura pliku konfiguracyjnego narzędzia Docker Compose
    • Przygotowanie kontenera bazy danych
    • Konfiguracja kontenerów do pracy z wieloma bazami danych
    • Konteneryzacja przykładowej aplikacji
    • Przykład tworzenia utility containers

    Git to jedno z najważniejszych narzędzi w pracy programisty – pozwala zarządzać kodem, kontrolować zmiany i bezpiecznie rozwijać projekt w zespole. W tym module poznasz również GitHub, czyli platformę, która umożliwia przechowywanie repozytoriów w chmurze, współpracę z innymi programistami oraz prezentowanie swojego kodu potencjalnym pracodawcom. Ten moduł będziesz realizować równolegle z kursem – dam Ci znać w odpowiednim momencie, kiedy warto go przerobić, aby w pełni wykorzystać jego możliwości w swoich projektach.

    • Podstawowe informacje na temat systemów kontroli wersji
    • Working area, staging area, local / remote repository
    • Instalacja Git
    • Inicjalizacja repozytorium
    • Konfiguracja i personalizacja ustawień Git (3 poziomy konfiguracji)
    • Dokumentacja Git
    • Struktura katalogu .git
    • Plik .gitignore
    • Plik .gitattributes
    • Śledzenie stanu, porównywanie plików projektu zarządzanego przez Git
    • Tworzenie commitów
    • Reset, restore, revert
    • Prezentowanie informacji na temat commitów
    • Hooks
    • Tworzenie i zarządzanie gałęziami
    • Merge, rebase, squash
    • Git Flow, TBD
    • Praca zespołowa z wykorzystaniem GitHub
    • Clone, push, fetch, pull
    • Dobre praktyki przygotowania repozytorium na GitHub
    • Struktura pliku README.md
    • Praktyczny przykład pracy zespołowej z wykorzystaniem GitHub
    • Worktree
    • Submodules
    • Subtree
    • Stash
    • Bisect
    • Tags
    • Inne komendy Git (o których nie wspomniałem w tym opisie, a których użyłem w kursie)
    • Praca z Git, GitHub z wykorzystaniem komercyjnego IDE
    • Fork
    • Tworzenie pull requests
    • GitHub Desktop

    Newsletter