express-test-app
Описание
Имеется набор натуральных чисел, лежащих в отрезке
[minValue, maxValue]
.
Всего в наборе initialSetSize
чисел.
Исходный отрезок [minValue, maxValue]
разбивается на
countOfParts
равных частей. Каждой части соответствует файл
data/partXXX.txt
, содержащий числа исходного набора, принадлежащие соответствующему отрезку,
по одному числу в строке. Числа могут повторяться!
Необходимо реализовать два метода в модуле src/solver.js
:
getMinimum(left, right)
- возвращает минимум среди чисел набора, принадлежащих отрезку[left, right]
addNumber(number)
- добавляет новое число в набор, причем именно в тот файл, который соответствует отрезку, в который попадает новое число
Добавления происходят очень редко относительно частоты запросов поиска минимума на отрезке.
Например:
- Набор чисел
{1, 15, 23, 48, 56, 78, 88, 99, 100}
- Количество частей
5
- Получаем отрезки:
[1, 20]
,[21, 40]
,[41, 60]
,[61, 80]
,[81, 100]
- И, например содержимое файла
data/part1.txt
1
15
- А содержимое файла
data/part5.txt
88
99
100
- При запросе минимума на отрезке
[16, 96]
ответ23
- При добавлении числа
29
в набор, оно должно содержаться в файлеdata/part2.txt
Основное внимание будет уделяться:
- качеству кода
- подходам к кэшированию
- обработке ошибок и крайних случаев
- качеству тестирования
Установка
git clone git@github.com:alexchekmenev/express-test-app.git
npm i -g yarn
yarn install
Запуск
Предпочтительнее использовать WebStorm IDE.
Для запуска необходимо выполнить команду: Shift + F10
.
Для запуска в режиме отладки Shift + F9
Примеры запросов
- запрос минимума на отрезке
[left, right]
curl -X GET \
'http://localhost:3000/?left=1&right=1000000' \
-H 'cache-control: no-cache' \
- запрос добавления нового числа в набор
curl -X POST \
http://localhost:3000/ \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-d '{
"number": 1000
}'
- запрос на пересоздание набора чисел
curl -X DELETE \
http://localhost:3000/ \
-H 'cache-control: no-cache' \
Рекомендации по выполнению задания
- все commit'ы необходимо делать в отдельную ветку (или сделать fork)
- используйте ES6
- для тестирования запросов удобно использовать Postman
- протестировать время ответа сервера в нагрузке можно с использованием Apache Benchmark
Полезные ссылки
- https://addyosmani.com/resources/essentialjsdesignpatterns/book - книга по шаблонам проектирования в JavaScript
- http://largescalejs.ru/ - эта же книга только на русском языке
- https://nodejs.org/api/fs.html - документация по работе с файловой системой в Node.js
- https://github.com/NodeRedis/node_redis - библиотека для кэширования
- https://github.com/kriskowal/q - эффективная реализация Promise'ов
- http://e-maxx.ru/algo/rmq