Skip to content

Instantly share code, notes, and snippets.

@AlexGx
Last active March 29, 2019 14:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save AlexGx/604cd0fedb86d70a5032280f726189a3 to your computer and use it in GitHub Desktop.
Save AlexGx/604cd0fedb86d70a5032280f726189a3 to your computer and use it in GitHub Desktop.

описание

устройство отправляет сообщения (назовем их пакеты) с навигационными данными и данными об активности

  • пакеты могут дублироваться
  • пакеты могут прийти не в хронологическом порядке

авторизационные данные находятся в заголовке HTTP, payload в теле сообщения, все как обычно

существует 2 вида пакетов:

пакет "Трек" содержит поля:

  • int8 статус устройства
  • int32 таймстамп в UTC
  • floаt "lat" широта в градусах
  • float "lon" долгота в градусах
  • int8 высота в метрах
  • int8 "accu" точность в метрах

пакет "Активность" содержит поля:

  • int8 статус устройства
  • int32 таймстамп в UTC
  • int8 тип активности (0 - сон,1 - шаг,3 - галоп,6 - рысь,255 - шаги не измеряются)
  • int кол-во шагов

эти пакеты отправляются независимо. пакеты "трек" отправляются только когда устройство в режиме прогулки. пакеты активность отправляются почти всегда

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

сервис должен уметь:

  • отсеивать дублирующиеся пакеты (по типу пакета и timestamp)
  • отдавать последнюю координату устройства
  • отдавать текущие координаты устройств внутри определенного bounding box
  • сохранять и агрегировать статистику по активности, отдельно вычислять активность которая была в рамках записи трека
  • отправлять пуш уведомления при изменения статус устройства
  • описать алгоритм работы подсистемы, вычисляющей совместные прогулки

совместные прогулки

прогулка является совместной если 2 устройства находились рядом (на расстоянии до 6 метров) в течение N минут (N=10), вычисления производятся на основе данных трека (координаты и timestamp) стоит обратить внимание:

  • совместная прогулка может содержать более 2х устройств, необходимо вычислять пары прогулок для каждого из устройств
  • совместная прогулка может прерываться и возобновляться в рамках одного трека (гуляли-разошлись-потом опять встретились)
  • совместная прогулка одного устройства, может пересекаться с N совместных прогулок другого устройства
  • нет гарантии что треки попадают на сервер сразу (например, устройство одного участника загружает трек сразу, а устройство другого участника через 8 часов), продумать механизм дообсчета "старых" треков
@tkutru
Copy link

tkutru commented Mar 29, 2019

Это не тестовое задание, это ФТ, которые вы пытаетесь превратить в подробное ТЗ за счёт соискателей.
Как-то не очень.

Соласен. Это по-сути целый проект с кучей ньюансов и подводных камней, который зачем-то назвали "тестовым заданием".

@swuppio
Copy link

swuppio commented Mar 29, 2019

Народ, не ведитесь, цените свое время. Такие задания пусть в бэклог себе заносят и делают планово на работе =)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment