Forwarded from Библиотека собеса по C++ | вопросы с собеседований
Какое нововведение в C++23 касается оператора []?
Anonymous Quiz
37%
Множественные индексы в одних скобках
11%
Статические операторы индексирования
25%
Первые два варианта верны
12%
Операторы индексирования для rvalue
15%
Концепты для операторов
🏖️ Подборка вакансий для C++-разработчиков за неделю
C++ developer (KORNFELD) — Удалёнка (Санкт-Петербург)
Разработчик С++ — от 200 000 до 280 000 ₽ Гибрид (Москва)
C++ Developer — 4 200 — 6 600 € Офис (Берлин)
C++ Developer in L2/L3 (Радиочастотный центр) — от 250 000 ₽ Удалёнка
➡️ Еще больше топовых вакансий — в нашем канале C++ jobs
Библиотека C/C++ разработчика
C++ developer (KORNFELD) — Удалёнка (Санкт-Петербург)
Разработчик С++ — от 200 000 до 280 000 ₽ Гибрид (Москва)
C++ Developer — 4 200 — 6 600 € Офис (Берлин)
C++ Developer in L2/L3 (Радиочастотный центр) — от 250 000 ₽ Удалёнка
➡️ Еще больше топовых вакансий — в нашем канале C++ jobs
Библиотека C/C++ разработчика
🎨 Qt Quick/QML — декларативный UI для C++ приложений
Если хотите создавать современные, анимированные интерфейсы без
Qt Quick — это декларативный framework для создания
👉 Установка:
💡 Примеры использования:
Дополнительные возможности:
— Встроенная поддержка анимаций
— Биндинг данных с C++ моделями
— Кастомные компоненты
— Горячая перезагрузка во время разработки
🔍 Интеграция с C++:
Библиотека C/C++ разработчика #буст
Если хотите создавать современные, анимированные интерфейсы без
HTML/CSS
, то Qt Quick
хороший выбор.Qt Quick — это декларативный framework для создания
UI
с использованием языка QML
. Позволяет легко создавать анимации, переходы и современные интерфейсы, интегрируясь с C++
логикой.👉 Установка:
# Часть Qt framework
# Установка через Qt Online Installer
# Или sudo apt install qtquick2-dev qtdeclarative5-dev
💡 Примеры использования:
// main.qml
import QtQuick 2.15
Rectangle {
width: 300; height: 200
color: "lightblue"
Text {
anchors.centerIn: parent
text: "Hello QML!"
}
}
Дополнительные возможности:
— Встроенная поддержка анимаций
— Биндинг данных с C++ моделями
— Кастомные компоненты
— Горячая перезагрузка во время разработки
🔍 Интеграция с C++:
class Backend : public QObject {
Q_OBJECT
Q_PROPERTY(QString data READ data NOTIFY dataChanged)
public slots:
void updateData() { /* логика */ }
};
qmlRegisterType<Backend>("com.myapp", 1, 0, "Backend");
Библиотека C/C++ разработчика #буст
🔥 Отладка сопрограмм C++
💡
❗ Ключевые моменты доклада:
• компилятор
• утечка памяти при отсутствии вызова delete и неопределенное поведение при многократном возобновлении
• особенности работы с планировщиками и параллельным выполнением задач
• техники отладки многопоточного кода с замораживанием потоков
Основной фокус — практические проблемы управления жизненным циклом сопрограмм и способы их диагностики в отладчике.
Особенно актуально для разработчиков, которые планируют внедрять асинхронное программирование с использованием сопрограмм
Вы узнаете, что простое добавление
👉 Видео
Библиотека C/C++ разработчика
💡
Андре Бранд
на C++Online 2025
разбирает практические аспекты отладки сопрограмм, с которыми сталкиваются разработчики.❗ Ключевые моменты доклада:
• компилятор
C++20
создает фрейм сопрограммы, но уничтожение остается задачей программиста• утечка памяти при отсутствии вызова delete и неопределенное поведение при многократном возобновлении
• особенности работы с планировщиками и параллельным выполнением задач
• техники отладки многопоточного кода с замораживанием потоков
Основной фокус — практические проблемы управления жизненным циклом сопрограмм и способы их диагностики в отладчике.
Особенно актуально для разработчиков, которые планируют внедрять асинхронное программирование с использованием сопрограмм
C++20
в production-коде.Вы узнаете, что простое добавление
co_await
и co_yield
без понимания механизмов управления памятью и жизненным циклом может превратить код в источник трудноотлавливаемых багов.👉 Видео
Библиотека C/C++ разработчика
Правильная обработка ошибок отличает профессиональный код от любительского. Исключения в C++ позволяют писать надежные программы без засорения кода проверками возвращаемых значений.
✅ Изучи исключения C++
✅ Документация
Библиотека C/C++ разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Сейчас большинство представлений об ИИ ограничиваются одним агентом — моделькой, которая что-то предсказывает, генерирует или классифицирует.
Но реальный прорыв начинается, когда этих агентов становится несколько.
Когда они начинают взаимодействовать друг с другом.
Когда появляется координация, распределение ролей, память, планирование — всё это и есть мультиагентные системы (MAS).
— Microsoft делает язык DroidSpeak для общения между LLM
— Open Source-фреймворки вроде LangChain, AutoGen, CrewAI, LangGraph — бурно развиваются
— компании, включая МТС, уже применяют MAS в боевых задачах
🎓 На курсе мы подходим к этому практично:
Именно на третьем уроке вы впервые собираете не просто «умного бота», а живую систему из агентов, которая работает вместе — как команда.
Причём по-настоящему: врач, SQL-аналитик, travel-планировщик, Python-генератор, поисковик.
Please open Telegram to view this post
VIEW IN TELEGRAM
Иногда мы не замечаем уязвимости и потенциальные проблемы в нашем коде. AI-помощник может сэкономить не только время, но и избавить от серьезных багов в продакшене.
Review this code for errors and refactor to fix any issues:
[Вставь свой код]
Было:
class DataProcessor {
public:
char* processData(char* input) {
char* buffer = new char[100];
strcpy(buffer, input);
return buffer;
}
void cleanup() {
// забыли освободить память
}
};
void example() {
DataProcessor dp;
char* result = dp.processData("some long input data that might overflow");
// утечка памяти - не вызываем delete
}
Стало (после AI-ревью):
class DataProcessor {
public:
std::string ProcessData(const std::string& input) {
// Используем std::string для безопасности
return input; // или любая другая обработка
}
// Деструктор не нужен - RAII работает автоматически
};
void Example() {
DataProcessor dp;
std::string result = dp.ProcessData("some long input data that might overflow");
// Автоматическое управление памятью
}
Что исправил AI:
Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔄 std::source_location: автоматическое логирование
Забудьте FILE и LINE! std::source_location автоматически получает информацию о местоположении в коде.
Важно:
Библиотека C/C++ разработчика #буст
Забудьте FILE и LINE! std::source_location автоматически получает информацию о местоположении в коде.
#include <iostream>
#include <source_location>
#include <string_view>
void log_error(std::string_view message,
const std::source_location& loc = std::source_location::current()) {
std::cout << "ОШИБКА в " << loc.file_name()
<< ":" << loc.line()
<< " в функции " << loc.function_name()
<< " - " << message << std::endl;
}
void problematic_function() {
log_error("Что-то пошло не так!"); // Автоматически получит location
}
int main() {
log_error("Ошибка инициализации");
problematic_function();
return 0;
}
Важно:
source_location
вычисляется в точке вызова, не в точке определения функции.Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
Периодически требуется реализовать интеграцию с STL алгоритмами. Для этого необходимо реализовать правильные API.
Проблема: Нужно создать контейнер, работающий с range-based for и STL.
#include <iterator>
#include <algorithm>
#include <iostream>
template<typename T>
class CircularBuffer {
T* data;
size_t capacity_;
size_t size_;
size_t head_ = 0;
public:
explicit CircularBuffer(size_t capacity)
: data(new T[capacity]), capacity_(capacity), size_(0) {}
~CircularBuffer() { delete[] data; }
// Iterator class
class iterator {
T* ptr;
size_t capacity;
size_t index;
public:
using iterator_category = std::forward_iterator_tag;
using value_type = T;
using difference_type = std::ptrdiff_t;
using pointer = T*;
using reference = T&;
iterator(T* ptr, size_t capacity, size_t index)
: ptr(ptr), capacity(capacity), index(index) {}
reference operator*() { return ptr[index % capacity]; }
pointer operator->() { return &ptr[index % capacity]; }
iterator& operator++() {
++index;
return *this;
}
iterator operator++(int) {
iterator tmp = *this;
++index;
return tmp;
}
bool operator==(const iterator& other) const {
return index == other.index;
}
bool operator!=(const iterator& other) const {
return !(*this == other);
}
};
void push(const T& item) {
data[(head_ + size_) % capacity_] = item;
if (size_ < capacity_) {
++size_;
} else {
++head_;
head_ %= capacity_;
}
}
iterator begin() { return iterator(data, capacity_, head_); }
iterator end() { return iterator(data, capacity_, head_ + size_); }
size_t size() const { return size_; }
bool empty() const { return size_ == 0; }
};
int main() {
CircularBuffer<int> buffer(5);
// Заполняем буфер
for (int i = 1; i <= 7; ++i) {
buffer.push(i);
}
// Range-based for работает!
for (const auto& item : buffer) {
std::cout << item << " ";
}
std::cout << std::endl;
// STL алгоритмы работают!
auto it = std::find(buffer.begin(), buffer.end(), 5);
if (it != buffer.end()) {
std::cout << "Found: " << *it << std::endl;
}
}
Частые ошибки: Не реализовать все необходимые operator для итератора.
💡 Совет: Правильные итераторы делают ваш контейнер first-class citizen в ST.
Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM