![]()
Основы языка программирования 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, особенности использования.
4. Поточная доставка данных при помощи Flume.
Архитектура Flume. Агент, канал передачи, селектор, слив. Варианты конфигурирования. Примеры и упражнения.
5. Обработка потока данных при помощи Apache Spark Streaming.
Принцип микропакетной обработки. Плавающее окно. Спектр решаемых задач. Работа с программным интерфейсом DStream.
6. Проблема масштабирования хранения данных. Работа с классическими СУБД.
Определение Базы Данных и Системы Управления Базами Данных. Организация хранения информации в классических СУБД на примере PostgreSQL. Вопросы обеспечения целостности данных. Требования ACID.
7. Распределенные файловые системы.
Подходы к хранению данных. Специфика хранения файлов. Архитектура популярных распределенных файловых систем на примере HDFS, NFS v4.1, Lustre. Использование распределенных файловых систем в задачах обработки больших объемов данных.
8. Архитектура NoSQL-систем.
Специфика хранения данных по записям. Проблематика обеспечения согласованности данных. Теорема CAP. Архитектура NoSQL (not only SQL) на примере Apache Cassandra и их отличие от классических СУБД.
9. Технология построения аналитических платформ на Apache Hive.
Состав и назначение кластера Hive. Связь с технологией Hadoop. Синтаксис запросов HiveQL. Возможность создания пользовательских функций
10. Кеширование данных. Проектирование кешей.
Понятие и назначение кеша данных. Ограничения. Стратегии замещения данных в кеш, стратегии предвыборки. Популярные системы кеширования для BigData-задач.
11. Платформа вычислений в памяти Apache Ignite.
Технологии вычислений в памяти и хранения данных в памяти. Кластер Ignite. Возможности Ignite для организации кеширования, вычислений, передачи сообщений и машинного обучения на основе больших данных.
![]()
Разработка с использованием свободного фреймворка 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.
Практика, подготовка к защите и защита итогового проекта
Практика, подготовка к защите и защита итогового проекта. В рамках модуля обучающиеся проходят практику на базе индустриального партнера, развивая навыки, полученные в предыдущих модулях, готовят и представляют к защите итоговый проект.