|
18 | 18 | - используя асинхронные сервлеты 3.0
|
19 | 19 | - сохранение данных в PostgreSQL используя [jDBI](http://jdbi.org/)
|
20 | 20 | - миграция базы [LiquiBase](http://www.liquibase.org/)
|
21 |
| -- использование в проекте [Guava](https://github.com/google/guava/wiki), [Thymleaf](http://www.thymeleaf.org/), [Lombook](https://projectlombok.org/), [StreamEx](https://github.com/amaembo/streamex), |
| 21 | +- использование в проекте [Guava](https://github.com/google/guava/wiki), [Thymleaf](http://www.thymeleaf.org/), [Lombok](https://projectlombok.org/), [StreamEx](https://github.com/amaembo/streamex), |
22 | 22 | [Typesafe Config](https://github.com/typesafehub/config), [Java Microbenchmark JMH](http://openjdk.java.net/projects/code-tools/jmh)
|
23 | 23 |
|
24 | 24 | ### Требование к участникам
|
|
38 | 38 | > В видео в `LazySingleton` ошибка: должно быть как в коде проекта `instance == null`
|
39 | 39 |
|
40 | 40 | ### Структура памяти: куча, стек, permanent/metaspace
|
41 |
| - - <a href="https://www.slideshare.net/solit/jvm-16948708">JVM изнутри - оптимизация и профилирование</a>. |
| 41 | + - <a href="https://documents.tips/technology/jvm-.html">JVM изнутри - оптимизация и профилирование</a>. |
42 | 42 | - <a href="http://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap#24171266">Stack and Heap</a>
|
43 | 43 | - Дополнительно:
|
44 | 44 | - <a href="http://habrahabr.ru/post/117274/">Из каких частей состоит память java процесса</a>.
|
45 | 45 | - <a href="http://www.javaspecialist.ru/2011/04/permanent.html">Permanent область памяти</a>
|
46 | 46 | - <a href="http://www.javaspecialist.ru/2011/04/java-thread-stack.html">Java thread stack </a>
|
47 | 47 | - <a href="http://habrahabr.ru/post/134102/">Размер Java объектов</a>
|
| 48 | + - Оптимизация памяти |
| 49 | + - [Escape analysis и скаляризация: Пусть GC отдохнет](https://habr.com/company/jugru/blog/322348) |
| 50 | + - [Условия для размещения объекта в стеке](https://stackoverflow.com/a/43002529/548473) |
48 | 51 |
|
49 | 52 | ### Ленивая инициализация
|
50 | 53 | - <a href="https://habrahabr.ru/post/27108/">Реализация Singleton в JAVA</a>
|
|
64 | 67 | - <a href="http://articles.javatalks.ru/articles/17">Использование ThreadLocal переменных</a>
|
65 | 68 | - <a href="https://www.youtube.com/watch?v=8piqauDj2yo">Николай Алименков — Прикладная многопоточность</a>
|
66 | 69 | - <a href="http://stackoverflow.com/questions/20163056/in-java-can-thread-switching-happen-in-the-synchronized-block">Can thread switching happen in the synchronized block?</a>
|
| 70 | +- [Реактивное программирование - как, зачем и стоит ли?](https://habr.com/ru/company/oleg-bunin/blog/543386/) |
67 | 71 |
|
68 | 72 | #### Tproger: Многопоточное программирование в Java 8
|
69 | 73 | - <a href="https://tproger.ru/translations/java8-concurrency-tutorial-1/">1. Параллельное выполнение кода с помощью потоков</a>
|
|
73 | 77 | ##  4. <a href="https://www.youtube.com/watch?v=AEhIh2qd-FM">Реализация многопоточной отправки писем. Execution Framework</a>
|
74 | 78 | > правка к видео: `22: completionService.submit(..)`
|
75 | 79 |
|
76 |
| -###  Все изменения в проекте будут делаться на основе патчей |
77 |
| -#### Скачайте [1_1_MailService.patch](https://drive.google.com/open?id=0B9Ye2auQ_NsFTE5ZV3pzWElxTWM), положите его в проект, правой мышкой на нем сделайте Apply Patch ... |
| 80 | +Вычекать этот проект: |
| 81 | +```git clone https://github.com/JavaOPs/masterjava.git``` |
| 82 | + |
| 83 | +> - [Настройка git на свой репозиторий](https://github.com/JavaOPs/basejava/blob/master/lesson/lesson1.md#настройка-проекта) |
| 84 | +> - [Правила работы с патчами на проекте](https://github.com/JavaOPs/topjava/wiki/Git) |
| 85 | +
|
| 86 | +#### Все изменения в проекте будут делаться на основе патчей: скачайте [1_1_MailService.patch](https://drive.google.com/open?id=0B9Ye2auQ_NsFTE5ZV3pzWElxTWM), положите его в проект, правой мышкой на нем сделайте Apply Patch ... |
78 | 87 |
|
79 | 88 | ----------------------------
|
| 89 | +- [Как сделать Java код проще и нагляднее](https://habrahabr.ru/company/wrike/blog/349652/) |
80 | 90 |
|
81 | 91 | ### Ресурсы (основы)
|
82 | 92 | - Intuit, <a href="http://www.intuit.ru/studies/courses/16/16/lecture/27127">Потоки выполнения. Синхронизация</a>
|
|
85 | 95 | - Computer Science Center, курс <a href="https://compscicenter.ru/courses/hp-course/2016-spring">Параллельное программирование</a>
|
86 | 96 | - Юрий Ткач, курс <a href="https://www.youtube.com/playlist?list=PL6jg6AGdCNaXo06LjCBmRao-qJdf38oKp">Advanced Java - Concurrency</a>
|
87 | 97 | - Головач, курс <a href="https://www.youtube.com/playlist?list=PLoij6udfBncgVRq487Me6yQa1kqtxobZS">Java Multithreading</a>
|
88 |
| - |
| 98 | +- [Перевод «Java Memory Model»](https://habr.com/ru/post/510454/) |
89 | 99 | ---
|
90 | 100 | ##  Задание первого занятия
|
91 | 101 |
|
92 |
| -Вычекать этот проект: |
93 |
| -```git clone https://github.com/JavaOPs/masterjava.git``` |
94 |
| - |
95 | 102 | - Применить <a href="https://habrahabr.ru/post/114797/">оптимизацию</a> к MatrixUtil.singleThreadMultiply
|
96 | 103 | - Реализовать метод `MatrixUtil.concurrentMultiply`, позволяющий многопоточно <a href="https://ru.wikipedia.org/wiki/Умножение_матриц">перемножать квадратные матрицы N*N</a>.
|
97 | 104 | - Количество дочерних потоков ограничено `MainMatrix.THREAD_NUMBER`.
|
98 | 105 | - Добиться того, чтобы на матрице 1000*1000 многопоточная реализация была быстрее однопоточной
|
99 | 106 |
|
100 | 107 | -----
|
101 | 108 | ##  Подсказки по HW1
|
102 |
| -- не делайте 1000 000 тасок, лучше их сделать крупнее |
103 |
| -- у меня разница между 4 и 1000 тасками по времени незаметна, поэтому делайте просто и не делайте сложно |
104 |
| -- наконец: можно не считать значение элемента результирующей матрицы C за раз, а накапливать (`concurrentMultiply3`). Мои результаты: |
| 109 | +- 1: не делайте 1000 000 тасок, лучше их сделать крупнее |
| 110 | +- 2: у меня разница между 4 и 1000 тасками по времени незаметна, поэтому делайте просто и не делайте сложно |
| 111 | +- 3: наконец: можно не считать значение элемента результирующей матрицы C за раз, а накапливать (`concurrentMultiply3`). Тогда трансформация B не нужна. Мои результаты: |
105 | 112 | ```
|
106 | 113 | Benchmark (matrixSize) Mode Cnt Score Error Units
|
107 | 114 | MatrixBenchmark.singleThreadMultiplyOpt 1000 ss 100 837,867 ± 25,530 ms/op
|
@@ -134,14 +141,14 @@ MatrixBenchmark.concurrentMultiply3 1000 ss 100 186,827 ± 11,882
|
134 | 141 | - Maven. Поиск и разрешение конфликтов зависимостей
|
135 | 142 | - Подключаем логирование с общими настройкам
|
136 | 143 | - Библиотеки и фреймворки для работы с JDBC.
|
137 |
| -- Модуль persist |
| 144 | +- Модуль persistence |
138 | 145 |
|
139 | 146 | ## Занятие 5
|
140 | 147 | - Разбор ДЗ
|
141 | 148 | - Сохранение в базу в batch-моде с обработкой конфликтов
|
142 | 149 | - Вставка в несколько потоков
|
143 | 150 | - Конфигурирование приложения (<a href="https://github.com/typesafehub/config">Typesafe config</a>)
|
144 |
| -- Lombook |
| 151 | +- Lombok |
145 | 152 |
|
146 | 153 | ## Занятие 6
|
147 | 154 | - Разбор ДЗ (доработка модели и модуля export)
|
|
0 commit comments