![JavaSenior](/img/default-banner.jpg)
- 53
- 32 384
JavaSenior
Poland
Registrace 25. 09. 2023
Treści dedykowane dla doświadczonych programistów 🚀.
Na moim blogu javasenior.pl publikuję wpisy na zaawansowane tematy związane z programowaniem, a na tym kanale będę przedstawiał te treści w formie wideo. 🖥👩💻
Na moim blogu javasenior.pl publikuję wpisy na zaawansowane tematy związane z programowaniem, a na tym kanale będę przedstawiał te treści w formie wideo. 🖥👩💻
GitHub Copilot w IntelliJ IDEA
Mówi się, że leniwy programista to dobry programista 😉. Chodzi oczywiście o unikanie żmudnej pracy, którą można łatwo zautomatyzować. W dzisiejszych czasach mamy wiele narzędzi, które mogą pomóc nam w takich zadaniach podczas tworzenia oprogramowania. Dlatego warto z nich korzystać, a jednym z nich jest Copilot 🤖
📜 Spis:
00:00 - Wstęp
00:38 - Autouzupełnianie
05:15 - Generowanie dokumentacji i wyjaśnianie metod
05:54 - Generowanie testów
09:41 - Korzystanie z wielu klas do udzielenia odpowiedzi
12:19 - Podsumowanie
🌐 LINKI:
📚 BLOG: javasenior.pl
💻 GITHUB: github.com/arturlaskowski
🏷️ HASHTAGI:
#ai #copilot #java #spring #programowanie #it
📜 Spis:
00:00 - Wstęp
00:38 - Autouzupełnianie
05:15 - Generowanie dokumentacji i wyjaśnianie metod
05:54 - Generowanie testów
09:41 - Korzystanie z wielu klas do udzielenia odpowiedzi
12:19 - Podsumowanie
🌐 LINKI:
📚 BLOG: javasenior.pl
💻 GITHUB: github.com/arturlaskowski
🏷️ HASHTAGI:
#ai #copilot #java #spring #programowanie #it
zhlédnutí: 1 084
Video
ArchUnit: Testy architektury
zhlédnutí 536Před měsícem
Strukturyzując nasz kod, często decydujemy się oddzielić od siebie niektóre komponenty, tak aby były od siebie niezależne. 🤔 Jak jednak zautomatyzować sprawdzanie tych reguł? W tym mogą pomóc testy architektury! 🛠️ 📜 Spis: 00:00 - Wstęp 01:37 - Moduły Mavenowe 02:40 - ArchUnit 05:43 - ArchUnit vs Moduły Mavenowe 09:43 - Podsumowanie 🌐 LINKI: 📚 BLOG: javasenior.pl 💻 GITHUB: github.com/arturlasko...
CORS: Pakt między backend a frontend!
zhlédnutí 3,3KPřed 2 měsíci
Tworząc aplikację, gdzie mamy osobno frontend i backend. Musimy skonfigurować nasz serwer tak, żeby przeglądarka wiedziała, że może wczytywać dane pochodzące z naszego backendu na stronę tworzoną przez frontend. Do tego celu służy mechanizm CORS 🔒🔑 📜 Spis: 00:00 - Same-origin policy - teoria 02:56 - Same-origin policy - praktyka 04:18 - Cross-Origin Resource Sharing - teoria 06:17 - Cross-Origi...
Zarządzanie Dostępem: Pessimistic vs Optimistic Locking
zhlédnutí 1,1KPřed 2 měsíci
Projektując nasze aplikacje, warto zabezpieczyć się przed scenariuszem, w którym dwa procesy próbują jednocześnie zmodyfikować ten sam zasób. W tym celu możemy wykorzystać blokowanie pesymistyczne lub blokowanie optymistyczne. Każde z tych podejść ma swoje wady i zalety 📜 Spis: 00:00 - Problem 02:13 - Blokowanie pesymistyczne 04:28 - Blokowanie pesymistyczne - deadlock 06:43 - Blokowanie optymi...
Testy bez dotykania I/O: Benefit architektury portów i adapterów
zhlédnutí 848Před 3 měsíci
Mając w aplikacji bogatą logikę biznesową, chcielibyśmy móc testować ją jak najszybciej, niezależnie od innych warstw oraz punktów wejścia i wyjścia naszej aplikacji. Żeby osiągnąć ten cel, może nam pomóc idea portów i adapterów! 📜 Spis: 00:00 - Wstęp 01:34 - Przedstawienie aplikacji 04:42 - Odwrócenie zależności 07:02 - Adapter na potrzeby testów 11:53 - Adapter w kodzie źródłowym 14:02 - Pods...
Architektura Heksagonalna | Porty i Adaptery w 2 min!
zhlédnutí 857Před 3 měsíci
Architektura heksagonalna, znana również jako porty i adaptery, to podejście, które ułatwia rozwijanie projektów z bogatą domeną. W tym filmiku postaram się wyjaśnić jej główne założenia w ciągu 2 minut! 🌐 LINKI: 📚 BLOG: javasenior.pl/architektura-portow-i-adapterow-heksagonalna 💻 GITHUB: github.com/arturlaskowski/bigos-app 🏷️ HASHTAGI: #java #spring #programowanie #it #cleanarchitecture
Senior Java Developer Test: Porównanie GPT 3.5 vs GPT 4
zhlédnutí 2,2KPřed 3 měsíci
W tym wideo sprawdzam, jak ChatGPT poradzi sobie z pytaniami przeznaczonymi dla Senior Java Developera! Ty też sprawdź się swoją wiedzę z zakresu Senior Java Developer: www.udemy.com/course/senior-java-developer-quiz/?couponCode=EB77F26E54036DA55B73 📜 Spis: 00:00 - Wstęp 00:58 - Pytania otwarte 04:29 - Pytania zamknięte 10:19 - Podsumowanie 🌐 LINKI: 📚 BLOG: javasenior.pl 💻 GITHUB: github.com/ar...
Value Object: I twój kodzik jest piękniejszy!
zhlédnutí 2,1KPřed 4 měsíci
Niektóre wzorce są proste do użycia, ale mogą znacznie poprawić jakość naszego kodziku. Takim właśnie wzorcem jest Value Object 💻 Wpis na blogu o Value Object: javasenior.pl/value-object/ 📜 Spis: 00:00 - Czym jest Value Object? 03:05 - Persystencja Value Object 04:18 - Jaki problemy rozwiązuje Value Object? 10:08 - Value Object vs Encja 11:41 - Podsumowanie 🌐 LINKI: 📚 BLOG: javasenior.pl 💻 GITH...
Spring AI: Aplikacja Doradca Kulinarny w 5 min
zhlédnutí 1,6KPřed 4 měsíci
Spring AI to nowy projekt od Springa, który aktualnie jest rozwijany, ale w przyszłości będzie pomagał nam, Javowcom, tworzyć aplikacje z wykorzystaniem AI. Więc dobrze wiedzieć, co tam Spring kombinuje! 📜 Spis: 00:00 - Czym jest Spring AI? 01:37 - Implementacja aplikacji kulinarnej 08:53 - Prezentacja aplikacji kulinarnej 11:30 - Podsumowanko 🌐 LINKI: 📚 BLOG: javasenior.pl 💻 GITHUB: github.com...
Niejednoznaczność zasad programowania
zhlédnutí 749Před 6 měsíci
Niejednoznaczność zasad programowania
Testcontainers: Docker w testach integracyjnych
zhlédnutí 593Před 7 měsíci
Testcontainers: Docker w testach integracyjnych
Mi osobiście analiza tego co proponuje AI zajmuje więcej czasu niż zakodowanie tego samemu (tj. szybkość mojego klikania w klawiaturę, poruszania się po pliku czy IDE, wsparcie od IDE). Co więcej jak samemu koduję to czuję jak mój mózg pracuje - mam otwarte kilka wątków w głowie (tzn. myślę nad tym co aktualnie koduje, nad tym co za chwilę zakoduję i i nad tym co jeszcze potem zakoduje). Zaś dostając gotowy kod od IDE to programista po prostu sprawdza czy ta konkretna próbka kodu jest poprawnie napisana. To coś analogicznego jak kartkówka w szkole - to uczeń (AI) rozwiązuje problemy, a nauczyciel (programista) tylko sprawdza czy rozwiązanie zastosowane przez ucznia jest prawidłowe. Albo taki przykład: jesteś inżynierem, który projektuje jak samochody mają jeździć vs jesteś kontrolerem jakości czy dana sztuka samochodu poprawnie jeździ.
Jak najbardziej rozumiem, sam też mam tak, że czasami takie narzędzie bardziej przeszkadza niż pomaga i je wyłączam. Czasami jednak dostaję propozycję dokładnie taką, jakiej oczekiwałem, i wtedy wystarczy nacisnąć tab, wtedy przyspiesza. Dochodzą też preferencje, bo jedni wolą skrzynię automatyczną, a drudzy wolą sami zmieniać biegi. Każdy będzie bronił swojej racji. :D Podsumowując, warto przetestować i zobaczyć, czy to coś dla mnie. Jeśli nie, to wyłączyć i spróbować ponownie za pół roku czy rok, kiedy narzędzia te będą jeszcze bardziej rozwinięte. Wtedy może pojawią się możliwości bardziej zaawansowanych customizacji ustawień i każdy będzie mógł je dostosować do siebie 😄
skąd się uczyłeś tego wszystkiego co umiesz? Dopiero zdobywam doświadczenie zawodowe w pracy po studiach.
Ja zacząłem pracę komercyjną ponad 8 lat temu, kiedy to był okres, że jeśli nie "zabijałeś się" klawiaturą, to znaczyło, że nadajesz się do pracy (duże zapotrzebowanie na programistów). Więc uczyłem się zarówno na studiach, na własnych projektach (chciałem zawojować świat jakąś aplikacją), jak i w pracy. Początek kariery miałem o tyle fajny, że miałem zespół, który mnie wdrażał, a że w tamtych czasach wszyscy pracowaliśmy z biura, to jak czegoś się nie umiało, to podchodził ktoś bardziej doświadczony i tłumaczył. To był duży boost, codziennie 8h w pracy + studia i projekty i w akademiku też osoby bardziej doświadczone gdzie przy piwku razem można było pogadać jak zdobyć świat jakąś aplikacją, lub lepiej zrozumieć dany temat, a że poczuło się wtedy pieniądz to motywacja też była. Po skończeniu studiów dostałem propozycję doktoratu, ale nie chciałem (całą magisterkę już pracowałem na pełen etat i nie chciało mi się tak dalej ciągnąć doktoratu), ale dostałem kolejną ofertę, że mogę prowadzić zajęcia na politechnice, i to był kolejny impuls. Bo używałem czegoś w projektach, bo tak robiliśmy w pracy, ale nie wiedziałem, czemu to tak działa, więc trzeba było zrobić krok wstecz i poznać teorię tak, żeby umieć to wyjaśnić. Podsumowując: Praca, własne projekty, kursy, filmiki, próba wyjaśnienia czegoś prostymi słowami jako test, czy to rozumiemy. W dzisiejszych czasach dochodzą LLM, które wydają się dobrym partnerem do nauki, więc też warto korzystać :) No i oczywiście najważniejsze warto subskrybować ten kanał!
A ile to kosztuje?
Zależy od tego, czy subskrypcję chcesz wykupić prywatnie, czy firma ją kupuje. W skrócie są trzy warianty. Płatność miesięczna: Individual - 10 USD Business - 19 USD Enterprise - 39 USD
Fajny materiał! dzięki
Pomimo tego, że kilka osób już wspomniało o swoich odczuciach odnośnie trąbek, to tak mnie wk****, że muszę o tym napisać. Lądują u mnie obok reklamy shopee i baby shark jest chodzi o dźwięk. Najgorsze, że ciężko przewidzieć, kiedy podrozdział się kończy i trębacz zacznie. Pobrałem wideo do oglądania w samolocie i rozwalało mózg na słuchawkach. Znak rozpoznawczy nie jest czymś złym, ale nie powinien chyba grać roli głównej. Proszę, skróć i przycisz albo wywal. Przysłaniają naprawdę dobry kontent o wysokiej wartości. Super to omówiłeś.
Tak, wiem z tymi trąbkami mój błąd, w kolejnych filmikach jest to już poprawione, niestety w tym nie mogę już tego edytować :( Człowiek się uczy na błędach :D
@@javaseniorplspokojnie. Te kilkusekundowe wstawki nie przysłaniają dobrego tłumaczenia na dobrych przykładach. Mój komentarz miał być na tyle sugestywny, by zwrócił Twoją uwagę. Mam też świadomość, że kanał jest relatywnie młody i starasz się go poprawiać. Ucieszę się, jeśli moja sugestia będzie przez Ciebie wzięta pod uwagę ;-)
A sprawdzisz AI Assistant od IntelliJ?
Tak! Teraz zaczynam się bawić Tabnine, a następny w kolejce jest AI Assistant od JetBrains :D
Cześć, naszło mnie na naukę programowania. Uczę się już 1 dzień :D Może zrobiłbyś roadmapę z javy wynikającą z Twojego doświadczenia? A druga sprawa to może ustandaryzować te grafiki w miniaturach, grafiki z AI są fajne, ale w momencie odpalenia wszystkich filmów Tworzą mega chaos. Możemy się wymienić, ja zrobię Ci grafiki a Ty mi podpowiesz co i jak z kodzeniem :)
Cześć! Dzięki za komentarz! Co do roadmapy, po jednym dniu nauki, myślę, że nie warto od razu planować zbyt daleko. Na początku warto skupić się na składni języka i zrozumieniu obiektowości. Jest mnóstwo materiałów w internecie dla podstaw, więc nie musisz szukać "perełki", tylko pierwszy lepszy kurs, książka lub nawet pomoc AI, przerabiać to i dużo kodować i ta faza pewnie potrwa kilka miesięcy. Jak się ją przebrnie i składnia języka już nie sprawia problemu, to wtedy można myśleć o roadmap :) Jeśli chodzi o grafiki w miniaturach, pewnie masz rację, że mogą tworzyć chaos. Przyznaje nie znam się na tym, nie mam duszy artystycznej i z plastyki też za dobry nie byłem :D Ale tworzenie tych grafik sprawia mi frajdę, więc sam się jeszcze w to pobawię, jak stracę przyjemność z tego, to się odezwę :) Jasne, jeśli napotkasz jakieś problemy, możesz śmiało napisać, ale nie ukrywam, że skupiam się na pomocy w bardziej zaawansowanych tematach. W przypadku podstaw, narzędzia AI radzą sobie świetnie, więc myślę, że przez pierwsze kilka miesięcy mogą być doskonałym wsparciem w nauce. ;) Życzę powodzenia i dużo motywacji do nauki! 💪
Cześć, kolejny super filmik. Planujesz w przyszłości poruszyć szerzej temat exception handlingu? Chodzi mi o takie głębsze wejście w temat a nie kolejny filmik w stylu - to jest try catch, działa tak, itd. Mi osobiście zależałoby na zrozumieniu kiedy warto te wyjątki rzucać, czyli w jaki sposób twoim zdaniem określać, że dany przypadek powinien rzucać wyjątek. Opis odpowiednich praktyk też byłby fajnym tematem do poruszenia I dzięki jeszcze raz za materiały bo przekazujesz dużo informacji w zwięzłej formie
Siemanko! W najbliższych filmikach mam zamiar mówić trochę więcej o architekturze, ale fakt, temat wyjątków może być ciekawy i trochę 'kontrowersyjny', bo są zwolennicy rzucania wyjątków/dzielenia ich per warstwa i są zwolennicy zwracania 'rezultatów' jako wynik metody zamiast wyjątków :D Więc dzięki za komentarz, kolejny fajny temat do nagrania, wrzucam na listę, ale niestety nie jestem w stanie obiecać, kiedy się pojawi. Dodatkowo nie jestem najlepszy w estymatach, więc wolę nawet nie próbować tego estymować :D
Fajny film, mozna jeszcze dodac , metode OPTIONS i pre-flight check przegladarki.
Dzięki za komentarz! Masz rację, można by pokazać inne metody niż GET i wtedy pre-flight check (OPTIONS). Choć z drugiej strony, jeśli w jeden materiał włoży się zbyt wiele informacji, to może być ciężko zapamiętać :D Jak to mówią: na dwoje babka wróżyła :D
Kolejny raz powtarzam...to najlepszy kanał na YT 🤟
Dzięki Wielkie! I motywacja do tworzenia +5 :D
Jeszcze CQRS i Event Sourcing poprosimy :D
Będzie! Ale jeszcze chwilkę trzeba poczekać :D
Super materiał!. Nadrabiam ciągle wszystkie odcinki z kanału i nie żałuję żadnej minuty
Dzięki wielkie!
Daj podwyżkę rysownikowi! :)
Bardzo fajny kanał. Jedno z lepszych moich odkryć w tym roku. Pozdrawiam cieplutko autora.
Dziękuje!
Dziękuję za Twoje filmy są kozak ;)
Super materiał👍 Dzięki!
Dzięki wielkie!
świetnie zrobione i skondensowana, klarowna wiedza. Jak byś zabezpieczył backend, aby nie wysłał w ogóle danych? Czy zrobić w kodzie sprawdzenie pochodzenia zapytania i dać response z np. jsonem: nieuprawniony. Chodzi o przypadek, gdzie np. nie chcesz wysłać klientowi np. listy użytkowników, żeby nie mógł w narzędziach zrobić podglądu odpowiedzi. Czy są na to inne sposoby?
Dzięki za miłe słowo! Gdy klient otrzymuje odpowiedź z danymi, oznacza to, że miał uprawnienia do ich pobrania. Więc nawet jak pobrał te dane na nieświadomce to polityka Same-Origin Policy zapewnia, że dane te nie zostaną wykorzystane przez jakiś złośliwy skrypt, więc tutaj rozimie, że czysto teoretycznie rozważamy jak zaimplmetnować taki mechanizm na backend, żeby nawet nie wysłał tych danych. W Springu najprościej byłoby zaimplementować to za pomocą filtrów, czyli dodać interceptor (na przykład klaskę implementującą HandlerInterceptor), który przechwytuje request przed dotarciem do kontrolera. Jeśli nagłówek 'Origin' wskazuje na niezaufaną aplikację, od razu zwracamy w response jakiś Forbidden :D
Czemu dalle3 low effort thumbnail
Mam subskrypcje, to korzystam, ale możliwe, że są lepsze rozwiązania :D
@@javaseniorpl spoko, tak naprawdę nie okładka a treść się liczy :] Dobra robota, zasięgów i sukcesów
@@ww4102 Dzięki!
Jak mechanizm lockingu ma się do transkacji? Zazwyczaj przy aktualizowaniu kwoty na koncie wykonuję się znacznie więcej operacji DDL, wtedy blokujemy wiele rekordów takim pesymistic lockingiem?
Za pomocą pesymistycznego blokowania możemy blokować wiele rekordów, ale wiadomo, że wiąże się to z pewnym narzutem, więc opłaca się to stosować, gdy ryzyko wystąpienia konfliktów jest duże. W przypadku aktualizowania kwoty ryzyko wystąpienia konfliktów zazwyczaj nie będzie duże (oczywiście zależy to od kontekstu), ale zwykle w takich przypadkach lepiej będzie skorzystać z optymistycznego blokowania. Więc, odpowiadając trochę w stylu "to zależy", jeśli jest taka potrzeba, będziemy blokować wiele rekordów za pomocą pesymistycznego blokowania :D
@@javaseniorpl jak wszystko w programowania :D No tak jeśli to jest konto jakieś fundacji to być może lepiej pesymistic locking a jak zwykłe konto to optymistic
Fajny film. Cieszę się, że takie filmy pojawiają się na "polskim youtubie"
Dzięki wielkie! Będzie więcej!
super materiały! Dzięki
Dzięki!
Powiedziałeś, że załadowanie danych do przeglądarki mogłoby być niebezpieczne, ale jednocześnie stwierdziłeś, że to zewnętrzny backend decyduje o tym, czy je przekazać. Jak to się klei?
Przykład: Załóżmy, że umieściłem złośliwy skrypt na moim blogu, który ma za zadanie wysłać mi jakieś dane z czyjegoś banku X. Gdyby ktoś, będąc zalogowanym do banku X, odwiedził mój blog, skrypt mógłby automatycznie wysłać zapytanie do banku w tle, bez wiedzy użytkownika, a następnie wysłać pobrane dane z tego banku do mnie. Jednak dzięki mechanizmowi Same-Origin Policy (SOP), to się nie stanie. Skrypt na moim blogu nie będzie mógł załadować danych pobranych z banku X. W rezultacie, chociaż zapytanie zostałoby wysłane, złośliwy skrypt nie mógłby odczytać odpowiedzi z banku ani przesłać tych danych do mnie. Ale to serwer banku zadecydował, że nie wolno mojemu skryptowi wczytać tych danych. Jeżeli jednak mówimy o aplikacji składającej się z backendu i frontu, wtedy skrypty robione przez frontend muszą współdziałać z danymi dostarczanymi przez backend. W tym przypadku używamy konfiguracji CORS na serwerze backendowym, aby określić, które fronty mogą bez przeszkód korzystać z danych wysyłanych w naszych odpowiedziach.
extra, bardzo fajne podejście i super wytłumaczone, chcemy więcej! :-)
Dzięki!
Masz mega kanal, mega dobra robota sposob tlumaczenia i publikowane tresci, zloto. Dziekuje Ci za to i lec dalej bo jest wysmienicie, pozdrawiam bardzo serdecznie.
Dzięki wielkie!
Bardzo fajny temat, łapeczka leci. Sam od siebie mogę zaproponować jako pomysł na odcinek, coś o tym jak działa spring security. W bardzo podobnym stulu jak to że jest przedewszystkim idea i troche kodu
Dzięki wielkie za miłe słowo i sugestie! Fakt idę działania filtrów w Spring Security pewnie też da rade pokazać bez potrzeby skupiania się na kodziku :D
Świetne wytłumaczenie!
Dzięki!
Fajnie wytłumaczone, łapka poleciała.
Dzięki!
Zaaajebiste, dzieki !
Dzięki!
Standardowo profeska. Plus poczucie humoru absolutnie w moim stylu. 😂 Propsy
Dzięki wielkie!
Nagrywałeś to w sobotę po 21? :)
Bystre oko! Zgadza się 2 tygodnie temu w sobotę :D
Świetny materiał, zacząłem stosować w pracy i pomogło mi to w dużym stopniu uwolnić się od mocków ;) Podczas korzystania narodziły mi się dodatkowe pytania, czy jeśli pisze test który bazuje na przetwarzaniu jakiś danych to czy w sekcji given powinienem uzupełnić danymi moją inMemoryBazę uzywająć metody .create z repo? Czy jest na to jakiś lepszy pattern, np uzupełnienie mapy w trakcie deklaracji w implementacji interfejsu -> Chętnie dowiem się jak ty radzisz sobie z tym case'm. Druga sprawa, w SqlCustomRepository w metodzie findById rzucasz wyjątek w przypadku braku encji, czy SqlCustomerRepository powinno się dodatkowo przetestować na uruchomienie odpowiednich metod i rzucenie wyjątków? Np uzywajac Mockito.verify() ?
Dzięki wielkie! Co do pytań: 1. Ja robię to tak, że to, co jest potrzebne do działania aplikacji, ale jest bardziej globalne i niezwiązane bezpośrednio z testem, zwykle uzupełniam w metodzie przed odpaleniem testu (@BeforeEach). Natomiast w sekcji 'given' w teście dodaję to, co jest kluczowe dla wykonania danego testu. Lubię widzieć od razu przy czytaniu testu, jakie kluczowe dane zostały dodane. Można oczywiście potworzyć metody/klasy pomocnicze. 2. Jeśli chodzi o rzucanie wyjątków w repozytorium, to nie zawsze jest to uznawane za dobrą praktykę. Tutaj bardziej chodziło mi o to, że tworząc taki interfejs, możemy w implementacji repozytorium zrobić coś więcej, ale lepiej, żeby to było mapowanie na inny obiekt :) Co do tego wyjątku to jest związane z logikami w naszej aplikacji, planuję nagrać o tym filmik. W skrócie, mamy kilka logik. W tym przypadku serwis bierze odpowiedzialność za logikę procesową, czyli jak leci proces, pobierz customera, wykonaj coś na jakimś obiekcie, jeśli wykonało się A, to wykonaj B i tak dalej. Obiekt domenowy natomiast bierze odpowiedzialność za logikę domenową, czyli za walidację spójności - czyli mogę przejść ze stanu A na stan B jeśli.... Testując swój serwis, chciałbym przetestować logikę procesową. Może być sytuacja, że jeśli nie znaleziono klienta, to zrób coś innego, może dodaj jakiegoś 'ghosta', więc wtedy w repozytorium nie chcę mieć rzucania wyjątkami, bo nie pozwoli to dobrze przetestować logiki procesowej. Ten przykład był do pokazania możliwości, że się da i czasami ma to sens, wiadomo kontekst jest królikiem :) Jak pojawi się filmik o logikach w aplikacji, będzie to lepiej wyjaśnione!
Super materiał, świetnie wytłumaczone, wspaniała robota - już udpostępniam cioci
Dzięki wielkie! Mam nadzieję, że cioci też się spodoba!
Fajny filmik, będzie jakiś o zmianach w nowej Javie ?
Dzięki! Jeśli chodzi o zmiany w Java 21 (ostatni LTS), to jest filmik: czcams.com/video/42AJLnrlw5g/video.html Jeśli chodzi o Java 22 (marzec 2024), to nie wiem, czy się wyrobię przed Java 23 (wrzesień 2024), bo mam na swojej liście TODO kilka filmików, ale może się uda! Więc obiecać nie mogę, ale nie mówię nie :D
Cudo, skarbnica wiedzy, z chęcią łyknę więcej takich materiałów
Dzięki!
9:34 jak to dokładnie działa? Idzie update z WHERE ... AND version =4. Baza zwroci updated 0 rows, czy wtedy np hibernate widzi ten 0 update i sam rzuca locking exception, a potem zamyka tranzakcje? Nadal 2 tranzakcje moga tak zrobic, obie dostac updated 1 row, a potem zacommitowac i w sumie nic sie nie zmieni. Jak to dziala?
Dzięki za komentarz! W bazach danych, kiedy robi się update, od momentu wykonania update do commitu, baza danych automatycznie zakłada blokadę na ten rekord (nie trzeba nic dodawać w zapytaniu). Dlatego "update z WHERE... AND version = 4" założy blokadę na ten rekord i żaden inny update nie będzie mógł się wykonać w tym czasie. Więc gdy update z innego wątku będzie się wykonywać, pierwsza transakcja będzie już po commit, więc wersja rekordu na bazce będzie 5. Czyli inna transakcja nie znajdzie rekordu z wersją 4, co spowoduje, że w aplikacji pojawi się wyjątek, informujący o działaniu mechanizmu optimistic locking. Czyli normalnie, bez żadnych blokowań, ostatni wygrywa, a w przypadku optimistic locking pierwszy wygrywa 🥇
super filmik!!!
Dzięki!
dzięki, czekam na więcej!
Dzięki! Tworzą się kolejne materiały! 💪
Blokowanie konta: pesymistyczne - LOCK założony przez komornika, optymistyczne - LOCK założony przez skarbówkę (z założenia musiałeś mieć jakiś dochód), DEADLOCK - dwa powyższe jednocześnie
😂😂😂
Jaki zbieg okoliczności ,wczoraj mój mentor kazał mi się tego nauczyć a dzisiaj ty wrzucasz filmik .Dopiero wczoraj ogarnąłem jak wielką rolę odgrywają poziomy izolacji i zarządzanie transakcjami i dziwię się , że żaden kurs który przerobiłem nawet o tym nie wspomniał 😅
O! To nie może być przypadek! Los chciał, aby kolejne odcinki JavaSenior wpisywały się w twoją ścieżkę rozwoju. Dlatego od teraz musisz być na bieżąco z każdym nowym filmem :D PS. Dzięki za komentarz!
cenna wiedza
Dzięki! 🤜🤛
fajne, elegancko wytłumaczone, kojarzę temat ale nie wiedziałem, że to się tak nazywa :D
Najważniejsze, żeby wiedzieć, że takie coś jest i umieć tego użyć. W IT mamy sporo nazw na te same koncpety i przez to potem często się kłócimy co jest czym, czy to już taki pattern czy inny itp :D
Myślałem że coś umiem a każdym filmem czuje się jak debil
faktycznie to jest lepsze podejście niż zabawa w mocki :D
chętnie zobaczyłbym testowanie z użyciem mocków na jakiejś większej aplikacji w twoim wydaniu
Dzięki za komentarz! Ogólnie staram się unikać mocków na ile to możliwe, wiadomo czasami trzeba, ale jeśli można jakoś inaczej to obejść, np. używając podejścia portów i adapterów, a faktycznie logika nie jest crudowa, to staram się tworzyć jakieś implementacje na potrzeby testów. Tutaj filmik, w którym pokażę przykład: czcams.com/video/ZrIeY7NwKSI/video.html Jasne, czasami użycie mocków jest najprostsze i najlepsze. Może uda mi się nagrać też coś o tym, ale najbliższe filmiki chciałem poświęcić bardziej architekturze aplikacji :D
Sub, Like i co tam jeszcze YT wymyśli. Kanał TOP :)
Do mnie trafia ta forma, dobre i zwięzłe wyjaśnienia, fajne porównania. Wg. mnie właśnie takiego kontentu jest za mało na polskim YT, czyli coś więcej niż wyjaśnianie podstaw, głębsze pochylenie się nad tematem. Mam nadzieję, że kanał będzie się dobrze rozwijał i czekam na kolejne filmy! Powodzenia!
Pytanie mam -- ja akurat nie jestem ze świata Java/JVM. W przypadku oznaczenia klasy jako `Embeddable` i podanie jej jako `pola` encji -- w jaki sposób zostanie to zapisane w bazie? Pod spodem będzie to rozbite na 2 kolumny? Czy zapisze się jakiś "zrerializowany" obiekt? Czy jeszcze inaczej?
Rozbite na dwie :) Domyślnie, każde pole w klasie oznaczonej jako @Embeddable jest mapowane na osobną kolumnę w tabeli bazy danych przypisanej do encji. Przykładowo jeśli mamy encję Reward z polem RewardDateRange oznaczone jako @Embeddable, a w klasie RewardDateRange znajdują się dwa pola: startDate i endDate, to w tabeli "rewards" w bazie danych będziemy mieli dwie kolumny: "start_date" i "end_date".
Kiedy dowiedziałem się o Outbox Pattern to był to jeden z tych momentów w moim życiu zawodowym kiedy miałem wielkie "WOW, ale to jest genialne". W aplikacji w której pracowałem szły nam wiadomości na kolejkę, a w bazie danych wpisu brak, bo kilka linii po wysłaniu wiadomości leciał jakiś exception i rollback na transakcji bazodanowej.
Outbox potrafi uratować :D
Dzisiaj przypadkowo trafiłem na Twój kanał i to pierwsze wideo które obejrzałem. Moją uwagę zwróciło to, że pomimo tego że mówisz szybko to mówisz wyraźnie. Podoba mi się to, ponieważ jako doświadczony i szybko myślący developer takie wideo jest dla mnie wartością dodaną, gdyż mnie wolne czy nawet normalne tempo mówienia męczy oraz mam poczucie straty czasu. W Twoim przypadku iloraz przekazanej wiedzy i omówionego kodu do czasu poświęconego na obejrzenie wideo jest wysoki 😃 Pozdrawiam
Dzięki wielkie za feedback i miłe słowo!
Śmieszny ten żart na początku :D no i cały filmik super!
Dzięki! Zamockowałem 💪