11 Разработка игрового веб-сервера на Java. Самостоятельная работа и тест

Самостоятельная работа 5: Постановка задачи

Написать виртуальную файловую систему (VFS) со следующим интерфейсом:

public interface VFS {
boolean isExist(String path);
boolean isDirectory(String path);
String getAbsolutePath(String file);
byte[] getBytes(String file);
String getUFT8Text(String file);
Iterator<String> getIterator(String startDir);
VFS НЕ должна загружать файлы в память при старте сервера. Задача этой системы скрывать детали работы с файлами. При желании можно написать mock реализацию in-memory VFS для тестов.

Тест

Что является признаком паттерна Singleton?
  • статический метод geInstance(), который возвращает instance класса
  • приватный конструктор
  • статический метод setInstance(Singleton instance), который присваивает полю instance новое значение
  • содержит приватное статическое поле типа своего же класса

"9" это случайное число?
  • при работе со случайностью никогда нельзя быть уверенным наверняка
  • нет
  • да

При использовании одного и того же зерна для псевдослучайного генератора Random в разное время последовательность полученных чисел будет:
  • одинаковой
  • разной

FileIterator в приведенном на занятии примере обходит дерево файловой системы:
  • в глубину
  • в ширину

Чем Singleton отличается от public статического поля?
  • может быть создан только один объект типа Singleton
  • Singleton доступен из любого места в коде
  • получение объекта по ссылке на статическое поле происходит быстрее
  • Singleton имеет "ленивую" инициализацию

Паттерн Callback служит для:
  • массовых рассылок оповещений всем кто подписан на оповещения;
  • вызова метода пользовательского кода из библиотечного кода

Генератор псевдослучайных чисел это:
  • прибор, который на основе измерения случайных величин создает случайную последовательность
  • алгоритм, который создает последовательность чисел с заданным распределением
  • программа, которая создает случайные последовательности на основе значения определенного адреса кэша процессора

POSIX time это:
  • количество миллисекунд которое прошло с 1.01.1960
  • количество секунд которое прошло с 1.01.1900
  • количество миллисекунд которое прошло с 1.01.1970
  • количество секунд которое прошло с 1.01.0000
  • количество минут которое прошло с момента взятия Бастилии
  • количество секунд которое прошло с 1.01.1970

У нас есть абстрактный класс А. Конструктор класса D, который реализует паттерн Декоратор для класса А:
  • конструктор с параметром типа D
  • конструктор с параметром типа А
  • конструктор без параметров

Если создать File file = new File("./test.bin") для не существующего файла "./test.bin" в runtime приложение:
  • создаст объект, который будет представлять несуществующий файл
  • создаст файл по указанному пути
  • в месте вызова конструктора выкинет исключение

Для обращения к внешним для JVN устройствам (файлы, принтеры, сеть...) в Java используют:
  • присоединение к порту устройства
  • объект драйвера устройства
  • объект потока к устройству

Что плохого в использовании исключений для возврата результата из метода?
  • потеря производительности
  • плохо читаемый код

Что позволяет делать паттерн Context?
  • хранить несколько объектов по одному интерфейсу
  • проверять, что служба в единственном экземпляре, даже если служба не singleton
  • создавать только те объекты, которые нужны процессу
  • не создавать функцию с большим количеством параметров

Паттерн Event (Observer) служит для:
  • массовых рассылок оповещений всем, кто подписан на оповещения
  • вызова метода пользовательского кода из библиотечного кода

Каждый класс потока для чтения данных из конкретного устройства унаследован от InputStream. Какой метод обязательно должен определить этот класс:
  • void close()
  • void reset()
  • int read()
  • void mark(int readlimit)
  • int read(byte[] b)

В основании иерархии наследования классов стандартной библиотеки java.io лежат четыре класса:
  • OutputWriter
  • FilterOutputStream
  • FilterStream
  • OutputReader
  • Reader
  • InputStream
  • FilterInputStream
  • Writer
  • FilterReader
  • OutputStream

Паттерн Context основан на использовании следующего контейнера:
  • List
  • Queue
  • Set
  • Map

Код источника события (EventSource) зависит от кода реализации класса-подписчика на события:
  • нет
  • да

Если date = new Date(), спросить date.getTime() и запомнить результат, а потом через 2 секунды еще раз спросить date.getTime() результаты измерений будут:
  • совпадать
  • отличаться строго на 2 секунды
  • отличаться примерно на 2 секунды

Если функция public int getId(String name){...} не нашла коннект к базе, она должна вернуть:
  • исключение
  • 0
  • null

Все функции в Java, в которых происходит создание или проброс исключения, должны перечислять эти исключения при определении функции:
  • да, надо перечислять все
  • нет, надо перечислять только те исключения, которые унаследованы от Throwable;
  • нет, надо перечислять только те исключения, которые унаследованы от Exception;
  • нет, надо перечислять только те исключения, которые унаследованы от Exception, но не от RuntineException;

Анонимные классы это:
  • классы, объявленные в других классах
  • классы, декларированные внутри методов и наследующие существующий класс или реализующие интерфейс
  • классы с одинаковым названием, но расположенные в разных пакетах

java.unil.Timer выполнит команды метода run() объекта класс java.unil.TimerTask:
  • в том же потоке, в каком был запущен timer.start()
  • в собственном потоке таймера

Чтобы закрыть все потоки, созданные для чтения данных из файла, нужно в списке декорирующих потоков вызвать close() у:
  • все равно какого потока
  • первого потока
  • последнего потока

Вам нужно передать в библиотеку свой метод (чтобы при наступлении некоторого события, библиотека могла его вызвать) в Java это можно сделать при помощи:
  • использования делегатов
  • реализации библиотечного интерфейса и передачи объекта реализации в библиотеку
  • ссылки на функцию