Sprawdź, jak dobrze znasz TE technologie w Java 👀

softwareskill.pl 1 tydzień temu

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:

Tutaj dołączysz do Programu Java Developera

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!

Dołączam do Programu Java Developera TERAZ za 1199 zł + VAT

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!

Zobacz więcej

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.

Idź do oryginalnego materiału