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)