Opis
Czas trwania
20 spotkań x 6 godzin lub 40 spotkań x 3 godziny
Uwaga: kurs rozpocznie się po zebraniu minimum 5 uczestników.
Tematyka kursu
WSTĘP DO JĘZYKÓW PROGRAMOWANIA
- Czym jest architektura systemu komputerowego?
- Architektury client-server oraz peer-to-peer.
- Porównanie systemów frontend (FE) i backend (BE).
- Języki programowania: kompilowane a interpretowane.
WSTĘP DO JĘZYKA JAVA
- Wprowadzenie do języka Java.
- Wirtualna maszyna Java (JVM), JRE, JDK.
- Język Java: typy, zmienne, wyrażenia, bloki, instrukcje.
- Wstęp do CLI oraz uruchamianie programów z poziomu CLI.
- Środowisko programistyczne IDE (IntelliJ, Eclipse).
JĘZYK JAVA
- Tablice.
- Metody.
- Wprowadzenie do programowania obiektowego.
- Czym jest klasa oraz czym się charakteryzuje? Pojęcie klasy i obiektu, atrybuty i metody.
- Metody i pola statyczne.
- Przeciążanie metod.
- Struktura programów Java.
- Pakiety: podział programu.
- Instrukcje sterujące i warunkowe (for, while, do, if, case, switch).
- Autoboxing.
- Klasa i konstruktory.
- Słowa kluczowe: this oraz super.
- Identyfikatory, zmienne i stałe.
- Zasięg oraz widoczność zmiennych.
- Cechy programowania obiektowego (hermetyzacja, polimorfizm, dziedziczenie, kompozycja).
- Przesłanianie metod.
- Operator instanceof.
- Interfejsy i klasy abstrakcyjne.
- Klasa Object oraz kontrakt Object.equals i Object.hashCode.
- Typy generyczne oraz klasy i metody szablonowe.
- Wbudowane kolekcje oraz mapy.
- Typy wyliczeniowe.
- Klasy zagnieżdżone oraz anonimowe.
- Słowo kluczowe final.
- Rzutowanie typów.
- Adnotacje.
- Refleksja oraz klasa Class.
- Standard Unicode oraz kodowanie UTF-8/UTF-16.
- Klasa String oraz operacje na ciągach znaków.
- Wyrażenia regularne.
- Interfejs funkcyjny oraz wyrażenia lambda.
- Strumienie (streams).
- Klasa Optional.
- Referencje do metod.
- Typy wyjątków oraz ich obsługa.
- Operacje wejścia/wyjścia.
- Obsługa systemu plików.
- Obsługa czasu.
- Konstrukcja varargs.
WSTĘP DO ALGORYTMÓW I STRUKTUR DANYCH
- Wprowadzenie do podstawowych pojęć: problem, algorytm, program.
- Złożoność obliczeniowa algorytmów oraz notacja dużego O.
- Podstawowe metody sortowania.
- Algorytmy rekurencyjne: charakterystyka i przykłady.
- Struktury danych (tablice, listy, stosy, kolejki, grafy, drzewa, kopce, zbiory, mapy).
NARZĘDZIA PROGRAMISTYCZNE
- Archiwa oraz tworzenie bibliotek (pliki JAR).
- Automatyzacja procesu budowania.
- Systemy budowania aplikacji.
- Wprowadzenie do Ant oraz Maven.
- Budowanie aplikacji przy użyciu narzędzia Maven.
- Kontrola wersji oraz współdzielenie kodu.
- Wprowadzenie do Git.
- Zarządzanie wersjami przy użyciu narzędzia Git.
- Wzorce projektowe.
- Biblioteka Project Lombok.
- Logowanie oraz biblioteki Java Logging, SLF4J, Logback i Log4J.
- Biblioteka Jackson oraz serializacja i deserializacja danych.
- Wprowadzenie do biblioteki Spring.
- Idea ziaren, Inversion Of Control oraz Dependency Injection.
- Spring oraz kontener IoC.
- Spring Context oraz konfiguracja poprzez pliki w formacie XML, kod Java i adnotacje.
- Automatyczne wiązania poprzez adnotację Autowired.
BAZY DANYCH
- Wprowadzenie do zapisu danych oraz formatów przechowywania danych (CSV, JSON).
- Wprowadzenie do baz danych.
- Relacyjne bazy danych – podstawowe pojęcia (relacje, krotki, atrybuty).
- Typy relacji.
- Wprowadzenie do MySQL.
- MySQL w praktyce.
- Podstawowe struktury oraz zapytania.
- MySQL w praktyce.
- Łączenia.
- Funkcje oraz procedury.
- Klucze oraz indeksy.
- Transakcje.
- Zasady ACID oraz poziomy izolacji.
- Normalizacja baz danych.
MAPOWANIE OBIEKTOWO-RELACYJNE (ORM)
- Połączenie z bazą danych.
- JDBC.
- Sterowniki baz danych.
- Obsługa bazy danych przy pomocy pakiety java.sql.
- Ładowanie zasobów.
- Porównanie ORM, JPA oraz Hibernate.
- Klasy a tabele.
- Hibernate i mapowania.
- Hibernate w szczegółach
- Konfiguracja przez pliki typu XML, pliki typu properties oraz adnotacje.
- Sesje oraz zapytania i transakcje.
- Stany obiektów w sesji.
- POJO vs Java Bean vs encje
- Sesja oraz zapisywanie, ładowanie, modyfikowanie i usuwanie.
- Zapytania w oparciu HQL (Hibernate QL).
- Interfejs programistyczny zapytań w Hibernate.
- Natywny SQL w kontekście Hibernate.
- Odwzorowywanie relacji oraz łączeń.
- Mapowanie struktur dziedziczenia na model relacyjnych baz danych.
WIELOWĄTKOWOŚĆ W JAVA
- Wprowadzenie do wielowątkowości.
- Process a wątek.
- Podstawowe problemy dla aplikacji wielowątkowych.
- Wątki w Javie: tworzenie i zarządzanie.
- Wyścigi oraz synchronizacja.
- Optymalizacja oraz zmienne volatile.
- Klasy Thread oraz interfejsy Runnable i ExecutorService.
APLIKACJE WEBOWE OPARTE O SPRING FRAMEWORK
- Protokół HTTP.
- Aplikacje webowe.
- Jakarta Enterprise Edition (JEE).
- Java Servlet.
- Serwer Apache Tomcat.
- Wzorzec projektowy MVC.
- Spring Web MVC oraz Dispatcher Servlet.
- Konfiguracja kontekstu aplikacji opratej o Spring Web MVC.
- Podejście JSP.
- Tworzenie aplikacji webowej przy użyciu podstawowych adnotacji (Controller, RequestMapping).
- Zakresy ziaren.
- Moduły Spring.
- Spring Boot oraz komponenty.
- Tworzenie aplikacji w oparc iu o SpringBootApplication.
- Tworzenie aplikacji webowej przy użyciu podstawowych adnotacji (RequestBody, ResponseBody, ResponseEntity, ResponseStatus).
- Obsługa błędów poprzez ControllerAdvice oraz ExceptionHandler.
- Serwisy RESTful oraz związanie z nimi reguły.
- Walidacja danych.
- Klasa RestTemplate i komunikacja pomiędzy serwisami.
- Zmienne aplikacji oraz pliki typu properties.
- Klasy EntityManager oraz DataSource i natywna obsługa JPA.
- Interfejs JpaRepository oraz generowanie zapytań.
- Actuator oraz żywotność aplikacji.
- Wprowadzenie do Spring Security.
TESTOWANIE APLIKACJI
- Wdrażanie aplikacji.
- Rodzaje hostingu aplikacji.
- Rozwiązania w chmurze.
- Continuous Integration oraz Continuous Delivery.
- Integracja kodu przy pomocy Git.
- Testowanie aplikacji: ręczne oraz automatyczne.
- Rodzaje oraz poziomy testowania.
- Wprowadzenie do JUnit5.
- Adnotacje do sterowania testami w JUnit5.
- Asercje oraz biblioteka AssertJ.
- Testowanie w kontekście budowania przy pomocy Maven.
- Biblioteka Mockito oraz „mockowanie” obiektów i zachowań.
- Testy integracyjne oraz uruchamianie kontekstu Spring.
- Test Driven Development (TDD).
- Behavioral Driven Development (BDD).
- Narzędzie Cucumber oraz język Gherkin.
- Narzędzie Selenium oraz automatyzacja testów.
- Narzędzie Gatling oraz wprowadzenie do testów wydajnościowych.
DODATKI
- Bazy danych NoSQL oraz teoria CAP.