Решение задачи: либо полное переопределение класса System (вместе с out и т д.), либо делается static блок инициализации, где на консоли печатается другое и выполняется System exit()


Скачать 338.52 Kb.
НазваниеРешение задачи: либо полное переопределение класса System (вместе с out и т д.), либо делается static блок инициализации, где на консоли печатается другое и выполняется System exit()
страница3/8
ТипРешение
filling-form.ru > Туризм > Решение
1   2   3   4   5   6   7   8

1.10Практическая задача base-6: «Блокнот»


Написать текстовый редактор (аналог Notepad в Windows) на базе Swing со следующими элементами: окно, меню (File, Edit, Help), текстовая область с содержимым (неформатированного) текстового файла.

1. Действия меню File: загрузка/сохранение файла; действия меню Edit: select all, delete, cut/copy/paste; единственный пункт меню Help (About...) должен показывать информацию о программе. (7 баллов при условии качественного кода)

2. "Ручная" поддержка режима "Word wrap" ("перенос по словам") при загрузке файл и при изменении размеров окна: то есть, разбиение текста на несколько строк, так чтобы их длина не превосходила ширину окна, а слова не разрезались на части. Можно, но необязательно, сделать опцию (JCheckBox) в меню Format, включающую и отключающую режим переноса по словам. (до 4 баллов)

3. Использование системного буфера обмена для операций cut/copy/paste (до 4 балов)

Итого за задачу: до 15 баллов.

1.11Практическая задача intensive-6: «Очередь в столовую»


Есть 1000 студентов с разных факультетов. Они по звонку собираются в столовую, где занимают очередь. Считается, что это происходит довольно быстро, и очередь не успевает двигаться. Если очередь пустая, то студент становится в очередь первым, если в очереди уже кто-то стоит, то студент ищет сначала первого студента со своего факультета и пристраивается к нему как к знакомому. У любого студента есть случайный параметр «совесть», которая определяет число студентов, которых он может пропустить вместе с собой (поставив их впереди себя). Если пристроиться к текущему студенту с факультета не позволяет совесть, то ищется следующий, и т.д. Если подходящих вариантов не нашлось, то студент становится в самый конец.

1. Моделирование вышеописанного процесса на Java

1.1. генерация "случайного" студента (имя, фамилия, пол, факультет, совесть) и подача студентов «на вход» столовой (2 балла)

1.2. моделирование очереди, т.е. создание структуры данных отвечающую очереди и заполнение ее по вышеописанным правилам; один из 2х альтернативных вариантов:

* используя массив (2 балла)

* используя List (2 балла)

1.3. реализация варианта с несколькими дверями, т.е. когда студенты приходят двумя и более независимыми потоками; все операции должны быть thread safe (3 балла)

1.4. выделение класса, ответственного за «правила» приема студента в очередь и учитывающего характеристики «принимающего» и «принимаемого» студентов (и, возможно, «допускающего» студента, то есть того, кто стоит сзади принимающего и может сказать «вы что, обнаглели совсем?»); а также реализация любого из таких правил. Например, такими правилами могут быть "альтернативный способ влияния совести", "учет пола студента", "учет вероятности того, что студенты с одного факультета могут быть не знакомы" или " учет того, что студент, который стоит сзади принимающего, не пустит принимаемого студента в очередь (на вероятность этого может также влиять совесть принимаемого)". (2 балла)

1.5. (при условии реализации предыдущего требования) комбинирование различных правил приема студента в очередь (например, с помощью перемножения «вероятности приема», получаемого по разным правилам, и сравнения итоговой вероятности с пороговой); желательно реализовать с применением шаблона Chain of Responsibility и проверить на комбинации из более чем двух правил (2 балла)

2. Вывод результата – чисел студентов в каждой группе, образованной студентами одного факультета.

2.1. вывод в текстовом режиме (1 балл)

2.2. вывод в графике: гистограмма (факультеты – разные цвета; подпись имен)

* статическое распределение – после того как все встали в очередь (3 балла)

* показ процесса в динамике – т.е. должно быть видно, как растет очередь в процессе прихода студентов (3+5 баллов)

Итого за задачу: 20 баллов.

2Дополнительные задачи к курсу «Язык программирования Java»


Приведенные ниже вопросы и короткие задачи выдаются не всем студентам, а персонально: кураторы выдают их тем студентам, которые досрочно справляются с практическими задачами и лабораторными работами, а также глубоко интересуются вопросами устройства JVM и оптимизации программного года.

1. Сможет ли эта программа корректно завершиться?

public class Main {

public static void main(String[] args){

A a = new A();

B b = new B();

a.b = b;

b.a = a;

}

}

class A{

B b;

public void doSomeTask(){}

public void finalize() {

b.doSomeTask();

}

}

class B {

A a;

public void doSomeTask(){}

public void finalize() {

a.doSomeTask();

}

}

Подсказка:

Возможные варианты: а) Garbage Collector должен уничтожить сначала либо объект a, либо b. Пусть он выбрал a, тогда в объекте b обнулится поле a и в b.finalize() вылетит NullPointerException. б) GC обнаруживает два связанных (взаимно ссылающихся друг на друга) объекта, на которые нет ссылок извне. В некотором (недетерминированном) порядке он вызовет их методы finalize(), и только затем физически очистит память; в) GC вообще не сможет уничтожить эту пару объектов, но тогда здесь возникает memory leak – утечка памяти.

Ответ: б

Замечание: Летучим голландцем в java называется набор объектов, где каждый ссылается на другие объекты этого набора, причем набор сильно связан, т.е. из каждого объекта набора можно по ссылкам добраться до любого другого объекта этого набора.

2. Может ли в одной JVM создаться несколько экземпляров такого класса?

public final class Singleton {

private static Singleton instance = null;

public static Singleton getInstance() {

synchronized(Singleton.getClass()){

if(instance != null)

return instance;

return instance = new Singleton();

}

}

private Singleton() {

}

public String usefulFunction(){

return "";

}

}

Ответ: Да, может. Нужно создать хитрую систему ClassLoader’ов. Например, можно у системного ClassLoader'а создать два дочерних ClassLoader 'а, которые могут загружать файлы из jar-файла или с диска. С помощью каждого из них можно загрузить класс Singleton, загрузятся две копии класса. Имена обоих загруженных классов будут совпадать, тем не менее это будут два отдельных и различных класса в java-машине, поэтому можно будет создать две копии синглтона. Хотя на практике такие проблемы встречаются крайне редко, все же полезно иметь представление об организации ClassLoader'ов в java.

3. Что выведет данная программа?

public class Main{

public static void main(String[] args){

new B().print();

}

}

class A{

void print(){

System.out.println(getClass());

}

}

class B extends A{

}

4 а) Что вернет метод?

boolean getResult(){

try {

return true;

}

finally {

return false;

}

}

4 б) Что выведется на экран?

try {

System.out.println(“Hello, “);

System.exit(0);

}

finally {

System.out.println(“world!”);

}

Ответ: а) false; б) “Hello, ”

5. Возникнет ли ошибка, и если да, то когда?

а) String obj = (String) (Object) ((String) ((Object) new String()).toString()).toString()

б) Class class = String.getClass();

Ответ: а) нет; б) да: class нельзя использовать в качестве имени переменной; надо также писать String.class вместо String.getClass().

6. Что следует сделать, чтобы следующий код компилировался без ошибок?

public pause(int sec) {

int start = System.currentTime();

while (System.currentTime() - start < sec * 1000) {

this.wait();

}

}

Ответ: а) вставить void; б) заменить на currentTimeMillis(); в) привести к типу int или заменить int на long; г) поймать InterruptedException или определить его в заголовке метода.

7. Чего не хватает здесь?

public final class SomeClass implements Serializable {

public String someField;

}

8. Написать метод sort(List, boolean), который сортирует List, учитывая параметр (вверх или вниз) и используя Comparator.

9. Сравнить время формирования длинной строки (size порядка 104–105) из отдельных символов с помощью String и StringBuffer. Объяснить результаты.

10. Есть сериализованный объект класса, о котором известно только имя. Нужно с помощью reflection вывести полную информацию об объекте, т.е. все поля, в том числе и private. Указать механизм, который запретит получать информацию о private полях.

Ответ (о том, как запретить): либо запуск с policy, либо или System. setSecurityManager(new CheckPermitionSecurityManager());

10. Есть сериализованный объект класса, о котором известно только имя. Нужно с помощью reflection вывести полную информацию об объекте, т.е. все поля, в том числе и private. Указать механизм, который запретит получать информацию о private полях.

11. Нужен интерфейс TimedTask с единственным методом run() и класс Timer, который будет заниматься вызовом этого метода в заданный момент времени. У таймера должны быть такие методы:

1. добавить новый TimedTask

2. изменить назначенное время для какого-то TimedTask'a

3. удалить (если этот TimedTask еще не успел выполниться)

4. проверить выполнялся ли этот TimedTask

Разумеется, все MultiThread и Thread-safe. Циклы вида while(!good){Thread.sleep(100);} использовать запрещено – все должно быть реализоввано на synchronized блоках, мониторах (Object.wait(), Object.notify(), Object.notifyAll()) и Thread.sleep()/Thread.interrupt().

Архитектура: должен быть один поток, ждущий времени ближайшего TimedTask'а в вызове Thread.sleep(); для выполнения TimedTask'а этот поток должен создать новый поток, в котором будет выполнен TimedTask. Ключевое отличие от стандартного java.util.Timer состоит в пункте 2.

12. Хитрая синхронизация для HashMap. Стандартный HashMap синхронизации не имеет, но есть Hashtable, который по сути от HashMap отличается только тем, что все его методы synchronized. Таким образом, никакие два потока не могут одновременно даже читать из него. За основу своего класса надо взять HashMap. Всех, кто к нему обращается, делим на 2 класса: readers и writers. Ридерам можно заходить в HashMap в любом количестве одновременно при условии отсутствия врайтеров. А writer может быть в HashMapе тогда и только тогда, когда там больше никого нет.

Приложение: сравнить по производительности HashMap с приведенной идеей синхронизации и HashTable, который реализован с помощью обычных synchronized-секций.

13. Thread pool. Имеется N рабочих потоков (Thread) и класс ThreadPoolManager, который распределяет задачи между ними. Задача (Job) – это интерфейс с одним методом public void doJob(). Необходимо реализовать следующую функциональность (можно не всю):

1. При создании тредпула указывается количество потоков в нем.

2. При поступлении задачи, менеджер выбирает один из свободных потоков и передает ему на выполнение эту задачу. Если свободных потоков нет, то задача ждет в очереди.

3. При работе тредпула можно изменить (увеличить или уменьшить) количество рабочих потоков.

4. HealthMonitor: если время выполнения какой-либо задачи превысило таймаут, то поток считается зависшим (hung). Менеджер пула должен иметь метод, возвращающий зависшие потоки. При этом если задача завершилась, поток более не считается зависшим.

5. Если какая-то задача ждет в очереди дольше заданного порога времени, то в пул может добавиться новый поток, если количество потоков не превзошло максимума.

6. Величины таймаута (п.4), порога времени (п.5) и максимума рабочих потоков (п.5) должны быть конфигурируемы.

14. Есть n клиентских и один серверный поток. У серверного потока есть одна операция (например, int sum(int x, int y)). Клиентские потоки хотят воспользоваться этой операцией. Операция обязательно должна производиться в серверном потоке. Серверный поток, ожидающий поступления операции, не должен попусту расходовать процессорное время (т.е. не должно быть цикла вида while(!taskAvailable)Thread.sleep(100); ). Клиентский поток, ожидающий результата операции от серверного потока, также не должен расходовать процессорное время.
1   2   3   4   5   6   7   8

Похожие:

Решение задачи: либо полное переопределение класса System (вместе с out и т д.), либо делается static блок инициализации, где на консоли печатается другое и выполняется System exit() iconТиповая форма договора банковского вклада с неснижаемым остатком в рублях «Премиальный»
Года), с одной стороны, и "Вкладчик" (либо "Вноситель" в случае внесения вклада на имя третьего лица), с другой стороны, вместе либо...

Решение задачи: либо полное переопределение класса System (вместе с out и т д.), либо делается static блок инициализации, где на консоли печатается другое и выполняется System exit() iconКонтрольная работа по термодинамике выполняется либо в отдельной...
Изучение дисциплины базируется на знании материала дисциплин: «Физика», «Химия», «Математика», «Гидравлика», «Инженерная графика»,...

Решение задачи: либо полное переопределение класса System (вместе с out и т д.), либо делается static блок инициализации, где на консоли печатается другое и выполняется System exit() iconR/3 System Release 46B 30. 10. 2000
Разработка с использованием abap-инструментальных средств (упражнения) 28

Решение задачи: либо полное переопределение класса System (вместе с out и т д.), либо делается static блок инициализации, где на консоли печатается другое и выполняется System exit() iconPhone Conversation”
В его основе лежит решение какой-либо задачи, проблемы (от греческого problema- «задача, задание»)

Решение задачи: либо полное переопределение класса System (вместе с out и т д.), либо делается static блок инициализации, где на консоли печатается другое и выполняется System exit() icon1 общая характеристика гостиничного бизнеса 6
Характеристики компьютерных программ бронирования (на примере Fidelio Hotel Management System) 52

Решение задачи: либо полное переопределение класса System (вместе с out и т д.), либо делается static блок инициализации, где на консоли печатается другое и выполняется System exit() iconПро gps
«Global Positioning System», которое дословно можно перевести, как «глобальная система позиционирования»

Решение задачи: либо полное переопределение класса System (вместе с out и т д.), либо делается static блок инициализации, где на консоли печатается другое и выполняется System exit() iconDiasoft System Architect
Перед началом работы с системой описания бизнес-объектов необходимо проверить у себя на машине

Решение задачи: либо полное переопределение класса System (вместе с out и т д.), либо делается static блок инициализации, где на консоли печатается другое и выполняется System exit() iconРешение задач (с показом алгоритма решения)
Эссе — (фр essai – попытка, проба), небольшое прозаическое сочинение свободной композиции, выражающее впечатления автора от чего...

Решение задачи: либо полное переопределение класса System (вместе с out и т д.), либо делается static блок инициализации, где на консоли печатается другое и выполняется System exit() iconРекомендации ООН st/SG/AC. 10/30 «Globally Harmonized System of Classification...
Оон st/SG/AC. 10/30 «Globally Harmonized System of Classification and Labelling of Chemicals (Согласованная на глобальном уровне...

Решение задачи: либо полное переопределение класса System (вместе с out и т д.), либо делается static блок инициализации, где на консоли печатается другое и выполняется System exit() iconДокументация об открытом запросе предложений
Работы по техническому обслуживанию программного комплекса интегрированной диспетчерской службы на базе модуля pi-system

Вы можете разместить ссылку на наш сайт:


Все бланки и формы на filling-form.ru




При копировании материала укажите ссылку © 2019
контакты
filling-form.ru

Поиск