- Решение вводных задач на Java
- Разработка элементарных приложений на языке Java
- Разработка многопоточных приложений на языке Java
- Разработка многопоточных приложений на языке Java. Синхронизация потоков
Решение вводных задач на Java из раздела Introduction:
- Welcome To Java
- Java Stdin and Stdout I
- Java If-Else
- Java Stdin and Stdout II
- Java Output Formatting
- Java Loops I
- Java Loops II
- Java Datatypes
- Java End-of-file
- Java Static Initializer Block
- Java Int to String
- Java Date and Time
- Java Currency Formatter
Разработать класс, решающий квадратные уравнения. Коэффициенты квадратного трехчлена или передаются в качестве параметров класса, в противном случае вводятся из консоли. Коэффициенты могут быть любыми действительными числами.
Требования к решению:
- В решении должен присутствовать класс "Квадратное уравнение"
- В этом классе должны присутствовать два конструктора: первый с тремя параметрами, а второй с одним параметром - сканнером. В первом случае передаются коэффициенты уравнения и сохраняются в классе. Во втором случае коэффициенты нужно читать из полученного сканера. Допустимо во второй конструктор передавать сканер, из которого будут читаться коэффициенты.
- Решение должно корректно обрабатывать случаи равенства нулю некоторых из коэффициентов уравнения, в частности a=0
Разработать многопоточное приложение, позволяющее в интервале 100000000 — 400000000 найти все числа, которые одновременно делятся на 11, 13, 17. Выяснить различие во времени выполнения программы для случая одного потока и трех потоков.
Дополнительное задание: Предусмотрите возможность указать количество создаваемых потоков при запуске приложения
Разработать приложение, решающее задачу о синхронизации производитель-потребитель. Дано два потока, один из потоков должен передать другому последовательность целых чисел длины n, например, квадратов натуральных чисел. Другой поток должен принять и распечатать эту последовательность.
Решить задачу двумя способами:
- С использованием класса BlockingQueue
- С использованием общих переменных и методов wait/notify
Реализовать задание "Разработка многопоточных приложений на языке Java" в клиент-серверном варианте, т.е. сервер запускается и ожидает подключения клиента(тов), клиент, подключившись к серверу, получает от него порядковый номер и интервал длинною в 1000000 и возвращает серверу найденные числа. Предусмотреть вывод консольных сообщений на стороне сервера.
Этапы выполнения задания:
-
Сервер ожидает подключения трёх клиентов. После подключения всех клиентов, каждому из них выдаётся порядковый номер и интервал. В консоль выводится, какой интервал каждому из них был выдан. После этого сервер ожидает от клиента результата и выводит найденные числа в консоль. Клиенты отключаются после отправки результата решенной задачи. (80 баллов)
-
Сервер ожидает подключения трёх клиентов, но данные для обработки отправляются сразу же после подключения, а результат получается по мере готовности. Для этого необходимо создать на сервере для каждого подключенного клиента отдельный поток, который бы занимался передачей и приемом сообщений. Клиенты отключаются после отправки результата решенной задачи. (90 баллов)
-
Сервер ожидает подключения неограниченного количества клиентов. Клиенты не прекращают работу после решения одной задачи, а ожидают от сервера дополнительных задач. Необходимо предусмотреть возможность добавления задач на сервере через консоль в формате L R Step (найти количество чисел в отрезке [L,R], которые делятся на 11, 13 и 17, разделив этот отрезок на куски длиной Step. Последний кусок может иметь меньшую длину).
Оформить клиентскую часть задания "Разработка клиент-серверных приложений на языке Java" в виде интерфейса пользователя. Требуется, чтобы в приложении можно было указать IP-адрес сервера и порт, по которому к нему подключаться. Подключение производится при нажатии на кнопку "Подключиться". Если соединение не было установлено, выводите сообщение об ошибке.
Задание оценивается в 85 баллов.
Дополнительные задания (каждое по +5 баллов):
-
Отображайте в окне текущее состояние клиента (отключен/подключен/выполняет задачу).
-
Сделайте так, чтобы клиент выполнял несколько задач при нажатии "Подключиться". Для этого он или должен не отключаться от сервера после выполнения одной задачи, или в случае, если сервер не поддерживает выдачу нескольких задач, осуществляет повторное подключение, пока это возможно. Графический интерфейс при этом не должен "зависать".
-
Добавьте отображение в окне всех запросов, которые решил клиент.
Разработать сервлет, позволяющий получать от пользователя задачи, раздавать клиентам-рабочим задания, собирать его и отправлять полученный результат пользователю.
Этапы выполнения задания:
-
Приложение должно включать в себя java сервлет и jsp страницу. На странице находится форма, в которой можно задать диапазон для поиска чисел, которые делятся на 11, 13 и 17. Результат работы формы отправляется на ту же страницу. Сервлет или просто перенаправляет вывод на jsp страницу, если запроса не было, или выводит все найденные числа под формой. (60 баллов)
-
Сервлет отправляет поступающие к нему запросы приложению Сервер из задания "Клиент-серверные приложения". Результаты работы сервера выводятся на страницу по мере готовности. (Примечание: Сервер можно добавить в состав проекта с сервлетом, а можно подключаться к нему по сети) (70 баллов) .
-
Дополните ваше приложение, выполнив следующие задачи:
-
Подключать в JSP страницах заголовок из отдельного файла (+5 баллов)
-
Добавить отдельную JSP страницу для вывода ответов на запросы (+5 баллов)
-
Добавить страницу, на которой можно посмотреть информацию о всех подключенных к серверу клиентах-рабочих с возможностью их отключения (+5 баллов)
-
Добавить работу с сессиями (запоминать предыдущий запрос в сессии пользователя, чтобы при следующих обращениях к странице подставлялся именно он / показывать только те запросы, которые сделал сам пользователь) (+5 баллов)
Дополнительное задание. Вместо вывода чисел, делящихся на 11, 13 и 17, выбрать и реализовать другую задачу, которой можно ускорить с использованием большого количества потоков. Примеры задач:Построение фрактальных изображений (Множество Мандельброта, множество Жюлиа; клиент рисует часть изображения, в одно общее изображение их собирает сервер) Произведение матриц A*B размеров (Пользователь загружает две матрицы, каждому клиенту отправляется матрица B полностью, а A делится на полосы из строк и отсылается тем, кто будет умножать их на B, результаты умножения собираются в строки на сервере) Классификация точек (метод 1 или k ближайших соседей; на сервер можно отправлять или обучающую выборку, или множество запросов, которые необходимо классифицировать; каждый клиент хранит у себя все обучающие экземпляры и отвечает на часть запросов) и т.д.