1. Абстрактные типы данных в Java

Вариант №1: Реализовать класс Money с поддержкой валют и арифметических операции: add, subtract, multiply, divide
В классе Money реализовать метод для деления суммы (премии) на N равных частей (сотрудников) без остатка (остаток добавить к одной из частей)


Вариант №2: Реализовать класс Quantity с поддержкой единиц измерения и арифметических операций: add, subtract, multiply, divide

В классе Quantity реализовать метод для деления суммы (товара) на N равных частей (ящиков) без остатка (остаток добавить к одной из частей)


Требования к классу абстрактного типа данных

  1. Класс должен инкапсулировать (скрывать) свое состояние в приватных полях
  2. Класс должен быть неизменяемый (Immutable)
  3. Класс должен переопределять toString()
  4. Все методы должны проверять входные параметры и бросать Runtime-исключение в случае некорректных значений

Дополнительные требования:

  1. Методы класса протестировать с помошью Unit-теста
  2. Реализовать операции сложения/вычитания с различными валютами/единицам измерения, используя конвертацию валют/единиц измерения.

2. Работа с Java-коллекциями

Реализовать заданный интерфейс с помощью Java Collections и протестировать с помощью Unit-тестов.

Варианты заданий

3. Stream API для Java-коллекций

Для задания №2 подготовить входной файл с данными (в зависимости от предметной области - с книгами, товарами, контактами итп) в текстовом формате CSV.

При помощи Java Stream API прочитать файл, очистить и провалидировать данные, корректными данными заполнить класс (библиотеку, корзину, социальную сеть, итп)

Программа должна корректно обрабатывать неверный формат чисел, строк, дат (если есть), пропущенные колонки, пустые значения, наличие лишних колонок.

Протестировать загрузку с помощью Unit-теста

4. Многопоточность в Java

Разработчик веб-сайта хочет собирать статистику по посещаемости страниц сайта.

Есть Map<String, Integer> в который записывается кол-во посещений страниц сайта, где ключ - адрес страницы, значение - количество посещений.

Создать 50 потоков , имитирующих клиентские соединения от 5 страниц по 10 параллельных запросов, в которых увеличивать счетчик своей страницы. Оценить корректность работы и производительность.

Увеличить конкурентность (кол-во потоков и запросов), проверить что программа работает корректно (по сумме посещений).

5. Проектирование схемы реляционной базы данных

В базе данных веб-сайта StackOverflow хранятся вопросы и ответы на них.

Каждому вопросу может соответствовать ноль или более ответов, но только один ответ может быть отмечен как верный

  1. В Oracle Data Modeler (или другом case-средстве) опишите нормализованную структуру таблиц реляционной базы данных, указав первичные и внешние ключи, атрибуты и их типы данных
  2. Сгенерируйте SQL DDL скрипт для создания схемы в Oracle.
  3. Заполните 1-2 строками каждую таблицу.

6. Практика по SQL

  • Нет меток