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 – pierwsze spotkanie GRATIS
Już teraz
zapisz się na kurs
- Java
Zostaw swoje namiary, a skontaktuję się z Tobą w sprawie kursu
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
Materiały video
-

HttpClient + Virtual Threads. Czas na szybkie i wydajne requesty HTTP w Javie!
-

Spliterator + Virtual Threads. Odblokuj wydajne przetwarzanie danych w Javie!
-

Nowoczesna Java w praktyce - record i switch pattern matching
-

Piszemy service z wykorzystaniem cache w języku Java - Część 4.
-

Piszemy service z wykorzystaniem cache w języku Java - Część 3.
-

Piszemy service z wykorzystaniem cache w języku Java - Część 2.











