Dwa etapy: najpierw Spring i praktyczne podstawy backendu, potem 3 komercyjne projekty do CV, code review i przygotowanie do rekrutacji, aż do kolejnego kroku w karierze.
Możesz płacić w ratach. Masz 30 dni na zwrot bez podania przyczyny.
Spring Boot, HTTP i REST API, bazy danych z Dockerem, testy jednostkowe i integracyjne oraz Spring Security. Do każdego bloku zadania domowe, których nie pomijasz.
Powitanie
Plan gry i jak studiować kurs?
Jakie rzeczy potrzebujesz
Praca Domowa
Powitanie
Po Co Ci Spring?
Przykłady użycia Springa
Adnotacje vs XML
Czego się nauczysz Springa?
Spring Boota a Spring
Powitanie
Start implementacji w projekcie
Feign i HTTP
RestTemplate i HTTP
Webclient i HTTP
Konfiguracja URL
JSON i record w RestTemplate
JSON i record w OpenFeign
Obsługa wyjątków
Error handling dla Feigna
Logger log4j2 z Lomboka
Czym jest HTTP?
Metody HTTP i GET
POST i URI vs URL
Dostępne metody HTTP
Statusy HTTP
RequestParams
Serwer i Controller
POST i DELETE
Headers (nagłówki)
RestTemplate
RestTemplate GET
RestTemplate POST
RestTemplate DELETE
Spring Cloud Feign
Feign PostMapping
Feign DeleteMapping
cURL w terminalu
Refactor kodu dla RestTemplate
Projekt bez Springa w samej Javie
Dodajemy Spring Context do projektu w Javie
AnnotationConfigAppContext
Adnotacja @Configuration
Jakie beany się zarejestrowały?
Oznaczamy klasy jako beany
Autowiring i @Autowired
Łączenie beanów
Wiring pozostałych obiektów
RestTemplate i spring-web
Konfiguracja application.yml
Parsery, problem z RestTemplate
Wyjątki w Javie i Springu
Obsługa wyjątku
Poprawa metod w Serwisach
Plan działania na moduł viewer
Stworzenie song viewera
Dodanie interfejsu
Interfejs SongFetchable
Wiele implementacji 1 beana
Dodanie modułu filesongreader
Dependency Inversion Principle
Jak przejść na Spring Boota
@SpringBootApplication
Spring Boot Parent
Startery spring boota
Autokonfiguracja Spring Boota
Maven-wrapper czy warto?
Spring Cloud Feign autokonfig
WebClient autokonfig
Zadanie domowe – teoria
01.01. Zadanie Domowe
01.02. Zadanie Domowe
01.03. Rozwiązanie dla zadania 2
Powitanie
Nowy projekt w IntelliJ
Projektowanie endpointów GET
Implementacja GetMapping
PathVariable
RequestParam
Nagłówek requestId
Integracja Swaggera z projektem
Kontroler obsługujący HTML
Refaktoryzacja listy na mapę
Implementacja PostMapping
POST RequestBody i DTO
Walidacja POST
Validation Error Api Handler
Implementacja DeleteMapping
Usuwanie danych PathVariable
Obsługa wyjątków przy usuwaniu
Exception Handler
Refactor kodu
PUT vs PATCH
Implementacja PutMapping
PatchMapping
Implementacja PatchMapping
Refactor kodu
Jak zapytanie HTTP dochodzi do serwera? + wstęp do arch. warstwowej
Warstwy i mapowanie DTO na obiekty domenowe
Dodanie warstw serwisu (service) i repozytorium (repo)
Powitanie
Tomcat kontener servletów
Autokonfiguracja dla Spring MVC
Spring MVC
RestController vs Controller (MVC)
Spring MVC konwertery
Czym jest DTO i record w Javie
Czym jest ResponseEntity
Czym jest REST i CRUD
Jak działają Controllery?
Zakresy beanów scope
Aspekty w Springu
spring-boot-starter-validation
02.01. Zadanie Domowe
02.02. Zadanie Domowe
Plan działania
Instalacja docker desktop
PostgreSQL
Docker i pgadmin4
Połączenie do bazy z IntelliJ
spring-boot-starter-data-jpa
Dodanie data.sql z insertami
Refactor kodu InMemory
Krótka notka (patch, put, delete)
Hibernate i encja
Wyciąganie z bazy findAll
Wyciąganie z bazy findById
Zapis do bazy song save
Delete z bazy
Put
Refactor
Patch
Dirty Checking z Transactional
@Query
Paginacja i sortowanie cz. 1
Paginacja i sortowanie cz. 2
Refactor architektury
Użycie @Transactional
Rysunek ogólny z lotu ptaka
Krótki wstęp do SQL
JDBC driver, JDBC API
DataSource i JdbcTemplate
@Repository, DAO i w. danych
Co to JPA i implementacje
Co to ORM (orm.jpa/hibernate)
Co to Hibernate i co musisz umieć
Co to Spring Data – wstęp
Spring Data JPA
Autogenerowanie metod
@Query
Pageable i sort
Properties dla SQL i noSQL
Przykład transakcji
BEGIN, ROLLBACK, COMMIT
Transakcje w apce webowej
Praca Domowa – teoria
Docker - wstęp
Docker architektura
Compose, kontener, obraz
Przekierowanie portów
Volumes
init.sql i wersjonowanie baz
Pozostała teoria
03.01. Zadanie Domowe
Wstęp i wymagania
JPABuddy i IntelliJ nowa wersja
Diagram tabel i omówienie song
Relacja song i genre
Album i Song oraz Album i Artist, + czym jest schemat bazy?
Przekształcamy encję Song
Wizualizacja diagramów
Migracja schematu bazy danych
Sekwencja w PostgreSQL
UUID i BaseEntity
@CreationTimestamp a auditable
Architektura pod pozostałe encje
Poprawienie Controllera i fasady
Encja Genre
Encja Album
Encja Artist
BaseEntity
Jaki błąd popełniliśmy i co dalej?
Spisanie wymagań i o modułach
Spisanie happy path
Rozrysowanie modułów
Relacje czym są i po co są?
Do jednego pakietu/modułu!
Relacja @OneToOne
Notnull jako klucz obcy? Kiedy?
@OneToOne testy
@OneToOne unique
Unidirectional i bidirectional
@ManyToMany
Więcej relacji Hibernate
Inserty przykładowych danych
Jak pisać ficzery?
Zapisywanie Genre
Zapisywanie Albumu z piosenką
Zapisywanie Piosenki
Wyświetlanie artist
Wyświetlanie song i pageable
Wyświetlanie z Join Fetch
Czym jest Join?
Eager, Lazy, n+1, cache Hibernate
Usuwanie piosenki
Usuwanie artysty
Przypisywanie (inna edycja)
Edytowanie/Update
Dodawanie artysty
Kaskada - powiązane encje
Co jeszcze zostało?
Izolacje i transakcje: ACID
Czym jest i po co jest locking
Czym jest indeks na kolumnie
Relacje a moduły – jak to jest w tutorialach?
Podsumowanie i zadanie domowe
Czym jest jednostka?
Junit5, @Test, baza danych w pamięci, TDD
Przygotowanie kodu do testów
Pokrycie kodu testami (coverage)
Po co są testy? Przykład.
Czym jest asercja? (AssertJ vs Hamcrest)
Od czego zacząć pisanie testu i skrót GWT Given When Then.
Jak nazywać testy?
Można lepiej (refactor testu)
CatchThrowable
Pierwszy test
Poprawka w asercji
Drugi test
Projekcje SpringData a testy
Zadanie domowe
Rozwiązanie zadania domowego
Mockowanie z użyciem Mockito
Mockito w praktyce
Podsumowanie
Wstęp
Porównanie do testów jedn.
Pakiet i konfiguracja
Testy integracyjne z lotu ptaka
Włączanie kontekstu aplikacji
Testcontainers
Debug bazy danych
MockMvc
Flyway
Struktura testu
Pierwszy test
Słówko o security
jsonpath vs objectmapper
Lekcje od 14 do 31. Implementacja testów.
Podsumowanie
Co omówimy z Security?
Jakie są wymagania?
Filtry w springu i pustej appce webowej bez security
Filtry w springu z security (dodanie do pom.xml security)
mamy kilka sposobów na zrobienie authentication
Basic Auth w Spring Security
FormLogin
Architektura Security ogólnie
Architektura AuthenticationFilter
Omówienie domyślnej implementacja basicauth i formlogin (filtry)
Własne implementacje UserDetailsService (InMem) i PasswordEncoder (NoOp)
Encja User
Wczytywanie Usera z bazy danych
Dodanie usera przez migrację i test logowania
Enkodowanie/Hashowanie/Enkrypcja
Bcrypt, encode/matches, hasła w bazie danych
HTTP vs HTTPS
Dodanie https (self-signed)
/Register endpoint
Bean SecurityFilterChain
Zabezpieczenie wszystkich zapytań
Udostępnienie rejestracji i swaggera
Udostępnienie endpointów GET
Dostęp do endpointów zależny od roli
CORS
CSRF
Podsumowanie tego co już zrobiliśmy
Trzeci sposób logowania (JWT wystawiony przez songify)
Jak wygląda token JWT non-opaque
Plan działania: JWT wystawiany przez songify
Przygotowanie SecurityConfig pod JWT
Endpoint /token
Delegowanie logowania do AuthenticationManagera
Tworzenie tokena bez podpisu cyfrowego (not digitally signed)
Podpisywanie tokena kluczem symetrycznym HS256
Podpisywanie tokena kluczem asymetrycznym RS256
Przygotowanie pustego filtra i dodanie go do łańcucha
Dodanie logiki do filtra (symetryczny klucz i asymetryczny)
Cookie http only cookie
Frontend i backend https (secure cookie)
Podsumowanie i kolejne kroki
OAuth2 ogólny zarys architektury i wstęp
Co zaimplementujemy?
Usuwamy wystawianie tokena JWT z songify
Tworzenie klienta oauth2 google
Dodanie Oauth2 Login (pom.xml) i kod
Podejrzenie JWT tokena od google
Serwer utrzymuje sesję użytkownika
Bezstanowy Spring Boot OAuth2 + React + secure cookie
Bonus: wysłanie maila z potwierdzeniem podczas rejestracji użytkownika
Co dalej?
Praca domowa i podziękowanie
Sprawdź lekcje demo z etapu 1
Moduł 5, lekcja 24: Jak przejść ze Springa na Spring Boota?
Moduł 7, lekcja 5: [MVC] RestController vs Controller
Moduł 8, lekcja 4: PostgreSQL na Dockerze i testowe query z pgadmin4
Moduł 14, lekcja 5: Testy integracyjne w Springu z lotu ptaka
Moduł 15, lekcja 15: Spring Security – klucz prywatny/publiczny
Cały projekt od zera z testami, CV, rozmowy rekrutacyjne i wdrożenie na AWS. Dostajesz code review i plan działania aż do kolejnego kroku w karierze.
Powitanie
Co osiągniesz?
Zadanie domowe
Zadanie domowe
Co jeśli kurs jest za trudny?
Wprowadzenie do modułu
Temat i technologie JobOffers
Wymagania projektu JobOffers
Jak zrobić projekt od zera
Zadanie: Stwórz scenariusz
Zadanie: Moduły i procesy
Zadanie: Diagram
Rozwiązanie: Scenariusz
Rozwiązanie: Moduły i procesy
Rozwiązanie: Diagram
Wprowadzenie
IntelliJ Ultimate
Praca z Gitem w pracy
Jak zacząć projekt z Gitem, Mavenem i Githubem
Hexagon (porty i adaptery) + Fasady + pakietowanie w Javie
Zadanie: pakietowanie, fasady i testy
Rozwiązanie zadania
Wprowadzenie
Testy dla fasady
Czym jest jednostka?
Ile pisać testów jednostkowych?
Mapowanie obiektów bazy danych na DTO
Testowanie aplikacji opartej o czas w Javie
Klasa z @Configuration i Git
Kolejny moduł NumbersGenerator oraz komunikacja między modułami
Kolejny moduł ResultChecker
Kolejny moduł ResultAnnouncer
Pokrycie aplikacji testami
Testy jednostkowe dla połączenia z serwerem HTTP
Zadanie.
Rozwiązanie.
Wprowadzenie do modułu
Podepnij Spring Boota
integration i infrastructure
@SpringBootTest i profile
Checkout commitów i Docker Desktop
Połączenie z bazą MongoDB
docker-compose, spring-data, init.js
Dodajemy krok do testów integracyjnych
Zadanie.
Rozwiązanie.
Wprowadzenie do modułu
RestTemplate i infrastructure
Wiremock
Zadanie
Rozwiązanie
ConfigurationProperties
Zadanie
Scheduled
Scheduler + Awaitility
cron
Zadanie
Rozwiązanie
Spring Data MongoDB i TestContainers
Zadanie
Rozwiązanie
Clock i AdjustableClock
Komunikacja backend-frontend
MockMvc
@RestController, @PostMapping, @RequestBody
Ręczne vs automatyczne testowanie kontrolera REST API
Validator i Singleton
Zadanie
Rozwiązanie
Swagger/Postman vs testy integracyjne
Zadanie
Rozwiązanie
Testowanie integracyjne wyjątków
Zadanie
Rozwiązanie
@ControllerAdvice
Zadanie
Rozwiązanie
Spring Validation @Valid
Zadanie
Rozwiązanie
Zapytania HTTP z IntelliJ oraz DuplicateKeyException
Poprawki w kodzie + Zadanie.
Rozwiązanie
Zadanie
Rozwiązanie
Testowanie błędów RestTemplate i HTTP
Zadanie
Rozwiązanie
Spring Security 6 – wprowadzenie (Json Web Token, Bcrypt, frontend i backend, HTTPS)
Spring Security 6 – implementacja
SecurityConfig
Testy dla zapytania bez Json Web Tokena
Rejestracja użytkownika i testy
Implementacja JWT i testy
Ręczne testowanie Security Postmanem vs testy automatyczne
Dodanie Json Web Token
@WithMockUser
Zadanie
Rozwiązanie
Redis - wstęp
Testy manualne Redisa
Testy integracyjne Redisa
Zadanie
Rozwiązanie
Podsumowanie i co dalej?
Bonus: Wszystkie użyte @adnotacje w kursie + z wytłumaczeniem
Masz projekt i co dalej?
Co trzeba umieć na Juniora (bazując na ofertach pracy)
Wzorce projektowe, co wystarczy wiedzieć?
Posłuchaj wywiadów z absolwentami kursu
Historie osób którym się udało zdobyć pracę Junior Java Developera
Certyfikat i rekomendacja na LinkedIn
Zarekomenduję Cię do kilku firm (tylko po zakończonym kursie)
Co zrobić przed wysłaniem CV?
Ta wiedza wyróżni Cię na rynku
Scrum
Sprint w Scrumie
Daily
Review
Retro
Refinement i Story Point
Planning
Zadania w systemie JIRA
Pipeline Jenkins
Co w tym module?
Wywiad z Senior IT Recruiter
Do ilu firm wysyłać CV i kiedy zacząć się martwić?
Jak napisać CV?
Marka osobista (jak się wyróżnić?)
Gdzie szukać ofert pracy?
Jakie oferty wybierać?
Co zrobić z listą 300+ firm do pracy jako Junior Java Developer?
Lista firm, do których dostali się absolwenci kursu
README.md na Githubie - wzorowy przykład
Zadanie: Stwórz swoje CV a ja je sprawdzę
Zadanie: Skopiuj plik rekrutacyjny!
Zadanie: Wysyłaj CV!
Co w tym module?
Zadanie
Skarbnica Wiedzy Junior Java Developera zadania z poprzednich rekrutacji
Review Twojego rozwiązania zadania rekrutacyjnego
Co w tym module?
Zadanie
Przerób najczęstsze (od kursantów) pytania z rozmów rekrutacyjnych
Wywiad z Senior Java Developerem
Jeśli dostaniesz zaproszenie na rozmowę kwalifikacyjną, to umów się najpierw ze mną na próbną rozmowę (symulacja rozmowy rekrutacyjnej).
Jaki będzie efekt końcowy?
Zakładanie konta AWS
Ile kosztuje AWS i free tier
Tworzenie usera
Tworzenie instancji i keypair
Połączenie SSH z EC2
Instalacja Dockera na EC2
Tworzenie repozytorium ECR
Zmienne środowiskowe
aws-cli i aws configure
Filezilla
Jesteśmy na serwerze EC2
Test przez przeglądarkę
Wprowadzanie zmian i redeploy
Plan działania
Instalacja Node i Yarn
Pobranie kodu z Frontendem (IntelliJ vs VSCode)
Omówienie projektu Frontendowego
Omówienie zapytania HTTP frontend -> backend oraz CORS
Testowanie lokalne - Docker
Deploy AWS Elastic Container 2 (EC2) + Elastic Container Registry (ECR)
Udało Ci się zdobyć pracę! Wybór firmy + co jeśli Ci się nie udaje?
Pomogę Ci wybrać najlepszą z opcji.
Ostatnie zadanie!
Docker czym jest i co można z nim zrobić?
Jak wygląda przykładowy projekt oparty na Dockerze
Instalacja i pierwsza aplikacja
Docker w praktyce
Docker + IntelliJ = duet marzeń
Jak wygląda Gitlab/Github w pracy?
Jak wygląda Code Review i Merge/Pull Request w pracy?
Praca z Branchami
Gitlog, Commity, Skróty
Shelve, Patch, ORIG_HEAD
Maven
Gradle
Sprawdź lekcje demo z etapu 2
Moduł 6, lekcja 2: Podepnij Spring Boota do projektu, klasa z Main, Spring Initializr
Moduł 8, lekcja 3: @RestController, @PostMapping, @RequestBody
Moduł 12, lekcja 3: Do ilu firm wysyłać CV i kiedy zacząć się martwić?
Stworzyłem ten program, żeby pomóc Ci zdobyć pracę jako Java Developer, a jeśli już ją masz, żebyś mógł wskoczyć na wyższy poziom.
Zacząłem, bo widziałem ciągle ten sam schemat: ludzie po bootcampach i kursach online mieli wiedzę, ale brakowało im komercyjnych projektów, feedbacku na własny kod i pewności na rozmowie technicznej. Dlatego w Java Ready każdy projekt przechodzi code review, a rozmowy ćwiczysz, zanim zrobisz to naprawdę.
Pracuję jako Senior Software Engineer w InPost. Uczysz się od kogoś, kto jest na rynku dziś, a nie od teoretyka.
Byłem Team Leaderem backendu w Getint: 4 programistów i QA, praca z klientami z całego świata. Wiem, kogo firmy chcą zatrudniać.
Allegro, Comarch, Finanteq, Getint, InPost. Od stażu po seniora i lidera zespołu.
Rekrutuję programistów, także seniorów w InPost. Na tym opieram CV, zadania rekrutacyjne i symulacje rozmów.
300+ absolwentów, ponad 50 pracuje już w firmach IT. Średnia 4,9/5 z 39+ opinii i ponad 30 rekomendacji na LinkedIn.
Prelegent InfoShare, ekspert w raportach SOLID.jobs, prowadzący warsztaty dla SFI.pl.
Absolwenci pracują m.in. w:
AllegroVISAComarchNordeaEPAMNovomaticPreciselyNokiaMotorolaSii PolandGFT TechnologiesBoschGuidewareSollers ConsultingLibre WorksINGSoftresSoftsystemWartaCloudiMedSamsungEY GDSBNP ParibasTECNAMożesz płacić w wygodnych ratach. Cena jest stała, bez promocji i odliczania.
Java Developer zarabia ponad 14 tys. zł miesięcznie. Inwestycja zwraca się wielokrotnie już po pierwszym miesiącu pracy.
Dołącz do 300+ absolwentów, z których ponad 50 pracuje już w firmach IT. Masz 30 dni na zwrot, jeśli kurs nie spełni oczekiwań.
Bartłomiej Kalka
NIP: 7822888819
ul. Szwoleżerów 7a, 66-400 Gorzów Wielkopolski
bartlomiejkalka@javaready.pl
© Java Ready. Wszelkie prawa zastrzeżone.