Какие продукты или проекты вы разрабатывали?

Ответ

Мой опыт в основном сосредоточен на высокопроизводительных и системных проектах на C++.

  1. Высоконагруженный биржевой шлюз (Low-Latency Trading System):

    • Задача: Разработка ядра системы обработки рыночных данных (order book) с гарантированной задержкой менее 10 микросекунд.
    • Стек: C++17/20, Linux, kernel bypass (DPDK/ Solarflare), lock-free структуры данных, атомики, профилирование с помощью perf и VTune.
    • Мой вклад: Оптимизировал критический путь обработки сообщений FIX/FAST, заменив динамическую аллокацию памяти на пулы объектов с предварительным выделением, что снизило latency на 15%.
      // Упрощенный пример пула lock-free узлов для order book
      template<typename T>
      class ObjectPool {
      struct Node { std::atomic<Node*> next; alignas(64) T data; };
      std::atomic<Node*> free_list;
      public:
      T* acquire() {
          Node* node = free_list.load(std::memory_order_acquire);
          while(node && !free_list.compare_exchange_weak(node, node->next,
                                                   std::memory_order_acq_rel));
          return node ? &node->data : nullptr;
      }
      // ... release, деструктор
      };
  2. Модуль 3D-рендеринга для CAD-системы:

    • Задача: Реализация и оптимизация конвейера отображения крупных полигональных моделей.
    • Стек: C++, OpenGL 4.5, GLSL, Qt для GUI, многопоточность (std::async, thread pool).
    • Мой вклад: Разработал систему пространственного разбиения (октодерево) для frustum culling, что позволило увеличить FPS при работе со сценами в 10+ миллионов полигонов.
  3. Встраиваемая система управления для IoT-устройства:

    • Задача: Написание firmware для устройства сбора данных с датчиков.
    • Стек: C (с элементами C++ для high-level модулей), ARM Cortex-M4, FreeRTOS, коммуникация по SPI/I2C, протокол MQTT.
    • Мой вклад: Реализовал драйвер для работы с энергонезависимой памятью (FRAM) и механизм безопасного обновления прошивки (OTA) с резервными копиями.

Ответ 18+ 🔞

Давай я тебе расскажу, на чём я собаку съел, а может, и не одну. Опыт у меня, скажем так, не в каких-то там пет-проектах, а в таком, где задержки меряют микросекундами и где один косяк — это овердохуища потерянных денег.

  1. Вот это была жесть: высоконагруженный шлюз для биржи.

    • Суть задачи: Сделать ядро, которое жрёт поток рыночных данных и строит стакан цен так, чтобы всё летело быстрее, чем ты моргнёшь. Меньше 10 микросекунд, Карл! Представь, хуй с горы скатится — а у нас уже три сделки прошло.
    • На чём пахал: Голый C++17/20, линукс, какие-то обходы ядра, чтобы ОС не мешалась под ногами (это типа DPDK), структуры данных без блокировок — в общем, адский замес.
    • Что я натворил: Смотрел я на это всё, подозрение ёбать чувствую — что-то тут не так. Профилирую, а там, блядь, аллокатор памяти в самом пекле работает, как мартышлюшка, новые объекты создаёт. Ну я и заменил эту поебень на свой пул, где всё заранее выделено. Просто берёшь готовый кусочек памяти и кидаешь обратно. И знаешь, что? Задержка упала на 15%, я сам от себя охуел. Вот кусочек этой магии, смотри:
    // Упрощенный пример пула lock-free узлов для order book
    template<typename T>
    class ObjectPool {
        struct Node { std::atomic<Node*> next; alignas(64) T data; };
        std::atomic<Node*> free_list;
    public:
        T* acquire() {
            Node* node = free_list.load(std::memory_order_acquire);
            while(node && !free_list.compare_exchange_weak(node, node->next,
                                                     std::memory_order_acq_rel));
            return node ? &node->data : nullptr;
        }
        // ... release, деструктор
    };
  2. Потом был 3D-движок для одной CAD-системы.

    • Задача: Рисовать огромные модели, чтобы дизайнеры не матерились, когда ворочают детали на 10 миллионов полигонов. Чтобы не лагало, блядь.
    • Стек: C++, OpenGL, шейдеры, Qt для кнопочек, и всё это в несколько потоков.
    • Мой вклад: Ну, рендерить всё подряд — это пиздец какой тупой подход. Я сделал систему, которая умно отсекает невидимые части сцены (это называется frustum culling), используя октодерево. Типа, зачем рисовать то, что всё равно за кадром? После этого FPS подрос так, что у заказчика волнение ёбать началось — в хорошем смысле.
  3. А ещё была встраиваемая система для IoT-железки.

    • Задача: Написать прошивку для устройства, которое с датчиков данные собирает и куда-то их шлёт. Железка — маломощная, память — в обрез, но работать должно как часы.
    • Стек: В основном голый C (на ядре-то экономили), но кое-где и C++ пролез, FreeRTOS, куча протоколов общения с железом.
    • Что сделал: Реализовал, блядь, драйвер для энергонезависимой памяти (FRAM), чтобы данные не терялись при отключении света. И самое главное — сделал механизм безопасного обновления прошивки по воздуху (OTA). Чтобы можно было новую версию залить, а если что-то пойдёт не так — откатиться на старую, рабочую. Без этого доверия ёбать ноль — представь, обновили устройство на другом конце страны, а оно накрылось медным тазом.