Forwarded from Библиотека задач по C++ | тесты, код, задания
😁5❤3
🔥 Не пропустите событие осени для AI-комьюнити
24 сентября, 19:00 Мск — бесплатный вебинар с Максимом Шаланкиным «ИИ-агенты: новая фаза развития искусственного интеллекта»
😤 Пока все спорят, «боты это или нет», мы покажем, как работают настоящие агенты: с планированием, инструментами и памятью. За час Максим разберёт:
— почему ИИ-агенты сейчас на пике инвестиций
— чем они отличаются от ChatGPT и обычных моделей
— цикл агента: восприятие → планирование → действие → обучение
— живое демо простого агента
— как бизнес уже получает ROI до 80%
⚡️ Хотите спросить у Максима всё, что обычно остаётся «за кадром»? Ловите шанс — только в прямом эфире.
⏰ Мест мало, регистрация закроется, как только забьём комнату
24 сентября, 19:00 Мск — бесплатный вебинар с Максимом Шаланкиным «ИИ-агенты: новая фаза развития искусственного интеллекта»
😤 Пока все спорят, «боты это или нет», мы покажем, как работают настоящие агенты: с планированием, инструментами и памятью. За час Максим разберёт:
— почему ИИ-агенты сейчас на пике инвестиций
— чем они отличаются от ChatGPT и обычных моделей
— цикл агента: восприятие → планирование → действие → обучение
— живое демо простого агента
— как бизнес уже получает ROI до 80%
⚡️ Хотите спросить у Максима всё, что обычно остаётся «за кадром»? Ловите шанс — только в прямом эфире.
⏰ Мест мало, регистрация закроется, как только забьём комнату
😁2❤1
Если нужно запретить автоматический вывод типов для некоторых параметров шаблона, то
std::type_identity
поможет решить эту проблему.std::type_identity
из C++20 — простая обертка, которая предотвращает template argument deduction. Полезно для создания non-deduced contexts
.👉 Определение:
template<typename T>
struct type_identity { using type = T; };
template<typename T>
using type_identity_t = typename type_identity<T>::type;
💡 Примеры использования:
// БЕЗ type_identity - тип T выводится автоматически
template<typename T>
void convert_and_print(T from, T to) { /* ... */ }
convert_and_print(1, 2.5); // Ошибка: T не может быть int и double
// С type_identity - принуждаем указать тип явно
template<typename T>
void convert_and_print(T from, std::type_identity_t<T> to) {
std::cout << static_cast<T>(to) << std::endl;
}
convert_and_print<double>(1, 2.5); // OK: T = double}
💡 Функции сравнения:
template<typename T>
bool equal(const T& a, std::type_identity_t<const T&> b) {
return a == b;
}
std::string str = "hello";
equal(str, "hello"); // OK: T = std::string, второй параметр - const char*
🔍 Factory с явным указанием типа:
template<typename T>
std::unique_ptr<T> make_initialized(std::type_identity_t<T> init_value) {
return std::make_unique<T>(init_value);
}
// Тип нужно указать явно
auto ptr = make_initialized<std::string>("Hello World");
Библиотека C/C++ разработчика
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍4
💡 Pointer Tagging в C++: искусство упаковки битов в указатель
Автор статьи рассказывает о технике pointer tagging — упаковке дополнительных данных прямо в указатели, используя неиспользуемые биты.
❗Ключевые моменты статьи:
• 64-битный указатель использует только 48 бит для адресации, оставляя 16 бит свободными
• malloc выравнивает память по 16-байтным границам, освобождая нижние 4 бита
• в итоге получается 20 свободных бит для хранения метаданных
Основной фокус — практическая реализация
Особенно актуально для разработчиков высокопроизводительных систем, работающих с динамическим полиморфизмом и древовидными структурами данных.
Вы узнаете, как Chrome V8 использует эту технику для различения целых чисел и ссылок на объекты, а ядро Linux — для хранения цвета узла в красно-чёрном дереве прямо в указателе на родителя.
➡️ Статья
Библиотека C/C++ разработчика
#буст
Автор статьи рассказывает о технике pointer tagging — упаковке дополнительных данных прямо в указатели, используя неиспользуемые биты.
❗Ключевые моменты статьи:
• 64-битный указатель использует только 48 бит для адресации, оставляя 16 бит свободными
• malloc выравнивает память по 16-байтным границам, освобождая нижние 4 бита
• в итоге получается 20 свободных бит для хранения метаданных
Основной фокус — практическая реализация
tagged_ptr
в C++ с автоматическим маскированием битов и поддержкой стандартных операторов указателей.Особенно актуально для разработчиков высокопроизводительных систем, работающих с динамическим полиморфизмом и древовидными структурами данных.
Вы узнаете, как Chrome V8 использует эту технику для различения целых чисел и ссылок на объекты, а ядро Linux — для хранения цвета узла в красно-чёрном дереве прямо в указателе на родителя.
➡️ Статья
Библиотека C/C++ разработчика
#буст
❤9🔥6👍1🥰1
❗ Сегодня премьера
В 19:00 МСК стартует бесплатный вебинар с Максимом Шаланкиным — «ИИ-агенты: новая фаза развития искусственного интеллекта».
В программе:
— почему агенты ≠ чат-боты;
— живое демо простого агента;
— и как эта тема встроена в курс, который разработан под руководством Никиты Зелинского.
⏰ Это прямой эфир: подключиться можно через лендинг курса.
В 19:00 МСК стартует бесплатный вебинар с Максимом Шаланкиным — «ИИ-агенты: новая фаза развития искусственного интеллекта».
В программе:
— почему агенты ≠ чат-боты;
— живое демо простого агента;
— и как эта тема встроена в курс, который разработан под руководством Никиты Зелинского.
⏰ Это прямой эфир: подключиться можно через лендинг курса.
❤1😁1
🔍 Какой алгоритм поиска выбрать?
Выбор неправильного алгоритма поиска может в разы замедлить программу.
✏️ Выбираем по ситуации:
1️⃣ Неупорядоченные данные → std::find (O(n)):
2️⃣ Упорядоченные данные → std::binary_search (O(log n)):
3️⃣ Частые поиски → std::unordered_set (O(1) average):
4️⃣ Поиск с предикатом → std::find_if:
❌ Частая ошибка: Использование find на отсортированных данных.
Библиотека C/C++ разработчика
#буст
Выбор неправильного алгоритма поиска может в разы замедлить программу.
std::vector<int> nums = {3, 1, 4, 1, 5};
auto it = std::find(nums.begin(), nums.end(), 4);
if (it != nums.end()) {
std::cout << "Found at position " << std::distance(nums.begin(), it);
}
std::vector<int> sorted_nums = {1, 2, 3, 4, 5};
if (std::binary_search(sorted_nums.begin(), sorted_nums.end(), 3)) {
std::cout << "Found!";
}
std::unordered_set<int> lookup = {1, 3, 5, 7, 9};
if (lookup.find(5) != lookup.end()) {
std::cout << "Found instantly!";
}
auto even = std::find_if(nums.begin(), nums.end(),
[](int n) { return n % 2 == 0; });
Библиотека C/C++ разработчика
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍1
Forwarded from Proglib.academy | IT-курсы
🔒 Оптимистическая vs пессимистическая блокировка: как выбрать и не пожалеть
Что произойдет, если несколько пользователей одновременно начнут менять одни и те же данные? Скорее всего — потеря изменений и ошибки.
Чтобы этого избежать, в системах используются блокировки: пессимистические — когда конфликтам не дают случиться, и оптимистические — когда система проверяет их только перед сохранением.
Разбираемся, как работают блокировки и какая из них лучше подойдет твоему приложению.
🔗 Читать статью
🏃♀️ Proglib Academy
#буст
Что произойдет, если несколько пользователей одновременно начнут менять одни и те же данные? Скорее всего — потеря изменений и ошибки.
Чтобы этого избежать, в системах используются блокировки: пессимистические — когда конфликтам не дают случиться, и оптимистические — когда система проверяет их только перед сохранением.
Разбираемся, как работают блокировки и какая из них лучше подойдет твоему приложению.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4💯1
Правильная обработка ошибок — разница между надёжным и хрупким кодом.
✓ Бросание исключений по значению, ловля по ссылке
✓ Использование стандартных исключений STL где возможно
✓ RAII для автоматической очистки при исключениях
✓ Документирование исключений в комментариях
✓ std::optional для функций, которые могут не вернуть значение
✓ std::expected (C++23) для возврата ошибок
✓ Error codes для низкоуровневого кода
✓ Паттерн Result<T, Error> для функционального стиля
✓ Функции помечены как noexcept где гарантируется
✓ Strong exception гарантия в критичных местах
✓ Правильная обработка в деструкторах (never throw)
Библиотека C/C++ разработчика
#код_ревью
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7😁1
This media is not supported in your browser
VIEW IN TELEGRAM
VK проводит Weekend Offer для бэкенд-разработчиков и ML-инженеров. Это отличная возможность получить офер за 2 дня и не проходить много этапов.
Ищут бэкендеров со знанием Java, Go, Python или C++.
И MLщиков, с навыками в Classic ML, RecSys, NLP/LLM, CV, Speech.
Важный момент: ищут коллег с опытом коммерческой разработки от трех лет.
Совпадает? Тогда у вас есть все шансы получить приглашение на работу за 2 дня: технические собеседования 4 октября, а финалы, знакомство с командами и офер 5 октября.
Отправляйте заявку до 2 октября и станьте частью VK! Подробнее — на сайте.
Реклама: ООО «ВК» ИНН 7743001840
Ищут бэкендеров со знанием Java, Go, Python или C++.
И MLщиков, с навыками в Classic ML, RecSys, NLP/LLM, CV, Speech.
Важный момент: ищут коллег с опытом коммерческой разработки от трех лет.
Совпадает? Тогда у вас есть все шансы получить приглашение на работу за 2 дня: технические собеседования 4 октября, а финалы, знакомство с командами и офер 5 октября.
Отправляйте заявку до 2 октября и станьте частью VK! Подробнее — на сайте.
Реклама: ООО «ВК» ИНН 7743001840
😁1
🐸 Подборка вакансий для C++-разработчиков за неделю
Программист Embedded C++ — от 200 000 и до 300 000 ₽ Офис (Санкт-Петербург)
Системный программист C++ — от 180 000 и до 350 000 ₽ Офис (Екатеринбург)
Разработчик C++/Rust (SDN dataplane, DPDK/DOCA API) — от 300 000 и до 600 000 ₽ Офис/удаленно/гибрид (Москва)
C++ Developer — от 300 000 ₽ Удаленно/офис
C++ developer [Middle] — до 350 000 ₽ Удаленно/Офис (Омск, Новосибирск, Санкт-Петербург)
C++ / Qt Разработчик — до 370 000 ₽ Офис (Республика Татарстан, ОЭЗ «Алабуга»)
Библиотека C/C++ разработчика
Программист Embedded C++ — от 200 000 и до 300 000 ₽ Офис (Санкт-Петербург)
Системный программист C++ — от 180 000 и до 350 000 ₽ Офис (Екатеринбург)
Разработчик C++/Rust (SDN dataplane, DPDK/DOCA API) — от 300 000 и до 600 000 ₽ Офис/удаленно/гибрид (Москва)
C++ Developer — от 300 000 ₽ Удаленно/офис
C++ developer [Middle] — до 350 000 ₽ Удаленно/Офис (Омск, Новосибирск, Санкт-Петербург)
C++ / Qt Разработчик — до 370 000 ₽ Офис (Республика Татарстан, ОЭЗ «Алабуга»)
Библиотека C/C++ разработчика
👍2🔥1
🤫 Курс «ИИ-агенты для DS-специалистов»
Каждый технологический скачок оставляет позади тех, кто «подождал ещё чуть-чуть». ИИ-агенты — это новый рывок.
Уже через пару лет именно они будут драйвить аналитику и автоматизацию. Хотите остаться на гребне?
🖥️ На курсе «ИИ-агенты для DS-специалистов» мы разберём:
— создание AI-агентов с нуля
— сборку собственной RAG-системы
— интеграцию LLM под задачи бизнеса
📌 Курс подходит:
→ ML/AI инженерам (middle+ / senior)
→ Data Scientists
→ Backend и platform-инженерам
→ Advanced CS/DS студентам
⚡️ Старт уже скоро — 3 октября.
💰 До 28 сентября действует скидка — 57.000 ₽ вместо 69.000 ₽ (по промокоду datarascals).
🔗 Узнать больше о курсе и записаться
З.ы. если вы не успели на вебинар «ИИ-агенты: новая фаза развития искусственного интеллекта» — запись уже доступна
Каждый технологический скачок оставляет позади тех, кто «подождал ещё чуть-чуть». ИИ-агенты — это новый рывок.
Уже через пару лет именно они будут драйвить аналитику и автоматизацию. Хотите остаться на гребне?
🖥️ На курсе «ИИ-агенты для DS-специалистов» мы разберём:
— создание AI-агентов с нуля
— сборку собственной RAG-системы
— интеграцию LLM под задачи бизнеса
📌 Курс подходит:
→ ML/AI инженерам (middle+ / senior)
→ Data Scientists
→ Backend и platform-инженерам
→ Advanced CS/DS студентам
⚡️ Старт уже скоро — 3 октября.
💰 До 28 сентября действует скидка — 57.000 ₽ вместо 69.000 ₽ (по промокоду datarascals).
🔗 Узнать больше о курсе и записаться
З.ы. если вы не успели на вебинар «ИИ-агенты: новая фаза развития искусственного интеллекта» — запись уже доступна
😁1
Длинные или короткие имена функций/переменных?
Anonymous Poll
43%
Длинные и описательные - самодокументируемый код
15%
Короткие и ёмкие - меньше печатать
16%
Зависит от области видимости
5%
Как в стандартной библиотеке
21%
Главное - не использовать однобуквенные