Домашки для курса https://otus.ru/lessons/java-professional/
Научиться писать многомодульные build-скрипты с зависимостями на Gradle
./gradlew hw01:build
java -jar ./hw01/build/libs/fatOtus-0.1.jar hello brave new world
Подобрать нужную коллекцию, исправить ошибки в классе Customer. Добиться прохождения всех тестов
./gradlew hw02:test
Написать свой тестовый фреймворк с поддержкой аннотаций @Test, @Before, @After.
import bjunit.BJUnit;
var testEngine = new BJUnit(SomeTest.class);
testEngine.execute();Проанализировать работу разных сборщиков мусора.
Я взял G1, ZGC, ParallelGC. Выводы >> CONSLUSIONS.md
Попробовать аспектно-ориентированное программирование: создать аннотацию @Log для методов, при вызове которых в консоль будут выводиться название метода и его параметры
@Log
void execute(int a, String b) { ... } >> "Called method `execute` with [$a, $b]"Цель: Применить на практике принципы SOLID.
Написать эмулятор АТМ (банкомата). Объект класса АТМ должен уметь:
- принимать банкноты разных номиналов
- выдавать запрошенную сумму минимальным количеством банкнот или ошибку если сумму нельзя выдать
- выдавать сумму остатка денежных средств
Цель: Применить на практике шаблоны проектирования.
Builder, Memento и проч.
Цель: научиться обрабатывать json, научиться работать с файлами
Некая система:
1. принимает входящий json файл;
2. обрабатывает данные из файла;
3. формирует ответный файл.
Самодельный ORM с помощью JDBC. Маппинг класса на таблицу по именам полей и @Id.
На практике освоить основы Hibernate. Понять как аннотации влияют на формирование sql-запросов. Работа должна использовать базу данных в docker-контейнере.
Разметить классы таким образом, чтобы при сохранении/чтении объека каскадно сохранялись/читались вложенные объекты.
ВАЖНО: Hibernate должен создать только три таблицы, при сохранении нового объекта не должно быть update-ов. Посмотреть в логи и проверить, что эти два требования выполняются.
Научиться использовать WeakMap как кэш, познакомиться с WeakReference.
Добавить кэширование в свой ORM.
На примере Jetty:
- Научиться создавать серверный и пользовательский http-интерфейсы.
- Научиться встраивать web-сервер в приложение.
Реализовать свой IoC-контейнер