ДЗ-01
Сборка и запуск проекта Создать проект под управлением maven, настроить сборку проекта из командной строки командой mvn install. Выложить проект на github. Создать ветку "obfuscation" изменить в ней pom.xml так чтобы сборка содержала стадию обфускации байткода.
ДЗ-02
Измерение памяти Написать стенд для определения размера объекта. Определить размер пустой строки и пустых контейнеров. Определить рост размера контейнера от количества элементов в нем.
ДЗ-03
MyArrayList Написать свою реализацию ArrayList на основе массива. Проверить, что на ней работают методы java.util.Collections
ДЗ-04
Измерение активности GC Написать приложение которое "подтекает" по памяти. Логгировать активность GC (количетство сборок в минуту, время паузы в минуту). Написать скрипт, который проведет измерение активности GC для разных параметров GC.
ДЗ-05
Тестовый фреймворк на аннотациях Написать свой тестовый фреймворк. Поддержать аннотации @Test, @Before, @After. Запускать вызовом статического метода с
- именем класса с тестами,
- именем package в котором надо найти и запустить тесты
ДЗ-06: ATM
Написать эмулятор АТМ Объект класса АТМ должен уметь:
- принимать банкноты разных номиналов (на каждый номинал должна быть своя ячейка)
- выдавать запрошенную сумму минимальным количеством банкнот или ошибку если сумму нельзя выдать
- выдавать сумму остатка денежных средств
ДЗ-07: ATM Department
Написать приложение ATM Department:
- Приложение может содержать несколько ATM
- Departmant может собирать сумму остатков со всех ATM
- Department может инициировать событие – восстановить состояние всех ATM до начального. (начальные состояния у разных ATM могут быть разными)
ДЗ-08: JSON object writer
Напишите свой json object writer (object to json string) аналогичный gson на основе javax.json или simple-json и Reflection. Поддержите массивы объектов и примитивных типов, и коллекции из стандартный библиотерки.
ДЗ-09: myORM
Создайте в базе таблицу с полями: id bigint(20) NOT NULL auto_increment name varchar(255) age int(3)
Создайте абстрактный класс DataSet. Поместите long id в DataSet. Добавьте класс UserDataSet (с полями, которые соответствуют таблице) унаследуйте его от DataSet.
Напишите Executor, который сохраняет наследников DataSet в базу и читает их из базы по id и классу.
<T extends DataSet> void save(T user){…}
<T extends DataSet> T load(long id, Class<T> clazz){…}
ДЗ-10: Hibernate ORM
На основе предыдущего ДЗ (myORM):
-
Оформить решение в виде DBService (interface DBService, class DBServiceImpl, UsersDAO, UsersDataSet, Executor)
-
Не меняя интерфейс DBSerivice сделать DBServiceHibernateImpl на Hibernate.
-
Добавить в UsersDataSet поля: адресс (OneToOne) class AddressDataSet{ private String street; } и телефон* (OneToMany) class PhoneDataSet{ private String number; } Добавить соответствущие датасеты и DAO.
-
Поддержать работу из пункта (3) в myORM
ДЗ-11: my cache engine
Напишите свой cache engine с soft references. Добавьте кэширование в DBService из заданий myORM или Hibernate ORM
ДЗ-12: Веб сервер
Встроить веб сервер в приложение из ДЗ-11. Сделать админскую страницу, на которой админ должен авторизоваться и получить доступ к параметрам и состоянию кэша.
ДЗ-13: WAR
Собрать war для приложения из ДЗ-12. Создавать кэш и DBService как Spring beans, передавать (inject) их в сервлеты. Запустить веб приложение во внешнем веб сервере.
ДЗ-14: Многопоточная сортировка
Написать приложение, которое сортирует массив чисел в 4 потоках с использованием библиотеки или без нее.
ДЗ-15: MessageSystem
Добавить систему обмена сообщениями в веб сервер из ДЗ-13. Пересылать сообщения из вебсокета в DBService и обратно. Организовать структуру пакетов без циклических зависимостей.
ДЗ-16: MessageServer
Cервер из ДЗ-15 разделить на три приложения:
- MessageServer
- Frontend
- DBServer
Запускать Frontend и DBServer из MessageServer. Сделать MessageServer сокет-сервером, Frontend и DBServer клиентами. Пересылать сообщения с Frontend на DBService через MessageServer. Запустить приложение с двумя фронтендами (на разных портах)* и двумя датабазными серверами.
- если у вас запуск веб приложения в контейнере, то MessageServer может копировать root.war в контейнеры при старте