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. o ile już teraz to brzmi dla Ciebie dobrze to:
A o ile 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, iż powstało wiele implementacji ORM (czyli framworków mapujących dane i operacje). Zdefiniowany został choćby 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. gwałtownie 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 adekwatnie 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 dzięki 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ść, iż 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ą, iż 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, iż jest GRUBO!
To jak? Widzimy się na pokładzie?
Na zakończenie
Na tę chwilę to wszystko. Pamiętaj, iż o ile masz jakieś pytania, napisz do nas. Jesteśmy po drugiej stornie.