Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Vladislav-Hloboshin/carx-test

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Общая информация

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

Синхронизация

Передаваемая от пользователя информация для синхронизации - это строковый Json о структуре которого ничего не известно за исключением следующего: в корне документа должно присутствовать поле "money", в котором будет содержаться целое числовое значение и поле "country" с буквенным идентификатором страны пользователя (предполагается, что страна для конкретного пользователя не изменяется). Также известно, что передаваемый от пользовател JSON не должен превышать 10кб. Прогнозируемое количество пользователей приложения - 100 000 000 человек, из которых активными ежедневно будут около 1 000 000 пользователей. Распределение активности пользователей по времени дня будет равномерным. Предполагается, что каждый день в среднем активный пользователь будет 100 раз отправлять на сервер информацию о синхронизации и 1 раз запрашивать информацию о своем текущем состоянии с сервера.

Игровая статистика

Пользовательская активность в игре за период измеряется на клиенте с помощью некоторого целочисленного показателя "activity". Каждый активный пользователь в день будет присылать 10000 раз значение этого показателя на сервер, эти данные необходимо принимать и накапливать.

Требования от отдела аналитиков (решение https://www.evernote.com/shard/s297/sh/a47f97e6-a57a-45c9-a873-b528fc5c00b1/bce98bc8eb40aaa15ea10fba430ff27c)

При разработке решения нужно учитывать требования, которые были поставлены перед вами аналитическим отделом, им требуется (Х,Y - параметры запросов):

  • Быстро выбирать Х пользователей с самым большим текущим значением "money" по каждой стране "country".
  • Иметь возможность быстро подсчитать количество новых пользователей по каждой стране за период Х.
  • Для каждого конкретного пользователя X быстро получить отсортированный по дате список значений показателя "activity" и даты их получения за период Y.

Формальная постановка задачи:

  • Реализовать рест сервис с тремя эндпоинтами:
    • прием данных синхронизации от пользователя (вход: строка - данные пользователя в формате Json, строка - UUID пользователя | выход: подтверждение получения | 100 раз в день на пользователя)
    • отправка данных пользователю (вход: строка - UUID пользователя | выход: строка - сохраненные данные пользователя в формате Json | 1 раз в день на пользователя)
    • прием игровой статистики от пользователя (вход: числовое значение - activity пользователя, строка - UUID пользователя | выход: подтверждение получения | 10000 раз в день на пользователя)
  • Выбрать технологии хранения данных (их может быть несколько), спроектировать и реализовать структуру хранения, соответствующую решаемым задачам.
  • Реализовать три запроса к системам хранения данных (на соответствующем им языке), которые позволят выбирать информацию в соответствии с требованиями аналитического отдела.
  • Написать unit тесты, соответствующие вашему понимаю "хороших тестов", позволяющие автоматически верифицировать логику хотя бы одного рест эндпоинта.

Требования к используемым технологиям:

  • Необходимо использовать J8, Spring IoC, фреймворк для Rest сервисов http://sparkjava.com/, Maven.
  • Технологии хранения данных определяются вами в соответствии с задачей, но предпочтение следует отдавать популярным вариантам http://db-engines.com/en/ranking.
  • При выборе технических решений следует исходить из того, что выделение ресурсов для горизонтального масштабирования инфраструктуры не является проблемой для компании.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages