From 1a0c50e8a62d03a99a042f242d836181defbfbc8 Mon Sep 17 00:00:00 2001 From: derfenix Date: Fri, 25 Aug 2023 11:41:48 +0300 Subject: [PATCH] Add initial task description --- go-task-ru.md | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 go-task-ru.md diff --git a/go-task-ru.md b/go-task-ru.md new file mode 100644 index 0000000..380ac3c --- /dev/null +++ b/go-task-ru.md @@ -0,0 +1,71 @@ +Нужно сделать REST API на Go, который принимает два `user_id` и выдаёт ответ - являются ли они дублем или нет. Дублем считается пара `user_id`, у которых хотя бы два раза совпадает ip адрес в логе соединений. Для каждого пользователя может быть много соединений, причём нормально если много из них с одного ip адреса. Никаких ограничений на уникальность в логе соединений нет. Пара одинаковых `user_id` всегда является дублем. +Лог соединений можно нагенерить рандомом, в бд или файле - неважно. Структура такая: + +```sql +create table conn_log ( user_id bigint, ip_addr varchar(15), ts timestamp) +``` + +IP в формате IPv4. Кол-во записей хотя бы миллион. Ответ сервиса должен быть быстрым - меньше 30мс. Бонусом будет, если данные будут вычитываться не один раз, а будет поддерживаться актуальность - то есть при вставке новых записей в `conn_log` они будут учитываться в новых запросах к сервису. +Писать следует так, как писался бы реальный боевой сервис. Оцениваться будет с расчётом на это. + +Пример: + +В conn_log такие записи: +```csv +1, 127.0.0.1, 17:51:59 +2, 127.0.0.1, 17:52:59 +1, 127.0.0.1, 17:52:59 +1, 127.0.0.2, 17:53:59 +2, 127.0.0.2, 17:54:59 +2, 127.0.0.3, 17:55:59 +3, 127.0.0.3, 17:55:59 +3, 127.0.0.1, 17:56:59 +4, 127.0.0.1, 17:57:59 +``` + +Выполняем GET запрос: http://localhost:12345/1/2 +Ответ: + +```json +{ "dupes": true } +``` + +Выполняем GET запрос: http://localhost:12345/1/3 +Ответ: + +```json +{ "dupes": false } +``` + +Выполняем GET запрос: http://localhost:12345/2/1 +Ответ: + +```json +{ "dupes": true } +``` + +Выполняем GET запрос: http://localhost:12345/2/3 +Ответ: +```json +{ "dupes": true } +``` + +Выполняем GET запрос: http://localhost:12345/3/2 +Ответ: +```json +{ "dupes": true } +``` + +Выполняем GET запрос: http://localhost:12345/1/4 +Ответ: + +```json +{ "dupes": false } +``` + +Выполняем GET запрос: http://localhost:12345/3/1 +Ответ: + +```json +{ "dupes": false} +``` \ No newline at end of file