Skip to content

stokito/player-level-service

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 file from IntelliJ with the development env as described here.

Тестовое задание на позицию 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)? Делаем ли тесты в каком-либо виде?

на Ваше усмотрение

About

No description or website provided.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages