Coder Social home page Coder Social logo

kaluga's Introduction

Приложение запускается стандактным для NET CORE 3.1 образозом. Работоспособность можно проверить при помощи тесов в проекте KalugaTest либо через Swager(http://localhost:5000/index.html) инрерфейс(Передав ключевые слова через ,) Работа с http реализованна через IHttpClientFactory где создается именнованный пул соединений. Настройки прилодения указанны в фйале appsettings.json секция Settings Условие "Должно быть ограничение на максимальное количество одновременных HTTP-соединений" - реализуется при помощи конфигурирования именнованного httpClient в методе ServicesExt.AddKeywordsService путкм задания MaxConnectionsPerServer=Settings.StackExchangeMaxConnections Запросы распаралеливаются по алгоритму: Колекция ключевых слов приводится к единому регистру удаляюся дубликаты слов и все что осталось помещается в потоко безопасную очередь Расчитывается число http запросов которые будут исполнятся одновременно которые будут исполнятся (int httpWorkersCount = Math.Min(config.StackExchangeQueueMaxSize, keywords.Length);) Запускаются задачи httpWorkersCount которые берут из очереди слова и отправляю запросы. Аккамулирую результаты ответов. Если происходит сбой все задачи отменяются кидается исключение(повторные попытки в алгоритме не реализованны) Ждем завершения всех задач и аккумилируем результаты запросов Сортируем запросы по дате создания (хотел добавить удаление повторяющихся елементов но незнаю нужно ли) Замечания

!Мое время ограничено не могу себе позволить улучшать это решение и добавлять некоторые полезные вещи (Напремер я намеренно не стал реализовывать логирование) !Скорее всего чтото сделал не так так как до конца не понял задание и незнаком с тонкостями работы этого api.
!Тесты покрывают не все кейсы !Для скорости сделал интеграционные тесты на NUnit в том же проете лучше их разнести в разные проеты. !

Задание : Реализовать сервис, обращающийся к REST API StackOverflow для поиска по ключевым словам (документация по API https://api.stackexchange.com/docs/search). В случае, если ключевых слов передано больше одного, запросы должны выполняться параллельно (по одному HTTP запросу на ключевое слово). Должно быть ограничение на максимальное количество одновременных HTTP-соединений, это значение нельзя превышать. Если ключевых слов указано больше, необходимо организовать очередь обработки так, чтобы более указанного количество соединений не открывалось. По каждому тэгу производится поиск только первых 100 записей, отсортированных по дате создания. Пример запроса к API: https://api.stackexchange.com/2.2/search?pagesize=100&order=desc&sort=creation&tagged=csharp&site=stackoverflow. Можно использовать любые дополнительные параметры запроса, если это необходимо. Для разработки рекомендуется использовать .Net Core. Преимуществом будет обладать задание, запускаемое в Docker контейнере. Должно быть краткое readme с описанием функционала и требований по запуску программы.

kaluga's People

Contributors

gavamot avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.