2.6 KiB
Нужно сделать 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}