en
Feedback
C++ Academy

C++ Academy

Open in Telegram

По всем вопросам- @workakkk РКН: clck.ru/3FmxJF #VRHSZ

Show more

📈 Analytical overview of Telegram channel C++ Academy

Channel C++ Academy (@cpluspluc) in the Russian language segment is an active participant. Currently, the community unites 15 538 subscribers, ranking 8 055 in the Technologies & Applications category and 41 912 in the Russia region.

📊 Audience metrics and dynamics

Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 15 538 subscribers.

According to the latest data from 16 September, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by 65 over the last 30 days and by -5 over the last 24 hours, overall reach remains high.

  • Verification status: Not verified
  • Engagement rate (ER): The average audience engagement rate is 16.19%. Within the first 24 hours after publication, content typically collects 6.88% reactions from the total number of subscribers.
  • Post reach: On average, each post receives 2 516 views. Within the first day, a publication typically gains 1 069 views.
  • Reactions and interaction: The audience actively supports content: the average number of reactions per post is 21.
  • Thematic interests: Content is focused on key topics such as c++, github, linux, api, архитектура.

📝 Description and content policy

The author describes the resource as a platform for expressing subjective opinions:
По всем вопросам- @workakkk РКН: clck.ru/3FmxJF #VRHSZ

Thanks to the high frequency of updates (latest data received on 17 September, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.

15 538
Subscribers
-524 hours
-27 days
+6530 days
Attracting Subscribers
September '26
September '26
+86
in 29 channels
August '26
+118
in 39 channels
Get PRO
July '26
+82
in 42 channels
Get PRO
June '26
+56
in 1 channels
Get PRO
May '26
+130
in 2 channels
Get PRO
April '26
+49
in 0 channels
Get PRO
March '26
+92
in 21 channels
Get PRO
February '26
+93
in 44 channels
Get PRO
January '26
+437
in 110 channels
Get PRO
December '25
+66
in 2 channels
Get PRO
November '25
+217
in 44 channels
Get PRO
October '25
+81
in 15 channels
Get PRO
September '25
+116
in 38 channels
Get PRO
August '25
+291
in 9 channels
Get PRO
July '25
+518
in 77 channels
Get PRO
June '25
+347
in 73 channels
Get PRO
May '25
+82
in 5 channels
Get PRO
April '25
+105
in 27 channels
Get PRO
March '25
+120
in 1 channels
Get PRO
February '25
+175
in 40 channels
Get PRO
January '25
+175
in 47 channels
Get PRO
December '24
+585
in 58 channels
Get PRO
November '24
+1 337
in 186 channels
Get PRO
October '24
+2 234
in 75 channels
Get PRO
September '24
+848
in 203 channels
Get PRO
August '24
+580
in 42 channels
Get PRO
July '24
+837
in 52 channels
Get PRO
June '24
+2 266
in 64 channels
Get PRO
May '24
+498
in 39 channels
Get PRO
April '24
+571
in 47 channels
Get PRO
March '24
+653
in 20 channels
Get PRO
February '24
+907
in 5 channels
Get PRO
January '24
+705
in 42 channels
Get PRO
December '23
+447
in 39 channels
Get PRO
November '23
+162
in 31 channels
Get PRO
October '23
+224
in 0 channels
Get PRO
September '23
+385
in 0 channels
Get PRO
August '23
+2 329
in 0 channels
Get PRO
July '23
+498
in 1 channels
Get PRO
June '23
+565
in 0 channels
Get PRO
May '23
+5 320
in 0 channels
Get PRO
April '23
+126
in 0 channels
Get PRO
March '23
+422
in 0 channels
Get PRO
February '23
+707
in 0 channels
Date
Subscriber Growth
Mentions
Channels
17 September0
16 September+3
15 September+1
14 September+3
13 September+12
12 September+2
11 September+2
10 September+8
09 September+1
08 September+5
07 September0
06 September+7
05 September+2
04 September+1
03 September+5
02 September+8
01 September+26
Channel Posts
💡 Алгоритм Флойда находит цикл в связном списке всего с двумя указателями и `O(1)` дополнительной памяти. Идея простая: slow
💡 Алгоритм Флойда находит цикл в связном списке всего с двумя указателями и `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
No text...
1 104
3
🔥 Приглашаем на бесплатный открытый вебинар курса «Программист С»: «Указатели в Си — от адреса к управлению памятью» 🗓 Когд
🔥 Приглашаем на бесплатный открытый вебинар курса «Программист С»: «Указатели в Си — от адреса к управлению памятью» 🗓 Когда: 24 сентября, 20:00 (мск) Указатели — это не просто синтаксис, а ключ к пониманию того, как Си общается с памятью. Без них невозможно осознанно работать с массивами, строками, структурами и динамическими данными. На вебинаре разберём указатели от самого основания — адресов и операторов — до передачи параметров по ссылке, чтобы вы перестали бояться звёздочек и начали управлять памятью уверенно. Что будет на вебинаре: • Разбор ключевых понятий: адрес переменной, операторы & и *, объявление и разыменовывание указателей — разберём, как Си работает с памятью напрямую; • Пошаговый анализ связи указателей, массивов и функций — выясним, как передавать параметры по ссылке и заставлять функции изменять переменные вызывающего кода. 👉 Зарегистрируйтесь https://otus.pw/BLgM/?erid=2W5zFHuFYrV Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
1 101
4
⚡️ В Linux даже обычный syscall начинается с макроса. Например: SYSCALL_DEFINE3(write, unsigned int, fd, const char __user *,
⚡️ В Linux даже обычный syscall начинается с макроса. Например: SYSCALL_DEFINE3(write, unsigned int, fd, const char __user *, buf, size_t, count) После препроцессора это превращается сразу в несколько функций: - sys_write - __se_sys_write - __do_sys_write Одна строка описывает системный вызов, а C-препроцессор через макросы и token pasting собирает остальную обвязку автоматически. Именно поэтому код ядра Linux часто выглядит коротко, пока не начнёшь разворачивать макросы.
1 438
5
🔥 Почему в Redis Cluster именно 16 384 hash slot и при чём тут `{}` Redis Cluster распределяет ключи не напрямую по нодам, а
🔥 Почему в Redis Cluster именно 16 384 hash slot и при чём тут `{}` Redis Cluster распределяет ключи не напрямую по нодам, а сначала по 16 384 hash slots. Формула по сути такая: CRC16(key) % 16384 Но есть важный трюк — hash tags. Если ключ содержит часть в фигурных скобках, Redis хеширует только содержимое внутри {}: {user100}:cart {user100}:orders Оба ключа будут вычислены по user100, поэтому попадут в один и тот же hash slot и, соответственно, на одну ноду. Это нужно для multi-key операций в cluster mode. Именно поэтому такие конструкции позволяют нормально использовать: - MGET - MSET - транзакции - Lua-скрипты с несколькими ключами На уровне кода Redis сначала ищет {, затем }, и если внутри есть непустая строка — хеширует только её. Небольшая деталь синтаксиса, которая на самом деле решает важную проблему распределённых операций в Redis Cluster.
1 423
6
💡 C++: std::map не обязан создавать временный std::string при каждом поиске Если ключ уже приходит как std
💡 C++: std::map<std::string, ...> не обязан создавать временный std::string при каждом поиске Если ключ уже приходит как std::string_view, можно использовать transparent comparator: std::map<std::string, int, std::less<>> status_codes{ {"not_found", 404}, {"timeout", 504} }; std::string_view key = "timeout"; auto match = status_codes.find(key);
1 626
7
🔥 Хочешь расти в IT быстрее остальных? Перестань учиться в одиночку Можно годами смотреть курсы, читать документацию и всё р
🔥 Хочешь расти в IT быстрее остальных? Перестань учиться в одиночку Можно годами смотреть курсы, читать документацию и всё равно топтаться на месте. А можно попасть в правильное окружение, где каждый день обсуждают новые инструменты, вакансии, реальные кейсы, ошибки и то, что уже завтра станет стандартом. Здесь собраны папки и каналы по разным направлениям IT, чтобы ты быстрее находил нужных людей, идеи и полезный контент - без бесконечного поиска. AI: t.me/ai_machinelearning_big_data Python: t.me/pythonl Linux: t.me/linuxacademiya Хакинг: t.me/linuxkalii DevOps: t.me/DevOPSitsec Docker: https://t.me/+90Z5TAyfuNU5YmRi Golang: t.me/Golang_google Rust: t.me/rust_code C++: t.me/cpluspluc C#: t.me/csharp_ci Java: t.me/javatg JavaScript: t.me/javascriptv React: t.me/react_tg Frontend: t.me/front PHP: t.me/phpshka Android: t.me/android_its Мобильная разработка: t.me/mobdevelop Базы данных: t.me/sqlhub Data Science: t.me/data_analysis_ml Big Data: t.me/bigdatai Математика: t.me/data_math Физика: t.me/fizmat Kubernetes: t.me/kubernetc GameDev: https://t.me/gamedev Haskell: t.me/haskell_tg Собеседования и карьера: DS собеседования: t.me/machinelearning_interview Python собеседования: t.me/python_job_interview Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy Папка ML: https://t.me/addlist/2Ls-snqEeytkMDgy Папка Frontend: https://t.me/addlist/mzMMG3RPZhY2M2Iy Полезное сверху: ИТ-мемы: t.me/memes_prog Английский для программистов: t.me/english_forprogrammers ИИ и технологии: t.me/vistehno 954 ГБ open-source курсов: https://t.me/+rKBQEMccAA01MTcy ИТ-книги бесплатно: https://t.me/addlist/BkskQciUW_FhNjEy Max Ai: https://max.ru/ai_machinelearning_big_data Max python: https://max.ru/pythonl ТЕХНО: https://max.ru/vistehno Max Go: https://max.ru/Golang_google Max Linux: https://max.ru/linuxkalii Devops: https://max.ru/DevOPSitsec C#: https://max.ru/csharp_ci C++: https://max.ru/cpluspluc SQL: https://max.ru/sqlhub Java: https://max.ru/javatg Подпишись и сохрани, здесь регулярно появляются новые подборки, инструменты и материалы, которые реально помогают расти быстрее.
1 407
8
📚 Отличная подборка материалов по современному C++ На Modernes C++ собрали большой структурированный каталог статей по языку
📚 Отличная подборка материалов по современному C++ На Modernes C++ собрали большой структурированный каталог статей по языку - от базовых концепций до сложных тем из современного стандарта. Что есть внутри: - templates и metaprogramming; - concurrency и multithreading; - smart pointers и управление ресурсами; - ranges, concepts и coroutines; - STL и алгоритмы; - memory model; - best practices и типичные ошибки; - новые возможности C++20/23 и дальше. Удобно, что это не набор случайных постов, а фактически большая карта тем по современному C++. Хороший ресурс, если хочется системно закрыть пробелы и глубже понять, как язык работает под капотом. https://modernescpp.com/index.php/table-of-content/ #Cpp #CPlusPlus #Programming #STL #ModernCpp
2 030
9
🛠 Как автоматически закрывать файлы из C-библиотеки в C++ FILE* можно обернуть в std::unique_ptr с собственным обработчиком
🛠 Как автоматически закрывать файлы из C-библиотеки в C++ FILE* можно обернуть в std::unique_ptr с собственным обработчиком освобождения: #include <cstdio> #include <memory> struct FileCloser { void operator()(std::FILE* file) const noexcept { std::fclose(file); } }; using File = std::unique_ptr<std::FILE, FileCloser>; Использование внутри функции: File file{std::fopen("data.txt", "r")}; if (!file) { return; } // Передаём FILE* в функции C-библиотеки int ch = std::fgetc(file.get()); Когда file выйдет из области видимости, unique_ptr вызовет fclose. Это работает при обычном завершении функции, раннем return и раскрутке стека при исключении. Так устроен RAII: время жизни ресурса связано со временем жизни объекта. Если fopen вернул nullptr, обработчик освобождения вызван не будет.
2 007
10
🐢 Все пытаются ускорить процессоры. А этот проект делает наоборот. Новый проект CPU deoptimization ищет самые медленные инст
🐢 Все пытаются ускорить процессоры. А этот проект делает наоборот. Новый проект CPU deoptimization ищет самые медленные инструкции, которые когда-либо выполнялись на x86. Идея простая: Не «как заставить CPU работать быстрее», а: «Какую самую ужасную инструкцию можно заставить выполнить процессор?» Результат уже впечатляет: 💀 Рекорд x86: 198 002 498 236 тактов CPU ≈ 62 секунды на выполнение одной инструкции Это целая «галерея позора» для ассемблера: - странные инструкции; - неожиданные микроархитектурные эффекты; - случаи, когда одна команда превращается в вечность. Иногда лучший способ понять процессор — не ускорять его, а найти его слабые места. Assembly Hall of Shame: https://github.com/xoreaxeaxeax/asm-hall-of-shame
2 004
11
🚀 Как ядро Linux создаёт пакеты переменной длины без лишних копирований В C есть мощный паттерн — flexible array member. Вме
🚀 Как ядро Linux создаёт пакеты переменной длины без лишних копирований В C есть мощный паттерн — flexible array member. Вместо хранения заголовка и данных отдельно: header → отдельно payload → отдельно можно сделать один непрерывный блок памяти: +----------------+ | struct msg | | len | +----------------+ | payload data[] | +----------------+ Код: struct msg { uint32_t len; uint8_t data[]; }; struct msg *m = malloc(sizeof(*m) + n); Один malloc() → один блок памяти → один free(). Почему это любят в системном коде: ✅ меньше аллокаций ✅ лучше работа с CPU cache ✅ проще сериализация ✅ нет лишних указателей и разрозненных данных Такой подход используется в низкоуровневом коде: ядрах, драйверах, сетевых стеках. До C99 часто писали: uint8_t data[1]; и вручную обходили ограничения языка. Теперь data[] — официальный способ сказать: «После структуры здесь будет динамический массив данных». Маленькая особенность C, которая помогает писать быстрый код на уровне ядра.
2 156
12
Redis не доверяет обычным строкам C - и вот почему В C строка заканчивается нулевым байтом \0. Из-за этого strlen() каждый ра
Redis не доверяет обычным строкам C - и вот почему В C строка заканчивается нулевым байтом \0. Из-за этого strlen() каждый раз проходит весь буфер, а хранить произвольные бинарные данные становится неудобно. Поэтому Redis использует собственную структуру SDS — Simple Dynamic Strings. В памяти она выглядит примерно так: [len][alloc][flags][данные...\0] ↑ sds Перед самими данными Redis хранит метаданные: - len — текущую длину; - alloc — размер выделенной памяти; - flags — тип заголовка. Благодаря этому длина строки определяется за O(1), а свободное место известно заранее. При добавлении данных Redis не обязан каждый раз заново вычислять размер и перевыделять память. SDS также остаётся совместимой со многими функциями C: указатель ведёт прямо на буфер, а в конце всё равно находится \0. Но Redis не зависит от этого терминатора — длина хранится отдельно. Поэтому внутри строки могут находиться нулевые байты, изображения, сериализованные объекты и другие бинарные данные. Важный нюанс: структура sdshdr из старых примеров сегодня упрощена. Современный Redis выбирает компактный заголовок sdshdr5, sdshdr8, sdshdr16, sdshdr32 или sdshdr64 в зависимости от размера строки. Небольшой заголовок перед буфером решил сразу три проблемы: быстрое получение длины, безопасную работу с бинарными данными и эффективное расширение строк. Источник: https://redis.io/docs/latest/operate/oss_and_stack/reference/internals/internals-sds/ https://github.com/redis/redis/blob/unstable/src/sds.h
2 559
13
🔥 Python + AI без игрушечных демок. Курс для тех, кто хочет собирать рабочие системы. Stepik: «Python современный AI для раз
🔥 Python + AI без игрушечных демок. Курс для тех, кто хочет собирать рабочие системы. Stepik: «Python современный AI для разработчика и автоматизации задач» 63 урока, 382 шага, практика с кодом и автопроверкой. Внутри: RAG, tool calling, агенты, evals, MCP, Ollama, vLLM, pgvector + HNSW, безопасный text-to-SQL, prompt injection, кэш, очереди и sandbox для агентного кода. Плюс реальные автоматизации: почта, отчёты, боты, вебхуки и браузерные сценарии. Для тех, кто уже знает Python и хочет перейти к production AI. ⏳ 72 часа скидка 55% https://stepik.org/a/295921
2 183
14
🔥 Quickselect быстрый, пока не выберет плохой pivot Обычный Quickselect в среднем работает за O(n), но неудачный выбор опорн
🔥 Quickselect быстрый, пока не выберет плохой pivot Обычный Quickselect в среднем работает за O(n), но неудачный выбор опорного элемента может превратить поиск k-го элемента в O(n²). В 1973 году Блум, Флойд, Пратт, Ривест и Тарьян предложили алгоритм median of medians, который гарантирует линейное время даже в худшем случае. Идея: 1. Разделить массив на группы по 5 элементов. 2. Найти медиану каждой группы. 3. Рекурсивно найти медиану полученных медиан. 4. Использовать её как pivot для Quickselect. int mom_pivot(int *arr, int n) { if (n <= 5) { sort(arr, n); return arr[n / 2]; } int medians[(n + 4) / 5]; for (int i = 0; i < n; i += 5) { int len = (n - i < 5) ? n - i : 5; sort(arr + i, len); medians[i / 5] = arr[i + len / 2]; } return mom_pivot(medians, (n + 4) / 5); } Такой pivot не обязательно будет настоящей медианой массива, но он гарантированно не окажется слишком близко к краю. После разбиения отбрасывается достаточно большая часть элементов, поэтому рекурсия не деградирует. Итоговая сложность поиска: Средний случай: O(n) Худший случай: O(n) Дополнительная память: зависит от реализации На практике randomized Quickselect часто быстрее из-за меньших констант. Median of medians нужен там, где важна строгая гарантия времени: real-time системы, adversarial input и библиотеки с предсказуемой производительностью.
2 253
15
Согласны ?)
Согласны ?)
2 237
16
✔️ В C/C++ есть любопытный трюк с AVX-512: `_mm512_maskz_loadu_epi8`. Инструкция может выборочно загрузить до 64 байт по маск
✔️ В 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.
1
17
Разбор одной из тех Win32-задач, где C++ быстро превращается в борьбу с ручным управлением памятью. На этот раз речь про LPPR
Разбор одной из тех Win32-задач, где C++ быстро превращается в борьбу с ручным управлением памятью. На этот раз речь про LPPROC_THREAD_ATTRIBUTE_LIST, который нужен при расширенном создании процессов и потоков. Проблема в API простая: - сначала нужно отдельно узнать размер буфера - потом вручную выделить память - вызвать InitializeProcThreadAttributeList - после работы обязательно вызвать DeleteProcThreadAttributeList - и только потом освободить сам буфер Chen предлагает обернуть всё это в RAII через WIL, чтобы очистка происходила автоматически. Из интересного: - отдельный helper для освобождения списка - безопасное получение нужного размера - разбор того, почему CTAD здесь не помогает - перегрузки через SFINAE, чтобы не ловить неоднозначность с int - возможность сразу предзаполнить список атрибутами - можно заранее оставить место под дополнительные атрибуты, которые добавятся позже В итоге работа с LPPROC_THREAD_ATTRIBUTE_LIST становится заметно аккуратнее и меньше похожа на ручной Win32-ритуал с кучей cleanup-кода. https://devblogs.microsoft.com/oldnewthing/20260813-00/?p=112611
2 218
18
Bare Metal C++: как писать прошивки на C++ без ОС и тяжёлого runtime Practical Guide to Bare Metal C++ - бесплатная практичес
Bare Metal C++: как писать прошивки на C++ без ОС и тяжёлого runtime Practical Guide to Bare Metal C++ - бесплатная практическая книга для разработчиков, которые хотят использовать C++ напрямую на микроконтроллерах и ARM-платформах. Внутри: - анализ машинного кода, который генерирует компилятор - запуск C++ без стандартного runtime - работа без исключений, RTTI и динамической памяти - шаблоны и статические структуры данных - event loop и компонентная архитектура драйверов - прерывания, таймеры, UART, GPIO, I2C и SPI - сборка bare-metal приложений для Raspberry Pi Автор показывает, как применять возможности C++ там, где ограничены память, процессорное время и размер прошивки. Это не учебник для новичков. Материал рассчитан на разработчиков, которые уже знают C++ и хотят понять, во что превращается их код на уровне железа. https://arobenko.github.io/bare_metal_cpp/ #cpp #cplusplus #embedded #baremetal
3 281
19
3D-фрактал Mandelbulb можно отрендерить примерно в 100 строках C++ - вообще без полноценного 3D-движка. В основе всего нескол+1
3D-фрактал Mandelbulb можно отрендерить примерно в 100 строках C++ - вообще без полноценного 3D-движка. В основе всего несколько идей: - Mandelbulb строится через сферическую итерацию в степени 8 - distance estimator примерно определяет расстояние до поверхности фрактала - sphere tracing двигает луч большими шагами через пустое пространство - когда луч приближается к поверхности, конечные разности вычисляют нормаль для освещения - результат записывается напрямую в обычный PPM-файл То есть сложнейший на вид 3D-фрактал получается из математики, ray marching и небольшого количества C++. Особенно красиво здесь то, что геометрия вообще не хранится в виде миллионов полигонов - поверхность вычисляется прямо во время рендера.
2 972
20
🔥 Джулиан Сторер - разработчик с более чем 30-летним опытом C++ Он создал сразу несколько заметных проектов в мире аудио-раз
🔥 Джулиан Сторер - разработчик с более чем 30-летним опытом C++ Он создал сразу несколько заметных проектов в мире аудио-разработки: - Tracktion DAW - JUCE C++ Framework - Cmajor DSP language Особенно интересно тем, кто работает с: - C++ - аудио и музыкой - DSP - DAW - real-time приложениями У него много сильного open-source кода и проектов, которые стоит изучить разработчикам из audio/software engineering. https://github.com/julianstorer
2 996