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://img.youtube.com/vi/rUUhWUpzpUM/0.jpg)](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 @@ ![image](https://cloud.githubusercontent.com/assets/18701152/14917800/71887238-0e29-11e6-9830-e557901892b4.png) -![image](https://cloud.githubusercontent.com/assets/18701152/14917769/5025e29c-0e29-11e6-9c7b-70b82966ccbe.png) +![image](https://cloud.githubusercontent.com/assets/11200258/20598648/17409248-b25b-11e6-91b0-0c6a351cd59d.png) - Реализуйте класс `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