W świecie Java istnieje i jest wykorzystywanych wiele technologii. Prawdę mówiąc, gdy wkraczałem w Javowy świat to aż nie wiedziałem, za co się zabrać – tego jest aż tyle 😨.
Zacząłem przeglądać oferty pracy, co jest wymagane. Rozmawiałem z kolegami, którzy już programują. Żeby się osłuchać, jeździłem na konferencje i chodziłem na lokalne meetupy organizowane przez społeczność, ale również przez firmy.
Doczytaj do końca, a możesz też tego blogposta potraktować jako
✅ check-liste,
✅ co wiesz,
🆕 a czego jeszcze nie.
Technologie
Być może Ty już wiele wiesz, a może trochę już popracowałeś w branży. W Programie Java Developera zawarliśmy często wykorzystywane technologie. Są to:
- Spring Boot i jego komponenty Spring Cloud
- Spring Data, Hibernate, MyBatis
- Apache Kafka
- Consul (service discovery)
- ZooKeeper
- Zipkin (tracing)
- Grafana i Prometheus (monitoring)
- Systemy kolejkowe (JMS), np. ActiveMQ
- Maven
Wszystkie te technologie dokładnie omawiamy w Programie Java Developera (link do pełnej agendy TUTAJ).
Zebraliśmy i usystematyzowaliśmy wiedzę w jednym miejscu. Jeżeli już teraz to brzmi dla Ciebie dobrze to:
A jeżeli jeszcze nie wiesz, to czytaj dalej… 😉
Sprawdź, które z tych technologii i zagadnień znasz i jak dobrze. Zaczynamy:
1. Mikroserwisy są popularne
Architektura mikrousług zyskała ostatnimi laty mocno na popularności. Istnieje bardzo dużo korzyści z ich stosowania, takie jak relatywnie proste komponenty, autonomia zespołu i cykl wydawniczego, niezależne skalowanie itd. Architektura ta jednak stawia pewne wyzwania, np:
- Odporność na awarie (resiliency) podczas wywołań innych mikrousług
- Gromadzenie logów (Log Aggregation) w dynamicznym środowisku
- Monitoring i Tracing (śledzenie) żądań w rozproszonym systemie
- Service Discovery
- Load Balancing (server side i client side), czyli rozkładanie ruchu
- Caching danych
Oprócz technicznych wyzwań pozostają jeszcze te strategiczne, czyli: jak podzielić system, domenę, na samodzielne komponenty.
2. Systemy kolejkowe są (prawie) wszędzie
Sposób komunikacji przez systemy kolejkowe daje sporą niezależność. Można zlecać operacje, które będą wykonane: w swoim czasie, gdy system będzie wolny, po kolei, bez ich utraty. Podczas używania systemów kolejkowych warto znać:
- Jak działają systemy kolejkowe, czym jest Broker, Queue, Topic, Durable Subscription
- Standard JMS (Java Message Service), jako próba ujednolicenia API
- Spring JMS
- Jakie są gwarancje dostarczenia i odebrania wiadomości
- Jak radzić sobie z duplikatami (idepotentność) i jakie są strategie rozwiązania tego probelmu
- Czym jest i kiedy występuje At-least-once delivery i At-most-once delivery
- Jak skalować system opartych o kolejki, np. kolejność przetwarzania zadań i współbieżny dostęp do zasobów
- Jak zapewnić wysokodostępny klaster w architekturach Active/Active i Active/Passive z mechanizmem Leader Election
3. Apache Kafka zyskuje na popularności
Apache Kafka to system kolejkowy coraz bardziej zyskujący na popularności. Potrafi on dobrze się skalować i pracować w trybie bardzo szybkiego przetwarzania jak i przesyłania wiadomości z wysoką gwarancją dostarczenia. Możesz dobrać model działania w zależności od wymagań niefunkcjonlanych. To, co niewątpliwie warto wiedzieć to:
- Czym się różni szybka (dziesiątki milionów wiadomości na sekundę), a bezpieczna komunikacja w Kafce (brak utraty, duplikatów wiadomości, zachowana kolejność).
- W jaki sposób Kafka działa od środka, jak działa broker, czym są grupy konsumentów
- Jakie są strategie commitowania offsetu
- Jakie są wyzwania związane z High Availibility oraz jak działa proces rebalancingu – czyli jak „postawić” Kafkę produkcyjnie
4. JPA i Hibernate oraz Spring Data
Praktycznie każda aplikacja korzysta z bazy danych. Są one różne. Dostęp do relacyjnych baz danych to na tyle częsty przypadek, że powstało wiele implementacji ORM (czyli framworków mapujących dane i operacje). Zdefiniowany został nawet standard JPA (Java Persistence API).
Jednym z najbardziej dojrzałych frameworków jest Hibernate. Umożliwia on mapowanie obiektowo-relacyjne, czyli odwzorowania obiektów klas na bazę danych.
Popularnością cieszy się również projekt Spring Data, który w automatyczny sposób tworzy dostęp do bazy danych udostępniając gotowe metody. Szybko możesz zbudować aplikację, która ma gotową integrację z bazą danych.
Posługując się tymi narzędziami warto wiedzieć o:
- Standardzie JPA, Hibernate jako implementacji oraz Spring Data jako framework wykorzysujący te technologie
- Jak działa Entity Manager, jaki jest cykl życia encji (stan transient, detached, removed, managed)
- Jak działa transakcyjność i jakie są tryby propagacji transakcji
- Jakie są adnotacje i jakie zapytania generują „pod spodem” – co i kiedy ORM wysyła do bazy
- Czym się różni JOIN, JOIN FETCH i subquery, jak rozwiązywać problem wydajnościowy N+1 oraz jak śledzić zapytania w celu dalszej ich optymalizacji
5. JDBC, ORM oraz MyBatis
JDBC (Java DataBase Connectivity) jest specyfikacją i podstawą komunikacji z bazami danych, leży u podstaw innych framerorków, które z niego korzystają. Standard JDBC implementują sterowniki do konkretnych bazy danych, których używasz w projektach.
Oprócz Spring Data i Hibernate warto wiedzieć:
- Jak właściwie działają ORMy?
- ORMy to nie tylko Hibernate. Istnieje lekka alternatywa np. MyBatis
- Są czasem momenty kiedy ORM nie daje rady i musisz zejść do poziomu natywnego SQL i JDBC
- Jak przetwarzać bardzo duże ilości danych za pomocą kursorów lub operacji wsadowych gdzie ORMy niekoniecznie muszą dać sobie radę
- Jak wywoływać procedury i funkcje
6. Czysty kod, domain model i dobre praktyki
Jako programista częściej czytasz i analizujesz kod, niż go piszesz. Znając techniki pisania czystego kodu ułatwiasz pracę samemu sobie oraz współpracownikom w zespole. Umiejętna refaktoryzacja i pisanie tzw. „czystego” kodu ułatwia analizę, utrzymywanie i testowanie aplikacji z którą pracujesz. W tym zakresie warto znać:
- Wzorce projektowe – posługiwanie się dobrze znanymi rozwiązaniami problemów oraz terminologią znacznie ułatwia pracę w projekcie i komunikację
- Umiejętność szybkiej refaktoryzacji kodu, dzielenie go na mniejsze fragmenty zgodnie z zasadami SOLID.
- Zasady KISS, YAGNI, DRY, Prawa Demeter, Fail Fast
- Tworzenie bogatego modelu domenowego modelującego rzeczywistość i niezmienniki, reguły biznesowe oraz operacje
7. Stabilny i testowalny kod
Testy zapewniają nam siatkę bezpieczeństwa podczas wprowadzania zmian. Uruchamiając je chcemy mieć pewność, że nie wprowadziliśmy błędów. W tym aspekcie powinieneś umieć:
- Pisać czytelne testy, z reużywalnym kodem (np. Matki Obiektów, klasami Steps, Assert Object Pattern) – czyli Clean Code w testach
- Powodować, aby raport z testów był bardzo czytelny w momencie odkrycia błędu
- Ułożyć piramidę testów, aby znaleźć balans pomiędzy poziomem izolacji i szybkością wykonywania, a pewnością, że wszystkie klasy poskładane razem realizują spójny stan systemu
- Dobrze znać biblioteki, których używasz (asercje, mocki, testy parametryzowane), aby Twoje testy były maksymalnie czytelne
- Znać strategie testowania I/O, ewentualnie wykorzystywać techniki takie jak Consumer-Driven Contract
8. Maven / Gradle
Maven i Gradle to konkurujące ze sobą narzędzia do budowania aplikacji i rozwiązywania zależności w Java. Typowym przypadkiem użycia jest definiowanie zależności wprowadzanych do projektu. Używając Mavena warto dodatkowo wiedzieć:
- Jak działa cykl życia Maven, w jaki sposób działają pluginy
- Jak można definiować zależności, oprócz zwykłego dependency (scopes, bill of materials i importy)
- W jaki sposób tworzyć i publikować artefakty do repozytorium, czyli jak stworzyć działający pipeline z releasowaniem projektu
- W jaki sposób rozwiązywać problemy z przypadkowymi lub brakującymi zależnościami, np. classpath hell
9. Sporo. Czy to wszystko? …
Ufff… sporo tego. Zebrała się niezła garść wiedzy.
Przede wszystkim nie powinno Ci sprawiać większych trudności wykorzystywanie podstawowych technologii używanych w projekcie.
- Frameworka: np. Spring, Spring Boot, innego.
- Używanej bazy danych i narzędzi do niej.
- Sposobu komunikacji i bibliotek (do HTTP lub innego protokołu np. Protobuf).
- Do tego warto znać technologie wspierające, np. system kolejek, przetwarzanie wsadowe.
- Może jakieś rozwiązania, biblioteki, systemy już wypracowane w firmie?
Skąd to wszystko wiedzieć?
Wiedza jest wszędzie… i to praktycznie ZA DARMO.
Są dokumentacje, są pojedyncze prezentacje, nagrane wystąpienia z konferencji i jest StackOverflow!
Musisz tylko wiedzieć, czego się nauczyć i poświęcić czas, żeby pozyskać wiedzę. Potem wykorzystując wiedzę w praktyce nabywasz doświadczenie.
Moja propozycja
Jest tego sporo. Dlatego mam propozycję.
Przygotowaliśmy Program Java Developera, który zawiera usystematyzowaną wiedzę na temat często potrzebnych narzędzi, technik i technologii w Java. Nie wyczerpuje to całej listy. Ale to potężna dawka wiedzy, którą można zmieścić w rozsądnym czasie, czyli:
- 14 tygodni nauki w formie lekcji video.
- Około 40 godzin nagrań
- Sam decydujesz o tempie nauki – masz DOŻYWOTNI dostęp do materiałów
- Bez suchej teorii i dokumentacji – masa realnych przykładów w kodzie!
- Dostęp do zamkniętej grupy wymiany wiedzy: mentorzy + uczestnicy.
- Kilka zamkniętych webinarów na żywo uczestników z mentorami
Piotr Pelczar, Damian Rudczyk i Krzysztof Kądziołka to trzech bardzo doświadczonych Java Developerów. Omówili technologie Javove mówiąc o nich z własnego doświadczenia zdobytego na placu boju. To łącznie ponad 40 lat doświadczenia w Java!
To najlepszy moment na dołączenia w tej cenie. 29 listopada 2021 o godzinie 21:00 zamykamy sklep, a tańsza oferta już nie wróci.
Tematy, które poruszamy to:
- Integracja i monitoring Mikroserwisów
- Systemy kolejkowe i skalowanie aplikacji
- Apache Kafka – wprowadzenie
- Apache Kafka – zaawansowane zagadnienia
- Apache Kafka w Spring Boot
- Od JDBC do Mapowania Obiektowo Relacyjnego (ORM)
- ORM na przykładzie JPA i Hibernate
- Anotacje, Spring + Hibernate oraz dobre praktyki
- Spring Data
- Czysty kod i wzorce projektowe
- Czysty kod, Domain Model i dobre praktyki
- Stabilny i testowalny kod – narzędzia
- Stabilny i testowalny kod – techniki
- Maven
Sam widzisz, że jest GRUBO!
To jak? Widzimy się na pokładzie?
Na zakończenie
Na tę chwilę to wszystko. Pamiętaj, że jeżeli masz jakieś pytania, napisz do nas. Jesteśmy po drugiej stornie.