##Курс Java
Содержание курса:
- Введение. Цели курса
- Краткая история языка и его характерные особенности.
- Первая программа на JAVA, компиляция и исполнение
- Установка и настройка среды
- Основные типы данных и их использование
- Комментарии
- Система контроля версий Git (?)
- Обзор источников и ресурсов для самообразования
- Установка и настройка среды у себя дома
- Найти литературу и необходимые источники данных
2. Синтаксис языка
- Ссылочные типы и примитивные типы
- Работа со String
- Массивы
- Области видимости переменных
- Условные конструкции
- Операторы и циклы
- Методы
- Простейшие алгоритмы и вычисления
- Реализовать простой алгоритм
- Алгоритм с использованием цикла
- Работа с классом String
- Почитать про code-conventions
3. Практический блок
- Вопросы по первым лекциям
- Обсуждения ДЗ
- Практическое задание
- Дополнительные задачи на String
- Реализовать substring
- Определить являются ли числа в строке последовательны
- Приложение-калькулятор
- Дополнительные задачи на String
- Доп. задание для успевающих
- Изучаем Git
- Доделываем ДЗ № 2 + Практику
- Практика - Реализовать калькулятор
- Для тех кто все успевает - сделать этот же калькулятор с помощью GUI (на Swing'e)
- Работаем с Git
4. ООП
- Парадигма ООП
- Базовый класс - Object
- Области видимости и инкапсуляция. Пакеты, импорты
- Реализовать класс с определенными данными и поведением (фабрика, сериализация/десериализация)
- Сделать pull request на оригинальный репозиторий
5. Наследование и интерфейсы
- Расширение классов
- UML
- Класс Object
- Класс Class
- Применение наследования
- Интерфейсы и внутренние классы
- Интерфейсы
- Полиморфизм
- Внутренние классы
- Анонимные классы
- Читаем про наследование, полиморфизм
- Читаем UML
- Доделываем все предыдущие ДЗ
- Рисуем диаграмму классов
- Синхронизируем последние изменения и делаем pull request
6. Практика. Обощенное ООП. Практика для модуля №5.
7. Исключения
- Зачем нужны исключения
- Проверяемые и непроверяемые исключения
- Обработка исключений
- throw, throws, try{}catch(){}, finally
- Input\Output streams
- Работа с файловой системой
- Улучшение рулетки
8. Коллекции
- Iterable, Iterator и Collection
- Интерфейс List, Queue и его имплементации
- Интерфейс Set и его имплементации
- Интерфейс Map и его имплементации
- Реализовать связный список
- Сделать анализатор текста
9. Разбор предыдущей домашней работы
- Читаем про обобщения
- Имплементим мультимапу
10. Обощения
- Обобщенные классы
- Обощенные методы
- Ограничения переменных типов
- Обощения и виртуальная машина
- Трансляция
- Подстановочные типы
- Читаем про базы данных и SQL
- Делаем имитацию БД
11. Базы данныз
- Введение
- ER-модель
- Реляционные базы
- DDL
- DML
- Читаем про базы данных и SQL
- Ставим себе MySQL
- Играем с тестовой базой
12. Базы данных и JDBC
- JOINS
- Транзакционность
- Хранимые процедуры и функции
- JDBC
- Делаем приложени, которое работает с БД через JDBC
13. Практика
14. Сервлеты
- Java Servlets
- Servlet Overview
- Servlet Life Cycle
- Java Servlet Example
- HttpServlet
- HttpRequest
- HttpResponse
- HttpSession
- RequestDispatcher
- ServletContext
- web.xml Servlet Configuration
- Cookies and Servlets
- Servlet Filters
- Делаем web-приложение
15. Рефлексия, аннотации
- Пишем мальнький сервис, который работает с рефлексией
16. Юнит тестирование
- Юнит тестирование
- Разбор предыдущих ДЗ в классе
- Покрываем тестами ваше веб-приложение
17. Паттерны проектирования
- Реализуем паттерн Memento для рулетки
18. OOD
- Пишем свинговое приложение
19. Многопоточность и паралелизм
- Какая польза от многопоточности
- Какая цена многопоточности
- В чем разница между паралелизмом и concurrency
- Основы многопоточности с точки зрения архитектуры компьюютера
- Многопточность с точки зрения ОС
- Что такое поток и процесс в ОС
- Возможные состояния потока
- Многопоточность с точки зрения Java
- Создание потоков
- Гонка (Race conditions)
- Проблема общих данных
- Синхноризация
- Wait, notify, notifyAll
- Улучшаем наше приложение с шариками
20. Многопоточность с практической точки зрения
- Thread.sleep
- Atomics
- Синхронизация
- Ключевое слово synhronize
- Synhronize блок кода
- Synhronize метод
- Synhronize статический метод
- Ограничения синхронизации
- Volatile
- Видимость данных
- Гарантированная видимость с volatile
- Принцип Happens Before
- Почему volatile не всегда достаточно?
- Общение между потоками
- Приложение для визуализации алгоритмов сортировки
- Приложение типа producer-consumer
21. Еще о многопточности
- Решаем тесты
- Знакомимся с Hibernate
22. Ant и Maven
- Ant и Maven. Конфигурируем билд.
23. ORM - Hibernate - JPA
- Приложение для управления банковскими счетом.
24. ORM - Native Hibernate
25. DI - IoC - Spring
- Улучшаем банковское приложения, воспользовавшись принципами:
- Lose Coupling
- High Cohesion
- Dependency Injection
25. Spring MVC
- Создаем REST приложение на основе Spring MVC