Доклады Евгения можно смотреть бесконечно! Все по делу, легко, доходчиво и с юмором. Спасибо за труд!
@strash16923 жыл бұрын
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-brown92962 ай бұрын
Это так трудно объснить, но именно при просмотре Уважаемого Евгения Борисова ты забываешь, что смотришь доклад на техническую тему, и смотришь на одном дыхании, как самый что ни на есть захватывающий фильм, который врезается в твою голову, а потом ты с неимоверным восторгом вспоминаешь и анализируешь как материал, так и его творца-виртуоза....
@alexhali60034 жыл бұрын
Я человек простой - вижу доклад Е. Борисова, ставлю лайк.
@Devivl10 ай бұрын
Евгений, огромная благодарность! Очень информативно и с юмором. У нас преподаватель по матанализу похожим образом преподавал. Тоже очень нравилось слушать его лекции. Не скучно, информативно, с живыми примерами.
@fur_mur11 ай бұрын
Смотреть доклад и приятно и полезно, спасибо)) Поддержу, что можно было бы и дольше ❤
@Denis-Orlov4 жыл бұрын
Женя Борисов you are the best! дайте уже ему столько времени сколько сам захочет! :)
@eugenetrifonov51014 жыл бұрын
В новом митапе «Spring-построитель» примено это и произошло)
@finalename74644 жыл бұрын
@@eugenetrifonov5101 Там тоже не хватило.
@ГосподинН-э7ф Жыл бұрын
Смотрел как крутой фильм! вот это уровень! мужик ты красавчик!
@epic33864 жыл бұрын
Просто огонь 🔥 спасибо за доклад Евгению, спасибо автору за видео 👍
@savar334 жыл бұрын
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)
@savar334 жыл бұрын
@techtrain спасибо. Доклады Жени - топ
@konstantinchvilyov96024 жыл бұрын
Очень грамотно, информативно и просто. Спасибо!
@ЯСуперСтар Жыл бұрын
Отношения к разработке на Java у меня никакого нет, но, тем не менее, доклад посмотрел с интересом. Теперь буду знать про сингальтоны и виски)
@MrStim4 жыл бұрын
Превосходный доклад.
@VasillaRobocraft8 ай бұрын
отличный доклад, как и всегда)
@serge70695 ай бұрын
Реально крутое объяснение темы
@sergeykovalev72762 жыл бұрын
Шикарно! Спасибо огромное!
@antonvarganov13124 жыл бұрын
Спасибо, узнал новое для себя!
@xandrviking1113 Жыл бұрын
Видос просто огонь. Большое спасибо , Женя !
@viacheslav904 жыл бұрын
Круто, я хоть и php разработчик, но для себя подчеркнул много нового.
@delalen80124 жыл бұрын
Круто! Спасибо за видос :)
@soontobedivorced2 жыл бұрын
Отдельное спасибо за рефакторинг switch в коллекцию. Порой в спринге и вправду творится магия:)
@HowItWorks4 жыл бұрын
44:19 Мне стало грустно после этой фразы "-Это последнее, что я вам покажу".
@ДимаГоликов-с6ш3 жыл бұрын
паттерн избавления от swith вообще топчик!!!
@marinakaryukova6231 Жыл бұрын
The best!
@ВладимирТарасов-ф2ы4 жыл бұрын
Я не понял про Singleton, а именно причина, почему нужно делать volatile. Насколько я знаю, для synchronized работает happens before, поэтому singleton == null будет работать с заново загруженной переменной из heap. А проблема как раз в том (именно, почему нужно volitile добавить), что в строке singleton = new Singleton() может раньше вернуться ссылка на объект, в котором могут быть поля, которые не final, и они могут быть еще не проинициализированы.
@vlad-pizza-20134 жыл бұрын
Была бага до версии java 1.5 и при определённой фазе луны оно не правильно работало. Сейчас JMM пофиксили и все работает.
@arthura.kupriyanov46674 жыл бұрын
Да, я с вами согласен. Проблема на самом деле в том, что может вернуться объект, у которого еще не вызван конструктор. Это проблема reordering в самом компиляторе при исполнении в мультипроцессорных машинах. Следовательно, поля могут иметь дефолтные значения, а не которые присвоены конструктором. По крайней мере, так писали в The "Double-Checked Locking is Broken" Declaration
@bananasba4 жыл бұрын
Это проблема безопасной публикации, к сожалению подготовился он плохо и суть передана не полно. Крайне неудачный пример от биг дата инженер.
@akimovpavel30843 жыл бұрын
Я долго думал, кого же Евгений Борисов напоминает мне по манере речи. Вспомнил! Александра Якушева из команды КВН сборная Курска)) А так, Борисов очень крутой чувак!!!
@lisafox90263 жыл бұрын
Голос вообще не похож манера нееее
@vlera41982 жыл бұрын
А ещё говорящая голова вкс на него похож)))
@sergeistarodubov25344 жыл бұрын
в джаве же 3 три вида памяти насколько я помню : stack, heap и metaSpace. В metaSpace хранятится string pool, параметры статических методов, информация о классах и т.п. Он пришел на замену как раз PermGen про которую говорил Женя
@ormoroe3 жыл бұрын
С восьмой до шести, уникальные для каждого потока: program counter, jvm stack, native method stack. Общие: heap, method area(для метадаты), runtime constraut pool. Permgen и metaspace это термины сборщика мусора, он не делит память, просто помечает области. Это как я понял
@ormoroe3 жыл бұрын
String pool с седьмой джавы хранится в хипе
@sergeistarodubov25343 жыл бұрын
@@ormoroe так никто физически память не делит, не только GC. Все ее просто помечают)
@2Reishi11 күн бұрын
Лишний раз убедился, что джавистам можно поручить только джсоны перекладывать
@Tronal3 жыл бұрын
Последний пример с registerMySelf не будет работать, если например у этого бина будет скоуп на уровне запроса (или прототипа) с proxy mode = target classs. тогда спринг не начнет создавать бин пока кто-то не обратится к прокси этого бина.
@Software.Engineering.in.Action2 жыл бұрын
11:40 TDD for me is a Type Driven Development :)
@vlera419811 ай бұрын
42:00 я слышал про другой случай - был утилитный класс в котором было куча утилитных методов. и в конце концов уперлись в ограничение джавы на размер класса (оказывается есть такое)). и тимлид выдал гениальное решение- класс тупо поделили пополам на 2 утилитных класса.
@romantsyupryk30094 жыл бұрын
Thanks so much for this tutorial.
@-is.perfect-4 жыл бұрын
Охрененно
@dmitriypronichev70484 жыл бұрын
спасибо, очень интересно. а продолжение будет?
@TechTrainFest4 жыл бұрын
Можем посоветовать посмотреть наш митап с Евгением Борисовым - Spring-построитель kzbin.info/www/bejne/qJWZqKuGr72ErNE
@zuzu-wz9be2 жыл бұрын
На 56 минуте нельзя будет так сделать после 6 версии спринга, поскольку уберут возможность кидать @autowired на методы. Выпиливают setter injection (но это не точно)
@МихаилЕфремов-г5с4 жыл бұрын
Просто топ)
@lisafox90263 жыл бұрын
Евгению можно давать время сколько ему нужно!!!! Что бы он все дописывал
@Qnoize2 жыл бұрын
это не поможет, помнится как-то был 8 часов доклад с ним)
@ЕвгенийК-о8у3 жыл бұрын
Скажите это точно не Александр Якушев из Примы?
@asgzxbaasg97667 ай бұрын
Первое доходчивое объяснение зачем разработчику писать тесты. Защитить свой код любой ценой...
@obusis11 ай бұрын
Классика 😏
@ВладимирТарасов-ф2ы3 ай бұрын
Мне не очень понравилась авторегистрация в реестре, когда генератор сам себя регит. Получается, циклическая зависимость - реестр зависит от генераторов, а генератор от реестра
@ВладимирТарасов-ф2ы3 ай бұрын
Тут нужен третий объект - регистратор, который будет это делать. А то single of resp нарушается
@romanihnatov56293 жыл бұрын
Спасибо за доклад, не совсем понимаю как отработал registerMySelf если его не вызывали, как жто хэндлиться, в какой момент он будет вызвал и отработан, у всех классов реализаций одновременно, вот эти вопросы интересуют, возможно статейку, пока нахожу только как обычная setter injection, но эти методы явно вызывают, вот это смутило
@funbiscuit3 жыл бұрын
Этот метод будет вызываться спрингом, когда тот будет создавать бин, который реализует данный интерфейс. После создания бина (еще до вызова post construct) спринг пройдется по всем методам, которые помечены autowired и вызовет их, передав в них нужные параметры. Именно так работает обычный setter injection, просто здесь сам сеттер вынесли в дефолтный метод интерфейса. Ну и логика не сеттера, но спрингу то без разницы, он просто его вызывает. До какой то версии спринга autowired над дефолтным методом не работал, насколько я помню. Вроде бы в спринг паззлерах Евгений про это рассказывал (где-то точно рассказывал).
@romanihnatov56293 жыл бұрын
@@funbiscuit спасибо за ответ!
@alexmur074 жыл бұрын
спасибо
@konstantinchvilyov96024 жыл бұрын
Ещё раз огромное спасибо! А где-то есть продолжение или более подробный рассказ конца этого доклада?
@TechTrainFest4 жыл бұрын
Возможно, вам покажется интересным наш митап с участием Евгения :) kzbin.info/www/bejne/qJWZqKuGr72ErNE
@konstantinchvilyov96024 жыл бұрын
@@TechTrainFest Таки да! Уже смотрю :)
@konstantinchvilyov96024 жыл бұрын
@@TechTrainFest А почему митап ? Для загадочности? :)
@tatyanayurchenko68402 жыл бұрын
49:22 логичнее было бы называть классы переставив слова: MailGeneratorHappyBirthday. Тогда мы сразу в панели project слева видели бы все классы данной группы в алфавитном порядке
@alexmur074 жыл бұрын
и как этот шаблон проектирования называется ?) в конечном то итоге?))
@alex-petrov4 жыл бұрын
Почему собака лэйзи, а не штрудель лэйзи?
@jonua4 жыл бұрын
Я правильно понял, что паттерн registry ломает принцип single responsibility?
@galinashapoval26953 жыл бұрын
У нас досих пор как в первой истории местами
@kabkasik4 жыл бұрын
Елис)))
@edwin-jq4dp4 жыл бұрын
16:30 my timestamp
@leko67665 ай бұрын
Проблема с изменением НДС стала релевантна спустя 4 года)))
@WebSterXGM4 жыл бұрын
А где strategy и command? На слайдах это было упомянуто и в описании видео есть, но по ходу выступления так и не было упомянуто...
@donquih0te3964 жыл бұрын
Там, где switсh заменил на компоненты
@WebSterXGM4 жыл бұрын
@@donquih0te396 разобрался, спасибо!
@ПавелШироких-с8ь Жыл бұрын
Про юнит-тесты не согласен. Основные проблемы лежат именно в интеграции между модулями. Если будут только юнит-тесты, то интеграция остается не протестирована. А если делать нормальные интеграционные тесты + юнит, то в случае проблем упадут и те и те, и человеки также испугаются. Выходит что у юнитов нет смысла. И эта проблема "всё упало и страшно" это надумано. Начинаешь разбираться и сразу понятно откуда проблема
@infosmartsound8 ай бұрын
Тред, синглтон
@nikibut30732 жыл бұрын
Сингалтон антипатерн потому что приводит к ожирению!
@reliniideadea3 жыл бұрын
Подскажите, как писать тесты для микросервисов?
@vyacheslavs5642 Жыл бұрын
посмотрите про testcontainers
@ventilyator4 жыл бұрын
я не понимаю как в гите при мердже могут улетать отдельные строчки (ну, если их никто не правил, конечн)
@Vladimir-vd2im2 жыл бұрын
Великолепный спикер! Но успокойте меня кто-нибудь. Скажите, пожалуйста, что не один я такой тупой, что почти ничего не понял 😂
@asgzxbaasg97667 ай бұрын
А вот очень полезный паттерн стратегия который можно реализовать так, а вот еще более полезная реализация стратегии без необходимости передавать состояние объекта, но показывать я это конечно не буду...
@kolob2043 жыл бұрын
11:28 "Профессионалы не ошибаються" - пишется без мягкого знака 😁😁😁 (возможно в этом и была ирония, но не мог пройти мимо этого в любом случае) Спасибо за видео ))
@at0m6163 жыл бұрын
Конечно ирония. И ты не все ошибки там нашел)
@DimaTiunov10 ай бұрын
23:22 ах сука, наобарот сделал((
@olegpicik36310 ай бұрын
мок на английском - ржать над кем-то))) Чтобы точно ни у кого вопросов не возникло!))
@AlexJPep4 жыл бұрын
default в интерфейсах создалидля обратной совместимости, а не чтобы использовать как "патерн". Так что последний вариант это больше "плохой пример" чем рекомендация ;)
@ipasenko2 жыл бұрын
Блин. Ну как бы всё круто, но за такие лайфхаки тебя будут проклинать будущие поколения твоих коллег. Круто когда ты умеешь писать всои бинпостпроцессоры и аннотации. Но это должно быть очевидным для применения.
@baschlykoff3 жыл бұрын
Не нужно экспертам в software development выступать с мыслями про эпидемиологии, даже вскользь не нужно, это важно. Евгений лидер мнений и кумир молодежи. Неосторожные высказывания про заговоры и проделки мирового масонского правительства могут стоить жизни кому-то из тех, кто поверит в этот псевдонаучный бред. Слушайте Женю про спрингбут, не слушайте Женю про коронавирус.
@falken58693 жыл бұрын
Некорректное объяснение причины появления volatile keyword в double-check singleton pattern.
@vpurazov2 жыл бұрын
Ну можно было перед выступлением слайды на орфографические ошибки проверить, что за....
@kotojava7 ай бұрын
человек в израиле живет постоянно
@WERT20253 жыл бұрын
Много воды, мало конкретики. Всего два простых паттерна за час? В конце вообще жуть какая-то с авторегистрацией, не делайте так.
@ИзольдаВ4 жыл бұрын
"надеюсь мои дети тоже будут программистами, других профессий не будет, все будт делать компьютеры" - ясно. Спасибо, что сразу показал свой уровень, сэкономил мне время.
@FlawlessVictory-j8j4 жыл бұрын
Аргументируйте.
@ИзольдаВ4 жыл бұрын
@@FlawlessVictory-j8j Слишком узкий взгляд, экстраполяция для сложных систем не годный метод. Вот совсем недавно некоторые деятели в одной "энергетической сверхдержаве" тоже предрекали, что цена на углеводороды будет только расти, а при цене нефти ниже 80 мировая экономика рухнет)
@serjpavlenko4 жыл бұрын
@@ИзольдаВ Это была ирония. Спасибо, что сразу показали уровень своего чувства юмора, скепсиса головного мозга, а также самооценки (судя по никнейму).
@FlawlessVictory-j8j4 жыл бұрын
@@serjpavlenko это может быть реальные фамилия и имя, а еще может быть разное ударение -> Изольда вАгина