Программист C++
Проектирование архитектуры программного обеспечения в соответствии с выбранным стилем (слоистая, MVC/MVVM, клиент-сервер, модульная), определение ключевых компонентов и их взаимодействия. Определение внутренних и внешних интерфейсов (API, протоколы обмена, форматы данных) с учётом ограничений Astra Linux SE. Разработка технической документации на архитектуру: UML-диаграммы (классов, компонентов, последовательности, развёртывания), описание архитектурных решений (ADR), схемы развёртывания. Выбор технологий, библиотек и инструментов в рамках утверждённого стека (C++17, Qt5, CMake, Git). Проведение ревью кода и архитектурных решений, контроль соблюдения принятой архитектуры и стандартов кодирования. Оптимизация производительности и потребления ресурсов приложения (профилирование, многопоточность, работа с памятью).
Требования
Опыт работы от 6 лет обязателен; Высшее образование (Программная инженерия, математика, системный анализ) Умение проектировать многопоточные приложения на C++17 с использованием Qt5 (QThread, сигналы/слоты, QMutex). Умение применять архитектурные и проектные паттерны (MVC, MVVM, Observer, Factory, Singleton, Dependency Injection и др.). Умение читать и анализировать чужой код на C++/Qt, выявлять архитектурные проблемы и предлагать решения. Умение настраивать и использовать системы контроля версий (Git), включая ветвление, ревью, разрешение конфликтов. Умение проводить профилирование и оптимизацию кода (valgrind, gprof, встроенные средства Qt). Умение разрабатывать и оформлять архитектурную документацию (UML, ADR, схемы). Умение обеспечивать безопасность приложения: защита от утечек памяти, переполнений буфера, гонок данных, корректная обработка исключений. Умение работать с сетевыми протоколами (TCP/IP, локальные сокеты, RS-232, RS-422, RS-485) для организации взаимодействия компонентов. Знание Astra Linux SE 1.7.3: архитектура ОС, мандатное управление доступом, дискреционный и мандатный доступ. Знание C++17: стандартная библиотека (STL), умные указатели, лямбда-выражения, move-семантика, шаблоны, многопоточность, исключения. Знание Qt5: QWidgets, QML (желательно), сигналы и слоты, модель/представление, QThread, QMutex, QReadWriteLock, QSettings, работа с ресурсами (.qrc), CMake. Знание архитектурных паттернов и стилей: слоистая архитектура, MVC, MVVM, клиент-сервер, событийно-ориентированная, микросервисы (для распределённых систем). Знание UML: диаграммы классов, компонентов, последовательности, состояний, развёртывания. Знание сетевых технологий: стек TCP/IP, сокеты, форматы обмена (JSON, XML, Protobuf).
Высшее образование — бакалавриат; Опыт: 6 лет
Условия
Оптимальные