Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/bbfh-dev/basejava


https://github.com/bbfh-dev/basejava

Last synced: 8 days ago
JSON representation

Awesome Lists containing this project

README

        

# [Курс BaseJava (обновленный и переработанный)](http://javaops.ru/reg/basejava)

## Разработка web-приложения "База данных резюме"

В данном курсе вы создадите с нуля web-приложение, реализуя разные способы хранения резюме. Проект включает в себя следующее:
- **Технологии:** Java 8, GitHub/Git, JUnit, Logging, GSON, JAXB, SQL, PostgreSQL, Сервлеты, HTML, JSP, JSTL, Tomcat, Maven и многое другое
- **Различные способы реализации хранения резюме:**
- в сортированном и не сортированном массиве
- в коллекциях (List, Map)
- в файловой системе:
- с использованием File и Path API
- в стандартной и кастомной сериализации Java
- в формате JSON ([Google Gson](https://en.wikipedia.org/wiki/Gson))
- в формате XML ([JAXB](https://ru.wikipedia.org/wiki/Java_Architecture_for_XML_Binding))
- в реляционной базе [PostgreSQL](https://ru.wikipedia.org/wiki/PostgreSQL)
- **Установку (деплой) web-приложения:**
- в контейнер сервлетов [Tomcat](https://ru.wikipedia.org/wiki/Apache_Tomcat)
- в облачный сервис [Heroku](https://ru.wikipedia.org/wiki/Heroku)

> Любое знание стоит воспринимать как подобие семантического дерева: убедитесь в том, что понимаете фундаментальные принципы, то есть ствол и крупные ветки, прежде чем лезть в мелкие листья-детали. Иначе последним не на чем будет держаться

— Илон Маск

### Изучите [бесплатный урок](lesson/lesson1.md). В конце урока находится домашнее задание, по которому можно оценить свой уровень готовности к проекту

## Программа курса

#### Занятие 1 (бесплатное)
- Обзор курса и методики обучения
- Подготовка и настройка рабочего окружения
- Подходы, применяемые при разработке ПО
- Обзор инструментов и технологий, используемых Java-разработчиками
- Введение в язык Java: история создания, JDK, JVM, JRE, JIT-компиляция
- Системы управления версиями. Git
- Домашнее задание

#### Занятие 2
- Типы данных
- Введение в объектно-ориентированное программирование
- Принципы ООП
- Классы и объекты
- Классы-обертки
- Модификаторы доступа
- Конструктор
- Структура памяти java-программы: Heap (куча), Stack (стек)
- Пакеты
- Домашнее задание

#### Занятие 3
- Разбор домашнего задания
- Обзор суперкласса Object
- Связь между equals() и hashCode()
- Статические методы и переменные
- Программирование с помощью интерфейсов
- Абстрактные классы
- Сложность алгоритмов
- Паттерн проектирования Template Method
- Домашнее задание

#### Занятие 4
- Разбор домашнего задания
- Конструктор
- Работа со строками: String, StringBuilder, StringBuffer
- String literal pool
- Исключения (Exceptions)
- Ключевые слова: this, super
- Reflection
- Аннотации
- Введение в модульное тестирование. JUnit
- Домашнее задание

#### Занятие 5
- Разбор домашнего задания
- Коллекций. Иерархия классов
- Списки (List)
- Множества (Set)
- Ассоциативные массивы (Map)
- Введение в Iterator
- Домашнее задание

#### Занятие 6
- Разбор домашнего задания
- Паттерн проектирования Iterator
- Autoboxing и Unboxing
- Вложенные классы
- Внутренние классы
- Локальные классы
- Анонимные классы
- Введение в лямбда-выражения
- Функциональный интерфейс
- Домашнее задание

#### Занятие 7
- Разбор домашнего задания
- Дженерики (Generic)
- Введение в логирование. Log4J, Java Logging API
- Паттерн проектирования Singleton
- Перечисления (Enum)
- Объектная модель
- Домашнее задание

#### Занятие 8
- Разбор домашнего задания
- Классы работы с датами: Date, Calendar, TimeZone
- Дата и время в Java 8+
- File API
- Освобождение ресурсов: try-with-resources
- Домашнее задание

#### Занятие 9
- Разбор домашнего задания
- Обзор пакета java.io
- Классы чтения/записи потоков: InputStream и OutputStream
- Паттерн проектирования Decorator
- Классы чтения/записи символов: Reader и Writer
- Сериализация объектов
- Обзор пакета java.nio
- Введение в Java 8+ Stream API
- Домашнее задание

#### Занятие 10
- Разбор домашнего задания
- Паттерн проектирования Strategy
- Работа с XML (JAXB)
- Работа с JSON (GSON)
- Классы чтения/записи примитивных типов: DataInputStream и DataOutputStream
- Домашнее задание

#### Занятие 11
- Многопоточность
- Закон Мура и Амдала
- Потоки. Синхронизация доступа
- Обзор методов класса Object
- Ленивая инициализация
- Java Memory Model
- Deadlock
- Домашнее задание

#### Занятие 12
- Разбор домашнего задания
- Обзор классов java.util.concurrent
- Синхронизаторы
- ThreadLocal-переменные
- Сравнение с обменом (Compare-and-swap)
- Домашнее задание

#### Занятие 13
- Разбор домашнего задания
- Введение в реляционные базы данных
- Язык SQL
- Обзор NoSQL баз данных
- Установка и настройка СУБД PostgreSQL
- Работа с базами данных из IDEA
- Конфигурирование базы данных и каталога хранения
- Подключение базы данных к проекту
- Обзор JDBC-архитектуры
- Домашнее задание

#### Занятие 14
- Разбор домашнего задания
- Операции соединения таблиц. JOIN
- Транзакции
- Требования к транзакциям. ACID
- Уровни изоляции транзакций в SQL
- Установка и настройка контейнера сервлетов Tomcat
- Домашнее задание

#### Занятие 15
- Разбор домашнего задания
- Введение в HTML
- Основы протокола HTTP
- Настройка web.xml
- Деплой web-приложения в Tomcat
- Сервлеты
- Домашнее задание

#### Занятие 16
- Разбор домашнего задания
- Жизненный цикл сервлета
- Создание динамических страниц. JSP
- Расширенные возможности JSP. JSTL
- Redirect и Forward
- CRUD-операции
- Домашнее задание

#### Занятие 17
- Разбор домашнего задания
- Деплой приложения в облачный сервис Heroku
- Загрузка классов в Java. Classloader
- Домашнее задание

## Рекомендуемые книги
- [Яков Файн, "Программирование на Java для начинающих"](http://myflex.org/books/java4kids/java4kids.htm)
- [Книги по Java: от новичка до профессионала](https://proglib.io/p/java-books-2019/)
- [Джошуа Блох, "Java. Эффективное программирование, 3-е издание"](https://www.ozon.ru/context/detail/id/148627191/)
- [Роберт Мартин, "Чистый код"](https://www.ozon.ru/context/detail/id/142429922/)
- [Серия Head First, "Паттерны проектирования"](https://www.ozon.ru/context/detail/id/144233005/)
- [Вайсфельд Мэтт, "Объектно-ориентированный подход"](https://www.ozon.ru/context/detail/id/166375103/?stat=YW5fMQ%3D%3D)

## Ресурсы в сети
- [EduTools плагин от JetBrains для изучения Kotlin, Java, Python, Scala и других языков](http://javaops.ru/view/story/story21#edutools)
- [JetBrains Academy — интерактивный учебный курс по Java](https://www.jetbrains.com/ru-ru/academy/)