Add initial task description
This commit is contained in:
71
go-task-ru.md
Normal file
71
go-task-ru.md
Normal 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}
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user