- 104
- 8 969
WSA WroSoftAcademy
Poland
เข้าร่วมเมื่อ 1 ธ.ค. 2021
Jak się uczyć? Jak wytrwać w postanowieniach? Film o tym, jak sprawić żeby chciało się chcieć
Jak się uczyć? Jak wytrwać w postanowieniach? Film o tym, jak sprawić żeby chciało się chcieć
มุมมอง: 119
วีดีโอ
Jak powstaje legacy code. Refactor.
มุมมอง 533หลายเดือนก่อน
Jest to film prezentujący domenę na której będziemy robić przykłady wzorców projektowych. Przy okazji demonstruje jak powstaje legacy code, jak zrobić refactor oraz kilka innych tricków 0:00 Wstęp 1:00 Prezentacja architektury projektu 2:30 Tworzenie pliku JSON 3:36 Tworzenie pliku CSV 4:54 Legacy code 5:30 Refactor 10:11 Powiązanie dwóch źródeł danych 13:30 Zakończenie
Design_pattern_02 Builder - z multi cursor na IntelliJ
มุมมอง 2262 หลายเดือนก่อน
Poznamy wzorzec projektowy Builder. Jaki problem rozwiązuje, jak go stworzyć i jak używać. Pokażemy również jak stworzyć Builder z użycie, multi kursora w IntelliJ 0:00 Wstęp 0:23 Przedstawienie problemu 1:33 Tworzenie Buildera 4:21 Użycie Buildera 5:08 Warianty Buildera, które można spotkać 7:47 Builder z użyciem mutli cursor
Design_pattern_01 Singleton - double check
มุมมอง 2742 หลายเดือนก่อน
Poznajemy najprostszy wzorzec projektowy - Singleton. Poznamy jego ewolucję od najprostszej możliwej wersji, po wersję na wielowątkowości, czyli double chek 0:00 Wstęp 0:20 Opis wzroca 0:39 Wykorzystanie wzorca 1:38 Implementacja
JAVA_SE_89 Typy w wielowątkowości
มุมมอง 982 หลายเดือนก่อน
Typy w wielowątkowości, czyli jakich typów danych bezpiecznie możemy używać gdy pracujemy na wielu wątkach. Opowiemy o typach atomowych, jak AtomicInteger, AtomicLong, AtomicBoolean, o tabliach - AtomicIntegerArray, czy kolekcjach: ConcurretMap i CopyOnWriteArrayList
JAVA_SE_88 Sterowanie wątkami za pomocą metod wait() i notify()
มุมมอง 1003 หลายเดือนก่อน
Jak usypiać i wybudzać wątki? Poznamy na podstawie komunikatora, który będzie wykorzystywać metody wait() i notify(). Omówimy do czego służą te metody, jak je wywoływać poprawnie i kiedy z nich korzystać.
JAVA_SE_87 synchronized & Thread.join()
มุมมอง 783 หลายเดือนก่อน
Czym jest metoda synchroniczna, blok synchronized i jak tego używać? Poznany również metodę join(), która pozwala synchronizować wątki między sobą.
JAVA_SE_86 Thread - metody statyczne
มุมมอง 963 หลายเดือนก่อน
W tym odcinku opowiemy o metodach statycznych na klasie Thread, jak zarządzać wątkami. Będzie też coś o wyjątkach ;) 0:00 Wstęp 0:20 Nazywanie wątków 1:06 Zarządzanie wątkami 3:24 setPriority() 4:05 currentThread() 5:30 Wątki a wyjątki... 6:29 sleep() 6:58 yield() 8:36 Podsumowanie
JAVA_SE_85 Wielowątkowość
มุมมอง 1413 หลายเดือนก่อน
Programowanie współbieżne i wielowątkowość... Jak uruchomić dwie metody równocześnie? Dowiemy się w tym odcinku
JAVA_SE_84 Piszemy własnego Spring'a
มุมมอง 2294 หลายเดือนก่อน
Oto przykład jak w praktyce wykorzystać adnotacje i programowanie refleksyjne z nutką metod generycznych. Zademonstrujemy jak zaimplementować swój własny mechanizm dependency injection, z którego znany jest Spring w java. 00:00 Wstęp 00:35 Architektura przykładowego projektu 03:07 Po co DI? Przedstawienie problemu 04:18 Implementujemy własne Dependency Injection 13:41 Użycie naszego DI i urucho...
JAVA_SE_83 Metody w refleksji
มุมมอง 574 หลายเดือนก่อน
Omówimy co jakie metody mamy na metodzie, jak wywoływać metody w refleksji i najważniejsze, czy da się wywołać na obiekcie metodę prywatną?
JAVA_SE_82 Konstruktor w refleksji
มุมมอง 525 หลายเดือนก่อน
W tym odcinku opowiemy jak za pomocą refleksji budować obiekty. Będziemy używać konstruktorów w refleksji
JAVA_SE_79 Programowanie refleksyjne - klasa
มุมมอง 726 หลายเดือนก่อน
JAVA_SE_79 Programowanie refleksyjne - klasa
JAVA_SE_78 Dziedziczenie na adnotacjach
มุมมอง 576 หลายเดือนก่อน
JAVA_SE_78 Dziedziczenie na adnotacjach
JAVA_SE_76 Record - mini klasa na sterydach
มุมมอง 447 หลายเดือนก่อน
JAVA_SE_76 Record - mini klasa na sterydach
JAVA_SE_75 Połączenie typów generycznych i dziedziczenia. Co możemy osiągnąć?
มุมมอง 1787 หลายเดือนก่อน
JAVA_SE_75 Połączenie typów generycznych i dziedziczenia. Co możemy osiągnąć?
JAVA_SE_74 Zaawansowane typy generyczne
มุมมอง 1287 หลายเดือนก่อน
JAVA_SE_74 Zaawansowane typy generyczne
JAVA_SE_67 metoda default w interface
มุมมอง 4411 หลายเดือนก่อน
JAVA_SE_67 metoda default w interface
Do czego filmiki na twoim kanale się mogą przydać?
Wzorce projektowe pozwalają ogarnąć kod na poziomie klas, metod lub pakietów, żeby był czytelniejszy, podzielony odpowiedzialnością, bardziej spójny. Wzorce sprawiają, że kod jest elastyczny i łatwo można aplikacje rozszerzać, dodaj kolejne funkcjonalności. Z kolei czytelność kodu wpływa na szybsza analize kodu. Tych rzeczy ja używam w każdym projekcie w którym biorę udział. Wiadomo, nie zawsze, nie wszystkich ale jeżeli wiem jakie są Wzorce i jak działają to szybko dostrzegam schematy problemów do rozwiązania.
Nieźle
Dzieki 😁
Projekt na podstawie którego jest ten film omówiony jest tu: th-cam.com/video/Yz8W5bdyO4k/w-d-xo.html
średniki w csv to herezja! CSV == Comma-Separated Values !!
Tak, z nazwy wynika, że stosujemy przecinek jako separator. Narzędzia do otwierania plików, jak Excel, OpenOffice, czy LibreOffice pozwalają na wybór separatora zastosowanego w pliku. Przecinki są o tyle problematyczne, dla nas, że są separatorem części dziesietnych na liczbach. Z tego powodu ja najczęściej stosuje średniki. A Wy jakie stosujecie separatory w plikach csv? Być może jest inny sposób, żeby obejść kwestie liczb
@@wrosoftacademy Rozwiązanie problemu: "
@@wrosoftacademy omg, naprawdę Office ma takie fancy ficzesy? 😂 I nawet LibreOffice? 🤣 a poważniej to ja jeśli muszę to używam pipe'ów a czasem tabów
1:26 rolę tę przejmują kontenery IoC, a wymienione frameworki jedynie je wykorzystują.
00:17 "poznamy Singleton takim jaki być powinien, czyli double checked". To jest szkodliwe uproszczenie. Przy wykorzystywaniu wielowątkowym synchronizacja przy dostępie do instancji ma sens, ale gdy korzystamy z jednego wątku nie ma potrzeby takiej synchronizacji, więc nie powinno się jej robić. Nie każdy singleton powinien być double checked, tylko te które muszą być thread-safe.
Dzięki za komentarz 🙂 Tak się zastanawiam, że w sumie to trochę masz rację. Celem było zaprezentowanie pełnego singletona thread-safe, gdyż zawsze są pokazywane te proste i nie raz na rozmowach na początku kariery dostawałem pytanie o double-check. Szczerze mówiąc nie używam w biznesowym kodzie singletona, gdyż jak wspomniałeś w drugim komentarzu robię to z użyciem IoC. Użycie double-check na jednowątkowej aplikacji nie będzie grzechem, gdyż nic nie tracimy na wydajności, poza kilkoma extra linijkami. Gorzej, jak w którymś momencie będziemy chcieli przejść na wielowątkowość, to wówczas musimy znaleźć wszystkie singletony biorące w tym udział. Dlatego użycie prostego singletona traktowałbym jako świadomy dług technologiczny.
@@wrosoftacademy Czy nie tracimy czy tracimy zależy od tego jak często jest wywoływany kod zapewniający jedną instancję. Zgoda - w większości przypadków nie tracimy, bo to nie ma większego znaczenia, ale dla mnie to używanie wkrętarki do wkręcenia jednej śrubki - prościej, szybciej i taniej zrobić to śrubokrętem. Przy 100 śrubkach zabawa z wkrętarką ma sens. Zmiana aplikacji z jedno na wielowątkową to dużo więcej niż podmiana implementację singletona i to w praktyce w 99% przypadków kończy się zaprojektowaniem nowego systemu zorientowanego wokół danych oraz struktur read-only, żeby można było efektywnie rozdzielać pracę, a logika biznesowa jest "doklejana" wokół tego. Zawsze też można stworzyć dwa osobne typy i używać ich w zależności od tego czego potrzebujemy.
tak, z tym mogę się zgodzić, masz jak najbardziej rację. Należy tylko pamiętać, żeby decyzję podjąć świadomie. W tym kontekście rzeczywiście było to uproszczenie. Wynikająca raczej z doboru słów niż celowego zabiegu. Ale dziękuję za zwrócenie uwagi :)
@@wrosoftacademy Jestem na to szczególnie wyczulony, bo ostatnio często poprawiam wewnętrzne narzędzia gdzie jest sporo kodu, który robi coś czego w zasadzie nie musi robić, ale to przecież nic wielkiego. Po tego typu drobnych poprawkach nagle aplikacja generuje raport w 2 minuty zamiast 1,5 h, dając identyczny output, bo drobne zmiany w gorącej ścieżce bardzo szybko się kumulują. W community języków z GC zbyt często pomija się w zasadzie aspekt pamięci, kosztu GC, robienia tego co potrzeba, tego jak ważny jest rozkład pamięci itd. Może komuś to otworzy oczy albo zainspiruje Cię do stworzenia jakiegoś contentu. Trzymaj się!
Świetny komentarz 😃 Lubię takie historie. Sam nie raz robiłem refactor w calach optymalizacyjnych. Kod który poprawiałeś to był dead-code, wykonywał zbędne rzeczy, czy raczej kwestia optymalizacji?
Jakoś nigdy nie trafiłem takiej implementacji z double check. Dzięki !
Problem najczęściej jest z tym, że wielowątkowość jest robiona na końcu. Jak się uczymy to jesteśmy już przeładowani wiedzą, a później nie mamy czasu przerobić jej na spokojnie. i zrobić powtórkę. Często przy singletonie skupiamy się na idei, żeby zademonstrować blokowanie tworzenia wielu obiektów klasy, a kwestie wielowątkowości są pomijanie. Jednak nie raz zdarzyło mi się usłyszeć na rozmowie rekrutacyjnej pytanie o double check po tym, jak przedstawiłem implementację singleton
Cześć, co myślisz o wykorzystaniu enum do implementacji singleton? Wiem tylko ze tak można ale nie zdazylo mi się jeszcze tej wiedzy wykorzystać. Próbowałeś już może takiego sposobu?
Jak najbardziej da się qykorzystac enum. Nie robiłem tego na produkcyjnym kodzie ale jest to proste do zaimplementowania. Enum jest zwykłą klasą, wiec metody i pola tworzymy tak samo. Wyglądaliby to tak: public enum PersonService { INSTANCE; public void doSomething(){ } //reszta klasy }
Więcej o enum znajdziesz tu: th-cam.com/video/LFJedA3PEsQ/w-d-xo.html
@@wrosoftacademy widziałem ten filmik i nawet zadałem Ci tam już kiedyś podobne pytanie 😀
@@januszkuznik137 singleton z enuma to tragiczny wybór polecany przez speców od programowania z LinkedIn, którzy uważają ten typ singletona za świętego graala, bo jest serializowalny. Kto i po co miałby serializować singletony tego nie wiem, bo to dosłownie zaprzecza jego idei - zapewnieniu jednej instancji na runtime, więc serializacja nie ma sensu. Trzymać się z daleka od takich wynalazków i używać typowych singletonów z lub bez synchronizacji dostępu w zależności od potrzeb. Problem jest dawno rozpykany, a takie głupio mądre wynalazki tylko zaciemniają kod. Chyba, że masz jakiś bardzo konkretny powód, żeby go użyć, ale wtedy byś pewnie nie zadał tego pytania, tylko po prostu to zrobił ;)
Dziwne, że ten kanał ma tak mało subskrypcji, fajnie przedstawiasz tematy, mam nadzieję, że będziesz nagrywał dalej. Planujesz może poruszać w przyszłości bardziej zaawansowane tematy/zagadnienia/problemy? Wydaje się, że kanałów dla początkujących jest chyba już za dużo, natomiast cieżko trafić takie, gdzie porusza się bardziej zaawansowane problemy.
Też mnie to właśnie dziwi, ja co piątek, piąteczek, piątunio wypatruje nowego filmu
Cieszę się, że moje filmy niosą wartość dla Was 😍 Plan jest żeby poruszać coraz bardziej zaawansowane rzeczy. Jeżeli macie jakieś pomysły, o czym chcielibyście posłuchać lub nowego poznać, śmiało dawajcie znać w komentarzach. Jestem otwarty na propozycje 😜
Z tymi piątkami ostatnio bywało ciężko ale obiecuję poprawę, żeby filmy faktycznie w piąteczkowy wieczór się pojawiały 😆
Wiem, że materiałów o tej tematyce jest multum ale ja bym bardzo chętnie zobaczył serie o design patterns w Twoim wykonaniu. Czy to Twój drugi kanał www.youtube.com/@wrosoftware5103 ?
tak, tamten jest jako prywatny do sluchania muzy itd. :)
Super wytłumaczone. Pozdrawiam!
Dziękuję 😊
nigdy z se nie miałem do czynienia, ale mega szacun za content
Dziękuję 😊
warto nie spolszczac angielskich slow w programowaniu, bo czasem jak sie rozmawia nie z polakiem to druga osoba moze nie zrozumiec o czym mowimy. ranabol nie ranejbel translate.google.as/?sl=en&tl=pl&text=runnable&op=translate
Słuszna uwaga. Zbyt często słyszałem tę wersję i nie zwróciłem nawet uwagi że jest błędna 🤭
@@wrosoftware5103 mam nadzieje, ze nie odebrales tego źle, bo to nie chodzi o moje czepianie tylko doskonalenie swoich programistycznych skilli :D. Ja sie łapałem na tym ze mowilem "enum" zamiast "Inam" itd
@@jakub.686 spokojnie, nie odebrałem tego jako przytyk, a zwrócenie uwagi na niepoprawną wymowę 😊
czlowieku jestes swietny
Dziękuję 😁 Cieszę się, że moje filmy są wartościowe
Cześć, dzisiaj usłyszałem że enum można wykorzystać do realizacji wzorca singleton. W pewnym sensie to rozumiem ale mam też wątpliwości co do implementacji. Każda zdefiniowana wartość enum jest instancją tego enum, tak? Jeżeli w aplikacji potrzebna była by jedna instancja klasy AppConfig to w enum AppConfig zadeklaruję tylko jedną wartość CURRENT_CONFIG. Tylko że w tym wypadku jeżeli ta instancja miała by posiadać również pola to musze przypisać do nich wartości na etapie kompilacji. Próbując utworzyć taki enum z wartością w której pola są przypisywane podczas runtime IntelliJ nie widzi problemu ale dostaję StackOverFlow. Klasyczne podejscie do realizacji singleton daje taką możliwość chociażby w taki sposób że w .getInstance(String string, Object object) można przekazać argumenty z których później korzysta prywatny konstruktor 'private Singleton(String string, Object object)' a z samej logiki .getInstance() oraz warunku if (this.instance == null) wynika, że taki singleton można tworzyć w czasie runtime. Czy można tworzyć wartości enum z polami których wartości są ustawiane podczas działania aplikacji? Czy realizacja singleton z wykorzystaniem enum rozwiązuje problemy wynikające z wielowątkowości?
Nie wiem czemu nie wyświetlił mi się ten komentarz. Trochę musiałem nakombinować się żeby go zobaczyć. Dlatego nie odpisałem do tej pory. Nie mniej wracając do pytania. Tak jak napisałem na filmnie odn. Wzorca projektowego Singleton, żeby osoby oglądające ten film też miały mozliwość zapoznać się z tą wiedzą ;) Tworzymy zwykły enum ale mamy tylko jeden element w środku np. INSTANCE. Dalej implementujemy jak normalną klasę z polami i metodami. public enum PersonService{ INSTANCE; //pamietajcie o tym średniku private Long someData; public void someMethond(){ } } Wywołanie wyglądałoby tak: PersonService.INSTANCE.someMethod();
Możesz podpowiedzieć mi więcej różnic i podobienst klasy abstrakcyjnej oraz interfejsu? Teoretycznie klasa abstrakcyjna która posiada tylko metody abstrakcyjne działa jak interfejs, interfejs od kiedy można definiować metody default ma podobne zachowanie jak klasa abstrakcyjna.. Różnice są w możliwości posiadania pol w klasie abstrakcyjnej co sprzyja zasadzie dry ale klasę abstrakcyjna się dziedziczy a interfejsy implementuje, a wiec może ich być kilka.. co jeszcze można by o tych strukturach powiedzieć?
Bardzo dobrze to podsumowałeś, od strony technicznej to rzeczywiście interface za pomocą metod default może 'udawać' klasę abstrakcyjną, natomiast klasa abstrakcyjna może robić za interface. Należy pamiętać, że pola w inteface są jako stałe (public static final), a metod prywatnych nie możemy tworzyć. Można rozważyć różnice w ich przeznaczeniu, wówczas łatwiej będzie wybrać czego powinniśmy użyć. Klasa abstrakcyjna - użyjemy jej, kiedy będziemy chcieli użyć dziedziczenia, czyli mamy kilka klas, które dotyczą tego samego w różnych wariantach, np. TaskProcessor (różne typy zadań procesowane w różny sposób). Wówczas cały proces implementuje w klasie abstrakcyjnej, natomiast fragmenty procesu, które są różne w zależności od typu zadania, będą implementowane przez metody abstrakcyjne w klasach potomnych. Inteface - używam go jako API lub kontraktu np. pomiędzy domenami, czy innymi częściami naszej aplikacji. W ten sposób mam zapewniony kontrakt i wiem jak mogę z danego fragmentu skorzystać właśnie poprzez interface. Jeżeli mam jakąś metodę, która wszędzie lub prawie wszędzie będzie wyglądała tak samo, wówczas użyję default, jako domyślnej implementacji. Mam nadzieję, że rozjaśniłem nieco różnice. Z jednej strony mogą wyglądać bardzo podobnie, jak wspomniałeś, jednak z drugiej, są w nieco innych sytuacjach używane.
@@wrosoftacademy Tak, dzięki! Zwłaszcza podoba mi się stwierdzenie "używania interfejsu jako kontraktu"
"Łoo Panie"
jakie są przypadki, kiedy używanie refleksji ma sens ? Mówię o normalnej aplikacji, nie tworzymy biblioteki, ani nic co potrzebuje dostęp w locie do klas. Tworzymy aplikacje od podstaw, ma ona swoją architekturę, wszystko możemy zaplanować itd. W jakich przypadkach refleksje są przydatne ? Tylko gdy chcemy "obejść" coś np. skorzystać z metody prywatnej, manipulować wartościami pól itd.?? Szukam praktycznych zastosowań :)
Jest to rzecz, z której często się nie korzysta ale czasem pozwala rozwiązać zgrabnie problem. Przykład z życia. Miałem aplikację, która łączyła się z ok 20 serwisami (innymi aplikacjami) w każdym zapytaniu trzeba było dodawać dane techniczne, typu nazwa mojej aplikacji, jako klient, login zalogowanego użytkownika, data utworzenia request itp, w sumie ok 10 pól. Problem w tym, że to był XML, więc klasy były generowane i nie miały między sobą dziedziczenia. W planach rozwojowych, miały dochodzić kolejne serwisy do obsługi. Znając nazwy pól i typy danych, mogłem za pomocą refleksji w jednym miejscu zaimplementować uzupełnianie części technicznej i mieć pewność, że w każdym serwisie będzie w ten sam sposób wypełnione.
Extra, nie przewiduje jeszcze korzystac z refleksji przez jakiś czas ale teraz już wiem co to w ogóle jest. Obejrzałem wszystkie Twoje filmiki i czekam na kolejne, będziesz jeszcze coś wrzucać?
Dziękuję za komentarz. Cieszę, że filmy niosą wartość i pomagają 😊 Oczywiście w drodze sa kolejne materiały. Musiałem zrobić przerwę wakacyjna. Jednak od września ruszamy z kolejna porcją wiedzy 🚀
Dzięki za ciekawy materiał. Po dwóch ostatnich filmikach wiem jak tworzyć własne adnotacje ale nie mam wyobrażenia jak one działają.. jak dziala walidacja NotNull albo jak to się dzieje że Builder z lomboka generuje tyle kodu? Dograsz coś jeszcze na ten temat?
Jasne, Świetny pomysł 😊 W następnej części bedziemy przechodzić przez refleksje i spróbujemy aop, to w tych mechanizmach najczęściej wykorzystujemy adnotacje z retention runtime. Jeśli chodzi o lombok, to kod generowany jest na etapie kompilacji kodu.
@@wrosoftacademy Sam fakt, że kod generowany jest na etapie kompilacji jest dla mnie w miarę zrozumiały, nawet można sobie w targetach sprawdzić dokładnie jaki kod został wygenerowany. Tylko nie wiem na jakiej zasadzie adnotacje mają taką moc, że tak bardzo mogą wpływać na wygląd lub zachowanie danej klasy, pola czy metody
@@januszkuznik137 Do tego służy kilka mechanizmów. Możemy wykorzystać refleksję i bibliotekę Reflection, w springu można wykorzystać mechanizm AOP. Oba sposoby są dla Retention - runtime. Lombok z kolei korzysta z wlasnego plugina do maven lub gradle i jest uruchamiany w odpowiednim momencie. Generalnie w narzędziach tych wykorzystuje się możliwość wyszukania metod, klas i innych artefaktów posiadających konkretną adnotację. Gdy mamy juz znalezione interesujące nas miejsca możemy wykonać jakis dodatkowy kod
@@wrosoftacademy dzięki:)
Film przedstawiajacy wykorzystanie adnotacji z refleksją: th-cam.com/video/EdT8Ig_WhDg/w-d-xo.html Nie jest to co prawda NonNull, ale myślę że też ciekawy i pokazuje, jak można używać adnotacji
W trakcie tego wykładu notorycznie mylone są nazwy "klasa abstrakcyjna" z "klasa anonimowa". Wprowadza to troche zamieszania i trudno się skupić na treści
Ach, faktycznie. Wybacz. Teraz, jak jeszcze raz odsłuchałem, rzeczywiście to zauważyłem. Poprawię ten film. Dzieki za zwrócenie uwagi 😊
jaka jest zaleta ze tworzysz instancje klasy App, zamiast odrazu pisac swoj kod w mainie?
W tym przypadku w łatwy sposób można szybko przełączać się pomiędzy przykładami lub wersjami aplikacji, gdy mam metody run1(), run2() itd. Generalnie idea jest taka, żeby w main było jak najmniej kodu, bo ta metoda sluzy tylko uruchomieniu aplikacji. Później na przykład w spring boot również jest tak, że w main() podnosisz tylko context spring i nic więcej, jest to jedna linijka.
Najprościej zrozumieć wyrażenie lambda poprzez to, że jest to funkcja anonimowa. Jest to funkcja, ponieważ nie trzeba jej przypisywać do konkretnej klasy, a anonimowa, ponieważ nie ma nazwy. Wyrażenie lambda implementuje interfejs funkcyjny, a interfejs funkcyjny ma tylko jedną abstrakcyjną metodę. Metoda abstrakcyjna to taka metoda, której ciało jest nadawane podczas implementacji. Wiec tworząc wyrażenie lambda, nadajemy ciało tej abstrakcyjnej metodzie. :D
0:00 O czym będziemy mówić 0:53 .get() 3:17 .orElse() 7:23 .orElseGet() 9:11 .orElseThrow() 13:40 podsumowanine
Kto znajdzie literówkę w kodzie dajcie znać 🖐 Mi oczy krwawią, jak to widzę ale znalazłem ją dopiero po opublikowaniu i na tym etapie produkcji to trochę za późno 😝 Ciekawe czy Wam też uda się ją znaleźć 😁
Film staje się nieaktualny powoli. Niestety taki los naszych aplikacji 🙄 Będe przygotowywać nową wersie integracji. Na pewno będzie Spring Boot 3, Spring 6.0.x i Swagger 3. Jeżeli chcielibvście zobaczyć inne integracje ze Srpingiem lub upgrade do Spring 6 to dajcie znać w komentarzach ;)
a co z Gitem, sqlem, mavenem, wzorcami i webem o ktorych mowa w platnej sciezce? pojawia sie tu, czy jako odzielne kursy i kiedy? pzdr
Tak, to również będę omawiać. Jednak nagrania przygotowuję sam, więc potrzebuje czasu 😉 Kolejne filmy sukcesywnie wychodzą co tydzień.
czym sie rozni ten darmowy kurs od tego platnego na udemy/eduj - tylko brakiem zadan?
Największą różnicą są zadania. Nie chodzi jednak o samą listę zadań, a o jej rozwiązania, ponieważ tam pokazuję jak je rozwiązuje. W ten sposób od samego początku przyzwyczajam uczestników do pisania kodu obiektowo. W każdym filmie z rozwiązaniem zadań są dodatkowe informacje. Podpowiedzi jak najlepiej rozwiązywać tego typu zadanie, jak inaczej można dany element wykorzystać, jak nie robić, żeby niepotrzebnie kodu nie komplikować, czy też niektóre tematy są pogłębiane. Rozwiązanie takie przyjąłem, ponieważ żeby nauczyć się programować nie wystarczy obejrzeć filmik, trzeba samemu pisać i to jest bonus dla osób próbujących rozwiązać zadania.
witam, kiedy na eduju zostana uzupelnione brakujace 4 moduly w stosunku do tych na udemy, jak np. te 2 ostatnie z tej playlisty ?
Każda z tych platform ma inny tryb aktualizacji kursów. Po części jest to troche niezależne ode mnie. Staram się aktualizować regularnie. Z Eduj jest dodatkowy problem, ponieważ po wysłaniu do akceptacji, mam zablokowaną możliwość edycji przez kilka dni
A może Curie-Skłodowska też była kobietą?!
😆
Dobre :)
A Ty jakiego switch'a najczęściej używasz, a może wolisz if-else? Daj znać w komentarzach 😜
0:00 Wstęp 0:26 Przygotowanie projektu 2:53 for 4:12 for-each 5:56 forEach() - lambda 9:24 forEach() - referencje metody 10:47 Praktyczny przykład
Piątunio jest Spoko.
Gratulacje!
dzięki ;)