Домашнее задание 1. Обход файлов
-
Разработайте класс
Walk
, осуществляющий подсчет хэш-сумм файлов.-
Формат запуска:
java Walk <входной файл> <выходной файл>
- Входной файл содержит список файлов, которые требуется обойти.
-
Выходной файл должен содержать по одной строке для каждого файла.
Формат строки:
<шестнадцатеричная хэш-сумма> <путь к файлу>
- Для подсчета хэш-суммы используйте последние 64 бита SHA-256 (поддержка есть в стандартной библиотеке). .
- Если при чтении файла возникают ошибки, укажите в качестве его хэш-суммы все нули.
- Кодировка входного и выходного файлов — UTF-8.
- Размеры файлов могут превышать размер оперативной памяти.
-
Пример
Входной файл samples/1 samples/12 samples/123 samples/1234 samples/1 samples/binary samples/no-such-file
Выходной файл 6b86b273ff34fce1 samples/1 6b51d431df5d7f14 samples/12 a665a45920422f9d samples/123 03ac674216f3e15c samples/1234 6b86b273ff34fce1 samples/1 40aff2e9d2d8922e samples/binary 0000000000000000 samples/no-such-file
-
Формат запуска:
-
Сложный вариант:
-
Разработайте класс
RecursiveWalk
, осуществляющий подсчет хэш-сумм файлов в директориях. - Входной файл содержит список файлов и директорий, которые требуется обойти. Обход директорий осуществляется рекурсивно.
-
Пример:
Входной файл samples/binary samples samples/no-such-file
Выходной файл 40aff2e9d2d8922e samples/binary 6b86b273ff34fce1 samples/1 6b51d431df5d7f14 samples/12 a665a45920422f9d samples/123 03ac674216f3e15c samples/1234 40aff2e9d2d8922e samples/binary 0000000000000000 samples/such-file
-
Разработайте класс
-
При выполнении задания следует обратить внимание на:
- Дизайн и обработку исключений, диагностику ошибок.
- Программа должна корректно завершаться даже в случае ошибки.
- Корректная работа с вводом-выводом.
- Отсутствие утечки ресурсов.
- Возможность повторного использования кода.
-
Требования к оформлению задания.
- Проверяется исходный код задания.
-
Весь код должен находиться в пакете
info.kgeorgiy.ja.фамилия.walk
.
Домашнее задание 2. Множество на массиве
-
Разработайте класс
ArraySet
, реализующий неизменяемое упорядоченное множество.-
Класс
ArraySet
должен реализовывать интерфейс SortedSet (простой вариант) или NavigableSet (сложный вариант). - Все операции над множествами должны производиться с наилучшей асимптотической эффективностью.
-
Класс
-
При выполнении задания следует обратить внимание на:
- Применение стандартных коллекций.
- Избавление от повторяющегося кода.
- Отсутствие Unchecked warnings при компиляции.
- Отсутствие излишних подавленных unchecked warnings.
Домашнее задание 3. Студенты
-
Разработайте класс
StudentDB
, осуществляющий поиск по базе данных студентов.-
Класс
StudentDB
должен реализовывать интерфейсStudentQuery
(простой вариант) илиGroupQuery
(сложный вариант). - Каждый метод должен состоять из ровно одного оператора. При этом длинные операторы надо разбивать на несколько строк.
-
Класс
-
При выполнении задания следует обратить внимание на:
- применение лямбда-выражений и потоков;
- избавление от повторяющегося кода.
Домашнее задание 4. Сплитераторы и коллекторы
-
Разработайте класс
Lambda
, реализующий сплитераторы для деревьев и дополнительные коллекторы.- Простой вариант (интерфейс
EasyLambda
) — реализуйте:- сплитераторы для двоичных деревьев, двоичных деревьев с известным размером, k-ичных деревьев;
- коллекторы первого, последнего, среднего элементов;
- коллекторы общего префикса и суффикса строк.
- Сложный вариант (интерфейс
HardLambda
) — дополнительно реализуйте:- сплитераторы всех видов деревьев над списками элементов;
- коллектор n-ого элемента;
- коллекторы первых и последних n элементов.
- Простой вариант (интерфейс
-
При выполнении задания следует обратить внимание на:
- характеристиски создаваемых сплитераторов;
- избавление от повторяющегося кода.
Домашнее задание 5. Implementor
-
Реализуйте класс
Implementor
, генерирующий реализации классов и интерфейсов.- Аргумент командной строки: полное имя класса/интерфейса, для которого требуется сгенерировать реализацию.
-
В результате работы должен быть сгенерирован java-код класса с суффиксом
Impl
, расширяющий (реализующий) указанный класс (интерфейс). - Сгенерированный класс должен компилироваться без ошибок.
- Сгенерированный класс не должен быть абстрактным.
- Методы сгенерированного класса должны игнорировать свои аргументы и возвращать значения по умолчанию.
-
В задании выделяются три варианта:
- Простой —
Implementor
должен уметь реализовывать только интерфейсы (но не классы). Поддержка generics не требуется. - Сложный —
Implementor
должен уметь реализовывать и классы, и интерфейсы. Поддержка generics не требуется. - Бонусный —
Implementor
должен уметь реализовывать generic-классы и интерфейсы. Сгенерированный код должен иметь корректные параметры типов и не порождатьUncheckedWarning
.
- Простой —