← Назад к вопросам

Какие технологии использовал?

1.0 Junior🔥 11 комментариев
#Опыт работы и проекты

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Технологии и инструменты в C/C++ Backend разработке

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

Языки программирования

C++ (C++11, C++14, C++17, C++20):

  • Основной язык для разработки high-performance backend приложений
  • STL контейнеры и алгоритмы
  • Smart pointers (unique_ptr, shared_ptr)
  • Multithreading и синхронизация потоков
  • Modern C++ features (lambdas, variadic templates, concepts)

C:

  • POSIX API для системного программирования
  • Network programming (sockets, TCP/IP)
  • Системные вызовы (syscalls)
  • Встраиваемые системы

Сетевые технологии

TCP/IP и UDP:

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int sock = socket(AF_INET, SOCK_STREAM, 0);  // TCP
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8080);
server_addr.sin_addr.s_addr = inet_aton("127.0.0.1");

bind(sock, (struct sockaddr*)&server_addr, sizeof(server_addr));
listen(sock, SOMAXCONN);

WebSocket:

  • Full-duplex communication over HTTP
  • Real-time data streaming
  • Librariesи: libwebsockets, websocketpp

HTTP/HTTPS:

  • REST API разработка
  • Использование libcurl для HTTP клиента
  • OpenSSL для криптографии
  • HTTP серверы: Boost.Asio, libevent

Асинхронное программирование

Boost.Asio:

#include <boost/asio.hpp>
using boost::asio::ip::tcp;

int main() {
    boost::asio::io_context io_context;
    
    tcp::acceptor acceptor(io_context, 
                          tcp::endpoint(tcp::v4(), 8080));
    
    tcp::socket socket(io_context);
    acceptor.accept(socket);
    
    io_context.run();
}

libevent:

  • Event-driven networking
  • Epoll/select/kqueue поддержка
  • Асинхронные операции ввода-вывода

std::thread и std::async:

#include <thread>
#include <future>

std::thread worker_thread([]() {
    // Work in background
});

auto future = std::async(std::launch::async, []() {
    return 42;
});

int result = future.get();

Многопоточность и синхронизация

Механизмы синхронизации:

#include <mutex>
#include <condition_variable>
#include <shared_mutex>

std::mutex mtx;  // Простой мьютекс
std::shared_mutex shared_mtx;  // Читатель-писатель
std::condition_variable cv;  // Для уведомлений между потоками

std::lock_guard<std::mutex> lock(mtx);  // RAII lock
std::unique_lock<std::mutex> ulock(mtx);  // Гибкий lock
std::shared_lock<std::shared_mutex> read_lock(shared_mtx);

cv.wait(ulock);  // Ждём сигнала
cv.notify_one();  // Пробуждаем один поток

Атомарные операции:

#include <atomic>

std::atomic<int> counter(0);  // Lock-free счётчик
counter++;  // Атомарная операция
int value = counter.load();

Базы данных

PostgreSQL:

  • ACID гарантии
  • Мощные возможности запросов
  • Libpq для C/C++ интеграции
#include <libpq-fe.h>

PGconn* conn = PQconnectdb("dbname=mydb user=postgres");
PGresult* res = PQexec(conn, "SELECT * FROM users");
int rows = PQntuples(res);

SQLite:

  • Встраиваемая база данных
  • Для локального хранилища и кэширования

MongoDB:

  • NoSQL документоориентированная база
  • Динамическая схема
  • Для неструктурированных данных

Redis:

  • In-memory key-value хранилище
  • Быстрый кэш и очереди сообщений
  • Pub/Sub механизм

Сборка и управление зависимостями

CMake:

cmake_minimum_required(VERSION 3.10)
project(MyServer)

add_executable(server main.cpp)
target_link_libraries(server pthread boost_system)

Make:

  • Классический инструмент сборки
  • Для простых проектов

Conan/vcpkg:

  • Управление зависимостями C++
  • Автоматическая загрузка и сборка библиотек

Тестирование

Google Test (gtest):

#include <gtest/gtest.h>

TEST(CalculatorTest, AddPositive) {
    Calculator calc;
    EXPECT_EQ(calc.add(2, 3), 5);
}

Catch2:

  • Modern C++ testing framework
  • Удобный синтаксис

Benchmark инструменты:

  • Google Benchmark для микробенчмарков
  • Profiling: gprof, perf

Отладка и профилирование

GDB:

gdb ./program
(gdb) break main
(gdb) run
(gdb) step
(gdb) print variable

Valgrind:

  • Обнаружение утечек памяти
  • Проверка корректности потокового кода
valgrind --leak-check=full ./program

AddressSanitizer (ASAN):

g++ -fsanitize=address -g program.cpp

perf:

  • Профилирование производительности на Linux
  • CPU sampling, cache analysis

Логирование

spdlog:

#include <spdlog/spdlog.h>
#include <spdlog/sinks/stdout_color_sinks.h>

auto console = spdlog::stdout_color_mt("console");
console->info("Hello {}", "world");
console->error("An error occurred");

Boost.Log:

  • Гибкая система логирования
  • Multiple sinks, фильтрация

Контейнеризация и развёртывание

Docker:

FROM ubuntu:20.04
RUN apt-get install -y build-essential
COPY . /app
WORKDIR /app
RUN ./build.sh
EXPOSE 8080
CMD ["./server"]

Docker Compose:

  • Оркестрация нескольких сервисов
  • Локальная разработка

Контроль версий

Git:

  • Распределённая система контроля версий
  • Основной инструмент в современной разработке
  • GitHub, GitLab, Bitbucket для хостинга

Непрерывная интеграция

CI/CD Pipelines:

  • GitHub Actions
  • GitLab CI
  • Jenkins
  • Travis CI
name: CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - run: cmake .
      - run: make test

Дополнительные библиотеки

Boost:

  • Asio (сетевое программирование)
  • Thread (многопоточность)
  • String algorithms
  • Smart pointers
  • Filesystem

Protocol Buffers:

  • Сериализация структурированных данных
  • Компактный формат
  • Быстрая сериализация/десериализация
message User {
    int32 id = 1;
    string name = 2;
    string email = 3;
}

JSON библиотеки:

  • nlohmann/json
  • RapidJSON (очень быстрый)
  • POCO JSON

Лучшие практики

  • Используйте Modern C++ (C++17 или выше)
  • RAII для управления ресурсами
  • Smart pointers вместо raw pointers
  • Тестируйте код постоянно
  • Профилируйте перед оптимизацией
  • Используйте static analysis инструменты
  • Документируйте код и API

Вывод: Modern C++ Backend разработка требует комплексного понимания языка, операционных систем, сетевых протоколов и инструментов разработки. Совмещение этих технологий позволяет создавать масштабируемые, надёжные и высокопроизводительные серверные приложения.