Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/stokito/player-level-service
https://github.com/stokito/player-level-service
assignment spring-boot
Last synced: about 1 month ago
JSON representation
- Host: GitHub
- URL: https://github.com/stokito/player-level-service
- Owner: stokito
- Created: 2020-04-04T08:18:52.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2020-04-04T08:18:58.000Z (almost 5 years ago)
- Last Synced: 2024-12-13T01:33:11.023Z (about 1 month ago)
- Topics: assignment, spring-boot
- Language: Java
- Homepage:
- Size: 11.7 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Player experience level service
## Build
The project uses Java 13 and Maven so run:
mvn clean package
to build it.
## Running
The repo already contains configured IntelliJ project. You can start it as a Spring Boot app.
Then you can run the [PlayerLevelApp.http](./PlayerLevelApp.http) file from IntelliJ with the `development` env as described [here](https://www.jetbrains.com/help/idea/http-client-in-product-code-editor.html).
## Тестовое задание на позицию Sr Java Developer
Необходимо разработать RESTful веб-сервис с использованием Spring Boot для воображаемой компании из сферы разработки онлайн-игр.
Сервис хранит в in-memory структуре внутри JVM данные о набранных на текущем уровне очках опыта (поле exp, тип int) и уровне (поле level, тип int) пользовательских персонажей.
Персонаж идентифицируется целым 32-битным числом больше нуля.Сервис должен обслуживать такие запросы:
1. Добавить указанное количество очков опыта указанному персонажу, и вернуть уровень персонажа и количество очков опыта набранных на текущем уровне после обновления
2. Для указанного персонажа вернуть уровень и количество очков опыта набранных на текущем уровнеОтветы ожидаются в формате JSON.
Персонаж создается с level=1, exp=0.
Конфигурация того сколько опыта нужно набрать чтобы перейти на следующий уровень читается из отдельного файла конфигурации (формат можно выбирать самостоятельно).
Product owner в качестве начальной конфигурации предоставил такую таблицу, и добавил что количество уровней и необходимый опыт для перехода на следующий уровень могут меняться.| Уровень | Нужно опыта для levelup |
|---------|-------------------------|
| 1 | 100 |
| 10 | 110 |
| 20 | 120 |
| 30 | 150 |
| 40 | 190 |
| 50 | 240 |
| 60 | 300 |
| 70 | 370 |
| 80 | 450 |
| 90 | 540 |
| 100 | - |Мы не можем быть уверены что product owner в процессе последующих правок не наделает ошибок в конфигурации, поэтому неплохо бы иметь от этого защиту в виде завершения процесса в случае невалидной конфигурации.
Дополнительные вводные данные:
1. Мы предполагаем что у нас идеальная сеть без обрывов соединений
2. Предполагаемый уровень нагрузки на сервис очень высокий, запросы на добавление
опыта одному и тому же персонажу могут приходить одновременно
3. У заказчика высокие требования к качеству. Сделать нужно настолько качественно насколько можете.> Идет ли накопление опыта при достижении максимального уровня?
да
> Возможна ли конфигурация без указания максимального уровня?
нет, максимальный уровень должен быть
> Вне зависимости от формата конфигурации (json/xml/plain), она
обязательно представляет из себя набор пар “уровень+“-”опыт” и не
может быть другой. Так ли это?да, это так.
в конфигурации не будет промежуточных уровней.
Символов "+" после номера уровня тоже не будет.> Допустим, product owner в указанном примере поменял местами две
строчки (нарушил порядок сортировки по уровням). Считать ли такую
конфигурацию валидной?да, это валидная конфигурация.
> В примере необходимое кол-во опыта не убывает с ростом уровня. Если
это условие нарушится, считать ли конфигурацию валидной?да, такая конфигурация валидна.
> Каким образом происходит обновление конфигурации?
конфигурация загружается при старте сервиса, и на запущенном сервисе не обновляется.
> Каким образом должны быть обработаны ситуации, когда персонаж по новой конфигурации должен получить level up?
этой ситуации не случится, т.к. на запущенном сервисе конфигурация не обновляется.
> Что делаем при попытке превысить ограничение опыта по int?
Скажем, у нас макс уровень и уже почти переполнение, а приходит запрос на +1000 exp.в таком случае бросаем эксепшн
> Делаем ли ошибки чтения конфигурации читаемыми для пользователя (product owner)?
Делаем ли тесты в каком-либо виде?на Ваше усмотрение