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 часов), продумать механизм дообсчета "старых" треков
@stas29a
Copy link

stas29a commented Feb 13, 2019

Классное тестовое задание, только не хватает написания кода и фронтенда, добавьте и будет вообще отлично.

@Muraveiko
Copy link

Я даже не буду думать как решить проблему совместных прогулок, так как точность позиционирования трекером +-10 метров в идеале. а условие не расходятся далее 6 метров.
Пусть у нас только одна координата, а не три
х + точность (10-255 метров . верить accu <10 нельзя)
100+[100...255] сравнить с 50+[25] угу вот и гадай ;)

@zeromodule
Copy link

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

@pragmaton
Copy link

А уточните значение

int кол-во шагов

с прошлого пакета? с начала суток?

@default-writer
Copy link

default-writer commented Mar 6, 2019

По сути, солью в вашем ТЗ являеться лишь одна фича:

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

Все остальное, включая прогрузку треков, кубы, ограничения lat, lon (на самом деле, на уровне запросов) и вся остальная чепуха решается средствами БД.

Очевидно, что потребуются таблицы

Users
Devices
Tracks

Таблицы-связи

UserDevices
DeviceTracks
UserTracks

Хранимки

GetUserByID
GetDeviceByID
GetTrackByID

GetUserDevicesByUserID
GetDeviceTracksByDeviceID
GetUserTracksByUserID

Тестовое задание еще актуально?

@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