Основы языка программирования JAVA.
1. Обзор языка Java
Основная идея языка. Преимущества/недостатки Java. JDK/JRE/JVM/JIT. Виды ссылок. Сборщик мусора. Hеаp и Stack памяти в Java. Примитивные типы данных. Классы-обёртки. Автоупаковка и автораспаковка. Приведение типов. Integer pool.Символьные строки. String pool. Массивы в Java. Виды условных операторов. Конструкция switch-case. Виды циклов.
2. Объектно-ориентированное программирование
Поля, методы и конструкторы класса. Виды классов. Модификаторы доступа. Наследование, инкапсуляция, полиморфизм. Иерархия классов. Ассоциация, агрегация, композиция. Принципы SOLID. Раннее и позднее связывание. Перегрузка / переопределение методов. Основные ключевые слова. Класс Object и его методы. Правила переопределения метода equals(). Контракт между методами equals() и hashCode(). Понятие коллизии. Правила переопределения метода hashcode().
3. Абстрактные и вложенные классы. Интерфейсы
Абстрактные Абстрактные классы, их отличия от обычных. Конструкторы абстрактных классов. Виды вложенных классов. Локальные и анонимные классы - особенности применения. Интерфейсы, их отличия от абстрактных классов. Наследование интерфейсов. Default методы интерфейсов. Проблема ромбовидного наследования для интерфейсов. Перечисления. Блоки инициализации - виды и особенности применения.
4. Исключения
Понятие исключения. Иерархия исключений. Виды исключений. Принудительное выбрасывание исключений. Ключевое слово throws. Создание пользовательских исключений. Механизм обработки исключений - try-catch-finally. Порядок обработки исключений. Mеханизм try-with-resources - особенности использования.
5. Сериализация и копирование
Понятия сериализации и десериализации, причины использования. Интерфейс Serializable. Стандартное поведение сериализации. Правила сериализации полей классов. Собственный протокол сериализации. Клонирование объектов. Поверхностное и глубокое клонирования.
6. Обобщенные типы данных
Обобщённые типы данных в Java (дженерики). Причины и особенности использования. Сырые типы. Виды wildcards. Принцип PECS.
7. Java Collections Framework
Понятие «коллекции». Интерфейс java.util.Collection. Иерархия коллекций. Класс java.util.Collections. Виды итераторов: fail-safe и fail-fast поведения. Интерфейсы List и Set. Внутренние устройства ArrayList, LinkedList, HashSet, LinkedHashSet и TreeSet, сложность основных операций для них. Интерфейсы Queue и Deque. Интерфейс Map, его основные реализации. Внутренние устройства HashMap, LinkedHashMap и TreeMap, сложность основных операций для них.
8. Функциональные интерфейсы. Лямбда-выражения
Принцип РЕС8.Понятие функционального интерфейса. Аннотация @FunctionalInterface. Виды функциональных интерфейсов. Способы инстанцирования функциональных интерфейсов. Лямбда-выражения. Правила обращения к полям класса и переменным методов из лямбда-выражений. Ссылка на метод.
9. Stream API
Понятие стрима, особенности использования. Интерфейс Stream. Сравнение стримов с коллекциями. Ленивая инициализация стрима. Виды стримов. Способы создания стримов. Промежуточные и терминальные операции со стримами, примеры и особенности использования. Класс java.util. stream.Collections.
Разработка баз данных на основе СУБД PostgreSQL
1. Введение в БД: базовые понятия
Понятие базы данных, СУБД, модели данных, классификация моделей данных, иерархическая модель данных, сетевая модель, реляционная модель данных, объектная модель данных. NoSQL-технологии. История развития баз данных и СУБД. Ключи и связи. Первичный ключ. СУБД PostgreSQL. Основы развертывания.
2. Введение в язык SQL. Создание таблиц
Стандарты языка SQL. Зависимость от вендора СУБД. Основы синтаксиса. Правила задания имён. Создание таблиц: основной оператор CREATE TABLE, типы данных, ограничения целостности, значения по умолчанию.
3. Язык SQL оператор выборки SELECT
SELECT: формирование списка полей, фильтры, сортировка, группировка, групповые фильтры, ограничение интервала выбираемых строк, псевдонимы полей и таблиц.
4. Многотабличные выборки
Операции соединения таблиц, запятая, как декартово произведение, внешнее и внутренне соединение, естественное соединение, проблема повторяющихся имён и дублирования строк, соединение таблицы с самой собой. Контейнеры грфических объектов. Жизненный цикл фигуры. Основные типы графиков в matplotlib. Визуализация на скриптовом уровне.
5. Вложенные запросы
Вложенные запросы в качестве таблиц, условий фильтрации, полей. Рекурсивные запросы (конструкция WITH). Соединение запросов, как множеств (UNION, INTERSECT, ЕХСЕРТ).
6. Построение запросов, изменяющих данные в таблицах
Оператор добавления строк: INSERT, оператор удаления строк DELETE, оператор изменения строк UPDATE. Комбинирование изменяющих строки операторов и оператора SELECT.
7. Администрирование баз данных: управление правами доступа в современных реляционных базах данных
Основные виды прав доступа. Табличные права и права уровня базы данных. Суперпользовательские права. Оператор GRANT: синтаксис и примеры использования. Оператор REVOKE: синтаксис и примеры использования.
8. Индексы и оптимизация баз данных
Особенности хранения информации на жестком диске. Индексные структуры. Анализ эффективности запросов.
9. Язык PL/SQL
Введение в язык PL/SQL. Типы данных. Основные конструкции. Курсоры. Процедуры. Функции. Агрегатные функции. Триггеры.
Работа с базами данных из JAVA-кода
1. Работа с Java DataBase Connectivity (JDBC)
JDBC API как часть платформы Java. Преимущества JDBC. JDBC Driver Manager. Драйвера для работы с различными базами данных. Основные классы и интерфейсы JDBC. Интерфейсы Connection, Statement, PreparedStatement, CallableStatement - особенности использования, примеры запросов. Обработка результатов запросов- интерфейс ResultSet. Структурный шаблон DAO (Data Access Object), особенности применения, примеры использования.
2. Объектно-реляционное отображение (ORM)
Недостатки JDBC. Концепция объектно-реляционного отображения (ORM). Причины введения ORM. Преимущества ORM.
3. Спецификация Java Persistence API (JPA). Работа с библиотекой Hibernate
Особенности спецификации JPA. Связь JPA и ORM. Примеры реализаций спецификации JPA. Библиотека Hibernate, её преимущества перед JDBC. Основные интерфейсы Hibernate: SessionFactory, Session, Transaction. Понятие сущности (entity). Интерфейс EntityManager, его назначение. Условия, необходимые для того, чтобы класс мог быть сущностью. Встраиваемый (embeddable) класс. Требования JPA к встраиваемым классам. Типы стратегий наследования отображения в JPA (Inheritance Мapping Strategies). Особенности отображения (mapping) перечислений, коллекций, дат. Виды связей. Понятие каскада. Типы fetch стратегий в JPA. Жизненный цикл сущности. Основные аннотации JPA/Hibernate, особенности применения, примеры. Виды блокировок. Кэши JPA. JPQL/HQL и их отличие от SQL. Criteria API. EntityGraph, особенности использования.
Разработка с использованием свободного фреймворка Spring Framework
1. Обзор Spring Framework. Основные модули
Обзор фрейворка. Назначение и область применения Spring. Обзор основных модулей, особенности их использования.
2. Инверсия управления. Внедрение зависимостей. Работа с бинами в Spring
Понятие инверсии управления (Inversion of Control - IoC). Управление объектами в обычном Java-приложении. Управление объектами при помощи Spring - Spring IoC Container, его назначение и основные функции. Понятие внедрения зависимостей (Dependency Injection - DI). Способы конфигурации IoC контейнера. Аннотация @Configuration. Понятие бина (Spring Bean). Виды бинов. Аннотации @Bean и @Scope. ApplicationContext и BeanFactory, сходства и различия, особенности применения. Жизненный цикл бина в Spring. Аннотации @PostConstruct и @PreDestroy.
3. Аннотации Spring
Обзор основных аннотаций Spring. Аннотация @Component - отличие от @Bean. Аннотации @Service и @Repository - сходства и различия. Другие аннотации: @Autowired, @Resource, @Inject, @Lookup, @Primary, @Qualifier, @Conditional, @Profile, @ComponentScan. Аннотации @Controller и @RestController - сходства и различия.
4. Основные паттерны Spring. Spring MVC
Основные паттерны, используемые в Spring Framework. ViewResolver. Model, ModelMаp и ModelAndView - сходства и различия, особенности использования, примеры. Паттерн Front Controller, его реализация в Spring. Паттерн Model-View-Controller (MVC), его реализация в Spring. Работа с контроллерами в Spring. Создание REST-сервиса с помощью Spring.
5. Spring Boot
Обзор модуля Spring Boot. Его преимущества. Конфигурация Spring Boot. Зависимости и их совместимости. Сборка приложения и деплой на сервер - с использованием и без использования Spring Boot. Недостатки Spring Boot.
6. Обеспечение безопасности Java-приложений средствами SPRING Security
Безопасность Java-приложений. Обзор модуля Spring Security. Его назначение и возможности. Конфигурация Spring Security. Принципы работы Spring Security. Фильтры. Реализация функционала аутентификации и авторизации в Java-приложении средствами Spring Security. Аннотация @EnableWebSecurity. Интерфейс AuthenticationProvider. Способы настройки авторизации. Метод configure(). Авторизация на уровне методов: аннотации @PreAuthorize, @PostAuthorize, @Secured, @RolesAllowed, @PreFilter, @PostFilter.
Обеспечение безопасности приложений
1. Основные понятия безопасности информационных систем
Раздел содержит в себе описание основных понятий кибербезопасности. Излагаются ключевые характеристики цифровых угроз. Рассматриваются различные виды уязвимостей и угроз. Изучаются меры обеспечения безопасности и механизмы их реализации.
2. Сферы кибербезопасности
В разделе изучаются методы анализа вредоносного программного обеспечения. Приводится алгоритм разработки защищенного приложения. Излагаются особенности промышленной кибербезопасности и типичные уязвимости.
3. Инструменты атакующих. Виды кибератак
Рассматриваются техники и тактики кибератак MITRE ATT&CK, современный ландшафт угроз.
4. Будущее кибербезопасности
Ознакомление с IoT и его особенностями. Рассказывается о кибериммунитете и его роли в эволюции кибербезопасности. Описываются тренды в кибербезопасности и развитии защиты.
Практика, подготовка к защите и защита итогового проекта
Практика, подготовка к защите и защита итогового проекта. В рамках модуля обучающиеся проходят практику на базе индустриального партнера, развивая навыки, полученные в предыдущих модулях, готовят и представляют к защите итоговый проект.