Tasks on java/ru

From JazzTeamWiki
Jump to: navigation, search
Language: English  • русский

Условия написания данных программ

  • open source
  • tasks based
  • UseCase diagram > Architecture diagram > Class Diagrams > Prototype > Coding/Testing > Bug fixing
    • все этапы проходятся постепенно, после утверждения вашим куратором
  • хорошие java docs
  • в каждой системе используется reflexion и подразумевается использование плагинов. Как создавать плагины - решайте сами. Можно использовать существующие плагинные фреймворки, а можно писать самому.
  • там, где нужно хранить данные - используется hibernate
  • везде используется spring
  • код покрыт junit isolation & integration тестами с покрытием больше 60 процентов
  • если программа подразумевает своё использование в web - используется аналог MVC, с целью отделения ядра, логики от представления
  • где возможно, для конфигурационных файлов используется XML
  • во время программирования используется scrum


Небольшие задачки

JarClassLoader

Написать class loader,который по предоставленному jar файлу (путь, или File, или поток байтов) показывает все классы этого файла (не файлы, классы), и ищет заданный метод (по названию, по входным параметрам, и выходным), и также смотрит, есть ли в jar файле юнит тесты, а также метод main, и позволяет запустить этот класс. Также интересна реализация поиска класса, реализующего определённый interface. Мне видится, что данный classloader может содержать метод:

void runMain()
void runAllUnitTests()
Object getImplementator(final Class toImplement)
Class[] (List<Class>) getClasses()
Class findClass(String methodName, %input/output% info)


Расширение функциональности junit или mockito

Изучить исходники, архитектуру данных фреймворков, создать архитектурную диаграмму фреймворков, и придумать, как бы их можно было расширить новыми функциями. Реализовать расширение, использую или плагинную архитектуру, если она есть, или унаследовавшись от существующих классов этих библиотечек, и т.д.

плагинный фреймворк создания грамматики и работы с языком, созданным в рамках данной грамматики

Пользователь данного фреймворка может создать свою грамматику на основании мета-грамматики - сочинённой нами системы описания грамматик (или почерпнутой где-то).

Потом, когда он создал грамматику, он может реализовать плагины к системе, позволяющие интерпретировать операции созданной грамматики.

После этого возможно выполнение программ, написанных на новом языке.

автоматическая система тестирования java программ

Создать платформу, позволяющую тестировать программы написанные на языке java.

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

Пользователь добавляет программу (jar) файл с точкой входа (метод main или метод с какой-то сигнатурой, или тест), определённой в задании, в систему, и система начинает выполнять данную программу используя тестировочные данные определённые в конфигурационных файлах.

В системе может быть много заданий. Для каждого задания может быть много пользователей. Задания, предоставленные пользователем, оцениваются и записываются в истории пользователей.

Конфигурационные данные (входы и выходы) для различных заданий может вводить администратор системы.

Система должна иметь возможность следить за ходом выполнения заданий, возможно, предоставляя возможность пользователем системы просмотреть статус.

Должна быть возможность системы расписания запуска заданий, предоставленных пользователям.

У заданий и решений могут быть теги, рейтинги (рейтинги также у пользователей).

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

условия написания программы

Следуем классической методологии создания программ:

Варианты использования

Класс диаграммы, диаграммы последовательностей

Прототип

Недлительные итерации с погружением

Следует основой платформы сделать продуманную модель

В ходе реализации платформы использовать паттерны: singleton, factory, builder, command, chain, adapter, mediator, callback, listener

игра морской бой

Создать игру, которая позволяет автоматически проигрывать битвы на основе правил морского боя.

Автоматически означает, что вместо явного указания одним из игроков следующего хода используются правила.

Набор определённых правил одного игрока называется стратегией.

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

Есть режим, когда уже предоставлено много стратегий решения задачи, и они играют друг с другом по очереди, определяя более сильную стратегию - победителя.

У стратегий и людей, создавших стратегию, могут быть рейтинги. У стратегий могут быть теги.

условия написания программы

перед началом создания кода - нужно создать class diagram

в программе должен быть реализован паттерн MVC. Таким образом, модель нашей игры не должны пересекаться с представлением, которое может быть каким угодно - текстовым, web, GUI

для выбора стратегии использовать java reflexion

сохранять результаты игр в файловой базе данных используя hibernate & JPA

spring используется, как реализация IoC - inversion of control

вся программа должна быть покрыта двумя видами тестов - isolation + integration

любой другой программист должен иметь возможность написать свою стратегию

код должен быть хорошо задокументирован

дальнейшее развитие

описание стратегии в виде xml, создание xsd схемы грамматики

возможность проигрывания каждой стратегии со всеми большое количество раз, чтобы найти стратегию-победителя

Программа для резервного копирования (бэкапа)

Программа должна поддерживать множество объектов бэкапа. Объекты бэкапа расположены в иерархической структуре на ее самом нижнем уровне. Пример:

  • Личные данные
    • Музыка
    • Видео
  • Рабочие данные
    • Сайт
    • Письма

У каждого объекта бэкапа есть один или несколько источников данных (datasource). Источник указывает, откуда будет делаться бэкап. Например, для объекта "Сайт" могут быть заданы следующие источники:

  • Файловая система
  • База данных MySQL

Для каждого объекта бэкапа должна быть возможность задать операции. Операции - это те действия, которые будут происходить в процессе бэкапа. Операции должны выполняться в заданной последовательности. Например:

  • Сайт
  1. Упаковать
  2. Переместить в указанную директорию

Возможные операции с объектами бэкапа:

  • Упаковать
  • Упаковать и защитить паролем
  • Упаковать и защитить секретным ключом
  • Скопировать
  • Отправить по e-mail
  • Закачать на FTP-сервер

Для каждого уровня иерархии должна быть возможность задать расписание бэкапов. Например: выполнять бэкап раздела "Личные данные" 1 раз в день.

Возможность просматривать историю бэкапов.

Возможность настроить конфигурацию бэкапа не только через GUI, но и непосредственно редактируя XML-файл.

Создать расширяемый скриптовый язык, который описывает действия с объектами бэкапа.

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

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