All streams
Search
Write a publication
Pull to refresh
44
0
Dmitry @RPG18

Golang Developer

Send message
Очень интересно такой сервис писать на C++. В том же бизнес центре Avito расположен, у них восстановление в ручную делается.
Я не очень понимаю людей, которые из списка тестовых заданий рекомендуют выполнять что-то подобное:
Представьте что вам нужно сделать микросервис, который проводит сделки пользователей из трех различных регионов. У каждого пользователя есть некий баланс средств и он не может совершать сделки на отрицательном балансе. Для простоты сделка полностью проводится внутри микросервиса. Каждый пользователь прикреплен к ближайшему к нему датацентру и к одному из датацентров в качестве резервного. Необходимо сделать микросервис прототип, который позволит продолжить торговлю без остановок в случает падения одного из датацентров. Необходимо продумать все стресс сценарии когда могут возникнуть проблемы с расхождениями баланса и придумать пути их решения. Также желательно продумать схему масштабирования на большее число датацентров и возрастающие объемы сделок.

Правда без модели памяти из C++11 эта штука не потоко-безопасная. Потоко-безопасная ленивая инициализация в C++

«в ТЗ ведь не прописано, что надо проверять входные данные на корректность...» — не счесть =)

Если я не эксперт в предметной области, то без спецификаций мы ногу сделать хорошие тесты, да и не понятно корректные эти данные или нет. Поэтому получаются ситуации:


когда тестовый набор отличается от реальных данных, пришлось фактически переписать значительный кусок программы

Говоря про RISC нужно уточнять, что имеется в виду: ARM, MIPS, PowerPC, SPARC. А лучше указывать производителя и модель процессора.

4 std::multiset на 10 000 000, плюс std::vector для хранения исходных данных отъели 2.4Gb. CLion отъел 735 Mb.
В условии задачки есть подсказка:


Нужно сделать быстрый поиск по базе, с учетом ее не частого обновления

Я не знаю имеет ли задачка практического применения. Тут пишут, что:


Multisets are typically implemented as binary search trees.

Поэтому все будет зависеть от конкретной реализация дерева.

Тогда наверное проще использоваться localtime и работать с tm

На будущее. Можно сделать такую штуку:


class MultiCriterion: public AbstractCriterion
{
//
void add(const std::shared_ptr<AbstractCriterion>& cri)
{
    m_criteria.push_back(cri);
}
//...
std::vector<std::shared_ptr<AbstractCriterion>> m_criteria;
}

т.е. можно сделать по 3 и более условиям.

Конкретно эта задачка, была как тестовое задание. Счел её интересной.

Переписывание с C# на C++ был рабочим проектом. Грустное это дело переписывать что-либо с C#/Java на C++, в основном из-за поиска чем бы заменить ту или иную библиотеку.

Спасибо, не знал про Boost Multi-index. Вот за что люблю хабр, что в комментариях можно узнать что-то новое.

Обычно в таких ситуациях берут какой-нибудь SQLite, который можно сделать in-memory и заводят индексы. Такое проходил когда заставили переписывать приложение с C# и его linq на C++. Тут мне взяли и поставили задачку седлать без БД.

  1. Да. В случае не кратного разбиения допустил ошибку округления. Я не делал предположения, а просто взял не нулевое число. Т.к. в Qt Concurrent map использует пул потоков, то можно варьировать гранулярностью задачи и размером пула.
  2. Полуоткрытый интервал. Путь taskSize = 7, тогда получаем [0, 7); [7, 14); [14, 21)… Возможно где-то ошибся на единицу.
  3. Я всегда использую ссылки везде, где это возможно. Невозможно создать не инициализированную ссылку, в отличие от указателя. Проку от resize/assign тут особого нет. Вектор заполняется один раз, при том, что тут создаются и синхронизируются потоки.
  4. Что мне это дает?

Тут я имел ввиду последующий два цикла. Первый цикл ждет завершение потоков, второй цикл делает свертку.

Проглядел std::accumulate.

По сути было сказано выше про spinlock и NUMA. Атомарная инструкция заставляет обращаться в память, плюс еще блокировка памяти. В общем происходит насилие шины.

А Apache Kafka удовлетворяла этим требованиям? А на выходе у них получилась не система высокого уровня?

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity