Главная / Программирование /
Углубленное программирование на Java / Тест 36
Углубленное программирование на Java - тест 36
Упражнение 1:
Номер 1
Что НЕ верно для Frontend?
Ответ:
 (1) объект, в котором jetty вызывает handle(...)
при открытии страниц сервера пользователем 
 (2) метод run()
этого объекта запущен в отдельном потоке 
 (3) хранит данные пользовательских сессий 
 (4) может произвести аутентификацию пользователя и найти его id по имени 
Номер 2
Контейнер, который копирует объекты при вставке:
Ответ:
 (1) ConcurentHashMap
 
 (2) ConcurentSkipListMap
 
 (3) ConcurentSkipListSet
 
 (4) CopyOnWriteArrayList
 
Номер 3
Контейнер с потокобезопасной работой с парами ключ-значение:
Ответ:
 (1) ConcurentHashMap
 
 (2) ConcurentSkipListMap
 
 (3) ConcurentSkipListSet
 
 (4) CopyOnWriteArrayList
 
Упражнение 2:
Номер 1
Контейнер, построенный с использованием списка:
Ответ:
 (1) ConcurentHashMap
 
 (2) ConcurentSkipListMap
 
 (3) ConcurentSkipListSet
 
 (4) CopyOnWriteArrayList
 
Номер 2
ConcurrentHashMap – это карта, в которой все методы synchronized?
Ответ:
 (1) да  
 (2) нет 
Номер 3
Нужно ли при отправке ответного сообщения обращаться к AddressService?
Ответ:
 (1) да  
 (2) нет, обратный адрес есть в самом сообщении в поле from 
Упражнение 3:
Номер 1
Нужно ли помечать thread-local
объекты словом volatile
?
Ответ:
 (1) да  
 (2) нет 
Номер 2
Класс Msg
:
Ответ:
 (1) абстрактный класс - предок всех сообщений 
 (2) интерфейс, который должны реализовывать все сообщения  
 (3) инстанцируемый класс, содержащий данные сообщения 
Номер 3
Проверка на abonent instanceof
в наследниках класса Msg
нужна:
Ответ:
 (1) для того, чтобы убедиться, что сообщение пришло адресату нужного типа 
 (2) для проверки правильности адреса 
 (3) для формирования ответного сообщения 
 (4) для вызова метода exec с параметром нужного типа 
Упражнение 4:
Номер 1
Нужно ли опередить private Map<Address, ConcurrentLinkedQueue<Msg>> messages
через ConcurrentHashMap
?
Ответ:
 (1) да, потому что нам нужен доступ к этому объекту из нескольких потоков 
 (2) нет, потому что мы не добавляем в процессе работы сервера новые абоненты в карту, а чтение безопасно из нескольких потоков 
Номер 2
Временная диаграмма это:
Ответ:
 (1) диаграмма с описанием взаимодействия потоков или процессов во времени 
 (2) диаграмма временных зависимостей классов в иерархии наследования 
 (3) диаграмма временных зависимостей модулей приложения 
Номер 3
Объект UserSession
при повторном логине пользователя из другого браузера:
Ответ:
 (1) новый 
 (2) тот же что и при первом логине 
 (3) объекты будут разные, но userSessionId в них будет одинаковым 
Упражнение 5:
Номер 1
Что НЕ верно для AccountService?
Ответ:
 (1) объект, в котором jetty
вызывает handle(...)
при открытии страниц сервера пользователем 
 (2) метод run()
этого объекта запущен в отдельном потоке 
 (3) хранит id
пользовательских сессий 
 (4) может произвести аутентификацию пользователя и найти его id по имени 
Номер 2
В плюсы многопоточного решения для аутентификации пользователя НЕ входит:
Ответ:
 (1) масштабирование (возможность создать несколько AccountService) 
 (2) малое время ожидание ответа пользователем 
 (3) синхронное взаимодействие Frontend и AccountService 
 (4) эффективное использование потоков библиотеки jetty 
 (5) возможность независимой коллективной разработки 
Номер 3
Какие варианты решения проблемы взаимодействия потоков могут быть расширены на взаимодействие процессов (запущенных на разных компьютерах)?
Ответ:
 (1) держать в каждом потоке ссылки на все остальные потоки  
 (2) менять состояние общего для потоков объекта  
 (3) передавать сообщения через общий ресурс  
 (4) передавать сообщения через систему обмена сообщениями 
Упражнение 6:
Номер 1
ConcurrentLinkedQueue
:
Ответ:
 (1) потокобезопасный контейнер пар ключ-значение 
 (2) потокобезопасная очередь 
 (3) контейнер, который копирует объекты при вставке 
Номер 2
Выполнение инструкций сообщения происходит:
Ответ:
 (1) в потоке отправителя 
 (2) в потоке получателя 
 (3) в дополнительном потоке  
Упражнение 7:
Номер 1
Класс Address
при реализации системы сообщения нужен:
Ответ:
 (1) для того, чтобы идентифицировать получателя и отправителя сообщения 
 (2) для того, чтобы создать карту, в которой ключ это адрес, а значение - очередь C сообщений для получателя с этим адресом 
 (3) для того, чтобы передавать адрес пользователя в браузер 
 (4) для того, чтобы хранить адрес пользователя в AccountService  
Номер 2
Нужно ли использовать при объявлении private Map<Address, ConcurrentLinkedQueue<Msg>> messages
в классе MessageSsytem
ключевое слово volatile
?
Ответ:
 (1) да, потому что нам нужен доступ к этому объекту из нескольких потоков 
 (2) нет, потому что заполнение карты происходит до старта потоков в методе main()