Знакомство c Java
> Знакомство с Java.
> Процесс создания приложения
> Знакомство с Java SE
> Виртуальная машина Java
> Среда разработки IntelliJ IDEA
> Создание первого проекта
> Метод main
> Команды вывода в консоль
> Экранирование символов
> Переменные и примитивные типы данных
> Арифметические операции
> Домашнее задание: Программа решения линейных уравнений
Управляющие конструкции. Преобразование типов. Логические операции
> Конструкции условного перехода
> Логические операции и операторы
> Вложенность конструкций и область видимости
> Явное и неявное преобразование типов
> Конкатенация строк
> Знакомство с миром фундаментальных алгоритмов
> Алгоритм поиска минимума
Массивы. Циклы. Базовые алгоритмы поиска. Сортировка.
> Оперативная память компьютера;
> Представление массива данных в памяти;
> Объявление и инициализация массивов;
> Алгоритм программы генерации массива со случайными числами;
> Реализация программы;
> Знакомство с циклами. Цикл while;
> Сокращенная запись арифметических операций;
> Постфиксная и префиксная инкрементация/декрементация;
> Алгоритм поиска минимума/максимума в массиве;
> Реализация алгоритмов поиска; цикл for; вложенность циклов;
> Простейший алгоритм сортировки массива;
> Реализация алгоритма сортировки;
Введение в классы и объекты.
> Классы, как типы данных
> Объекты, как переменные
> Состояние и поведение объекта
> Поля и методы
> Сигнатура метода (тип, параметры, аргументы)
> Жизнь и смерть объектов
> Ссылочные типы данных
> Общение между объектами
> Создание класса Contact для программы «Телефонная книга»
Коллекции
> Гибкие структуры данных в java.util
> Основные классы-коллекции
> Применение конкретных коллекций в зависимости от поставленной задачи
> Принцип работы ArrayList
> Знакомство с LinkedList, HashSet, HashMap, TreeSet
Введение в ООП
> Четыре кита ООП
> Инкапсуляция (модификаторы доступа)
> «Хороший тон» разработки на Java
> Геттеры и сеттеры
> Ключевое слово this
> Конструкторы
> Наследование в Java и его применение
> Класс Object
> Преимущества полиморфизма в ООП языках
> Переопределение и перегрузка
> Абстракция при построении архитектуры приложения
Абстрактные классы и методы. Интерфейсы. Анонимные классы
> Распределение обязанностей между классами
> Интерфейсы, как альтернатива множественному наследованию
> Маркер-интерфейсы, функциональные интерфейсы
> Интерфейс Comparable и правильная сортировка объектов
Параметризация. Лямбда-выражения
> Динамическая типизация в Java
> Создание класса с параметризированным полем
> Лямбда-выражения, как альтернатива анонимным классам функциональных интерфейсов
> Применение лямбда-выражений
> Интерфейс Comparator
> Многоуровневая сортировка объектов
Рекурсия
> Знакомство с рекурсией
> Стек
> Решение задач с применением рекурсии
> Реализация алгоритма «быстрой» сортировки
Работа с файлами. Обработка исключительных ситуаций
> Класс File
> Потоки ввода-вывода
> Знакомство с java.io
> FileInputStream, InputStreamReader, BufferedReader
> FileOutputStream, PrintWriter
> Чтение и запись текстовых файлов
> Буфер записи
> Исключения. Exception и RuntimeException
> «Опасные» методы
> Обработка исключительных ситуаций
> Влияние иерархии классов исключений на порядок обработки
> Создание собственных исключений
> Пробрасывание исключений
Знакомство с СУБД
> Что такое база данных?
> Виды баз данных
> Реляционные СУБД
> Установка PostgreSQL
> Определение предметной области для СУБД
> Основные операции для создание схемы базы данных
> Основные операции по работе с данными (INSERT, SELECT, UPDATE, DELETE)
Отношения между таблицами. Выборка данных из нескольких таблиц
> Отношения между таблицами (one-to-one, one-to-many, many-to-many)
> Создание связей между таблицами
> JOINs
> Агрегатные функции
> Группировка данных
> Предложение HAVING
Системы сборки. Maven. Подключение к базе из Java
> Системы сборки в Java
> Сборка с помощью Maven
> Конфигурационный файл Maven (pom.xml)
> Управление зависимостями
> JDBC
> Настройка подключения к базе из Java
> Пул подключений к базе (connection pool)
> Выполнение операций с базой из Java
Аннотации. Classloaders
> Жизненный цикл классов в Java
> Процесс загрузки классов. Classloaders
> Виды classloaders
> Ручная загрузка классов
> Аннотации: что это и зачем они нужны?
> Написание своей аннотации
ORM. Hibernate
> ORM
> Знакомство с Hibernate
> Настройка Hibernate в проекте (hibernate.cfg.xml)
> Понятие сущности в Hibernate
> Создание схемы базы данных с помощью сущностей Hibernate
> Состояния сущностей
> Способы сохранения данных через Hibernate
Методы Hibernate. Связи таблиц в Hibernate
> Операции с базой через Hibernate
> Основные аннотации для создания связей в Hibernate
> Виды связей - unidirectional и bidirectional
> Настройка связей в Hibernate
ManyToMany в Hibernate. Lambda expressions
> Настройка many-to-many связи в Hibernate
> Лямбда функции в Java
> Функциональные интерфейсы
> Consumer, Supplier, Function
Unit-тесты. JUnit. Mockito
> Введение в тестирование
> Виды тестирований
> Unit-тесты. JUnit 5
> Заглушки классов
> Использование Mockito для написания unit-тестов
Интеграционные тесты
> Что такое интеграционные тесты
> In-memory базы
> Создание интеграционных тестов
> Настройка запуска интеграционных тестов в стадии verify
Введение в многопоточность
> Понятия процесса и потока
> Различие многопроцессорных и многопоточных программ
> Inter process communication (IPC)
> Создание потоков
> Класс Thread
> Интерфейс Runnable
> Daemon потоки
Работа с потоками. Синхронизация доступов
> Прерывание потока
> Понятие критической секции
> Ключевое слово synchronized
> Синхронизация доступов к данным
Виды блокировок. Неблокирующие алгоритмы
> Ключевое слово volatile
> Класс ReentrantLock
> Виды блокировок (biased, thin, fat)
> Понятие happens-before
> Неблокирующие алгоритмы
> Использование Atomic* классов
Работа над проектами