diff --git a/README.md b/README.md
index 86806493..2835d32c 100644
--- a/README.md
+++ b/README.md
@@ -1,88 +1,110 @@
-# Курс JavaSE + Web
+# Курс BaseJava (обновленный и переработанный)
-## Вступительное заниятие
- - [Необходимое ПО](intro.md#Необходимое-ПО)
- - [Рекомендуемые книги](intro.md#Рекомендуемые-книги)
- - [Ресуры в сети](intro.md#Ресуры-в-сети)
- - [Вступительное задание](intro.md#Вступительное-задание)
+## Разработка Web приложения "База данных резюме" с деплоем в контейнер сервлетов [Tomcat](http://tomcat.apache.org/) и в облачный сервис [Heroku](https://www.heroku.com/) и сохранением в
+- памяти на основе массива, отсортированного массива, списка и ассоциированного массива (Map)
+- файловой системе (в том числе через [Java 7 NIO File API](http://www.quizful.net/post/java-nio-tutorial))
+ - с помощью стандартной и кастомной сериализации Java
+ - в формате JSON ([Google Gson](https://github.com/google/gson))
+ - в формате XML ([JAXB](https://ru.wikipedia.org/wiki/Java_Architecture_for_XML_Binding))
+ - в реляционной базе ([PostgreSQL](https://ru.wikipedia.org/wiki/PostgreSQL))
-## Темы курса
+Приложение будет разрабатываться начиная со первого занятия, основываясь на базовых темах курса:
+**объектная модель, коллекции, система ввода-вывода, работа с файлами, сериализация, работа с XML, JSON, SQL, персистентность в базу данных (PostgreSQL), сервлеты, HTML/JSP/JSTL, веб-контейнер Tomcat, модульные тесты JUnit, java.util.Logging, система контроля версий Git.**
+
+> Любое знание стоит воспринимать как подобие семантического дерева: убедитесь в том, что понимаете фундаментальные принципы, то есть ствол и крупные ветки, прежде чем лезть в мелкие листья-детали. Иначе последним не на чем будет держаться.
+*— Илон Маск*
+
+## [Регистрация](http://javawebinar.ru/basejava/)
+## [Вступительное заниятие](lesson/intro.md)
+
+## Программа
### Занятие 1
- - [Разработка ПО](lesson1.md#Разработка-ПО)
- - [Обзор языка Java](lesson1.md#Обзор-языка-java)
- - [Системы управления версиями. Git](lesson1.md#Системы-управления-версиями-git)
- - [Настройка окружения](lesson1.md#Настройка-окружения)
- - [Насторойка проекта. Ветка HW1. Debug](lesson1.md#Насторойка-проекта-Ветка-hw1-debug)
+ - [Разработка ПО](lesson/lesson1.md#Разработка-ПО)
+ - [Обзор языка Java](lesson/lesson1.md#Обзор-языка-java)
+ - [Системы управления версиями. Git](lesson/lesson1.md#Системы-управления-версиями-git)
+ - [Настройка окружения](lesson/lesson1.md#Настройка-окружения)
+ - [Насторойка проекта. Debug](lesson/lesson1.md#Насторойка-проекта-debug)
### Занятие 2
- - [Принципы ООП](lesson2.md#Принципы-ООП)
- - [Структура памяти: куча, стек, регистры, константы](lesson2.md#Структура-памяти-куча-стек-регистры-константы)
- - [Типы данных. Пакеты](lesson2.md#Типы-данных-Пакеты)
+ - [Принципы ООП](lesson/lesson2.md#Принципы-ООП)
+ - [Структура памяти: куча, стек, регистры, константы](lesson/lesson2.md#Структура-памяти-куча-стек-регистры-константы)
+ - [Типы данных. Пакеты](lesson/lesson2.md#Типы-данных-Пакеты)
### Занятие 3
- - [Объектная модель в Java](lesson3.md#Объектная-модель-в-java)
- - [Сложность алгоритмов](lesson3.md#Сложность-алгоритмов)
-
+ - [Объектная модель в Java](lesson/lesson3.md#Объектная-модель-в-java)
+ - [Сложность алгоритмов](lesson/lesson3.md#Сложность-алгоритмов)
+ - [Паттерн проектирования Шаблонный метод](https://github.com/JavaOPs/JavaSE-Web/blob/master/lesson/lesson3.md#Паттерн-проектирования-Шаблонный-метод)
+
### Занятие 4
- - [Работа со строками](lesson4.md#Работа-со-строками)
- - [Исключения](lesson4.md#Исключения)
- - [Reflection. Аннотации. Модульное тестирование](lesson4.md#reflection-Аннотации-Модульное-тестирование)
+ - [Работа со строками](lesson/lesson4.md#Работа-со-строками)
+ - [Исключения](lesson/lesson4.md#Исключения)
+ - [Reflection. Аннотации. Модульное тестирование](lesson/lesson4.md#reflection-Аннотации-Модульное-тестирование)
### Занятие 5
- - [Контейнеры/коллекции](lesson5.md#Контейнерыколлекции)
+ - [Контейнеры/коллекции](lesson/lesson5.md#Контейнерыколлекции)
### Занятие 6
- - [Iterator / Iterable. Вложенные, внутренние, локальные и анонимные классы](lesson6.md#iterator--iterable-Вложенные-внутренние-локальные-и-анонимные-классы)
- - [Новое в Java 8](lesson6.md#Новое-в-java-8)
+ - [Iterator / Iterable. Вложенные, внутренние, локальные и анонимные классы](lesson/lesson6.md#iterator--iterable-Вложенные-внутренние-локальные-и-анонимные-классы)
+ - [Новое в Java 8](lesson/lesson6.md#Новое-в-java-8)
### Занятие 7
- - [Параметризация. Стирание типов](lesson7.md#Параметризация-Стирание-типов)
- - [Логирование](lesson7.md#Логирование)
- - [Синглетон, Enum](lesson7.md#Синглетон-enum)
+ - [Параметризация. Стирание типов](lesson/lesson7.md#Параметризация-Стирание-типов)
+ - [Логирование](lesson/lesson7.md#Логирование)
+ - [Синглетон, Enum](lesson/lesson7.md#Синглетон-enum)
### Занятие 8
- - [Работа с датами и временем](lesson8.md#Работа-с-датами-и-временем)
- - [Работа с файлами и ресурсами](lesson8.md#Работа-с-файлами-и-ресурсами)
+ - [Работа с датами и временем](lesson/lesson8.md#Работа-с-датами-и-временем)
+ - [Работа с файлами и ресурсами](lesson/lesson8.md#Работа-с-файлами-и-ресурсами)
### Занятие 9
- - [Ввод/вывод](lesson9.md#Вводвывод)
- - [Сериализация](lesson9.md#Сериализация)
- - [NIO](lesson9.md#nio)
- - [Основы Java 8 Stream API](lesson9.md#Основы-java-8-stream-api)
+ - [Ввод/вывод](lesson/lesson9.md#Вводвывод)
+ - [Сериализация](lesson/lesson9.md#Сериализация)
+ - [NIO](lesson/lesson9.md#nio)
+ - [Основы Java 8 Stream API](lesson/lesson9.md#Основы-java-8-stream-api)
### Занятие 10
- - [Формат XML. Работа с XML в Java](lesson10.md#Формат-xml-Работа-с-xml-в-java)
- - [JSON](lesson10.md#json)
- - [DataInputStream / DataOutputStream](lesson10.md#datainputstream--dataoutputstream)
+ - [Формат XML. Работа с XML в Java](lesson/lesson10.md#Формат-xml-Работа-с-xml-в-java)
+ - [JSON](lesson/lesson10.md#json)
+ - [DataInputStream / DataOutputStream](lesson/lesson10.md#datainputstream--dataoutputstream)
### Занятие 11
- - [Многопоточность. Параллельное выполнение.](lesson11.md#Многопоточность-Параллельное-выполнение)
- - [Потоки. Синхронизация](lesson11.md#Потоки-Синхронизация)
- - [Ленивая инициализация, JMM](lesson11.md#Ленивая-инициализация-jmm)
+ - [Многопоточность. Параллельное выполнение.](lesson/lesson11.md#Многопоточность-Параллельное-выполнение)
+ - [Потоки. Синхронизация](lesson/lesson11.md#Потоки-Синхронизация)
+ - [Ленивая инициализация, JMM](lesson/lesson11.md#Ленивая-инициализация-jmm)
### Занятие 12
- - [java.util.concurrent](lesson12.md#javautilconcurrent)
+ - [java.util.concurrent](lesson/lesson12.md#javautilconcurrent)
### Занятие 13
- - [Базы данных. Реляционные СУБД. PostgreSQL](lesson13.md#Базы-данных-Реляционные-СУБД-postgresql)
- - [Конфигурирование данных в Java проекте](lesson13.md#Конфигурирование-данных-в-java-проекте)
- - [Подключение DB в проект](lesson13.md#Подключение-db-в-проект)
+ - [Базы данных. Реляционные СУБД. PostgreSQL](lesson/lesson13.md#Базы-данных-Реляционные-СУБД-postgresql)
+ - [Конфигурирование данных в Java проекте](lesson/lesson13.md#Конфигурирование-данных-в-java-проекте)
+ - [Подключение DB в проект](lesson/lesson13.md#Подключение-db-в-проект)
### Занятие 14
- - [JOIN](lesson14.md#join)
- - [Транзакции](lesson14.md#Транзакции)
- - [Установка/запуск Tomcat](lesson14.md#Установказапуск-tomcat)
+ - [JOIN](lesson/lesson14.md#join)
+ - [Транзакции](lesson/lesson14.md#Транзакции)
+ - [Установка/запуск Tomcat](lesson/lesson14.md#Установказапуск-tomcat)
### Занятие 15
- - [HTML, Tomcat](lesson15.md#html-tomcat)
- - [Сервлеты](lesson15.md#Сервлеты)
+ - [HTML, Tomcat](lesson/lesson15.md#html-tomcat)
+ - [Сервлеты](lesson/lesson15.md#Сервлеты)
### Занятие 16
- - [JSP](lesson16.md#jsp)
- - [JSTL](lesson16.md#jstl)
+ - [JSP](lesson/lesson16.md#jsp)
+ - [JSTL](lesson/lesson16.md#jstl)
### Занятие 17
- - [Деплой в Heroku](lesson17.md#Деплой-в-heroku)
- - [Classloader](lesson17.md#classloader)
- - [Обзор Java Enterprise](lesson17.md#Обзор-java-enterprise)
-
+ - [Деплой в Heroku](lesson/lesson17.md#Деплой-в-heroku)
+ - [Classloader](lesson/lesson17.md#classloader)
+ - [Обзор Java Enterprise](lesson/lesson17.md#Обзор-java-enterprise)
+
+## Рекомендуемые книги
+- YAKOV FAIN: Программирование на Java для начинающих
+- Книги по Java: от новичка до профессионала
+- Джошуа Блох: Java. Эффективное программирование, 2-е издание
+- Гамма, Хелм, Джонсон: Приемы объектно-ориентированного проектирования. Паттерны проектирования
+- Редмонд Э.: Семь баз данных за семь недель. Введение в современные базы данных и идеологию NoSQL.
+
+## Ресуры в сети
+- intuit: Программирование на Java
+- Основы программирования на Java: учебное пособие
diff --git a/intro.md b/lesson/intro.md
similarity index 55%
rename from intro.md
rename to lesson/intro.md
index c929bead..08f247e1 100644
--- a/intro.md
+++ b/lesson/intro.md
@@ -1,6 +1,10 @@
-
# Вступительное занятие
+## Обзор проекта. Обучение Java.
+[](https://www.youtube.com/watch?v=rUUhWUpzpUM)
+
+- Java Tools and Technologies Landscape Report 2016
+
## Необходимое ПО
- JDK8
- Git
@@ -9,17 +13,6 @@
> Выбирать Ultimate, 30 days trial (нам понадобится Git, JavaScript, Tomcat, JSP). Учебный ключ выдается на первом занятии.
-## Рекомендуемые книги
-- YAKOV FAIN: Программирование на Java для начинающих
-- Книги по Java: от новичка до профессионала
-- Джошуа Блох: Java. Эффективное программирование, 2-е издание
-- Гамма, Хелм, Джонсон: Приемы объектно-ориентированного проектирования. Паттерны проектирования
-- Редмонд Э.: Семь баз данных за семь недель. Введение в современные базы данных и идеологию NoSQL.
-
-## Ресуры в сети
-- intuit: Программирование на Java
-- Основы программирования на Java: учебное пособие
-
## Вступительное задание
- Установите ПО: Git, Java 8, IntelliJ IDEA
- Создайте локальную копию нашего проекта: `git clone https://github.com/JavaWebinar/JavaSE-Web.git`
@@ -31,7 +24,7 @@

-
+
- Реализуйте класс `ArrayStorage`: хранение резюме на основе массива (методы `clear, get, save, delete, getAll, size`).
- Протестируйте вашу реализацию, запустив `MainTestArrayStorage.main()`: в IDEA слева на полях зеленая стрелка.
diff --git a/lesson1.md b/lesson/lesson1.md
similarity index 96%
rename from lesson1.md
rename to lesson/lesson1.md
index 0b1fc5c0..07e3dcda 100644
--- a/lesson1.md
+++ b/lesson/lesson1.md
@@ -44,7 +44,7 @@
- `git remote set-url --push origin https://github.com/[YouGitHub/YourRepo].git` - настройка push
- `git push -u origin master`
-## Насторойка проекта. Ветка HW1. Debug
+## Насторойка проекта. Debug
- Отладчик IntelliJ IDEA
- Эффективная работа с кодом в IntelliJ IDEA
@@ -58,3 +58,4 @@ r1, r2, r3,..., rn, null, null,..., null
<---- storage.length --------------->
```
- Посмотреть на класс `Arrays`. Там есть полезные вещи, которые могут упростить код `ArrayStorage`.
+- Протестируйте реализацию, запустив MainArray.main(): в IDEA слева на полях зеленая стрелка.
diff --git a/lesson10.md b/lesson/lesson10.md
similarity index 100%
rename from lesson10.md
rename to lesson/lesson10.md
diff --git a/lesson11.md b/lesson/lesson11.md
similarity index 100%
rename from lesson11.md
rename to lesson/lesson11.md
diff --git a/lesson12.md b/lesson/lesson12.md
similarity index 63%
rename from lesson12.md
rename to lesson/lesson12.md
index c3a99007..47156cdd 100644
--- a/lesson12.md
+++ b/lesson/lesson12.md
@@ -9,10 +9,27 @@
- Справочник по синхронизаторам java.util.concurrent.*
- Использование ThreadLocal переменных
+> Замечания по видео:
+
+ ThreadLocal DATE_FORMAT = new ThreadLocal() {
+ @Override
+ protected SimpleDateFormat initialValue() {
+ return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
+ };
+ };
+
+можно написать через лямбду:
+
+ ThreadLocal.withInitial(() -> new SimpleDateFormat("dd.MM.yyyy HH:mm:ss"));
+
+А лучше использовать потокобезопасный `DateTimeFormatter` Java 8 Time API:
+
+ DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss");
+
## Разбор домашнего задания 10го урока
## Домашнее задание:
- Установить PostgreSQL
- Посомтреть на реляционные базы данных и SQL:
- Введение в базы данных
- - Основы SQL
\ No newline at end of file
+ - Основы SQL
diff --git a/lesson13.md b/lesson/lesson13.md
similarity index 100%
rename from lesson13.md
rename to lesson/lesson13.md
diff --git a/lesson14.md b/lesson/lesson14.md
similarity index 100%
rename from lesson14.md
rename to lesson/lesson14.md
diff --git a/lesson15.md b/lesson/lesson15.md
similarity index 100%
rename from lesson15.md
rename to lesson/lesson15.md
diff --git a/lesson16.md b/lesson/lesson16.md
similarity index 100%
rename from lesson16.md
rename to lesson/lesson16.md
diff --git a/lesson17.md b/lesson/lesson17.md
similarity index 100%
rename from lesson17.md
rename to lesson/lesson17.md
diff --git a/lesson2.md b/lesson/lesson2.md
similarity index 90%
rename from lesson2.md
rename to lesson/lesson2.md
index e5f33609..5e4619dc 100644
--- a/lesson2.md
+++ b/lesson/lesson2.md
@@ -5,6 +5,7 @@
- Методология процедурно-ориентированного и объектно-ориентированного программирования
- Объекты (cостояние, поведение, уникальность)
- Классы. Инкапсуляция. Наследование. Полиморфизм.
+- Объектно-ориентированное программирование (перевод статьи)
- Типы отношений между классами Наследование, агрегация, композиция, ассоциация.
- Достоинства/Недостатки ООП. Библиотеки vs фреймворки.
- Дополнительно:
@@ -30,6 +31,9 @@
- Модификаторы доступа. Область Видимости.
## Домашнее задание
+
+> Правка к видео: ArrayStorage.delete() - вместо `storage[i] = null` нужно `storage[size-1] = null`
+
- Прочитать Соглашения по именованию.
- Реализовать `ArrayStorage.update`
- Сделать проверки: в `update/delete/get` - резюме есть в storage, в `save`- нет в storage: `System.out.println("Resume ...")`.
diff --git a/lesson3.md b/lesson/lesson3.md
similarity index 87%
rename from lesson3.md
rename to lesson/lesson3.md
index e86bcc05..36b8407f 100644
--- a/lesson3.md
+++ b/lesson/lesson3.md
@@ -8,12 +8,15 @@
- Object. Контракт equals/hashCode
- Интерфейсы
- Полиморфизм, abstract
+- [Java Core. Вопросы к собеседованию](http://info.javarush.ru/translation/2014/02/12/Java-Core-Вопросы-к-собеседованию-ч-1.html)
## Сложность алгоритмов
- Алгоритмы и структуры данных для начинающих: сложность алгоритмов
- Time complexity
- Временная сложность алгоритма
- Вычислительная сложность
+
+## Паттерн проектирования Шаблонный метод
- Шаблонный метод
## Домашнее задание
diff --git a/lesson4.md b/lesson/lesson4.md
similarity index 100%
rename from lesson4.md
rename to lesson/lesson4.md
diff --git a/lesson5.md b/lesson/lesson5.md
similarity index 62%
rename from lesson5.md
rename to lesson/lesson5.md
index fdc77b03..169a361c 100644
--- a/lesson5.md
+++ b/lesson/lesson5.md
@@ -8,6 +8,8 @@
- Структуры данных в картинках
- Инициализация полей в Java
- Java собеседование по коллекциям
+- [Часто задаваемые на собеседованиях вопросы по классам коллекциям в Java](http://info.javarush.ru/translation/2013/10/08/Часто-задаваемые-на-собеседованиях-вопросы-по-классам-коллекциям-в-Java-Часть-2-.html#1)
+- [Собеседование по Java — коллекции](http://javastudy.ru/interview/collections/)
## Домашнее задание
-Выделить общий класс `AbstractStorage` и реализовать подклассы `ListStorage` и `MapStorage`. Выбор реализации List и Map за вами.
\ No newline at end of file
+Выделить общий класс `AbstractStorage` и реализовать подклассы `ListStorage` и `MapStorage`. Выбор реализации List и Map за вами.
diff --git a/lesson6.md b/lesson/lesson6.md
similarity index 100%
rename from lesson6.md
rename to lesson/lesson6.md
diff --git a/lesson7.md b/lesson/lesson7.md
similarity index 100%
rename from lesson7.md
rename to lesson/lesson7.md
diff --git a/lesson8.md b/lesson/lesson8.md
similarity index 100%
rename from lesson8.md
rename to lesson/lesson8.md
diff --git a/lesson9.md b/lesson/lesson9.md
similarity index 100%
rename from lesson9.md
rename to lesson/lesson9.md