Самостоятельная работа 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 это можно сделать при помощи:
- использования делегатов
- реализации библиотечного интерфейса и передачи объекта реализации в библиотеку
- ссылки на функцию