Java I

HSE-2017 группа

Тимофей Брыксин

Студент TODO №1 №3 Тест 1 №4 №5 Тест 2 Тест 3
23 ThreadPool Cannon MD5 FTP GUI Pair Parking
Бабушкин Арсений 2
Бажанов Аркадий 4
Буков Антон 2
Краснорядцева Анастасия 1
Кузьмин Сергей 2
Люборт Константин 1
Малышева Мария 1
Нефедов Андрей 1
Олемская Александра 2
Пальченкова Мария 1
Сурков Максим 1
Трилис Алексей 3
Федоркина Мария 1
Шершнев Иван 1

Задачи

Тест 3. 05.06.19
  1. Parking

    Есть автостоянка с ограниченным количеством мест, на стоянку могут заезжать машины и со стоянки могут уезжать машины. Надо реализовать класс, который бы сообщал машине при въезде, есть ли свободные места, и регистрировал уезжающие машины. На парковку есть несколько въездов, на каждом из которых планируется поставить такой автомат и сделать так, чтобы автоматы синхронизировались друг с другом. Реализация должна быть lock-free.

Тест 2. 29.05.19
  1. Pair

    Реализовать игру "Найди пару". При запуске отображается поле с кнопками размера N x N (N передаётся как параметр при запуске), кнопки без надписей. Каждой кнопке ставится в соответствие случайное число от 0 до N2 / 2. Игрок нажимает на две произвольные (разные) кнопки, на них показываются соответствующие им числа. Если числа совпали, кнопки делаются неактивными. Если числа не совпали, кнопки через некоторое время возвращаются в изначальное положение. Игра заканчивается, когда игрок открыл все пары чисел (программа должна генерировать числа таким образом, чтобы это было возможно).

Домашняя работа 5. 22.05.19
MyFTP
  1. FTP GUI

    Сделать GUI для FTP-клиента, позволяющий ходить по дереву файлов с сервера и скачивать файлы

    Дедлайн: 05.06.2019, 10:00

Домашняя работа 4. 15.05.19
Аннотации, процессоры аннотаций, Lombok (слайды)
  1. MyJUnit

    Реализовать command-line приложение, принимающее на вход имя класса и выполняющее запуск тестов, находящихся в этом классе.

    • Тестом считается метод, помеченный аннотацией Test. У аннотации может быть два аргумента -- expected для исключения, ignore -- для отмены запуска и указанияпричины.
    • Перед и после запуска каждого теста в классе должны запускаться методы, помеченные аннотациями Before и After.
    • Перед и после запуска тестов в классе должны запускаться методы, помеченные аннотациями BeforeClass и AfterClass.

    Приложение должно выводить в стандартный поток вывода отчет:

    • о результате и времени выполнения прошедших и упавших тестов;
    • о причине отключенных тестов.

    Дедлайн: 02.06.2019, 23:59

Тест 1. 15.05.19
  1. MD5

    Реализовать консольное приложение, вычисляющее check-сумму директории файловой системы по такому правилу:

    • f(file) = MD5(<содержимое>)
    • f(dir) = MD5(<имя папки> + f(file1) + ...)

    Требуется:

    • Однопоточный вариант
    • Вариант с Fork-Join
    • Сравнить время их работы в main-е

    Файлы могут быть большими и не помещаться в память целиком.

    Могут быть полезны классы MessageDigest и DigestInputStream.

Домашняя работа 3. 24.04.19
JavaFX (слайды)
  1. Cannon

    Реализовать с помощью библиотеки JavaFX игру "Пушка" (сильно упрощенный вариант старой игры Scorched Earch, https://en.wikipedia.org/wiki/Scorched_Earth_(video_game)). Помимо пушки на местности должны находиться горы (треугольники, возможно "захардкодить" какой-то "ландшафт", генерация его необязательна). Необходимый функционал:

    • имеется изображение пушки, клавишами вверх-вниз клавиатуры регулируется угол наклона орудия
    • по нажатию на Enter из пушки вылетает снаряд, который летит по параболе в соответствии с заданным углом наклона
    • при нажатии клавиш влево-вправо на клавиатуре пушка должна перемещаться влево-вправо с учетом местности ("залезать" на горы при необходимости)
    • реализовать возможность выбора нескольких типов снарядов разной массы и размера
    • траектория полета снарядов и область взрыва снаряда должна изменяться в зависимости от его типа
    • игра завершается, когда пушка попадает в цель небольшими снарядами, либо рядом с целью крупными снарядами

    Сопротивление воздуха, наклоны пушки при подъеме-спуске и прочую физику реализовывать необязательно.

    Дедлайн: 10:00 22.05.2019

Домашняя работа 2. 17.04.19
Guava (слайды)
Задача на многопоточность
Домашняя работа 1. 10.04.19
Штрафы
Многопоточность и Lazy
Результаты
  1. ThreadPool

    Реализовать простой пул задач с фиксированным числом потоков (число задается в конструкторе). При создании объекта данного класса в нем должно начать работу заданное количество потоков. У каждого потока есть два состояния: ожидание задачи и выполнение задачи. Задача — вычисление некоторого значения, вызов get() у объекта типа Supplier<R>. Если при добавлении задачи в пуле есть ожидающий поток, то он должен приступить к ее исполнению, иначе задача будет ожидать исполнения, пока не освободится какой-нибудь поток. В классе должен быть метод shutdown, завершающий работу потоков (через Thread.interrupt()). Задачи, принятые к исполнению, представлены в виде объектов интерфейса LightFuture с несколькими методами:

    • isReady() возвращает true, если задача выполнена.
    • get() возвращает результат выполнения задачи. Если результат еще не вычислен, метод ожидает его и возвращает полученное значение. Если соответствующий задаче supplier завершился с исключением, этот метод должен завершиться с исключением LightExecutionException.
    • thenApply() — принимает объект типа Function, который может быть применен к результату данной задачи X и возвращает новую задачу Y, принятую к исполнению. В качестве аргумента объекту Function будет передан результат исходной задачи, и все Y должны исполняться на общих основаниях (т.е. должны разделяться между потоками пула). Новая задача будет исполнена не ранее, чем завершится исходная. Метод thenApply() может быть вызван несколько раз, при этом не должен блокировать работу потока, если результат задачи X ещё не вычислен.

    В данной работе запрещено использование содержимого пакета java.util.concurrent. Все интерфейсные методы должны быть потокобезопасны. Для каждого базового сценария использования должен быть написан несложный тест. Также должен быть написан тест, проверяющий, что в пуле действительно не менее n потоков.

    Дедлайн: до 10:00 01.05.2019

© 2014-2019 HwProj