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