Mainor 2022. Java Concurrency, Part 2
1:29:01
Mainor 2022. Java Concurrency, Part 1
1:20:57
Mainor 2022: Collections API
1:06:59
2 жыл бұрын
Mainor 2022: Java Generics
1:28:29
2 жыл бұрын
Mainor 2022: Java Streams & Optionals
1:32:27
CelestaUnit 7.4.1: изменения
11:28
МФТИ Core Java 2020 Лекция 14
1:24:56
МФТИ Core Java 2020 Лекция 13
1:27:58
МФТИ Core Java 2020 Лекция 12
1:25:18
МФТИ Core Java 2020 Лекция 11
1:24:32
МФТИ Core Java 2020 Лекция 10
1:09:41
МФТИ Core Java 2020 Лекция 9
1:24:47
МФТИ Core Java 2020 Лекция 8
1:02:42
МФТИ Core Java 2020 Лекция 7
1:18:27
МФТИ Core Java 2020 Лекция 6
1:21:48
МФТИ Core Java 2020 Лекция 5
1:13:37
МФТИ Core Java 2020 Лекция 4
1:24:55
МФТИ Core Java 2020 Лекция 3
1:27:22
МФТИ Core Java 2020 Лекция 2
1:25:16
МФТИ Core Java 2020 Лекция 1
1:29:03
Пікірлер
@investWhale
@investWhale 13 күн бұрын
Вместо Map.of(), лаконичней все таки Map.OfEntries(), где понятно, что есть пары ключ-значение.
@andr6087
@andr6087 22 күн бұрын
Спартак - параша! Победа будет наша!
@andreykatskin818
@andreykatskin818 Ай бұрын
резюмирую - все лекции ЗБС ! осталось не забыть через неделю)
@andreykatskin818
@andreykatskin818 Ай бұрын
шок контент про Рефлексию ) и я слышал про Mokito -1й - это коктейль, 2й-это инструмент !)
@andreykatskin818
@andreykatskin818 Ай бұрын
первые 55минут сложные )
@user-js3pw7pp5d
@user-js3pw7pp5d 24 күн бұрын
первые 84минуты сложные))
@user-gv3zn1us6s
@user-gv3zn1us6s Ай бұрын
Интересная система. Сильнейшие лекции, умнейший лектор, но вместо темы лекции - просто её номер. Причём даже в лекции про рефлексию неизменная "...Core Java 2020". Только название МФТИ спасает, поскольку МФТИ - сила! Просто изменив названия каждой лекции принесёте огромную пользу русскоговорящему человечеству. Лекции ДСП на KZfaq - весьма неожиданно
@andreykatskin818
@andreykatskin818 2 ай бұрын
это какая-то ДИЧЬ !)
@andreykatskin818
@andreykatskin818 2 ай бұрын
ЗБС !
@prayer4675
@prayer4675 2 ай бұрын
It could be a good idea to tell some history about threads and their differences from processes. There are two main differences: 1. The CPU cost of context switch between threads is lower than between processes 2. Threads of the same process natively use the same memory while processes can use shared memory by special API of the operating system Also, from 2024 you can also tell students about the new Virtual Threads API, that was added into Java 21.
@inponomarev
@inponomarev Ай бұрын
Thanks for suggestions. I was thinking about it, will improve my material in the future
@prayer4675
@prayer4675 2 ай бұрын
The "target/" rule in your .gitignore file is dangerous because it makes Git ignoring any directory with that name, including packages of your source code that contain target sub-directory in their path. To fix it you can use one of the following two approaches: 1. use absolute path of the directory target directories like "/target/", "/module1/target/", etc. 2. additionally to "target/" add another exclude rule like "!**/src/**" I personally prefer the second one.
@mrin0
@mrin0 2 ай бұрын
16:08
@andreyy.k.9775
@andreyy.k.9775 2 ай бұрын
увидел белую тему в идее - вспомнил молодость )
@user-se4gg9sk4b
@user-se4gg9sk4b 2 ай бұрын
Очень повезло наткнуться на серию из таких понятных лекций по этой теме! Вы очень серъёзно сократили время на поиск нужной информации. Спасибо большое!
@user-bl3pq8ip3l
@user-bl3pq8ip3l 2 ай бұрын
Деструктора нет по другой причине. Если выбрасывается исключение, оно будет всплывать по стеку, пока не будет перехвачено. И конечно при раскрутке стека будут собраны все деструкторы без нашей воли и что там будет выполнено...
@ghfdghjh_53521
@ghfdghjh_53521 3 ай бұрын
Ошибка на слайде на 15:35 в названии метода.
@user-fw2ek3nx5p
@user-fw2ek3nx5p 3 ай бұрын
3 лекции и все интересные. Спасибо
@agalaktionov
@agalaktionov 3 ай бұрын
Если сумма синглтона от х равна самому х, то чему равна сумма синглтона от пустого множества? Можно так определить саму пустоту, а не пустое множество? Тогда обитателями пустого множества могут являться несуществующие множества a, b и все остальные несуществующие множества. Так можно различить пустое множество a и несуществующее множество a.
@artemief
@artemief 4 ай бұрын
Добрый день, @inponomarev Подскажите, пожалуйста, почему singleton подход номер 8 потокобезопасный? (1:23:20) никак не получается понять
@inponomarev
@inponomarev 4 ай бұрын
В силу того, что мы здесь полагаемся на инициализацию класса, а создатели JVM позаботились о том, чтобы инициализация класса была бы синхронизирована. В JLS docs.oracle.com/javase/specs/jls/se8/html/jls-12.html#jls-12.4 сказано: "The implementation of the Java Virtual Machine is responsible for taking care of synchronization and recursive initialization"
@inponomarev
@inponomarev 4 ай бұрын
Т. е. там вся синхронизация уже реализована за нас, остаётся только пользоваться :-)
@artemief
@artemief 4 ай бұрын
@@inponomarev Большое спасибо! очень интересный курс ❤🔥
@romabulava899
@romabulava899 4 ай бұрын
хоть где то репликацию в динамике показали
@kyrylgerasymenko6327
@kyrylgerasymenko6327 4 ай бұрын
утащу к себе в практику делать презентации со смайликами вместо скучных квадратных блоков 😊. шикарное видео
@zhennik263
@zhennik263 4 ай бұрын
Если честно, немного непонятно где это применимо. Я бы тогда уже к шагу package добавил бы просто sources И билдил бы 2 jar. Один стандарный с скомпилированной либой, второй с исходниками.
@user-wq4wf6di5b
@user-wq4wf6di5b 5 күн бұрын
это применимо, когда ты его ученик и тебе надо сдать ему дз
@dimamikhalishchin5172
@dimamikhalishchin5172 5 ай бұрын
Очень радует, что лектор поднимается на концептуальный уровень, а не просто рассказывает технические детали, как это делают многие другие. Понимание деталей опирается на понимание концепций. Очень здорово, спасибо, большое.
@rah_emil
@rah_emil 5 ай бұрын
Шикарно
@user-mv2zq6zr9r
@user-mv2zq6zr9r 5 ай бұрын
Все интересно смотрю до конца много подводных камней раскрываются, особенно для новичка. Жаль мало лайков
@user-mv2zq6zr9r
@user-mv2zq6zr9r 5 ай бұрын
51:00 вся лекция интересна.... Буду пересматривать.
@user-mv2zq6zr9r
@user-mv2zq6zr9r 5 ай бұрын
Спасибо про короткие замыкания очень было интересно. 42:37 - булевские операторы (не путать с побитовыми)
@user-mv2zq6zr9r
@user-mv2zq6zr9r 5 ай бұрын
1:30 DDoS атака)) на пятёрочку
@user-mv2zq6zr9r
@user-mv2zq6zr9r 5 ай бұрын
26:50 Гослинг. Какой молодец и в фильмах успевает сниматься "Barbie" и язык Java изобрел.🤣🤣🤣
@Rusnura
@Rusnura 6 ай бұрын
Подскажите пожалуйста, эти лекции откуда? Университет? Или какой-то курс? Спасибо!
@AlexPInv
@AlexPInv 7 ай бұрын
отличная лекция!
@onegag
@onegag 8 ай бұрын
посмотрела 3 лекции на одном дыхании. Спасибо!
@MrOirs
@MrOirs 10 ай бұрын
Спасибо за отличную лекцию.
@MrOirs
@MrOirs 10 ай бұрын
Прекрасная структура и отличная подача. Большое спасибо.
@Tornado-ln7fq
@Tornado-ln7fq 11 ай бұрын
Ну такое себе объяснять про сборщик мусора на первой лекции,студентам которые даже не понимают что такое int i = ++;. А еще и говорить об объектах , это товарищи преступления. Вот у меня вопрос,к лектору .Зачем,зачем говорить о таких вещах тем кто даже незнает что такое переменная, что такое тип переменной , как она объявляется и тд... Зачем!
@inponomarev
@inponomarev 11 ай бұрын
К началу данного курса студенты МФТИ уже прошли курсы основ программирования на C и Python.
@Tornado-ln7fq
@Tornado-ln7fq 11 ай бұрын
@@inponomarev Ха ха ха, тогда извиняюсь,ключевое слово было прошли))
@viktoriafedosova9641
@viktoriafedosova9641 4 ай бұрын
@@inponomarev А есть ли домашние задания для этого курса где то ? Хотелось бы поупражняться так же ))
@skieskieskieskies
@skieskieskieskies 11 ай бұрын
+
@user-qy7vv5yx3b
@user-qy7vv5yx3b 11 ай бұрын
Спасибо за лекцию.
@GeorgiiFidarov
@GeorgiiFidarov 11 ай бұрын
Спасибо большое за лекции вам. Мне сильно помогают они!
@ruff7209
@ruff7209 Жыл бұрын
Шикарно! Большое спасибо за лекции!
@ilonaa8756
@ilonaa8756 Жыл бұрын
очень крутой доклад, спасибо
@vint_razboltaylo
@vint_razboltaylo Жыл бұрын
Вы мегакрутой) Спасибо огромное за лекции
@statuxia
@statuxia Жыл бұрын
0:34 - Жизненный цикл бина (Напоминание) 2:39 - Разруливание неоднозначностей (несколько компонентов, реализующих интерфейс). 4:28 - Привязка по имени (неявная) 6:11 - Привязка по имени (явная) 6:35 - Помечаем одну из имплементаций как `@Primary` 8:05 - Но гораздо чаще нам нужны сразу все! (Сделать List или Map компонентов) 10:03 - Впрыскивать можно не только бины, но и что-то попроще 11:31 - Инициализация 13:03 - Финализация 14:40 - Практическая задача 17:02 - Aspect-oriented programming спешит на помощь 17:59 - Терминология AOP 21:13 - Как можно реализовать AOP? 23:00 - Прокси-объект: реализация 25:01 - Использование AOP в Spring 26:10 - Пример аспекта 28:08 - Spring AOP checklist (Мимолетом показан слайд) 28:10 - Показ на коде-примере настоящего Spring'а. 30:04 - "Проваливаемся" внутрь примера-программы. 31:22 - Как он замеряет время выполнения. 32:58 - Какие бывают advices 34:04 - BeanPostProcessor interface (Показ на примере кода) 35:41 - BeanPostProcessor interface (диаграмма) 39:53 - Демо 39:55 - Прогон теста 44:33 - Spring Boot 48:17 - Код springboot-example 49:32 - Dependencies spring-boot 51:50 - Продолжаем изучать код 53:00 - Запуск программы. 54:56 - За сборку jar-ника отвечает spring-boot-maven-plugin 55:55 - Показ как можно запускать jar'ник 57:17 - Как Spring Boot Starter поднимает свои бины? 58:26 - Демо (Мимолетом показан слайд) 58:26 - spring-boot-test 1:02:35 - Тесты могут быть разного уровня градулярности. Немного о том, какие тесты есть. 1:03:45 - Тесты контроллера и dao отдельно друг от друга заменяя необходимое Mock'ами. 1:06:16 - Запуск тестов. 1:09:07 - Пришла пора закругляться :-) 1:11:12 - Синтаксис Java развивается 1:12:04 - Все ждут проектов 1:14:44 - «Вселенная Java» расширяется со скоростью света 1:16:46 - Выводы - напутствия 1:17:44 - Старое тоже полезно изучать 1:18:52 - Помните про свою профессиональную ответственность 1:22:33 - Становитесь частью community! 1:24:17 - Добро пожаловать во вселенную Java :-)
@statuxia
@statuxia Жыл бұрын
Привет тому, кто читает этот комментарий. Это таймкоды, которые я ставил для себя, когда разбирал лекции. Я решил поделиться ими со всеми. Возможно они кому-то помогут. Спасибо за внимание.
@statuxia
@statuxia Жыл бұрын
Отдельная благодарность от меня Ивану за качественный и собранный воедино огромный материал. Я поставил цель - не ленясь изучить ваш курс за неделю. Для меня это была самая интересная неделя, за которую я изучил все лекции, а также законспектировал каждую из них для лучшего запоминания материала. (Те таймкоды, что я оставлял под каждым видео - это 50% от всего конспекта) Еще раз спасибо.
@statuxia
@statuxia Жыл бұрын
0:14 - Проблемы GoF-синлетона 3:21 - Проблемы GoF-синглетона (в пунктах) 4:17 - Фабрика 8:30 - Dependency Injection 10:02 - DI Frameworks 10:37 - Построим свой DI-фреймворк "на коленке" 12:52 - Лектор-робот 13:44 - Задача: Фабрика должна после создания объекта инжектила объекты в переменные. 14:17 - Режим лектора 14:55 - А как "зарядить"? 15:27 - Демонстрация кода. 16:14 - Реализация "магии". Изучение метода createObject. 16:16 - Создание RobotLecturer 19:02 - Создание объекта из конструктора без аргумента. 19:24 - Первый запуск с созданным объектом RobotLecturer. 20:15 - История Евгения Борисова из своей практики. 23:12 - Следующий шаг - сконфигурировать объект. 25:23 - Разбираем что делает метод configure(). 28:07 - Усложняем задачу. Inject'им объекты передавая параметры в аннотации. 31:15 - Создаем новый конфигуратор. 33:21 - Однако лучше делать лист конфигураторов. 34:26 - А откуда взялись configurators? 37:56 - Запуск с изменениями, но он еще не говорит. Почему? 39:52 - PostConstruct - стандартная аннотация javax.annotation; 41:18 - Делаем так, чтобы ObjectFactory дергал PostConstruct методы. 42:43 - Последовательность действий - визуализация. 44:01 - Но это еще не вся история. 44:28 - Измеряем насколько быстро говоритель говорит. Аннотация @Benchmark 46:41 - Когда нужно модифицировать действие метода 46:52 - Прокси-объект 47:52 - BenchmarkProxyConfigurator 49:58 - Пробуем отладить программу. Неудачно :( 53:52 - Последовательность действий (окончательная картина) 55:02 - Промежуточные выводы 56:17 - Добро пожаловать, его величество Spring. 59:00 - Переписываем наш пример с "самодельного" фреймворка на Spring 1:00:04 - Изучаем пример со Spring'ом 1:02:14 - Spring Beans 1:03:31 - Способы конфигурации Spring 1:05:37 - Как определять бины 1:07:57 - Classpath scanning 1:09:34 - @Configuration class 1:10:04 - @Configuration class - пример 1:10:54 - @Scope (Bean scope) 1:13:09 - @Lazy 1:15:42 - Bean name 1:16:10 - Виды injection ("впрыскивания") 1:16:36 - Constructor injection 1:18:56 - Setter injection 1:19:51 - Field injection 1:21:55 - Lookup method injection 1:25:08 - Lookup-метод может и не быть абстрактным
@statuxia
@statuxia Жыл бұрын
Привет тому, кто читает этот комментарий. Это таймкоды, которые я ставил для себя, когда разбирал лекции. Я решил поделиться ими со всеми. Возможно они кому-то помогут. Спасибо за внимание.
@statuxia
@statuxia Жыл бұрын
0:08 - Планы на лекцию 0:28 - Немного о прошлой лекции про аннотации 1:34 - Где можно использовать аннотации 1:42 - Использование аннотаций в декларациях 1:59 - Примеры использования аннотации в декларациях 2:25 - Анотирование пакетов - в package-info.java 3:16 - Аннотирование использование типов 4:08 - Java 8+: аннотирование использования типа в this 5:06 - Знакомые стандартные (встроенные в язык) аннотации 7:00 - Стандартные (встроенные в язык) аннотации 8:18 - Аннотации управляются аннотациями 9:04 - Target 9:36 - RetentionPolicy 13:04 - Другие мета-аннотации 14:43 - Рефлексия (Reflection API) 16:48 - Класс Class<T> параметризован 18:37 - Class literals 19:16 - Class literals - примеры 21:38 - NB: странные имена классов-массивов 23:13 - Динамический способ получения мета-класса 25:17 - Загрузка ресурсных файлов 27:36 - Что еще мы можем делать? Анализ возможностей класса и взаимодействие с элементами клсасса 28:37 - Получение членов класса 29:30 - Доступ к элементам 32:01 - Анализ аннотаций в runtime 33:08 - Рефлексия и Generics 34:36 - ReflectionUtils 35:57 - Класс с аннотированными полями 36:26 - Разбор примеров сериализации класса в JSON 38:25 - Как можно было бы сделать (JsonSerializer) 41:31 - В стандартных задачах писать самому не надо. Есть Jackson 44:18 - Пример с контроллером 45:35 - Как сделать красиво 49:43 - Как работает CommandDispatcherTest (через Mockito) 55:05 - Как писать программу на Java (архитектура) 58:52 - Реальная "слоистая" архитектура серверного приложения 59:21 - Попытка №1, нативная. "Пусть объекты сами создают себе то, что им надо" 1:02:10 - Попытка №2. Выложим ссылку на единичный объект в статическое поле. 1:04:02 - Мы только что изобрели дизайн-паттер singleton (одиночка) 1:04:49 - Singleton Pattern 1:06:26 - Синглетонирование: подход №1 1:07:25 - Подход №2, если Singleton тяжелый и мы его создаем только один раз. 1:09:00 - Подход №3 ?! (volatile) 1:11:03 - Подход №4 ?! ?! (synchronized) 1:13:03 - Подход №5 ?! ?! ?! (intrinsic lock объекта lock) 1:16:06 - Подход №6... (Хорошо, но можно лучше!) 1:17:41 - Подход №7. Код из книги "Effective Java, 3rd edition" 1:21:44 - Единственно Верный Ленивый Потокобезопасный Синглетон 1:23:22 - Подход №8 - Короткий и правильный код.
@statuxia
@statuxia Жыл бұрын
Привет тому, кто читает этот комментарий. Это таймкоды, которые я ставил для себя, когда разбирал лекции. Я решил поделиться ими со всеми. Возможно они кому-то помогут. Спасибо за внимание.
@statuxia
@statuxia Жыл бұрын
0:31 - Часть 3. Потокобезопасные структуры данных 0:47 - Неблокирующие алгоритмы 2:11 - Atomics 3:17 - Атомарные операции в классах атомарных переменных 5:41 - Потокобезопасные коллекции 8:02 - CopyOnWriteArrayList и CopyOnWriteArraySet 9:26 - ConcurrentLinkedQueue 10:53 - Блокирующие очереди: средство реализации producer-consumer pattern 13:58 - ConcurrentHashMap 15:51 - ConcurrentSkipListMap 17:13 - Часть 4. Executor Framework 18:21 - Executor Framework 21:04 - Executor Framework - смотрим наглядно 22:38 - Future 25:03 - Task, Executor, Future 26:43 - Как создать ExecutorService? 29:09 - Обработка задач "пачками" 32:48 - Отмена задач и "прекращение обслуживания" 35:21 - Почему попросить? Прерывание задач 38:15 - Прерывание тредов 39:07 - Кооперативный механизм прерывания 41:03 - Что делать с InterruptedException? 44:38 - CompletableFuture 47:04 - Зачем нужна CompletableFuture? Композиция CompletableFuture с действием 48:37 - Композиция несколько CompletableFuture 49:23 - Если этого показалось мало... 50:21 - Мы только прошлись по основам 52:12 - Code Review Checklist 53:47 - Благодарности 55:04 - Вопрос из зала: Как работает сборщик мусора когда начинается многопоточность? 59:47 - Иногда при чтении кода начинает рябить в глазах... 1:01:32 - Другая история. Возникает ощущение, что что-то не так... 1:02:38 - Coupling & Cohesion 1:05:05 - Coupling vs. Cohesion 1:05:50 - Вопросы 1:08:10 - Как бы мы хотели решить эту проблему? Решение 1. 1:09:37 - Контроллер. Решение 2. 1:10:47 - Анотации 1:13:15 - Синтаксис определения аннотаций 1:13:45 - Пример 1:14:15 - Annotation Interfaces 1:15:46 - Допустимые типы методов аннотации (JLS 9.6.1) 1:16:39 - Пример определения интерфейса аннотации 1:18:18 - Использование аннотаций 1:20:35 - Single-value annotations 1:22:15 - Массивы и другие аннотации
@statuxia
@statuxia Жыл бұрын
Привет тому, кто читает этот комментарий. Это таймкоды, которые я ставил для себя, когда разбирал лекции. Я решил поделиться ими со всеми. Возможно они кому-то помогут. Спасибо за внимание.
@statuxia
@statuxia Жыл бұрын
0:37 - Concurrency - конкуретное выполнение 3:00 - Где мы можем получить выгоду от concurrency? 4:52 - Где мы НЕ можем получить выгоду от [увеличения] concurrency? 5:48 - Закон Амдала (Amdahl's law) 6:56 - Амдал: Поведение (Граф) 8:02 - На самом деле, все еще хуже! 9:35 - USL: Поведение 11:20 - Промежуточный вывод 12:38 - Часть 1. Зачем нужна и как достигается синхронизация 13:05 - Многопоточность в Java (с самой первой версии!) 14:50 - Запуск параллельных вычислений через Thread API 16:22 - Проблемы с shared state 16:39 - Race condition 18:55 - Stale values 22:05 - Reordering 24:10 - Промежуточные выводы. 26:30 - Модель памяти 27:39 - Happens-before 28:48 - Program order rule 29:32 - Thread start & thread terminate rule 30:59 - Ключевое слово volatile 33:27 - Чиним stale value при помощи volatile 34:29 - final-поля 38:10 - Неатомарные операции: final не годится, volatile не спасет 40:25 - Что же делать? Синхронизированное выполнение 42:19 - Блокировки 44:15 - JMM Monitor Lock Rule 45:24 - В чем проблема здесь? 46:24 - В чем проблема здесь? 47:29 - Condition Objects 51:41 - Condition Objects: что происходит? 52:42 - Контрольный вопрос 53:11 - Правильный паттерн ожидания condition 53:38 - Intrinsic lock 54:16 - То же самое, с помощью intrinsic lock 56:39 - Synchronized-блок 58:52 - Промежуточный итог по intrinsic conditions 1:00:17 - Теперь нам понятен смысл всех возможных состояний треда 1:01:48 - Промежуточный итог по всему вышесказанному 1:03:45 - Часть 2. Deadlocks 1:03:51 - Deadlock: простой пример 1:05:09 - Перепутанный порядок блокировки 1:06:05 - Перепутанный (иногда!) порядок блокировки 1:08:10 - Выводы
@statuxia
@statuxia Жыл бұрын
Привет тому, кто читает этот комментарий. Это таймкоды, которые я ставил для себя, когда разбирал лекции. Я решил поделиться ими со всеми. Возможно они кому-то помогут. Спасибо за внимание.
@statuxia
@statuxia Жыл бұрын
0:10 - Steams API 3:20 - Преобразуем поток в поток 4:28 - Фильтруем 5:12 - Отображаем в консоль (терминальная операция) 5:56 - Все вместе в 1 строку 6:28 - Ничего не напоминает? 7:32 - Закономерный вопрос - А зачем это все надо? 7:53 - Пример (очень короткий и понятный код с минимумом возможных ошибок) 10:48 - Три категории методов Stream API 11:40 - Создание стрима 14:13 - Конкатенация стримов 14:42 - Порождение стримов (generate) 16:51 - Порождение стримов (iterate) на основе предыдущего 18:06 - Вопрос: Что будет в этом стриме? 20:20 - Spliterator: самый общий способ создания стрима 22:33 - Характеристики сплиттератора 23:13 - Промежуточные итоги 25:16 - Преобразование стримов в стримы: получение "головы" и "хвоста" 26:14 - filter 27:05 - map 27:43 - flatMap 32:10 - distinct 32:59 Вопрос: что произойдет при выполнении такого кода? 35:03 - sorted 35:38 - peek: отладочный метод 37:39 - Терминальные операции 41:44 - forEach() 42:16 - reduce (with identity) 44:05 - Parallel reduce 44:34 - Recude без identity 45:17 - Готовые reduce'ы 46:10 - collect: самый гибкий метод сборки результатов 47:28 - Интерфейс Collector<T, A, R> 47:46 - Характеристики коллектора 48:36 - Промежуточные итоги 49:07 - Наиболее употребимые коллекторы 50:05 - Собирание в мапы 51:34 - Вариация на тему сборки в коллекции 52:29 - Строка с разделителями 53:55 - Группировки 55:32 - Downstream Collectors 58:00 - Но мы можем не только группировать в цепочке! 59:33 - Набор downstream collectors 1:00:44 - Downstream Collectors - продолжение 1:01:15 - Когда может быть нужен collectingAndThen? 1:03:41 - Параллельные стримы 1:04:06 - Optional: Контейнер, который содержит объект. Или не объект. 1:05:26 - Optiona<T>: как стрим из 0 или 1 элемента 1:06:40 - Optional.map 1:07:24 - Optional.flatMap 1:08:28 - Optional.filter 1:08:51 - Правила использования Optional 1:10:32 - Когда стримы использовать не нужно 1:11:21 - Вопросы 1:23:22 - Выводы
@statuxia
@statuxia Жыл бұрын
Привет тому, кто читает этот комментарий. Это таймкоды, которые я ставил для себя, когда разбирал лекции. Я решил поделиться ими со всеми. Возможно они кому-то помогут. Спасибо за внимание.
@statuxia
@statuxia Жыл бұрын
0:28 - RDMBS - реляционные базы даныных 4:32 - JDBC 5:47 - Структура приложения 6:49 - JDBC Drivers 7:54 - Connection Strings aka Database URLs 9:04 - Создание Connection, Statement, получение и итерация по ResultSet 10:24 - Получение данных и итерация 12:38 - Как получить JDBC Connection 13:40 - JDBC Connection - особенности 16:39 - Connection Pool 20:03 - Методы Connection 21:00 - Разновидности Statement 23:45 - Statement и PreparedStatement 25:43 - SQL Injection 31:05 - Демо пример 32:28 - ER model 33:17 - Пример в виде SQL 35:52 - Что мы проделали? База данных h2 (для экспериментов с java) 36:57 - Установка h2 37:33 - Что нам делать, если мы захотим с этим Statement что-то разное поделать? 38:58 - Должны ли мы закрыть statement после выполнения медода? 39:57 - Другое решение. Разбор класса лектора. 41:50 - Вместо того, чтобы отдавать Statement, мы спрашиваем что нужно сделать? 44:10 - Реализация в Dao классе (Data Access Object) 46:12 - Тесты 51:15 - Что используется в практике с JDBC? (Spring Framework, но о нем позже) 52:06 - Учебный пример про доклады и спикеров 53:00 - Реальная "слоистая" архитектура серверного приложения 57:10 - Spring JDBC Example
@statuxia
@statuxia Жыл бұрын
Привет тому, кто читает этот комментарий. Это таймкоды, которые я ставил для себя, когда разбирал лекции. Я решил поделиться ими со всеми. Возможно они кому-то помогут. Спасибо за внимание.
@statuxia
@statuxia Жыл бұрын
0:29 - Эпиграф 2:10 - Тема лекции - Collections API (а потом про lambda и методы) 2:17 - Коллекции: Разделение интерфейсов и реализации 4:25 - Интерфейсы коллекций: потомки Collection 4:58 - Iterable: интерфейс, умеющий участвовать в for loop (for each) 6:18 - ListIterator: расширение для List 6:56 - Интерфейсы коллекций: потомки Map 7:42 - Comparable и Comparator 9:48 - Промежуточный итог 12:07 - Иммутабельные коллекции по заданным элементам 14:32 - Суррогатные коллекции: защита (частичная) при публикации объектов 16:10 - ArrayList 17:58 - Свойства ArrayList 19:55 - Свойства LinkedList 23:25 - а если все-таки нужен Deque 24:32 - PriorityQueue 25:47 - Промежуточный итог 2 27:02 - HashMap 27:37 - Коллизии хэша 31:31 - LinkedHashMap 33:17 - Еще вариации на хэш-таблицы 34:56 - TreeMap 36:31 - Множества (Sets) 38:00 - Множества на основе битовых масок 40:32 - Алгоритмы 43:09 - Callbacks: до появления лямбд 46:05 - lambda expressions 47:11 - Что из этого - валидные лямбда выражения? 49:09 - Чему можно присваивать лямбды? 50:35 - Void-compatibility 51:29 - Object - не функциональный интерфейс 52:19 - Что мы имеем в итоге? 54:03 - Замыкания (closures) 55:22 - Effectively final only 56:44 - Method references: еще короче, еще эффективнее 58:53 - Три способа определить Method reference 1:01:09 - Construstor/Array Constructor Reference 1:02:22 - IDE поможет, но разница есть 1:05:04 - Методы специально созданы, для того, чтобы были method references 1:06:16 - Готовые функциональные типы 1:08:26 - Комбинирование консьюмеров 1:09:29 - Функции 1:09:51 - Композиция функции и identity 1:10:32 - Операторы 1:10:57 - Композиция операторов 1:11:30 - Предикаты 1:11:36 - Композиция предикатов 1:12:36 - Дефолтные методы Map interface (Стоит изучить) 1:13:21 - Компараторы и сортировка 1:13:36 - Сортировка по фамилии 1:14:52 - Сортировка по фамилии, потом по имени 1:15:34 - Как правильно сортировать по фамилии, потом по имени 1:16:03 - Также удобные функции 1:16:58 - мем)
@statuxia
@statuxia Жыл бұрын
Привет тому, кто читает этот комментарий. Это таймкоды, которые я ставил для себя, когда разбирал лекции. Я решил поделиться ими со всеми. Возможно они кому-то помогут. Спасибо за внимание.
@statuxia
@statuxia Жыл бұрын
0:35 - дженерики (generic) 0:44 - до появления дженериков 4:18 - после появления дженериков 5:18 - Как реализовать? Определяем собственный параметризованный класс 6:35 - Определение и использование 7:56 - Generic methods 10:29 - Другой пример 10:58 - Промежуточные выводы 12:04 - Bounded Types 13:35 - Intersection types 16:04 - Реализация generic'ов 17:50 - Type Erasure (стирание типов во время компиляции байт файла) 22:04 - Bridge (связывающие) методы для сохранения полиморфизма 24:30 - Промежуточный вывод 2 25:18 - Первый вывод - Никогда не употребляйте сырые типы 28:54 - "Понимание дженериков в Джаве - это не про то, что с ними можно делать, а про то, что с ними делать нельзя." 29:22 - Стирание типов -> невозможность определить параметр типа Run-time. 30:39 - Стирание типов до Object -> невозможность использовать примитивные типы в качестве параметров 32:01 - Примитивы и дженерики 35:04 - Нельзя инстанциовать типы-параметры 38:30 - Массивы и дженерики - лютые враги 40:16 - Забьем значение кувалдой и устроим heap pollution 45:30 - varargs 51:36 - Что еще нельзя делать с generic - Нельзя параметризовать 52:37 - Параметры типов нельзя использовать в статическом контексте 53:37 - Нельзя реализовывать разные параметры одного и того же интерфейса 55:27 - Ковариантность массивов vs инвариантность дженериков 58:41 - На примере схемы 1:00:17 - Как быть, если хочется такого? Добавление всех X из Y (addAllFrom) или добавление всех Y в X (addAllTo) 1:03:09 - Wildcard types 1:04:00 - Что можно сделать с объектом, типизированным ? extends? 1:06:47 - В обратную сторону (ковариантные типы) 1:08:27 -Unbounded wildcard <?> 1:09:10 - Мнемоническое правило PECS (Producer Extends, Consumer Super) 1:11:50 - Правила использования wildcard 1:12:40 - "Фокусы" или Wildcard Capture 1:14:58 - второй фокус - Recursive Generics 1:17:35 - Что почитать или посмотреть
@statuxia
@statuxia Жыл бұрын
Привет тому, кто читает этот комментарий. Это таймкоды, которые я ставил для себя, когда разбирал лекции. Я решил поделиться ими со всеми. Возможно они кому-то помогут. Спасибо за внимание.