Add initial task description

This commit is contained in:
2023-08-25 11:41:48 +03:00
parent 3cd5738a13
commit 1a0c50e8a6

71
go-task-ru.md Normal file
View File

@@ -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}
```