Евгений Борисов - Spring Patterns

  Рет қаралды 137,865

TechTrain

TechTrain

Күн бұрын

Пікірлер: 100
@pavelbodrov5002
@pavelbodrov5002 4 жыл бұрын
Доклады Евгения можно смотреть бесконечно! Все по делу, легко, доходчиво и с юмором. Спасибо за труд!
@strash1692
@strash1692 3 жыл бұрын
1:58 - Шесть фаз понимания сингалтона: Фаза 1. Студент (шутка про виски) 2:10 - Шесть фаз понимания сингалтона: Фаза 2. Стажёр (приватный конструктор и статический метод getInstance) 3:09 - Шесть фаз понимания сингалтона: Фаза 3. Junior (+synchronized на статический метод) 3:43 - Шесть фаз понимания сингалтона: Фаза 4. Senior (+дабл чек) 4:29 - Оптимизации в Java и в Hotspot 6:23 - Оптимизация Out-Of-Order Execution 9:06 - Шесть фаз понимания сингалтона: Фаза 5. Lead (+volatile) 9:56 - Eager Singleton: Jetbrains - создание синглтона сразу при загрузке класса при инициализации статической переменной 10:29 - Eager Singleton: Enum 11:01 - Singleton - антипаттерн? 11:26 - Эволюция TDD 21:22 - Юнит тестирование 24:32 - Пример использования Mockito 27:26 - фреймворк PowerMock 28:51 - Почему Singleton (через статический метод getInstance) - антипаттерн 30:12 - Правильный синглтон - Spring Singleton! 31:00 - Не ленивые синглтоны и важность Fail-fast 31:49 - Зачем нужен ленивый синглтон 32:19 - Новый способ реализации 3-фазы конструктора (EventListener) из Спринг-потрошителя ч.2. 34:25 - Lazy injection - @Lazy не только над классом, но и над местом инъекции 35:23 - паттерн Chain of responsibility - для обеспечения Open-closed principle 37:17 - паттерн Strategy / Command/ «Никогда не используй Switch!» 44:20 - "We love you, Switch" - как делать правильно. Способ 1 - по id бинов 50:21 - "We love you, Switch" - как делать правильно. Способ 2 - по идентифицирующему методу интерфейса 53:05 - "We love you, Switch" - как делать правильно. Способ 3 - паттерн registry (для бинов, которые создаются после создания контекста) 54:55 - "хак" - инъекция в дефолтный метод интерфейса - для обязательного запуска метода при создании имплементаций 56:19 - Scala traits - перечень аннотаций, которые будут работать в дефолтных методах интерфейсов
@maraeluf-brown9296
@maraeluf-brown9296 2 ай бұрын
Это так трудно объснить, но именно при просмотре Уважаемого Евгения Борисова ты забываешь, что смотришь доклад на техническую тему, и смотришь на одном дыхании, как самый что ни на есть захватывающий фильм, который врезается в твою голову, а потом ты с неимоверным восторгом вспоминаешь и анализируешь как материал, так и его творца-виртуоза....
@alexhali6003
@alexhali6003 4 жыл бұрын
Я человек простой - вижу доклад Е. Борисова, ставлю лайк.
@Devivl
@Devivl 10 ай бұрын
Евгений, огромная благодарность! Очень информативно и с юмором. У нас преподаватель по матанализу похожим образом преподавал. Тоже очень нравилось слушать его лекции. Не скучно, информативно, с живыми примерами.
@fur_mur
@fur_mur 11 ай бұрын
Смотреть доклад и приятно и полезно, спасибо)) Поддержу, что можно было бы и дольше ❤
@Denis-Orlov
@Denis-Orlov 4 жыл бұрын
Женя Борисов you are the best! дайте уже ему столько времени сколько сам захочет! :)
@eugenetrifonov5101
@eugenetrifonov5101 4 жыл бұрын
В новом митапе «Spring-построитель» примено это и произошло)
@finalename7464
@finalename7464 4 жыл бұрын
@@eugenetrifonov5101 Там тоже не хватило.
@ГосподинН-э7ф
@ГосподинН-э7ф Жыл бұрын
Смотрел как крутой фильм! вот это уровень! мужик ты красавчик!
@epic3386
@epic3386 4 жыл бұрын
Просто огонь 🔥 спасибо за доклад Евгению, спасибо автору за видео 👍
@savar33
@savar33 4 жыл бұрын
Solid 0:01:40 singleton 0:06:00 out of order execution optimization and its effect on double check without volatile 0:11:00 singleton is antipattern. why and why not in context of single responsibility. importance of UNIT tests 0:13:20 про single responsibility 0:20:00 lombok @AllArgsConstructor 0:33:00 Lazy singleton initialization 0:35:00 open close principle and use of chain of responsibility design pattern (list of handlers) 0:37:00 strategy/command design pattern (про switch) 0:53:00 registry design pattern (trick with @autowired and default method interface)
@savar33
@savar33 4 жыл бұрын
@techtrain спасибо. Доклады Жени - топ
@konstantinchvilyov9602
@konstantinchvilyov9602 4 жыл бұрын
Очень грамотно, информативно и просто. Спасибо!
@ЯСуперСтар
@ЯСуперСтар Жыл бұрын
Отношения к разработке на Java у меня никакого нет, но, тем не менее, доклад посмотрел с интересом. Теперь буду знать про сингальтоны и виски)
@MrStim
@MrStim 4 жыл бұрын
Превосходный доклад.
@VasillaRobocraft
@VasillaRobocraft 8 ай бұрын
отличный доклад, как и всегда)
@serge7069
@serge7069 5 ай бұрын
Реально крутое объяснение темы
@sergeykovalev7276
@sergeykovalev7276 2 жыл бұрын
Шикарно! Спасибо огромное!
@antonvarganov1312
@antonvarganov1312 4 жыл бұрын
Спасибо, узнал новое для себя!
@xandrviking1113
@xandrviking1113 Жыл бұрын
Видос просто огонь. Большое спасибо , Женя !
@viacheslav90
@viacheslav90 4 жыл бұрын
Круто, я хоть и php разработчик, но для себя подчеркнул много нового.
@delalen8012
@delalen8012 4 жыл бұрын
Круто! Спасибо за видос :)
@soontobedivorced
@soontobedivorced 2 жыл бұрын
Отдельное спасибо за рефакторинг switch в коллекцию. Порой в спринге и вправду творится магия:)
@HowItWorks
@HowItWorks 4 жыл бұрын
44:19 Мне стало грустно после этой фразы "-Это последнее, что я вам покажу".
@ДимаГоликов-с6ш
@ДимаГоликов-с6ш 3 жыл бұрын
паттерн избавления от swith вообще топчик!!!
@marinakaryukova6231
@marinakaryukova6231 Жыл бұрын
The best!
@ВладимирТарасов-ф2ы
@ВладимирТарасов-ф2ы 4 жыл бұрын
Я не понял про Singleton, а именно причина, почему нужно делать volatile. Насколько я знаю, для synchronized работает happens before, поэтому singleton == null будет работать с заново загруженной переменной из heap. А проблема как раз в том (именно, почему нужно volitile добавить), что в строке singleton = new Singleton() может раньше вернуться ссылка на объект, в котором могут быть поля, которые не final, и они могут быть еще не проинициализированы.
@vlad-pizza-2013
@vlad-pizza-2013 4 жыл бұрын
Была бага до версии java 1.5 и при определённой фазе луны оно не правильно работало. Сейчас JMM пофиксили и все работает.
@arthura.kupriyanov4667
@arthura.kupriyanov4667 4 жыл бұрын
Да, я с вами согласен. Проблема на самом деле в том, что может вернуться объект, у которого еще не вызван конструктор. Это проблема reordering в самом компиляторе при исполнении в мультипроцессорных машинах. Следовательно, поля могут иметь дефолтные значения, а не которые присвоены конструктором. По крайней мере, так писали в The "Double-Checked Locking is Broken" Declaration
@bananasba
@bananasba 4 жыл бұрын
Это проблема безопасной публикации, к сожалению подготовился он плохо и суть передана не полно. Крайне неудачный пример от биг дата инженер.
@akimovpavel3084
@akimovpavel3084 3 жыл бұрын
Я долго думал, кого же Евгений Борисов напоминает мне по манере речи. Вспомнил! Александра Якушева из команды КВН сборная Курска)) А так, Борисов очень крутой чувак!!!
@lisafox9026
@lisafox9026 3 жыл бұрын
Голос вообще не похож манера нееее
@vlera4198
@vlera4198 2 жыл бұрын
А ещё говорящая голова вкс на него похож)))
@sergeistarodubov2534
@sergeistarodubov2534 4 жыл бұрын
в джаве же 3 три вида памяти насколько я помню : stack, heap и metaSpace. В metaSpace хранятится string pool, параметры статических методов, информация о классах и т.п. Он пришел на замену как раз PermGen про которую говорил Женя
@ormoroe
@ormoroe 3 жыл бұрын
С восьмой до шести, уникальные для каждого потока: program counter, jvm stack, native method stack. Общие: heap, method area(для метадаты), runtime constraut pool. Permgen и metaspace это термины сборщика мусора, он не делит память, просто помечает области. Это как я понял
@ormoroe
@ormoroe 3 жыл бұрын
String pool с седьмой джавы хранится в хипе
@sergeistarodubov2534
@sergeistarodubov2534 3 жыл бұрын
@@ormoroe так никто физически память не делит, не только GC. Все ее просто помечают)
@2Reishi
@2Reishi 11 күн бұрын
Лишний раз убедился, что джавистам можно поручить только джсоны перекладывать
@Tronal
@Tronal 3 жыл бұрын
Последний пример с registerMySelf не будет работать, если например у этого бина будет скоуп на уровне запроса (или прототипа) с proxy mode = target classs. тогда спринг не начнет создавать бин пока кто-то не обратится к прокси этого бина.
@Software.Engineering.in.Action
@Software.Engineering.in.Action 2 жыл бұрын
11:40 TDD for me is a Type Driven Development :)
@vlera4198
@vlera4198 11 ай бұрын
42:00 я слышал про другой случай - был утилитный класс в котором было куча утилитных методов. и в конце концов уперлись в ограничение джавы на размер класса (оказывается есть такое)). и тимлид выдал гениальное решение- класс тупо поделили пополам на 2 утилитных класса.
@romantsyupryk3009
@romantsyupryk3009 4 жыл бұрын
Thanks so much for this tutorial.
@-is.perfect-
@-is.perfect- 4 жыл бұрын
Охрененно
@dmitriypronichev7048
@dmitriypronichev7048 4 жыл бұрын
спасибо, очень интересно. а продолжение будет?
@TechTrainFest
@TechTrainFest 4 жыл бұрын
Можем посоветовать посмотреть наш митап с Евгением Борисовым - Spring-построитель kzbin.info/www/bejne/qJWZqKuGr72ErNE
@zuzu-wz9be
@zuzu-wz9be 2 жыл бұрын
На 56 минуте нельзя будет так сделать после 6 версии спринга, поскольку уберут возможность кидать @autowired на методы. Выпиливают setter injection (но это не точно)
@МихаилЕфремов-г5с
@МихаилЕфремов-г5с 4 жыл бұрын
Просто топ)
@lisafox9026
@lisafox9026 3 жыл бұрын
Евгению можно давать время сколько ему нужно!!!! Что бы он все дописывал
@Qnoize
@Qnoize 2 жыл бұрын
это не поможет, помнится как-то был 8 часов доклад с ним)
@ЕвгенийК-о8у
@ЕвгенийК-о8у 3 жыл бұрын
Скажите это точно не Александр Якушев из Примы?
@asgzxbaasg9766
@asgzxbaasg9766 7 ай бұрын
Первое доходчивое объяснение зачем разработчику писать тесты. Защитить свой код любой ценой...
@obusis
@obusis 11 ай бұрын
Классика 😏
@ВладимирТарасов-ф2ы
@ВладимирТарасов-ф2ы 3 ай бұрын
Мне не очень понравилась авторегистрация в реестре, когда генератор сам себя регит. Получается, циклическая зависимость - реестр зависит от генераторов, а генератор от реестра
@ВладимирТарасов-ф2ы
@ВладимирТарасов-ф2ы 3 ай бұрын
Тут нужен третий объект - регистратор, который будет это делать. А то single of resp нарушается
@romanihnatov5629
@romanihnatov5629 3 жыл бұрын
Спасибо за доклад, не совсем понимаю как отработал registerMySelf если его не вызывали, как жто хэндлиться, в какой момент он будет вызвал и отработан, у всех классов реализаций одновременно, вот эти вопросы интересуют, возможно статейку, пока нахожу только как обычная setter injection, но эти методы явно вызывают, вот это смутило
@funbiscuit
@funbiscuit 3 жыл бұрын
Этот метод будет вызываться спрингом, когда тот будет создавать бин, который реализует данный интерфейс. После создания бина (еще до вызова post construct) спринг пройдется по всем методам, которые помечены autowired и вызовет их, передав в них нужные параметры. Именно так работает обычный setter injection, просто здесь сам сеттер вынесли в дефолтный метод интерфейса. Ну и логика не сеттера, но спрингу то без разницы, он просто его вызывает. До какой то версии спринга autowired над дефолтным методом не работал, насколько я помню. Вроде бы в спринг паззлерах Евгений про это рассказывал (где-то точно рассказывал).
@romanihnatov5629
@romanihnatov5629 3 жыл бұрын
@@funbiscuit спасибо за ответ!
@alexmur07
@alexmur07 4 жыл бұрын
спасибо
@konstantinchvilyov9602
@konstantinchvilyov9602 4 жыл бұрын
Ещё раз огромное спасибо! А где-то есть продолжение или более подробный рассказ конца этого доклада?
@TechTrainFest
@TechTrainFest 4 жыл бұрын
Возможно, вам покажется интересным наш митап с участием Евгения :) kzbin.info/www/bejne/qJWZqKuGr72ErNE
@konstantinchvilyov9602
@konstantinchvilyov9602 4 жыл бұрын
@@TechTrainFest Таки да! Уже смотрю :)
@konstantinchvilyov9602
@konstantinchvilyov9602 4 жыл бұрын
@@TechTrainFest А почему митап ? Для загадочности? :)
@tatyanayurchenko6840
@tatyanayurchenko6840 2 жыл бұрын
49:22 логичнее было бы называть классы переставив слова: MailGeneratorHappyBirthday. Тогда мы сразу в панели project слева видели бы все классы данной группы в алфавитном порядке
@alexmur07
@alexmur07 4 жыл бұрын
и как этот шаблон проектирования называется ?) в конечном то итоге?))
@alex-petrov
@alex-petrov 4 жыл бұрын
Почему собака лэйзи, а не штрудель лэйзи?
@jonua
@jonua 4 жыл бұрын
Я правильно понял, что паттерн registry ломает принцип single responsibility?
@galinashapoval2695
@galinashapoval2695 3 жыл бұрын
У нас досих пор как в первой истории местами
@kabkasik
@kabkasik 4 жыл бұрын
Елис)))
@edwin-jq4dp
@edwin-jq4dp 4 жыл бұрын
16:30 my timestamp
@leko6766
@leko6766 5 ай бұрын
Проблема с изменением НДС стала релевантна спустя 4 года)))
@WebSterXGM
@WebSterXGM 4 жыл бұрын
А где strategy и command? На слайдах это было упомянуто и в описании видео есть, но по ходу выступления так и не было упомянуто...
@donquih0te396
@donquih0te396 4 жыл бұрын
Там, где switсh заменил на компоненты
@WebSterXGM
@WebSterXGM 4 жыл бұрын
@@donquih0te396 разобрался, спасибо!
@ПавелШироких-с8ь
@ПавелШироких-с8ь Жыл бұрын
Про юнит-тесты не согласен. Основные проблемы лежат именно в интеграции между модулями. Если будут только юнит-тесты, то интеграция остается не протестирована. А если делать нормальные интеграционные тесты + юнит, то в случае проблем упадут и те и те, и человеки также испугаются. Выходит что у юнитов нет смысла. И эта проблема "всё упало и страшно" это надумано. Начинаешь разбираться и сразу понятно откуда проблема
@infosmartsound
@infosmartsound 8 ай бұрын
Тред, синглтон
@nikibut3073
@nikibut3073 2 жыл бұрын
Сингалтон антипатерн потому что приводит к ожирению!
@reliniideadea
@reliniideadea 3 жыл бұрын
Подскажите, как писать тесты для микросервисов?
@vyacheslavs5642
@vyacheslavs5642 Жыл бұрын
посмотрите про testcontainers
@ventilyator
@ventilyator 4 жыл бұрын
я не понимаю как в гите при мердже могут улетать отдельные строчки (ну, если их никто не правил, конечн)
@Vladimir-vd2im
@Vladimir-vd2im 2 жыл бұрын
Великолепный спикер! Но успокойте меня кто-нибудь. Скажите, пожалуйста, что не один я такой тупой, что почти ничего не понял 😂
@asgzxbaasg9766
@asgzxbaasg9766 7 ай бұрын
А вот очень полезный паттерн стратегия который можно реализовать так, а вот еще более полезная реализация стратегии без необходимости передавать состояние объекта, но показывать я это конечно не буду...
@kolob204
@kolob204 3 жыл бұрын
11:28 "Профессионалы не ошибаються" - пишется без мягкого знака 😁😁😁 (возможно в этом и была ирония, но не мог пройти мимо этого в любом случае) Спасибо за видео ))
@at0m616
@at0m616 3 жыл бұрын
Конечно ирония. И ты не все ошибки там нашел)
@DimaTiunov
@DimaTiunov 10 ай бұрын
23:22 ах сука, наобарот сделал((
@olegpicik363
@olegpicik363 10 ай бұрын
мок на английском - ржать над кем-то))) Чтобы точно ни у кого вопросов не возникло!))
@AlexJPep
@AlexJPep 4 жыл бұрын
default в интерфейсах создалидля обратной совместимости, а не чтобы использовать как "патерн". Так что последний вариант это больше "плохой пример" чем рекомендация ;)
@ipasenko
@ipasenko 2 жыл бұрын
Блин. Ну как бы всё круто, но за такие лайфхаки тебя будут проклинать будущие поколения твоих коллег. Круто когда ты умеешь писать всои бинпостпроцессоры и аннотации. Но это должно быть очевидным для применения.
@baschlykoff
@baschlykoff 3 жыл бұрын
Не нужно экспертам в software development выступать с мыслями про эпидемиологии, даже вскользь не нужно, это важно. Евгений лидер мнений и кумир молодежи. Неосторожные высказывания про заговоры и проделки мирового масонского правительства могут стоить жизни кому-то из тех, кто поверит в этот псевдонаучный бред. Слушайте Женю про спрингбут, не слушайте Женю про коронавирус.
@falken5869
@falken5869 3 жыл бұрын
Некорректное объяснение причины появления volatile keyword в double-check singleton pattern.
@vpurazov
@vpurazov 2 жыл бұрын
Ну можно было перед выступлением слайды на орфографические ошибки проверить, что за....
@kotojava
@kotojava 7 ай бұрын
человек в израиле живет постоянно
@WERT2025
@WERT2025 3 жыл бұрын
Много воды, мало конкретики. Всего два простых паттерна за час? В конце вообще жуть какая-то с авторегистрацией, не делайте так.
@ИзольдаВ
@ИзольдаВ 4 жыл бұрын
"надеюсь мои дети тоже будут программистами, других профессий не будет, все будт делать компьютеры" - ясно. Спасибо, что сразу показал свой уровень, сэкономил мне время.
@FlawlessVictory-j8j
@FlawlessVictory-j8j 4 жыл бұрын
Аргументируйте.
@ИзольдаВ
@ИзольдаВ 4 жыл бұрын
@@FlawlessVictory-j8j Слишком узкий взгляд, экстраполяция для сложных систем не годный метод. Вот совсем недавно некоторые деятели в одной "энергетической сверхдержаве" тоже предрекали, что цена на углеводороды будет только расти, а при цене нефти ниже 80 мировая экономика рухнет)
@serjpavlenko
@serjpavlenko 4 жыл бұрын
@@ИзольдаВ Это была ирония. Спасибо, что сразу показали уровень своего чувства юмора, скепсиса головного мозга, а также самооценки (судя по никнейму).
@FlawlessVictory-j8j
@FlawlessVictory-j8j 4 жыл бұрын
@@serjpavlenko это может быть реальные фамилия и имя, а еще может быть разное ударение -> Изольда вАгина
Евгений Борисов - Spring-построитель
2:24:30
JPoint, Joker и JUG ru — Java-конференции
Рет қаралды 181 М.
Евгений Борисов - Spring Patterns для взрослых
2:47:23
JPoint, Joker и JUG ru — Java-конференции
Рет қаралды 171 М.
Quilt Challenge, No Skills, Just Luck#Funnyfamily #Partygames #Funny
00:32
Family Games Media
Рет қаралды 55 МЛН
Quando eu quero Sushi (sem desperdiçar) 🍣
00:26
Los Wagners
Рет қаралды 15 МЛН
Техническое интервью с Евгением Борисовым
1:33:04
JPoint, Joker и JUG ru — Java-конференции
Рет қаралды 97 М.
Евгений Борисов - Spring-потрошитель, часть 1
1:04:27
JPoint, Joker и JUG ru — Java-конференции
Рет қаралды 530 М.
Евгений Борисов - Spring - Глубоко и не очень
1:03:57
JPoint, Joker и JUG ru — Java-конференции
Рет қаралды 162 М.
Spring Patterns (Evgeny Borisov, Israel)
50:19
jeeconf
Рет қаралды 18 М.
Евгений Борисов - Power of Gradle
1:19:56
JPoint, Joker и JUG ru — Java-конференции
Рет қаралды 93 М.
Шаблоны проектирования для микросервисов
1:07:50
Александр Бармин
Рет қаралды 32 М.
Евгений Борисов -  Spring Puzzlers: тонкости и нюансы работы Spring
58:45
JPoint, Joker и JUG ru — Java-конференции
Рет қаралды 63 М.
Евгений Борисов, Кирилл Толкачев - Boot yourself, Spring is coming (Часть 1)
1:08:54
JPoint, Joker и JUG ru — Java-конференции
Рет қаралды 97 М.
Аутентификация - Spring Security в деталях
1:05:16
Уголок сельского джависта
Рет қаралды 35 М.