|
1 | 1 | # Курс BaseJava (обновленный и переработанный) |
2 | 2 |
|
3 | | -## Разработка Web приложения "База данных резюме" |
4 | | - - используем: Java 8, <a href="https://zeroturnaround.com/rebellabs/java-tools-and-technologies-landscape-2016-trends/#java-ides-adoption">IntelliJ IDEA</a>, |
5 | | - <a href="https://zeroturnaround.com/rebellabs/java-tools-and-technologies-landscape-2016-trends/#java-vcs-adoption">GitHib/Git</a>, Сервлеты, JSP, JSTL, Tomcat, JUnit, PostgreSQL, GSON, JAXB |
6 | | - - хранение резюме |
7 | | - - в памяти на основе массива, отсортированного массива, списка и ассоциированного массива (Map) |
8 | | - - в файловой системе (File API и <a href="http://www.quizful.net/post/java-nio-tutorial">Java 7 NIO File API</a>) |
| 3 | +## Разработка web-приложения "База данных резюме" |
| 4 | + |
| 5 | +В данном курсе вы создадите с нуля web-приложение, реализуя разные способы хранения резюме. Проект включает в себя следующее: |
| 6 | + - **Технологии:** Java 8, GitHub/Git, JUnit, Logging, GSON, JAXB, SQL, PostgreSQL, Сервлеты, HTML, JSP, JSTL, Tomcat, Maven и многое другое |
| 7 | + - **Различные способы реализации хранения резюме:** |
| 8 | + - в сортированном и не сортированном массиве |
| 9 | + - в коллекциях (List, Map) |
| 10 | + - в файловой системе: |
| 11 | + - с использованием File и Path API |
9 | 12 | - в стандартной и кастомной сериализации Java |
10 | | - - в формате JSON (<a href="https://github.com/google/gson">Google Gson</a>) |
11 | | - - в формате XML (<a href="https://ru.wikipedia.org/wiki/Java_Architecture_for_XML_Binding">JAXB</a>) |
12 | | - - в реляционной базе <a href="https://ru.wikipedia.org/wiki/PostgreSQL">PostgreSQL</a> |
13 | | - - деплой веб приложения |
14 | | - - в контейнер сервлетов <a href="http://tomcat.apache.org/">Tomcat</a> |
15 | | - - в облачный сервис <a href="https://www.heroku.com/">Heroku</a> |
| 13 | + - в формате JSON ([Google Gson](https://en.wikipedia.org/wiki/Gson)) |
| 14 | + - в формате XML ([JAXB](https://ru.wikipedia.org/wiki/Java_Architecture_for_XML_Binding)) |
| 15 | + - в реляционной базе [PostgreSQL](https://ru.wikipedia.org/wiki/PostgreSQL) |
| 16 | + - **Установку (деплой) web-приложения:** |
| 17 | + - в контейнер сервлетов [Tomcat](https://ru.wikipedia.org/wiki/Apache_Tomcat) |
| 18 | + - в облачный сервис [Heroku](https://ru.wikipedia.org/wiki/Heroku) |
16 | 19 |
|
17 | | -> Любое знание стоит воспринимать как подобие семантического дерева: убедитесь в том, что понимаете фундаментальные принципы, то есть ствол и крупные ветки, прежде чем лезть в мелкие листья-детали. Иначе последним не на чем будет держаться. |
| 20 | +> Любое знание стоит воспринимать как подобие семантического дерева: убедитесь в том, что понимаете фундаментальные принципы, то есть ствол и крупные ветки, прежде чем лезть в мелкие листья-детали. Иначе последним не на чем будет держаться |
18 | 21 |
|
19 | | -*— Илон Маск |
| 22 | +— Илон Маск |
20 | 23 |
|
21 | | -## Программа |
22 | | - |
23 | | - ### [Занятие 1](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson01.md) |
| 24 | +## Программа курса |
| 25 | + |
| 26 | +#### [Занятие 1](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson01.md) |
24 | 27 | - Обзор курса и методики обучения |
25 | 28 | - Подготовка и настройка рабочего окружения |
26 | 29 | - Подходы, применяемые при разработке ПО |
27 | 30 | - Обзор инструментов и технологий, используемых Java-разработчиками |
28 | | - - Введение в язык Java: история создания, JVM, JIT-компиляция |
| 31 | + - Введение в язык Java: история создания, JDK, JVM, JRE, JIT-компиляция |
29 | 32 | - Системы управления версиями. Git |
30 | 33 | - Домашнее задание |
31 | 34 |
|
32 | | -### [Занятие 2](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson02.md) |
| 35 | +#### [Занятие 2](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson02.md) |
| 36 | + - Типы данных |
33 | 37 | - Введение в объектно-ориентированное программирование |
34 | 38 | - Принципы ООП |
35 | | - - Модификаторы доступа |
36 | | - - Классы-обертки |
37 | 39 | - Классы и объекты |
| 40 | + - Классы-обертки |
| 41 | + - Модификаторы доступа |
| 42 | + - Конструктор |
38 | 43 | - Структура памяти java-программы: Heap (куча), Stack (стек) |
39 | | - - Типы данных |
40 | | - - Пакетная организация файлов |
| 44 | + - Пакеты |
41 | 45 | - Домашнее задание |
42 | 46 |
|
43 | | -### [Занятие 3](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson03.md) |
| 47 | +#### [Занятие 3](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson03.md) |
44 | 48 | - Разбор домашнего задания |
45 | 49 | - Обзор суперкласса Object |
46 | 50 | - Связь между equals() и hashCode() |
47 | 51 | - Статические методы и переменные |
48 | 52 | - Программирование с помощью интерфейсов |
49 | 53 | - Абстрактные классы |
50 | 54 | - Сложность алгоритмов |
51 | | - - Паттерн проектирования Шаблонный метод |
| 55 | + - Паттерн проектирования Template Method |
52 | 56 | - Домашнее задание |
53 | 57 |
|
54 | | -### [Занятие 4](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson04.md) |
| 58 | +#### [Занятие 4](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson04.md) |
55 | 59 | - Разбор домашнего задания |
| 60 | + - Конструктор |
56 | 61 | - Работа со строками: String, StringBuilder, StringBuffer |
57 | 62 | - String literal pool |
58 | 63 | - Исключения (Exceptions) |
59 | | - - Конструктор |
60 | 64 | - Ключевые слова: this, super |
61 | 65 | - Reflection |
62 | | - - Аннотации в Java 8 |
| 66 | + - Аннотации |
63 | 67 | - Введение в модульное тестирование. JUnit |
64 | 68 | - Домашнее задание |
65 | 69 |
|
66 | | -### [Занятие 5](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson05.md) |
| 70 | +#### [Занятие 5](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson05.md) |
67 | 71 | - Разбор домашнего задания |
68 | | - - Иерархия классов Коллекций |
| 72 | + - Коллекций. Иерархия классов |
69 | 73 | - Списки (List) |
70 | 74 | - Множества (Set) |
71 | 75 | - Ассоциативные массивы (Map) |
72 | 76 | - Введение в Iterator |
73 | | - - Тестирование коллекций |
74 | 77 | - Домашнее задание |
75 | 78 |
|
76 | | -### [Занятие 6](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson06.md) |
| 79 | +#### [Занятие 6](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson06.md) |
77 | 80 | - Разбор домашнего задания |
78 | | - - Autoboxing and Unboxing |
79 | | - - Паттерн проектирования Итератор |
| 81 | + - Паттерн проектирования Iterator |
| 82 | + - Autoboxing и Unboxing |
80 | 83 | - Вложенные классы |
81 | 84 | - Внутренние классы |
82 | 85 | - Локальные классы |
83 | 86 | - Анонимные классы |
84 | | - - Введение в лямбды |
| 87 | + - Введение в лямбда-выражения |
85 | 88 | - Функциональный интерфейс |
86 | 89 | - Домашнее задание |
87 | 90 |
|
88 | | -### [Занятие 7](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson07.md) |
| 91 | +#### [Занятие 7](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson07.md) |
89 | 92 | - Разбор домашнего задания |
90 | 93 | - Дженерики (Generic) |
91 | | - - Введение в логирование. Log4J |
92 | | - - Стандартный логер - Java Logging API |
93 | | - - Паттерн проектирования - Синглтон |
94 | | - - Перечисляемые типы (Enum) |
| 94 | + - Введение в логирование. Log4J, Java Logging API |
| 95 | + - Паттерн проектирования Singleton |
| 96 | + - Перечисления (Enum) |
95 | 97 | - Объектная модель |
96 | 98 | - Домашнее задание |
97 | 99 |
|
98 | | -### [Занятие 8](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson08.md) |
| 100 | +#### [Занятие 8](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson08.md) |
99 | 101 | - Разбор домашнего задания |
100 | 102 | - Классы работы с датами: Date, Calendar, TimeZone |
101 | | - - Дата и время в Java 8 |
102 | | - - Внешние библиотеки: Joda Time library |
103 | | - - Работа с файловой системой: класс File |
104 | | - - try-with-resources |
| 103 | + - Дата и время в Java 8+ |
| 104 | + - File API |
| 105 | + - Освобождение ресурсов: try-with-resources |
105 | 106 | - Домашнее задание |
106 | 107 |
|
107 | | -### [Занятие 9](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson09.md) |
| 108 | +#### [Занятие 9](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson09.md) |
108 | 109 | - Разбор домашнего задания |
109 | 110 | - Обзор пакета java.io |
110 | | - - Классы чтения/записи потоков: InputStream/OutputStream |
111 | | - - Паттерн проектирования Декоратор |
112 | | - - Работа с классами чтения/записи символов: Reader и Writer |
113 | | - - Сериализация |
| 111 | + - Классы чтения/записи потоков: InputStream и OutputStream |
| 112 | + - Паттерн проектирования Decorator |
| 113 | + - Классы чтения/записи символов: Reader и Writer |
| 114 | + - Сериализация объектов |
114 | 115 | - Обзор пакета java.nio |
115 | | - - Введение в Java 8 Stream API |
| 116 | + - Введение в Java 8+ Stream API |
116 | 117 | - Домашнее задание |
117 | 118 |
|
118 | | -### [Занятие 10](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson10.md) |
| 119 | +#### [Занятие 10](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson10.md) |
119 | 120 | - Разбор домашнего задания |
120 | | - - Паттерн проектирования Стратегия |
121 | | - - Работа с XML |
122 | | - - Работа с JSON: Google GSON и Jackson |
123 | | - - Введение в REST |
124 | | - - DataInputStream/DataOutputStream |
125 | | - - Домашнее задание |
126 | | - |
127 | | -### [Занятие 11](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson11.md) |
128 | | - - Процессы и потоки |
129 | | - - Синхронизация методов и блоков |
130 | | - - Закон Мура |
131 | | - - Закон Амдала |
| 121 | + - Паттерн проектирования Strategy |
| 122 | + - Работа с XML (JAXB) |
| 123 | + - Работа с JSON (GSON) |
| 124 | + - Классы чтения/записи примитивных типов: DataInputStream и DataOutputStream |
| 125 | + - Домашнее задание |
| 126 | + |
| 127 | +#### [Занятие 11](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson11.md) |
| 128 | + - Многопоточность |
| 129 | + - Закон Мура и Амдала |
| 130 | + - Потоки. Синхронизация доступа |
132 | 131 | - Обзор методов класса Object |
133 | 132 | - Ленивая инициализация |
134 | 133 | - Java Memory Model |
135 | | - - Взаимная блокировка |
| 134 | + - Deadlock |
136 | 135 | - Домашнее задание |
137 | 136 |
|
138 | | -### [Занятие 12](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson12.md) |
| 137 | +#### [Занятие 12](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson12.md) |
139 | 138 | - Разбор домашнего задания |
140 | | - - Обзор java.util.concurrent |
| 139 | + - Обзор классов java.util.concurrent |
141 | 140 | - Синхронизаторы |
142 | | - - ThreadLocal переменные |
| 141 | + - ThreadLocal-переменные |
143 | 142 | - Сравнение с обменом (Compare-and-swap) |
144 | 143 | - Домашнее задание |
145 | 144 |
|
146 | | -### [Занятие 13](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson13.md) |
| 145 | +#### [Занятие 13](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson13.md) |
147 | 146 | - Разбор домашнего задания |
148 | 147 | - Введение в реляционные базы данных |
149 | 148 | - Язык SQL |
|
155 | 154 | - Обзор JDBC-архитектуры |
156 | 155 | - Домашнее задание |
157 | 156 |
|
158 | | -### [Занятие 14](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson14.md) |
| 157 | +#### [Занятие 14](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson14.md) |
159 | 158 | - Разбор домашнего задания |
160 | 159 | - Операции соединения таблиц. JOIN |
161 | 160 | - Транзакции |
|
164 | 163 | - Установка и настройка контейнера сервлетов Tomcat |
165 | 164 | - Домашнее задание |
166 | 165 |
|
167 | | -### [Занятие 15](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson15.md) |
| 166 | +#### [Занятие 15](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson15.md) |
168 | 167 | - Разбор домашнего задания |
169 | 168 | - Введение в HTML |
170 | 169 | - Основы протокола HTTP |
171 | 170 | - Настройка web.xml |
172 | | - - Развертывание (деплой) web-приложения в Tomcat |
| 171 | + - Деплой web-приложения в Tomcat |
173 | 172 | - Сервлеты |
174 | 173 | - Домашнее задание |
175 | 174 |
|
176 | | -### [Занятие 16](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson16.md) |
| 175 | +#### [Занятие 16](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson16.md) |
177 | 176 | - Разбор домашнего задания |
178 | 177 | - Жизненный цикл сервлета |
179 | 178 | - Создание динамических страниц. JSP |
180 | | - - Расширенные возможности JSP: JSTL |
| 179 | + - Расширенные возможности JSP. JSTL |
181 | 180 | - Redirect и Forward |
182 | | - - CRUD |
| 181 | + - CRUD-операции |
183 | 182 | - Домашнее задание |
184 | 183 |
|
185 | | -### [Занятие 17](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson17.md) |
| 184 | +#### [Занятие 17](https://github.com/JavaWebinar/basejava/blob/lesson/lesson/lesson17.md) |
186 | 185 | - Разбор домашнего задания |
187 | 186 | - Деплой приложения в облачный сервис Heroku |
188 | 187 | - Загрузка классов в Java. Classloader |
189 | 188 | - Домашнее задание |
190 | 189 |
|
191 | 190 | ## Рекомендуемые книги |
192 | | -- <a href="http://myflex.org/books/java4kids/java4kids.htm">YAKOV FAIN: Программирование на Java для начинающих</a> |
193 | | -- <a href="https://habrahabr.ru/post/153373/">Книги по Java: от новичка до профессионала</a> |
194 | | -- <a href="http://scanlibs.com/java-effektivnoe-programmirovanie-2-e-izdanie">Джошуа Блох: Java. Эффективное программирование, 2-е издание</a> |
195 | | -- <a href="http://www.labirint.ru/books/87603/">Гамма, Хелм, Джонсон: Приемы объектно-ориентированного проектирования. Паттерны проектирования</a> |
196 | | -- <a href="http://www.bookvoed.ru/book?id=639284">Редмонд Э.: Семь баз данных за семь недель. Введение в современные базы данных и идеологию NoSQL.</a> |
197 | | - |
198 | | -## Ресуры в сети |
199 | | -- [EduTools плагин от JetBrains для изучения Kotlin, Java, Python, Scala, ...](http://javaops.ru/view/story/story21#edutools) |
200 | | -- [Руководство по Java Core](http://proselyte.net/tutorials/java-core/) |
201 | | -- [Java. Базовый курс (доступен также через плагин JetBrains EduTools)](https://stepik.org/course/Java-Базовый-курс-187) |
202 | | -- <a href="http://www.intuit.ru/studies/courses/16/16/info">intuit: Программирование на Java</a> |
203 | | -- <a href="http://sernam.ru/book_java.php">Основы программирования на Java: учебное пособие</a> |
| 191 | +- [Яков Файн, "Программирование на Java для начинающих"](http://myflex.org/books/java4kids/java4kids.htm) |
| 192 | +- [Книги по Java: от новичка до профессионала](https://proglib.io/p/java-books-2019/) |
| 193 | +- [Джошуа Блох, "Java. Эффективное программирование, 3-е издание"](https://www.ozon.ru/context/detail/id/148627191/) |
| 194 | +- [Роберт Мартин, "Чистый код"](https://www.ozon.ru/context/detail/id/142429922/) |
| 195 | +- [Серия Head First, "Паттерны проектирования"](https://www.ozon.ru/context/detail/id/144233005/) |
| 196 | +- [Вайсфельд Мэтт, "Объектно-ориентированный подход"](https://www.ozon.ru/context/detail/id/166375103/?stat=YW5fMQ%3D%3D) |
| 197 | + |
| 198 | +## Ресурсы в сети |
| 199 | +- [EduTools плагин от JetBrains для изучения Kotlin, Java, Python, Scala и других языков](http://javaops.ru/view/story/story21#edutools) |
| 200 | +- [JetBrains Academy — интерактивный учебный курс по Java](https://www.jetbrains.com/ru-ru/academy/) |
0 commit comments