Clearway Integration (clearway.ru)
Актуальность: 1 кв 2025
Вопросы
Заголовок раздела «Вопросы»- Стандартные вопросы про Go (мапы, слайсы т. д.);
go/slices-arrays - Что такое concurrency и планировщик?
go/concurrency - Задача по system design;
architecture/system-design - Вопросы по поиску проблемы в распределенной системе;
architecture/microservices - Несколько behavioral вопросов;
hr-behavioral/general
Задача: Тестовое задание: Необходимо разработать web-сервис по закачке/скачке данных. В БД есть таблица со списком зарегистрированных пользователей. Пользователь передает на сервер логин/пароль и получает авторизационный токен (session-id) для доступа к API. security/auth
Заголовок раздела «Задача: Тестовое задание: Необходимо разработать web-сервис по закачке/скачке данных. В БД есть таблица со списком зарегистрированных пользователей. Пользователь передает на сервер логин/пароль и получает авторизационный токен (session-id) для доступа к API. security/auth» $ curl -d '{"login ":"alice ","password ":"secret "} http://myhost.com/api/auth{"token ":"2bdbbb11806cd18a90d730e61fbb54b5 "}Задача: Используя токен, пользователь может закачивать данные на сервер: security/auth
Заголовок раздела «Задача: Используя токен, пользователь может закачивать данные на сервер: security/auth» $ curl -X POST -H 'Authorization: Bearer 2bdbbb11806cd18a90d730e61fbb54b5 '-d'Hello, Alice!'http://myhost.com/api/upload-asset/hello{"status ":"ok "} $ curl -H 'Authorization: Bearer 2bdbbb11806cd18a90d730e61fbb54b5 'http://myhost.com/api/asset/helloHello, Alice!И скачивать данные с сервера
Заголовок раздела «И скачивать данные с сервера»Для реализации микросервиса можно пользоваться только стандартной библиотекой Go (последней версии) и библиотекой pgx для доступа к БД.
HTTP REST API Specs
Заголовок раздела «HTTP REST API Specs»- 200 OK - порядок
network/http - 400 Bad Request - Некорректный запрос. Например, отсутствует необходимое поле или запрос имеет не валидный JSON формат.
network/http - 401 Unauthorized - Отсутствует авторизационный токен. Авторизационный токен не валидный/просроченный.
security/auth - 403 Forbidden - Доступ запрещен. Попытка обратиться к ресурсу, принадлежащему другому пользователю.
network/http - 404 Not Found - Запрашиваемый ресурс не найден.
network/http - 500 Internal Server Error - Ошибка сервера. Какая-то непредвиденная ошибка. Например БД недоступна.
go/errors-panic
{«error»:«description»}
Сервис всегда возвращает данные в формате JSON, кроме случаев, когда явно необходим другой формат данных.
POST /api/auth
Задача: POST /api/upload-asset/{asset-name} sql/general
Заголовок раздела «Задача: POST /api/upload-asset/{asset-name} sql/general»Request:Body: any-data
Response:{"status ":"ok "}GET /api/asset/{asset-name}
Response:asset-bodyschema.sql
CREATE extension IF NOT EXISTS pgcrypto;
-- таблица с пользователямиCREATE TABLE IF NOT EXISTS users (id bigserial PRIMARY KEY,login text NOT NULL UNIQUE,password_hash text NOT NULL,created_at timestamptz NOT NULL DEFAULT NOW());
-- таблица сессийCREATE TABLE IF NOT EXISTS sessions (id text PRIMARY KEY DEFAULT encode(gen_random_bytes(16), 'hex '),uid bigint NOT NULL, -- user idcreated_at timestamptz NOT NULL DEFAULT NOW());
-- таблица с файламиCREATE TABLE IF NOT EXISTS assets (name text NOT NULL,uid bigint NOT NULL, -- user iddata bytea NOT NULL,created_at timestamptz NOT NULL DEFAULT NOW(),PRIMARY KEY(name, uid));
-- тестовый пользовательINSERT INTOusers (login, password_hash)VALUES('alice ', encode(digest('secret ','md5 '), 'hex ')) ON conflict DO nothing;Дополнительные вопросы и задачи
Заголовок раздела «Дополнительные вопросы и задачи»- Что можно улучшить в схеме БД?
sql/schema-design - Доработайте механизм авторизации таким образом, чтобы в каждый момент времени у пользователя была активна только одна (последняя) сессия;
security/auth - Ограничьте максимальное время пользовательской сессии до 24-х часов;
security/auth - Добавьте в БД данные об IP адресе авторизованного пользователя;
security/auth - Реализуйте методы API для получения списка всех закаченных файлов;
network/http - Реализуйте методы API для удаления файлов;
network/http - Реализуйте работу сервера по протоколу HTTPS.
network/http