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

Тем: 8

Тема 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. Для подсчета хеш-суммы используйте алгоритм FNV.
    5. Если при чтении файла возникают ошибки, укажите в качестве его хеш-суммы 00000000.
    6. Кодировка входного и выходного файлов — UTF-8.
    7. Размеры файлов могут превышать размер оперативной памяти.
    8. Пример

      Входной файл

                              java/info/kgeorgiy/java/advanced/walk/samples/1
                              java/info/kgeorgiy/java/advanced/walk/samples/12
                              java/info/kgeorgiy/java/advanced/walk/samples/123
                              java/info/kgeorgiy/java/advanced/walk/samples/1234
                              java/info/kgeorgiy/java/advanced/walk/samples/1
                              java/info/kgeorgiy/java/advanced/walk/samples/binary
                              java/info/kgeorgiy/java/advanced/walk/samples/no-such-file
                          

      Выходной файл

                              050c5d2e java/info/kgeorgiy/java/advanced/walk/samples/1
                              2076af58 java/info/kgeorgiy/java/advanced/walk/samples/12
                              72d607bb java/info/kgeorgiy/java/advanced/walk/samples/123
                              81ee2b55 java/info/kgeorgiy/java/advanced/walk/samples/1234
                              050c5d2e java/info/kgeorgiy/java/advanced/walk/samples/1
                              8e8881c5 java/info/kgeorgiy/java/advanced/walk/samples/binary
                              00000000 java/info/kgeorgiy/java/advanced/walk/samples/no-such-file
                          
  2. Усложненная версия:
    1. Разработайте класс RecursiveWalk, осуществляющий подсчет хеш-сумм файлов в директориях
    2. Входной файл содержит список файлов и директорий, которые требуется обойти. Обход директорий осуществляется рекурсивно.
    3. Пример

      Входной файл

                              java/info/kgeorgiy/java/advanced/walk/samples/binary
                              java/info/kgeorgiy/java/advanced/walk/samples
                          

      Выходной файл

                              8e8881c5 java/info/kgeorgiy/java/advanced/walk/samples/binary
                              050c5d2e java/info/kgeorgiy/java/advanced/walk/samples/1
                              2076af58 java/info/kgeorgiy/java/advanced/walk/samples/12
                              72d607bb java/info/kgeorgiy/java/advanced/walk/samples/123
                              81ee2b55 java/info/kgeorgiy/java/advanced/walk/samples/1234
                              8e8881c5 java/info/kgeorgiy/java/advanced/walk/samples/binary
                          
  3. При выполнении задания следует обратить внимание на:
    • Дизайн и обработку исключений, диагностику ошибок.
    • Программа должна корректно завершаться даже в случае ошибки.
    • Корректная работа с вводом-выводом.
    • Отсутствие утечки ресурсов.
  4. Требования к оформлению задания.
    • Проверяется исходный код задания.
    • Весь код должен находиться в пакете ru.ifmo.rain.фамилия.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. При выполнении задания следует обратить внимание на:
    • Применение стандартных коллекций.
    • Избавление от повторяющегося кода.

Тема 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 (простая версия) или StudentGroupQuery (сложная версия).
    • Каждый методы должен состоять из ровного одного оператора. При этом длинные операторы надо разбивать на несколько строк.
  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

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)

Тема 5. Jar

Содержание

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

Слайды

HTML

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

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

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

Содержание

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

Слайды

HTML

Примеры

zip

Тема 7. 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

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

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

Содержание

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

Слайды

HTML

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

Тем: 3

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

Содержание

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

Слайды

HTML

Примеры

zip

Домашнее задание 7. Итеративный параллелизм

Итеративный параллелизм
  1. Реализуйте класс IterativeParallelism, который будет обрабатывать списки в несколько потоков.
  2. В простом варианте должны быть реализованы следующие методы:
    • minimum(threads, list, comparator) — первый минимум;
    • maximum(threads, list, comparator) — первый максимум;
    • all(threads, list, predicate) — проверка, что все элементы списка удовлетворяют предикату;
    • any(threads, list, predicate) — проверка, что существует элемент списка, удовлетворяющий предикату.
  3. В сложном варианте должны быть дополнительно реализованы следующие методы:
    • filter(threads, list, predicate) — вернуть список, содержащий элементы удовлетворяющие предикату;
    • map(threads, list, function) — вернуть список, содержащий результаты применения функции;
    • join(threads, list) — конкатенация строковых представлений элементов списка.
  4. Во все функции передается параметр threads — сколько потоков надо использовать при вычислении. Вы можете рассчитывать, что число потоков не велико.
  5. Не следует рассчитывать на то, что переданные компараторы, предикаты и функции работают быстро.
  6. При выполнении задания нельзя использовать Concurrency Utilities.
  7. Рекомендуется подумать, какое отношение к заданию имеют моноиды.

Домашнее задание 8. Параллельный запуск

Параллельный запуск
  1. Напишите класс ParallelMapperImpl, реализующий интерфейс ParallelMapper.
    public interface ParallelMapper extends AutoCloseable {
        <T, R> List<R> run(
            Function<? super T, ? extends R> f, 
            List<? extends T> args
        ) throws InterruptedException;
    
        @Override
        void close() throws InterruptedException;
    }
    
    • Метод run должен параллельно вычислять функцию f на каждом из указанных аргументов (args).
    • Метод close должен останавливать все рабочие потоки.
    • Конструктор ParallelMapperImpl(int threads) создает threads рабочих потоков, которые могут быть использованы для распараллеливания.
    • К одному ParallelMapperImpl могут одновременно обращаться несколько клиентов.
    • Задания на исполнение должны накапливаться в очереди и обрабатываться в порядке поступления.
    • В реализации не должно быть активных ожиданий.
  2. Модифицируйте касс IterativeParallelism так, чтобы он мог использовать ParallelMapper.
    • Добавьте конструктор IterativeParallelism(ParallelMapper)
    • Методы класса должны делить работу на threads фрагментов и исполнять их при помощи ParallelMapper.
    • Должна быть возможность одновременного запуска и работы нескольких клиентов, использующих один ParallelMapper.
    • При наличии ParallelMapper сам IterativeParallelism новые потоки создавать не должен.

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

  1.  Java Language Specification. Theads and locks
  2.  Concurrency (Java Tutorial)
  3. Lea D. Concurrent Programming in Java
  4. 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.  JSR 166: Concurrency Utilities
  2.  Concurrent Programming with J2SE 5.0
  3.  Getting to know synchronizers
  4. Эндрюс Г. Основы многопоточного, параллельного и распределенного программирования
  5. Goetz B. Java concurrency in practice

Тема 11. Многопоточное программирование на Java

Содержание

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

Слайды

HTML

Домашнее задание 9. Web Crawler

Web Crawler
  1. Напишите потокобезопасный класс WebCrawler, который будет рекурсивно обходить сайты.
    1. Класс WebCrawler должен иметь конструктор
                              public WebCrawler(Downloader downloader, int downloaders, int extractors, int perHost)
                          
      • downloader позволяет скачивать страницы и извлекать из них ссылки;
      • downloaders — максимальное число одновременно загружаемых страниц;
      • extractors — максимальное число страниц, из которых извлекаются ссылки;
      • perHost — максимальное число страниц, одновременно загружаемых c одного хоста. Для опредения хоста следует использовать метод getHost класса URLUtils из тестов.
    2. Класс WebCrawler должен реализовывать интерфейс Crawler
                              public interface Crawler extends AutoCloseable {
                                  List<String> download(String url, int depth) throws IOException;
      
                                  void close();
                              }
                          
      • Метод download должен рекурсивно обходить страницы, начиная с указанного URL на указанную глубину и возвращать список загруженных страниц и файлов. Например, если глубина равна 1, то должна быть загружена только указанная страница. Если глубина равна 2, то указанная страница и те страницы и файлы, на которые она ссылается и так далее. Этот метод может вызываться параллельно в нескольких потоках.
      • Загрузка и обработка страниц (извлечение ссылок) должна выполняться максимально параллельно, с учетом ограничений на число одновременно загружаемых страниц (в том числе с одного хоста) и страниц, с которых загружаются ссылки.
      • Для распараллеливания разрешается создать до downloaders + extractors вспомогательных потоков.
      • Загружать и/или извлекать ссылки из одной и той же страницы в рамках одного обхода (download) запрещается.
      • Метод close должен завершать все вспомогательные потоки.
    3. Для загрузки страниц должен применяться Downloader, передаваемый первым аргументом конструктора.
                              public interface Downloader {
                                  public Document download(final String url) throws IOException;
                              }
                          
      • Метод download загружает документ по его адресу (URL).
      • Документ позволяет получить ссылки по загруженной странице:
                            public interface Document {
                                List<String> extractLinks() throws IOException;
                            }
                        
        Ссылки, возвращаемые документом являются абсолютными и имеют схему http или https.
    4. Должен быть реализован метод main, позволяющий запустить обход из командной строки
      • Командная строка
                            WebCrawler url [depth [downloads [extractors [perHost]]]]
                        
      • Для загрузки страниц требуется использовать реализацию CachingDownloader из тестов.
  2. Версии задания
    1. Простая — можно не учитывать ограничения на число одновременных закачек с одного хоста (perHost >= downloaders).
    2. Полная — требуется учитывать все ограничения.
    3. Бонусная — сделать параллельный обод в ширину.

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

  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

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

Тем: 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

Домашнее задание 10. HelloUDP

HelloUDP
  1. Реализуйте клиент и сервер, взаимодействующие по UDP.
  2. Класс HelloUDPClient должен отправлять запросы на сервер, принимать результаты и выводить их на консоль.
    • Аргументы командной строки:
      1. имя или ip-адрес компьютера, на котором запущен сервер;
      2. номер порта, на который отсылать запросы;
      3. префикс запросов (строка);
      4. число параллельных потоков запросов;
      5. число запросов в каждом потоке.
    • Запросы должны одновременно отсылаться в указанном числе потоков. Каждый поток должен ожидать обработки своего запроса и выводить сам запрос и результат его обработки на консоль. Если запрос не был обработан, требуется послать его заного.
    • Запросы должны формироваться по схеме <префикс запросов><номер потока>_<номер запроса в потоке>.
  3. Класс HelloUDPServer должен принимать задания, отсылаемые классом HelloUDPClient и отвечать на них.
    • Аргументы командной строки:
      1. номер порта, по которому будут приниматься запросы;
      2. число рабочих потоков, которые будут обрабатывать запросы.
    • Ответом на запрос должно быть Hello, <текст запроса>.
    • Если сервер не успевает обрабатывать запросы, прием запросов может быть временно приостановлен.
  4. Бонусный вариант. Реализация должна быть полностью неблокирующей.
    • Клиент не должен создавать потоков.
    • В реализации не должно быть активных ожиданий, в том числе через Selector.

Тема 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

Домашнее задание 11. Физические лица

Физические лица
  1. Добавьте к банковскому приложению возможность работы с физическими лицами.
    1. У физического лица (Person) можно запросить имя, фамилию и номер паспорта.
    2. Локальные физические лица (LocalPerson) должны передаваться при помощи механизма сериализации.
    3. Удаленные физические лица (RemotePerson) должны передаваться при помощи удаленных объектов.
    4. Должна быть возможность поиска физического лица по номеру паспорта, с выбором типа возвращаемого лица.
    5. Должна быть возможность создания записи о физическом лице по его данным.
    6. У физического лица может быть несколько счетов, к которым должен предоставляться доступ.
    7. Счету физического лица с идентификатором subId должен соответствовать банковский счет с id вида passport:subId.
    8. Изменения, производимые со счетом в банке (создание и изменение баланса), должны быть видны всем соответствующим RemotePerson, и только тем LocalPerson, которые были созданы после этого изменения.
    9. Изменения в счетах, производимые через RemotePerson должны сразу применяться глобально, а призводимые через LocalPerson – только локально для этого конкретного LocalPerson.
  2. Напишите тесты, проверяющее вышеуказанное поведение.
  3. Реализуйте приложение, демонстрирующее работу с физическим лицами.
    1. Аргументы командной строки: имя, фамилия, номер паспорта физического лица, номер счета, изменение суммы счета.
    2. Если информация об указанном физическом лице отсутствует, то оно должно быть добавлено. В противном случае – должны быть проверены его данные.
    3. Если у физического лица отсутствует счет с указанным номером, то он создается с нулевым балансом.
    4. После обновления суммы счета, новый баланс должен выводиться на консоль.

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

Содержание

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

Слайды

HTML

Примеры

zip

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

Тем: 5

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

Примеры

zip

Слайды

HTML

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

Слайды

HTML

Примеры

zip

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

Слайды

HTML

Примеры

zip

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

Слайды

HTML

Примеры

zip

Домашнее задание 12. Статистика текста

Статистика текста
  1. Создайте приложение TextStatistics, анализирующее тексты на различных языках.
    1. Аргументы командной строки:
      TextStatistics <локаль текста> <локаль вывода> <файл с текстом> <файл отчета>
    2. Поддерживаемые локали текста: все локали, имеющиеся в системе.
    3. Поддерживаемые локали вывода: русская и английская,
    4. Файлы имеют кодировку UTF-8.
    5. Подсчет статистики должен вестись по следующим категориям:
      • предложения
      • строки
      • слова
      • числа
      • деньги
      • даты
    6. Для каждой категории должна собираться следующая статистика:
      • число вхождений
      • число различных значений
      • минимальное значение
      • максимальное значение
      • минимальная длина
      • максимальная длина
      • среднее значение/длина
    7. Отчет должен выводиться в формате HTML.
    8. Пример отчета:

      Анализируемый файл: input.txt

      Сводная статистика

      Число предложений: 38

      Число строк: 41

      Статистика по словам

      Число слов: 153 (95 уникальных)

      Минимальное слово: HTML

      Максимальное слово: языках

      Минимальная длина слова: 1 (и)

      Максимальная длина слова: 14 (Поддерживаемые)

      Средняя длина слова: 10

      Статистика по …

  2. При выполнении задания следует обратить внимание на:
    1. Декомпозицию сообщений для локализации
    2. Согласование предложений

Тема 19. JavaBeans

Слайды

HTML

Часть 5. XML

Тем: 5

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

Слайды

PDF

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

Слайды

PDF

Тема 22. Apache Ant

Слайды

PDF

Тема 23. XPath

Слайды

PDF

Тема 24. XSLT

Слайды

PDF