C++ Academy
По всем вопросам- @workakkk РКН: clck.ru/3FmxJF #VRHSZ
إظهار المزيد📈 نظرة تحليلية على قناة تيليجرام C++ Academy
تُعد قناة C++ Academy (@cpluspluc) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 15 492 مشتركاً، محتلاً المرتبة 8 087 في فئة التكنولوجيات والتطبيقات والمرتبة 41 904 في منطقة روسيا.
📊 مؤشرات الجمهور والحراك
منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 15 492 مشتركاً.
بحسب آخر البيانات بتاريخ 05 أكتوبر, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار -49، وفي آخر 24 ساعة بمقدار 7، مع بقاء الوصول العام مرتفعاً.
- حالة التحقق: غير موثّقة
- معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 15.13%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 7.64% من ردود الفعل نسبةً إلى إجمالي المشتركين.
- وصول المنشورات: يحصل كل منشور على متوسط 2 344 مشاهدة. وخلال اليوم الأول يجمع عادةً 1 183 مشاهدة.
- التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 20.
- الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل c++, github, linux, api, архитектура.
📝 الوصف وسياسة المحتوى
يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
“По всем вопросам- @workakkk
РКН: clck.ru/3FmxJF
#VRHSZ”
بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 06 أكتوبر, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.
جاري تحميل البيانات...
| التاريخ | نمو المشتركين | الإشارات | القنوات | |
| 06 أكتوبر | +6 | |||
| 05 أكتوبر | +8 | |||
| 04 أكتوبر | +3 | |||
| 03 أكتوبر | 0 | |||
| 02 أكتوبر | 0 | |||
| 01 أكتوبر | +1 |
| 2 | 🎮 Строка из Quake III, которая выглядит как колдовство
i = 0x5f3759df - (i >> 1); // what the fuck?
Комментарий настоящий. Эта строка помогает вычислить 1/√x, не извлекая квадратный корень. В графике такая операция нужна для нормализации векторов: привести их длину к единице, сохранив направление.
Как работает трюк?
У float внутри есть показатель степени и дробная часть. Если прочитать биты положительного нормализованного числа как целое, получится величина, которая примерно соответствует его логарифму с масштабом и смещением.
А дальше используется свойство:
log₂(1/√x) = −½ × log₂(x)
Сдвиг >> 1 делит целое число на два. Вычитание из подобранной константы меняет знак и компенсирует смещение. Полученные биты снова читаются как float: это уже приближение к ответу.
Один шаг метода Ньютона доводит относительную погрешность примерно до 0,18%. В историческом тесте Криса Ломонта функция работала примерно в четыре раза быстрее прямого вычисления 1.0 / sqrt(x).
А закомментированная строка на картинке? Это второй шаг Ньютона: ещё больше точности за дополнительные вычисления.
💡 Красота алгоритма в том, что само представление числа в памяти становится частью вычисления.
https://github.com/id-Software/Quake-III-Arena/blob/master/code/game/q_math.c | 1 087 |
| 3 | Бьярн Страуструп о своём же C++: «на C легко выстрелить себе в ногу»
Создатель C++ однажды описал свой язык так:
«На C легко выстрелить себе в ногу. На C++ это сделать сложнее, но если уж получится, оторвёт всю ногу целиком».
В своём FAQ он объясняет: это верно для любого мощного языка. Чем лучше язык защищает от простых ошибок, тем менее очевидными становятся те, что остаются.
C++ действительно закрыл многие дыры C: RAII, умные указатели, строгая типизация, а на слайде за его спиной видно, что код на C++20/23 бывает проще и безопаснее старого. Но шаблоны, неопределённое поведение и сложная модель памяти по-прежнему позволяют выстрелить так, что потом неделями ищешь, куда попало. | 1 775 |
| 4 | Полноценный Lisp можно уместить всего в 99 строк C.
Внутри при этом:
- 21 примитив
- REPL
- сборщик мусора Cheney GC
- числа с плавающей точкой
- указатели
- типы значений
И всё это без `struct`-тегов, без внешних библиотек и без обычных динамических аллокаций для представления объектов.
Главный трюк - NaN boxing.
IEEE 754 оставляет много битов внутри специальных NaN-значений. Их можно использовать как скрытое хранилище:
- часть битов кодирует тип
- до 48 бит можно использовать под указатель
- обычные double при этом остаются обычными числами
В итоге одно 64-битное значение может представлять и число, и указатель, и другие типы данных.
Очень красивый пример того, как устройство IEEE 754 можно использовать для построения компактного рантайма языка. | 1 961 |
| 5 | ✔️ В C/C++ есть любопытный трюк с AVX-512: `_mm512_maskz_loadu_epi8`.
Инструкция может выборочно загрузить до 64 байт по маске. Каждый бит маски отвечает за один байт:
- 1 - байт загружается
- 0 - вместо него ставится ноль
Самое интересное начинается, когда маска полностью нулевая:
#include <x86intrin.h>
void f(const char *p) {
_mm512_maskz_loadu_epi8(0, p);
}
При нулевой маске память фактически не читается, а результатом становится 512-битный вектор из нулей.
То есть значение p в таком случае не влияет на результат, а компилятор при оптимизации вообще может удалить весь вызов.
Хороший пример того, насколько необычно работают masked-load инструкции в AVX-512. | 2 249 |
| 6 | C23 сделал enum в C заметно удобнее для низкоуровневого кода.
Раньше базовый тип перечисления обычно выбирал компилятор, и enum часто занимал размер обычного int:
enum status {
OK = 0,
ERROR = -1
};
На многих системах это 4 байта.
В C23 можно явно указать базовый тип:
enum status8 : int8_t {
OK8 = 0,
ERR8 = -1
};
Теперь такой enum занимает 1 байт.
Можно и наоборот использовать большой тип:
enum status64 : uint64_t {
OK64 = 0,
ERR64 = UINT64_C(0xFFFFFFFFFFFFFFFF)
};
Это особенно полезно там, где важен точный layout структуры, ABI, сетевые протоколы, embedded и работа с бинарными форматами.
В C23 размер enum теперь можно контролировать явно, а не полагаться на выбор компилятора. | 2 779 |
| 7 | Minimum-Cost Maximum-Flow всего в ~110 строках C++
Хороший компактный пример одного из самых полезных алгоритмов на графах.
Задача MCMF: провести через сеть максимально возможный поток и одновременно сделать его стоимость минимальной.
В этой реализации:
- residual graph хранит оставшиеся возможности для потока
- SPFA каждый раз ищет самый дешёвый увеличивающий путь
- после поиска определяется bottleneck - сколько потока реально можно протолкнуть по найденному пути
- поток отправляется по пути
- процесс повторяется, пока путь из источника в сток больше найти нельзя
Особенно красивый трюк - обратные рёбра.
Прямое и обратное ребро добавляются подряд, поэтому получить индекс пары можно через:
id ^ 1
Если id чётный, id ^ 1 даст следующее нечётное ребро. Если нечётный - вернёт предыдущее чётное.
MCMF пригодится там, где мало просто найти максимальный поток и у каждого решения есть цена:
• назначение сотрудников на задачи
• логистика
• маршрутизация
• matching с разной стоимостью
• распределение ресурсов
• расписания
Компактный пример того, как residual network, shortest path и greedy augmentation собираются в один мощный алгоритм. | 2 155 |
| 8 | 🐧 Linux Cheat Sheet - шпаргалка по командам Linux
Самая удобная шпаргалка по Linux и Bash на русском: теория простым языком (как устроены файлы, процессы, права, память, загрузка и сеть), команды терминала, права доступа, процессы, сеть, SSH, systemd, grep/sed/awk, Vim и готовые однострочники - с примерами.
А для тех, кто идёт дальше, - продвинутый уровень: Bash для профи, LVM и RAID, трассировка и производительность, ядро, безопасность, контейнеры, восстановление системы и вопросы с собеседований.
https://github.com/justxor/Linux-/ | 2 513 |
| 9 | لا يوجد نص... | 2 226 |
| 10 | `🤖 В SourceCraft появилась команда цифровых разработчиков
Агентам можно назначать задачи прямо в GitLab. Они работают под собственными учётными записями, выполняют поручения и возвращают результат разработчику.
Если по ходу работы чего-то не хватает, агент сам запрашивает данные или согласование у команды — то есть не останавливается на первом незаполненном месте.
Ещё можно подключить собственного агента, в том числе созданного в Yandex AI Studio. | 2 271 |
| 11 | 😂 Собеседование на C++ прошло успешно
HR: у вас есть опыт с C++?
Я: конечно, отлично знаю оператор `goes to`.
int x = 10;
while (x --> 0) {
std::cout << x << '\n';
}
Никакого специального --> оператора в C++ тут нет.
Это просто:
x-- > 0
Сначала берётся текущее значение x и сравнивается с 0, а затем x уменьшается на единицу.
Поэтому код выведет:
9
8
7
6
5
4
3
2
1
0
Один из тех C++-трюков, который выглядит как отдельный оператор, хотя на самом деле это просто удачно поставленные -- и >. | 2 344 |
| 12 | Физически корректный ray tracer всего в 99 строках C++
smallpt от Kevin Beason - один из самых известных примеров того, насколько компактным может быть настоящий path tracer.
В этих 99 строках есть:
* отражения
* преломления
* мягкие тени
* color bleeding
* зеркальные и стеклянные поверхности
Основа при этом минимальная: векторы, лучи, сферы и одна рекурсивная функция radiance().
Если дать рендеру тысячи samples per pixel, он собирает полноценный Cornell Box с зеркальной и стеклянной сферами.
Проект появился ещё в 2008 году и до сих пор отлично показывает базовую механику path tracing. | 2 358 |
| 13 | ⚡️ Как спроектировать ИИ-агента над корпоративными данными
6 октября в 17:00 мск пройдёт новая встреча Архитектурного клуба Яндекс 360 — открытого сообщества для архитекторов и инженеров высоконагруженных систем.
Даниил Смирнов, руководитель службы бэкенд-разработки Антиспама Яндекс 360 , разберёт архитектуру корпоративного агента: оркестратор, инструменты, память, EVAL и наблюдаемость.
На эфире обсудят:
- как сочетать полнотекстовый и векторный поиск, метаданные, фильтры и переранжирование;
- как наследовать права исходных систем и изолировать данные разных пользователей и организаций;
- как не выдавать из индекса и кеша данные тем, у кого нет доступа;
- как ограничивать автономность агента;
- как отдельно оценивать качество поиска, выбора инструментов и итогового ответа.
📅 6 октября, 17:00 мск
💻 Онлайн, участие бесплатное
→ Зарегистрироваться на встречу
https://events.yandex.ru/events/yandex360/architechture_club?utm_source=telegram&utm_medium=social&utm_campaign=archclub&utm_content=cpluspluc | 1 947 |
| 14 | Лицо C++-разработчика, когда он написал 6000 строк кода, чтобы обогнать твои 4 строки на Python на 0,000438 секунды. | 4 214 |
| 15 | Как посчитать миллиарды уникальных значений, используя всего несколько килобайт памяти
Для этого существует HyperLogLog - вероятностный алгоритм оценки количества уникальных элементов.
Вместо хранения каждого значения он:
— хеширует элементы
— распределяет их по buckets
— отслеживает необычно длинные последовательности нулей в хэшах
— по этой статистике оценивает cardinality
Например, с 16384 регистрами можно оценивать даже огромные множества, занимая порядка десятков килобайт памяти.
При этом ошибка может оставаться около 1%.
Именно поэтому HyperLogLog любят в аналитике и больших данных: посчитать COUNT(DISTINCT ...) для миллиардов объектов можно без хранения миллиардов ID.
Магия тут не в точности до последнего элемента, а в очень хорошем компромиссе между памятью и результатом. | 2 920 |
| 16 | Разработчики 3D-графики, все сюда
Если вы пишете рендер на C++ с отдельным RenderThread, то знаете эту боль: данные грузятся в фоне, а GPU-ресурсы всё равно создаются в потоке отрисовки. И пока RenderThread в длинном цикле создаёт буферы и текстуры, он не рисует — он стоит, пока не обработает список загруженных ресурсов.
Мы это исправили! В новой статье на Хабре рассказываем, как пришли к новому подходу:
1. как вынесли создание буферов и текстур на потоки загрузки,
2. что сделали для Metal, а что для Vulkan,
3. и какие ограничения графических API пришлось учесть.
Другие инженерные инсайты от 2ГИС → в Telegram-канале RnD | 1 193 |
| 17 | ⚙️ useful_abstractions - вычисления на этапе компиляции в C++23
Библиотека упрощает работу с constexpr и consteval. Один заголовочный файл, без зависимостей за пределами стандартной библиотеки.
Что можно делать при компиляции:
* Передавать строки в параметры шаблонов и собирать их из частей.
* Вычислять хеши.
* Получать имена типов без RTTI.
* Экранировать строки для JSON, URL и HTML.
* Проверять UTF-8 и преобразовывать его в UTF-16/UTF-32.
* Останавливать сборку с понятным сообщением при ошибке в данных.
Например, некорректный строковый литерал или недопустимое значение можно обнаружить ещё до запуска программы.
Требуется C++23: GCC 14+, Clang 19+ или свежий AppleClang.
Документация — https://constexprcore.github.io/useful_abstractions/ | 2 701 |
| 18 | Разница между C++ и Python | 2 036 |
| 19 | «Я про бэкенд»: как устроены AI-системы под капотом бигтеха
🗓 3 октября, Москва и онлайн
О чём: как разработчики высоконагруженных рекомендательных и генеративных систем справляются с нетривиальными вызовами. Доклады в 6 направлениях — от архитектуры систем с AI/ML до MLOps и работы на стыке бэкенда с железом.
Часть спикеров:
🎤 Михаил Цветков (Алиса AI и Умные устройства) — как устроен инференс генеративных ответов Алисы в Поиске
🎤 Алина Шестакова (Positive Technologies, Cloud SIEM) — вердикт за минуту: ML-фильтр и LLM на потоке более 40 тысяч событий в секунду
🎤 Андрей Аксёнов (Авито) — база векторных баз
🎤 Егор Хайруллин (Рекламные технологии Яндекса) — как распределённо обрабатывать более 100 ГБ/с в реальном времени без потерь и дублей с помощью YTsaurus Flow
🎤 Владислав Тюльбашев (Яндекс) — как надежно раздавать конфиги на 200к хостов при отказе [n-1] ДЦ
🎤 Алексей Логинов (Алиса AI и Умные устройства) — как сделать агентную платформу надёжной
Кроме того, зрителей ждет традиционный лайв, где бэкенд-инженеры Яндекса спроектируют архитектуру сложного сервиса в реальном времени. В этот раз задачу для эфира можете задать вы: участвуйте в проекте «2718», отправляйте свои кейсы, а организаторы выберут среди них самый сложный для открытого разбора.
Полная программа и регистрация | 3 112 |
| 20 | 💡 Алгоритм Флойда находит цикл в связном списке всего с двумя указателями и `O(1)` дополнительной памяти.
Идея простая:
slow двигается на 1 узел
fast — на 2
Если цикл есть, они обязательно встретятся.
После встречи один указатель возвращаем в head, а дальше оба двигаем по одному узлу. Следующая точка встречи — точное начало цикла.
Node *detect_cycle(Node *head) {
Node *slow = head, *fast = head;
while (fast && fast->next) {
slow = slow->next;
fast = fast->next->next;
if (slow == fast) {
slow = head;
while (slow != fast) {
slow = slow->next;
fast = fast->next;
}
return slow;
}
}
return NULL;
}
Сложность:
O(n) по времени
O(1) по памяти
Один из самых красивых примеров того, как простая математика по модулю превращается в очень практичный алгоритм. | 2 142 |
