План курса

Часть 1. Введение

Тем: 4

Тема 1. Ввод-вывод

Содержание

  1. Потоки ввода-вывода
    1. Четыре вида потоков
    2. Операции с потоками
    3. Исключения ввода-вывода
  2. Файловый ввод-вывод и преобразование потоков
    1. Классы файловых потоков
    2. Кодировки и преобразование потоков
  3. Фильтрующие потоки
    1. Фильтрация
    2. Буферизация
  4. Дополнительные возможности потоков
    1. Эмуляция чтения и записи
    2. Конкатенация потоков ввода
    3. Подавление ошибок
  5. Расширенный ввод-вывод
    1. Платформонезависимый ввод-вывод
    2. Файлы с произвольным доступом
    3. Классы System и Console
  6. Дескрипторы файлов
    1. Файлы, каталоги, пути и разделители
    2. Операции с отдельными файлами
    3. Листинг каталогов
  7. Ввод-вывод в Java 7
    1. Файловые системы и пути
    2. Операции с отдельными файлами
    3. Листинг каталогов
  8. Ввод-вывод и исключения
    1. Идиома работы с ресурсами
    2. Работа с несколькими потоками

Слайды

HTML

Примеры

zip

Домашнее задание 1. Обход файлов

  1. Разработайте класс Walk, осуществляющий подсчет хеш-сумм файлов.
    1. Формат запуска:
      java Walk <входной файл> <выходной файл>
    2. Входной файл содержит список файлов, которые требуется обойти.
    3. Выходной файл должен содержать по одной строке для каждого файла. Формат строки:
      <шестнадцатеричная хеш-сумма> <путь к файлу>
    4. Для подсчета хеш-суммы используйте алгоритм Дженкинса.
    5. Если при чтении файла возникают ошибки, укажите в качестве его хеш-суммы все нули.
    6. Кодировка входного и выходного файлов — UTF-8.
    7. Размеры файлов могут превышать размер оперативной памяти.
    8. Пример
      Входной файл
      samples/1
      samples/12
      samples/123
      samples/1234
      samples/1
      samples/binary
      samples/no-such-file
                              
      Выходной файл
      806b80c9 samples/1
      7401b0b6 samples/12
      29b8dfb0 samples/123
      ad414afe samples/1234
      806b80c9 samples/1
      ef2a46bd samples/binary
      00000000 samples/no-such-file
                              
  2. Сложный вариант:
    1. Разработайте класс RecursiveWalk, осуществляющий подсчет хеш-сумм файлов в директориях.
    2. Входной файл содержит список файлов и директорий, которые требуется обойти. Обход директорий осуществляется рекурсивно.
    3. Пример:
      Входной файл
      samples/binary
      samples
      samples/no-such-file
                              
      Выходной файл
      ef2a46bd samples/binary
      806b80c9 samples/1
      7401b0b6 samples/12
      29b8dfb0 samples/123
      ad414afe samples/1234
      ef2a46bd samples/binary
      00000000 samples/such-file
                              
  3. При выполнении задания следует обратить внимание на:
    • Дизайн и обработку исключений, диагностику ошибок.
    • Программа должна корректно завершаться даже в случае ошибки.
    • Корректная работа с вводом-выводом.
    • Отсутствие утечки ресурсов.
    • Возможность повторного использования кода.
  4. Требования к оформлению задания.
    • Проверяется исходный код задания.
    • Весь код должен находиться в пакете info.kgeorgiy.ja.фамилия.walk.

Репозиторий курса

Тема 2. Collections Framework

Содержание

  1. Контейнеры
    1. Коллекции
      1. Интерфейс Collection
      2. Итераторы
      3. Класс AbstractCollection
    2. Множества
      1. Интерфейс Set
      2. Методы equals и hashCode
      3. Реализации множеств и базовые классы
    3. Списки
      1. Интерфейс List
      2. Итераторы по спискам
      3. Реализации списков и базовые классы
    4. Очереди и деки
      1. Интерфейс Queue
      2. Интерфейс Dequeue
      3. Реализации очередей и деков, базовые классы
  2. Отображения
    1. Интерфейс Map
    2. Пары и проекции отображений
    3. Реализации отображений и базовые классы
  3. Упорядоченные коллекции
    1. Сравнение элементов и согласованность с equals
    2. Упорядоченные множества
    3. Упорядоченные отображения
    4. Очередь с приоритетами
  4. Алгоритмы
    1. Класс Collections
    2. Класс Arrays
  5. Устаревшие коллекции

Слайды

HTML

Примеры

zip

Домашнее задание 2. Множество на массиве

  1. Разработайте класс ArraySet, реализующий неизменяемое упорядоченное множество.
    • Класс ArraySet должен реализовывать интерфейс SortedSet (простой вариант) или NavigableSet (сложный вариант).
    • Все операции над множествами должны производиться с наилучшей асимптотической эффективностью.
  2. При выполнении задания следует обратить внимание на:
    • Применение стандартных коллекций.
    • Избавление от повторяющегося кода.
    • Отсутствие Unchecked warnings при компиляции.
    • Отсутствие излишних подавленных unchecked warnings.

Тема 3. Лямбда-выражения и потоки

Содержание

  1. Расширения интерфейсов
  2. Лямбда-выражения
    1. Функциональные интерфейсы
    2. Лямбда-выражения
    3. Ссылки на методы
  3. Поддержка лямбда-выражений в основных классах
    1. Типы-обертки
    2. Класс Objects
    3. Стандартные функциональные интерфейсы
  4. Поддержка лямбда-выражений в Collections Framework
    1. Необязательные значения
    2. Компараторы
    3. Новые методы коллекций и отображений
  5. Потоки значений
    1. Применение
      1. Типы потоков
      2. Создание и преобразование потоков
      3. Комбинаторы
    2. Стандартные коллекторы
    3. Реализация потоков
      1. Разбиваемые итераторы
      2. Обобщенные свертки
      3. Параллельное исполнение

Слайды

HTML

Примеры

zip

Домашнее задание 3. Студенты

  1. Разработайте класс StudentDB, осуществляющий поиск по базе данных студентов.
    • Класс StudentDB должен реализовывать интерфейс StudentQuery (простой вариант) или GroupQuery (сложный вариант).
    • Каждый метод должен состоять из ровно одного оператора. При этом длинные операторы надо разбивать на несколько строк.
  2. При выполнении задания следует обратить внимание на:
    • применение лямбда-выражений и потоков;
    • избавление от повторяющегося кода.

Тема 4. Reflection

Содержание

  1. Введение в Reflection
    1. Идентификаторы типов (type tokens)
    2. Информация о типе
  2. Структура класса
    1. Поля
      1. Получение информации
      2. Чтение и запись значений
    2. Методы и конструкторы
      1. Получение информации
      2. Вызов методов
      3. Создание объектов
    3. Вложенные классы
  3. Массивы
  4. Загрузка классов
    1. Загрузчики классов
    2. Иерархия загрузчиков
    3. Доступ к ресурсам
  5. Параметры типов
    1. Интерфейс Type и его потомки
    2. Generic-массивы
  6. Посредники
    1. Создание посредников
    2. Обработчики вызовов
    3. Применение посредников

Слайды

HTML

Примеры

zip

Домашнее задание 4. Implementor

  1. Реализуйте класс Implementor, генерирующий реализации классов и интерфейсов.
    • Аргумент командной строки: полное имя класса/интерфейса, для которого требуется сгенерировать реализацию.
    • В результате работы должен быть сгенерирован java-код класса с суффиксом Impl, расширяющий (реализующий) указанный класс (интерфейс).
    • Сгенерированный класс должен компилироваться без ошибок.
    • Сгенерированный класс не должен быть абстрактным.
    • Методы сгенерированного класса должны игнорировать свои аргументы и возвращать значения по умолчанию.
  2. В задании выделяются три варианта:
    • ПростойImplementor должен уметь реализовывать только интерфейсы (но не классы). Поддержка generics не требуется.
    • СложныйImplementor должен уметь реализовывать и классы, и интерфейсы. Поддержка generics не требуется.
    • БонусныйImplementor должен уметь реализовывать generic-классы и интерфейсы. Сгенерированный код должен иметь корректные параметры типов и не порождать UncheckedWarning.

Библиография

  1. Forman I.R., Forman N. Java Reflection in Action
  2.  Reflection (guide)
  3.  The Reflection API (tutorial)

Часть 2. Инструменты

Тем: 3

Тема 5. Jar

Содержание

  1. Jar-файлы
    1. Инструмент командной строки
    2. API для работы с Zip, Jar и Gzip
  2. Манифесты
    1. Формат
    2. Основные атрибуты

Слайды

HTML

Домашнее задание 5. Jar Implementor

Это домашнее задание связано с предыдущим и будет приниматься только с ним. Предыдущее домашнее задание отдельно сдать будет нельзя.

  1. Создайте .jar-файл, содержащий скомпилированный Implementor и сопутствующие классы.
    • Созданный .jar-файл должен запускаться командой java -jar.
    • Запускаемый .jar-файл должен принимать те же аргументы командной строки, что и класс Implementor.
  2. Модифицируйте Implemetor так, чтобы при запуске с аргументами -jar имя-класса файл.jar он генерировал .jar-файл с реализацией соответствующего класса (интерфейса).
  3. Вы можете создавать файлы и директории в текущем каталоге, но не за его пределами.
  4. Для проверки, кроме исходного кода так же должны быть представлены:
    • скрипт для создания запускаемого .jar-файла, в том числе исходный код манифеста;
    • запускаемый .jar-файл.
  5. Сложный вариант. Решение должно быть модуляризовано.

Тема 6. Javadoc

Содержание

  1. Что такое Javadoc
  2. Структура Javadoc
    1. Javadoc-комментарии
    2. Типы тегов
  3. Блочные теги
    1. Общие теги
    2. Теги методов
  4. Строчные теги
    1. Ссылки
    2. Код и значения
  5. Применение Javadoc
    1. Объекты документирования
    2. Наследование Javadoc
  6. Компиляция Javadoc

Слайды

HTML

Примеры

zip

Домашнее задание 6. Javadoc

Это домашнее задание связано с двумя предыдущими и будет приниматься только с ними. Предыдущие домашнее задание отдельно сдать будет нельзя.

  1. Документируйте класс Implementor и сопутствующие классы с применением Javadoc.
    • Должны быть документированы все классы и все члены классов, в том числе private.
    • Документация должна генерироваться без предупреждений.
    • Сгенерированная документация должна содержать корректные ссылки на классы стандартной библиотеки.
  2. Для проверки, кроме исходного кода так же должны быть представлены:
    • скрипт для генерации документации;
    • сгенерированная документация.

Тема 7. Модули

Содержание

  1. Что такое модули
    1. Определение
    2. Объявление
    3. Module path
  2. Управление зависимостями
    1. Подключение зависимостей
    2. Экспорт пакетов
    3. Открытие пакетов
  3. Сервисы
    1. Определение сервиса
    2. Реализация сервиса и ее объявление
    3. Объявление использования сервиса
    4. Загрузка сервисов
  4. Модуляризованный JDK

Слайды

HTML

Примеры

zip

Часть 3. Многопоточное программирование

Тем: 4

Тема 8. Введение в многопоточное программирование

Содержание

  1. Параллельное исполнение
    1. Развитие параллельных систем
    2. Потоки и процессы
    3. Типы параллелизма
      1. Итеративный
      2. Рекурсивный
      3. Обмен сообщениями
    4. Неделимые операции
      1. Безусловные
      2. Условные
      3. Свойства планировщика
  2. Потоки
    1. Создание потоков
    2. Состояния и свойства потоков
    3. Завершение потоков
    4. Механизм прерывания

Слайды

HTML

Примеры

zip

Библиография

  1.  Java Language Specification. Theads and locks
  2.  Concurrency (Java Tutorial)
  3. Lea D. Concurrent Programming in Java
  4. Goetz B. Java Concurrency in Practice
  5. Garg V. Concurrent and Distributed Computing in Java

Тема 9. Взаимодействие потоков

Содержание

  1. Синхронизация и блокировки
    1. Синхронизация
    2. Неявные блокировки
    3. Активное ожидания
  2. Мониторы и условия
    1. Мониторы
    2. Условия и работа с ними
    3. Пассивное ожидание
    4. Внезапные пробуждения
  3. Модель памяти Java
    1. Атомарность операций
    2. Видимость изменений и барьеры
    3. Упорядоченность изменений
    4. Volatile-переменные
  4. Примеры многопоточных программ
    1. Двусторонний барьер
    2. Гарантированный тупик
  5. Уровни безопасности
    1. Неизменяемые объекты
    2. Потокобезопасные объекты
    3. Потоконебезопасные объекты
    4. Thread-local objects

Слайды

HTML

Примеры

zip

Библиография

  1.  Java Language Specification. Theads and locks
  2.  Concurrency (Java Tutorial)
  3. Lea D. Concurrent Programming in Java
  4. Goetz B. Java Concurrency in Practice
  5. Garg V. Concurrent and Distributed Computing in Java

Тема 10. Задачи и средства многопоточного программирования

Содержание

  1. Классические задачи многопоточного программирования
    1. Доступ к разделяемому ресурсу
    2. Производители и потребители
    3. Читатели и писатели
    4. Обедающие философы
    5. Задания и работники
  2. Атомарные операции
    1. Виды атомарных операций
    2. CompareAndSet
    3. Применение атомарных операций
    4. Помеченные ссылки
  3. Блокировки и условия
    1. Блокировки
    2. Условия
    3. Блокировки чтения-записи
  4. Примитивы синхронизации
    1. Критические секции
    2. Семафоры
    3. Барьеры
    4. Защелки
    5. Рандеву
    6. Мониторы
  5. Решение классических задач многопоточного программирования
    1. Читатели и писатели
    2. Обедающие философы
    3. Задания и работники

Слайды

HTML

Библиография

  1.  Java Concurrency Utilities
  2.  High Level Concurrency Objects (Java Tutorial)
  3.  JSR 166: Concurrency Utilities
  4.  Concurrent Programming with J2SE 5.0
  5. Эндрюс Г. Основы многопоточного, параллельного и распределенного программирования
  6. Goetz B. Java concurrency in practice

Тема 11. Concurrency Utilities

Содержание

  1. Многопоточные коллекции
    1. Блокирующиеся очереди
    2. Многопоточные отображения
    3. Самокопирующиеся коллекции
  2. Управление заданиями
    1. Исполнители
    2. Функции и результаты
    3. Отложенное исполнение
  3. Прочие возможности
    1. Интервалы времени
    2. Очереди с задержкой

Слайды

HTML

Библиография

  1.  JSR 166: Concurrency Utilities
  2.  Concurrent Programming with J2SE 5.0
  3.  Getting to know synchronizers
  4. Эндрюс Г. Основы многопоточного, параллельного и распределенного программирования
  5. Goetz B. Java concurrency in practice

Часть 4. Сетевые приложения

Тем: 3

Тема 12. Работа с сетью

Содержание

  1. Введение
    1. Стек сетевых протоколов
    2. Протоколы IPv4 и IPv6
    3. Протокол TCP
    4. Протокол UDP
    5. DNS
  2. Адреса
    1. Адреса хостов
    2. Работа с DNS
    3. Адреса портов
  3. Работа с TCP
    1. Клиентский сокет
      1. Создание
      2. Управление ресурсами
      3. Закрытие части соединения
    2. Серверный сокет
      1. Создание
      2. Прием соединений
  4. Работа с UDP
    1. Датаграммы
      1. Исходящие
      2. Входящие
    2. Сокеты
      1. Создание
      2. Отправка и прием данных
  5. URI и URL
    1. URI
      1. Понятие об URI
      2. Структура URI
      3. Сравнение URI
    2. URL
      1. Понятие об URL
      2. Структура URL
      3. Сравнение URL
  6. Соединения
    1. Создание соединения
    2. Жизненный цикл соединения
    3. Быстрое установление соединения
    4. Поддержка протоколов
  7. Работа с HTTP
    1. Клиент
    2. Сервер

Слайды

HTML

Примеры

zip

Тема 13. Сериализация и RMI

Содержание

  1. Сериализация
    1. Сериализация и десериализация
    2. Объектные потоки
    3. Автоматическая сериализация
    4. Ручная сериализация
    5. Настраиваемая сериализация
    6. Сериализация и версионирование
    7. Сериализация и дескрипторы
  2. Концепции RMI
    1. Предназначение
    2. Схема работы и стек протоколов
    3. Удаленные интерфейсы
    4. Stub и Skeleton
    5. Распределенная сборка мусора
    6. RMI Registry
  3. Применение RMI

Слайды

HTML

Примеры

zip

Тема 14. Неблокирующий и асинхронный ввод-вывод

Содержание

  1. Буферы
    1. Операции
    2. Чтение и запись
    3. Байтовые буферы
    4. Типизированные буферы
  2. Каналы
    1. Иерархия каналов
    2. Байтовые каналы
    3. Файловые каналы
      1. Файлы отображаемые в память
      2. Блокировки
    4. Сетевые каналы
    5. Неблокирующий ввод-вывод
    6. Асинхронные каналы

Слайды

HTML

Примеры

zip

Часть 5. Разное

Тем: 2

Тема 15. Интернационализация и локализация

Содержание

  1. Локали
  2. Локализация данных
    1. Создание ResourceBundle
    2. Загрузка ResourceBundle
    3. Использование ResourceBundle
  3. Форматирование
    1. Форматирование чисел
    2. Форматирование дат и времени
    3. Форматирование сообщений
  4. Работа с текстом
    1. Сравнение строк
    2. Разбиение текста
    3. Запись текста

Слайды

HTML

Примеры

zip

Тема 16. Сборка мусора

Содержание

  1. Сборка мусора
    1. Сжимающие и копирующие сборщики
    2. Гипотеза о поколениях и ее применение
  2. Ссылки
    1. Типы ссылок
    2. Очереди ссылок

Слайды

HTML

Примеры

zip

Часть 6. Интерфейс пользователя

Тем: 4

Тема 17. Стандартные компоненты

Примеры

zip

Слайды

HTML

Тема 18. Обработка событий

Слайды

HTML

Примеры

zip

Тема 19. Модели

Слайды

HTML

Примеры

zip

Тема 20. JavaBeans

Слайды

HTML

Часть 7. XML

Тем: 5

Тема 21. Введение в XML

Слайды

PDF

Тема 22. Описание и проверка структуры XML

Слайды

PDF

Тема 23. Apache Ant

Слайды

PDF

Тема 24. XPath

Слайды

PDF

Тема 25. XSLT

Слайды

PDF