This repository has been archived on 2023-12-05. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
protect_trans_info/go-task-ru.md

2.6 KiB
Raw Permalink Blame History

Нужно сделать REST API на Go, который принимает два user_id и выдаёт ответ - являются ли они дублем или нет. Дублем считается пара user_id, у которых хотя бы два раза совпадает ip адрес в логе соединений. Для каждого пользователя может быть много соединений, причём нормально если много из них с одного ip адреса. Никаких ограничений на уникальность в логе соединений нет. Пара одинаковых user_id всегда является дублем. Лог соединений можно нагенерить рандомом, в бд или файле - неважно. Структура такая:

create table conn_log ( user_id bigint, ip_addr varchar(15), ts timestamp)

IP в формате IPv4. Кол-во записей хотя бы миллион. Ответ сервиса должен быть быстрым - меньше 30мс. Бонусом будет, если данные будут вычитываться не один раз, а будет поддерживаться актуальность - то есть при вставке новых записей в conn_log они будут учитываться в новых запросах к сервису. Писать следует так, как писался бы реальный боевой сервис. Оцениваться будет с расчётом на это.

Пример:

В conn_log такие записи:

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 Ответ:

{ "dupes": true }

Выполняем GET запрос: http://localhost:12345/1/3 Ответ:

{ "dupes": false }

Выполняем GET запрос: http://localhost:12345/2/1 Ответ:

{ "dupes": true }

Выполняем GET запрос: http://localhost:12345/2/3 Ответ:

{ "dupes": true }

Выполняем GET запрос: http://localhost:12345/3/2 Ответ:

{ "dupes": true }

Выполняем GET запрос: http://localhost:12345/1/4 Ответ:

{ "dupes": false }

Выполняем GET запрос: http://localhost:12345/3/1 Ответ:

{ "dupes": false}