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

71 lines
2.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Нужно сделать 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}
```