From ff8c9828bd9ace1356f4293ff9d21aae9b0819a2 Mon Sep 17 00:00:00 2001 From: JavaOPs Date: Fri, 3 Jun 2022 18:35:56 +0300 Subject: [PATCH 1/3] Update read.me --- README.md | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 127b1304a..62cd19cb4 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ - используя асинхронные сервлеты 3.0 - сохранение данных в PostgreSQL используя [jDBI](http://jdbi.org/) - миграция базы [LiquiBase](http://www.liquibase.org/) -- использование в проекте [Guava](https://github.com/google/guava/wiki), [Thymleaf](http://www.thymeleaf.org/), [Lombook](https://projectlombok.org/), [StreamEx](https://github.com/amaembo/streamex), +- использование в проекте [Guava](https://github.com/google/guava/wiki), [Thymleaf](http://www.thymeleaf.org/), [Lombok](https://projectlombok.org/), [StreamEx](https://github.com/amaembo/streamex), [Typesafe Config](https://github.com/typesafehub/config), [Java Microbenchmark JMH](http://openjdk.java.net/projects/code-tools/jmh) ### Требование к участникам @@ -38,13 +38,16 @@ > В видео в `LazySingleton` ошибка: должно быть как в коде проекта `instance == null` ### Структура памяти: куча, стек, permanent/metaspace - - JVM изнутри - оптимизация и профилирование. + - JVM изнутри - оптимизация и профилирование. - Stack and Heap - Дополнительно: - Из каких частей состоит память java процесса. - Permanent область памяти - Java thread stack - Размер Java объектов + - Оптимизация памяти + - [Escape analysis и скаляризация: Пусть GC отдохнет](https://habr.com/company/jugru/blog/322348) + - [Условия для размещения объекта в стеке](https://stackoverflow.com/a/43002529/548473) ### Ленивая инициализация - Реализация Singleton в JAVA @@ -64,6 +67,7 @@ - Использование ThreadLocal переменных - Николай Алименков — Прикладная многопоточность - Can thread switching happen in the synchronized block? +- [Реактивное программирование - как, зачем и стоит ли?](https://habr.com/ru/company/oleg-bunin/blog/543386/) #### Tproger: Многопоточное программирование в Java 8 - 1. Параллельное выполнение кода с помощью потоков @@ -73,10 +77,16 @@ ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 4. Реализация многопоточной отправки писем. Execution Framework > правка к видео: `22: completionService.submit(..)` -### ![](https://cloud.githubusercontent.com/assets/13649199/13672935/ef09ec1e-e6e7-11e5-9f79-d1641c05cbe6.png) Все изменения в проекте будут делаться на основе патчей -#### Скачайте [1_1_MailService.patch](https://drive.google.com/open?id=0B9Ye2auQ_NsFTE5ZV3pzWElxTWM), положите его в проект, правой мышкой на нем сделайте Apply Patch ... +Вычекать этот проект: +```git clone https://github.com/JavaOPs/masterjava.git``` + +> - [Настройка git на свой репозиторий](https://github.com/JavaOPs/basejava/blob/master/lesson/lesson1.md#настройка-проекта) +> - [Правила работы с патчами на проекте](https://github.com/JavaOPs/topjava/wiki/Git) + +#### Все изменения в проекте будут делаться на основе патчей: скачайте [1_1_MailService.patch](https://drive.google.com/open?id=0B9Ye2auQ_NsFTE5ZV3pzWElxTWM), положите его в проект, правой мышкой на нем сделайте Apply Patch ... ---------------------------- +- [Как сделать Java код проще и нагляднее](https://habrahabr.ru/company/wrike/blog/349652/) ### Ресурсы (основы) - Intuit, Потоки выполнения. Синхронизация @@ -85,13 +95,10 @@ - Computer Science Center, курс Параллельное программирование - Юрий Ткач, курс Advanced Java - Concurrency - Головач, курс Java Multithreading - +- [Перевод «Java Memory Model»](https://habr.com/ru/post/510454/) --- ## ![hw](https://cloud.githubusercontent.com/assets/13649199/13672719/09593080-e6e7-11e5-81d1-5cb629c438ca.png) Задание первого занятия -Вычекать этот проект: -```git clone https://github.com/JavaOPs/masterjava.git``` - - Применить оптимизацию к MatrixUtil.singleThreadMultiply - Реализовать метод `MatrixUtil.concurrentMultiply`, позволяющий многопоточно перемножать квадратные матрицы N*N. - Количество дочерних потоков ограничено `MainMatrix.THREAD_NUMBER`. @@ -99,9 +106,9 @@ ----- ## ![error](https://cloud.githubusercontent.com/assets/13649199/13672935/ef09ec1e-e6e7-11e5-9f79-d1641c05cbe6.png) Подсказки по HW1 -- не делайте 1000 000 тасок, лучше их сделать крупнее -- у меня разница между 4 и 1000 тасками по времени незаметна, поэтому делайте просто и не делайте сложно -- наконец: можно не считать значение элемента результирующей матрицы C за раз, а накапливать (`concurrentMultiply3`). Мои результаты: +- 1: не делайте 1000 000 тасок, лучше их сделать крупнее +- 2: у меня разница между 4 и 1000 тасками по времени незаметна, поэтому делайте просто и не делайте сложно +- 3: наконец: можно не считать значение элемента результирующей матрицы C за раз, а накапливать (`concurrentMultiply3`). Тогда трансформация B не нужна. Мои результаты: ``` Benchmark (matrixSize) Mode Cnt Score Error Units MatrixBenchmark.singleThreadMultiplyOpt 1000 ss 100 837,867 ± 25,530 ms/op @@ -134,14 +141,14 @@ MatrixBenchmark.concurrentMultiply3 1000 ss 100 186,827 ± 11,882 - Maven. Поиск и разрешение конфликтов зависимостей - Подключаем логирование с общими настройкам - Библиотеки и фреймворки для работы с JDBC. -- Модуль persist +- Модуль persistence ## Занятие 5 - Разбор ДЗ - Сохранение в базу в batch-моде с обработкой конфликтов - Вставка в несколько потоков - Конфигурирование приложения (Typesafe config) -- Lombook +- Lombok ## Занятие 6 - Разбор ДЗ (доработка модели и модуля export) From bede4f625362690814e621399109a3c8b84379ac Mon Sep 17 00:00:00 2001 From: JavaOPs Date: Fri, 3 Jun 2022 18:48:48 +0300 Subject: [PATCH 2/3] Update read.me --- README.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 62cd19cb4..e9b178206 100644 --- a/README.md +++ b/README.md @@ -38,12 +38,13 @@ > В видео в `LazySingleton` ошибка: должно быть как в коде проекта `instance == null` ### Структура памяти: куча, стек, permanent/metaspace - - JVM изнутри - оптимизация и профилирование. + - JVM изнутри - оптимизация и профилирование. - Stack and Heap - Дополнительно: - Из каких частей состоит память java процесса. - - Permanent область памяти - - Java thread stack + - Permanent область памяти + > Замечание: [с JDK 7 String Pool переехал в Heap](https://topjava.ru/blog/rukovodstvo-po-string-pool-v-java) + - [Стек и куча в Java](https://topjava.ru/blog/stack-and-heap-in-java) - Размер Java объектов - Оптимизация памяти - [Escape analysis и скаляризация: Пусть GC отдохнет](https://habr.com/company/jugru/blog/322348) @@ -67,6 +68,7 @@ - Использование ThreadLocal переменных - Николай Алименков — Прикладная многопоточность - Can thread switching happen in the synchronized block? +- [The Deadlock Empire](https://deadlockempire.github.io/) - [Реактивное программирование - как, зачем и стоит ли?](https://habr.com/ru/company/oleg-bunin/blog/543386/) #### Tproger: Многопоточное программирование в Java 8 @@ -96,6 +98,7 @@ - Юрий Ткач, курс Advanced Java - Concurrency - Головач, курс Java Multithreading - [Перевод «Java Memory Model»](https://habr.com/ru/post/510454/) + --- ## ![hw](https://cloud.githubusercontent.com/assets/13649199/13672719/09593080-e6e7-11e5-81d1-5cb629c438ca.png) Задание первого занятия @@ -106,9 +109,9 @@ ----- ## ![error](https://cloud.githubusercontent.com/assets/13649199/13672935/ef09ec1e-e6e7-11e5-9f79-d1641c05cbe6.png) Подсказки по HW1 -- 1: не делайте 1000 000 тасок, лучше их сделать крупнее -- 2: у меня разница между 4 и 1000 тасками по времени незаметна, поэтому делайте просто и не делайте сложно -- 3: наконец: можно не считать значение элемента результирующей матрицы C за раз, а накапливать (`concurrentMultiply3`). Тогда трансформация B не нужна. Мои результаты: +- не делайте 1000 000 тасок, лучше их сделать крупнее +- у меня разница между 4 и 1000 тасками по времени незаметна, поэтому делайте просто и не делайте сложно +- наконец: можно не считать значение элемента результирующей матрицы C за раз, а накапливать (`concurrentMultiply3`). Мои результаты: ``` Benchmark (matrixSize) Mode Cnt Score Error Units MatrixBenchmark.singleThreadMultiplyOpt 1000 ss 100 837,867 ± 25,530 ms/op From 27e867ac7013b0565ae62891faf7c096d5743eb3 Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Sun, 14 Aug 2022 23:21:35 +0300 Subject: [PATCH 3/3] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e9b178206..4c3972d36 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,7 @@ > - [Настройка git на свой репозиторий](https://github.com/JavaOPs/basejava/blob/master/lesson/lesson1.md#настройка-проекта) > - [Правила работы с патчами на проекте](https://github.com/JavaOPs/topjava/wiki/Git) -#### Все изменения в проекте будут делаться на основе патчей: скачайте [1_1_MailService.patch](https://drive.google.com/open?id=0B9Ye2auQ_NsFTE5ZV3pzWElxTWM), положите его в проект, правой мышкой на нем сделайте Apply Patch ... +#### Все изменения в проекте будут делаться на основе патчей: скачайте [1_1_MailService.patch](https://drive.google.com/file/d/0B9Ye2auQ_NsFTE5ZV3pzWElxTWM/view?resourcekey=0-TF7H5aadPlE3aQukNC5Ejg), положите его в проект, правой мышкой на нем сделайте Apply Patch ... ---------------------------- - [Как сделать Java код проще и нагляднее](https://habrahabr.ru/company/wrike/blog/349652/)