uk
Feedback
C++ Academy

C++ Academy

Відкрити в Telegram

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

Показати більше

📈 Аналітичний огляд Telegram-каналу C++ Academy

Канал C++ Academy (@cpluspluc) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 15 536 підписників, посідаючи 8 063 місце в категорії Технології та додатки та 41 910 місце у регіоні Росія.

📊 Показники аудиторії та динаміка

З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 15 536 підписників.

За останніми даними від 15 вересня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на 71, а за останні 24 години на -3, загальне охоплення залишається високим.

  • Статус верифікації: Не верифікований
  • Рівень залученості (ER): Середній показник залученості аудиторії становить 15.89%. Протягом перших 24 годин після публікації контент зазвичай збирає 6.83% реакцій від загальної кількості підписників.
  • Охоплення публікацій: В середньому кожен допис отримує 2 470 переглядів. Протягом першої доби публікація в середньому набирає 1 062 переглядів.
  • Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 21.
  • Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як c++, github, linux, api, архитектура.

📝 Опис та контентна політика

Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
По всем вопросам- @workakkk РКН: clck.ru/3FmxJF #VRHSZ

Завдяки високій частоті оновлень (останні дані отримано 16 вересня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.

15 536
Підписники
-324 години
+17 днів
+7130 днів
Залучення підписників
вересень '26
вересень '26
+83
в 29 каналах
серпень '26
+118
в 39 каналах
Get PRO
липень '26
+82
в 42 каналах
Get PRO
червень '26
+56
в 1 каналах
Get PRO
травень '26
+130
в 2 каналах
Get PRO
квітень '26
+49
в 0 каналах
Get PRO
березень '26
+92
в 21 каналах
Get PRO
лютий '26
+93
в 44 каналах
Get PRO
січень '26
+437
в 110 каналах
Get PRO
грудень '25
+66
в 2 каналах
Get PRO
листопад '25
+217
в 44 каналах
Get PRO
жовтень '25
+81
в 15 каналах
Get PRO
вересень '25
+116
в 38 каналах
Get PRO
серпень '25
+291
в 9 каналах
Get PRO
липень '25
+518
в 77 каналах
Get PRO
червень '25
+347
в 73 каналах
Get PRO
травень '25
+82
в 5 каналах
Get PRO
квітень '25
+105
в 27 каналах
Get PRO
березень '25
+120
в 1 каналах
Get PRO
лютий '25
+175
в 40 каналах
Get PRO
січень '25
+175
в 47 каналах
Get PRO
грудень '24
+585
в 58 каналах
Get PRO
листопад '24
+1 337
в 186 каналах
Get PRO
жовтень '24
+2 234
в 75 каналах
Get PRO
вересень '24
+848
в 203 каналах
Get PRO
серпень '24
+580
в 42 каналах
Get PRO
липень '24
+837
в 52 каналах
Get PRO
червень '24
+2 266
в 64 каналах
Get PRO
травень '24
+498
в 39 каналах
Get PRO
квітень '24
+571
в 47 каналах
Get PRO
березень '24
+653
в 20 каналах
Get PRO
лютий '24
+907
в 5 каналах
Get PRO
січень '24
+705
в 42 каналах
Get PRO
грудень '23
+447
в 39 каналах
Get PRO
листопад '23
+162
в 31 каналах
Get PRO
жовтень '23
+224
в 0 каналах
Get PRO
вересень '23
+385
в 0 каналах
Get PRO
серпень '23
+2 329
в 0 каналах
Get PRO
липень '23
+498
в 1 каналах
Get PRO
червень '23
+565
в 0 каналах
Get PRO
травень '23
+5 320
в 0 каналах
Get PRO
квітень '23
+126
в 0 каналах
Get PRO
березень '23
+422
в 0 каналах
Get PRO
лютий '23
+707
в 0 каналах
Дата
Залучення підписників
Згадування
Канали
16 вересня0
15 вересня+1
14 вересня+3
13 вересня+12
12 вересня+2
11 вересня+2
10 вересня+8
09 вересня+1
08 вересня+5
07 вересня0
06 вересня+7
05 вересня+2
04 вересня+1
03 вересня+5
02 вересня+8
01 вересня+26
Дописи каналу
photo content

2
🔥 Приглашаем на бесплатный открытый вебинар курса «Программист С»: «Указатели в Си — от адреса к управлению памятью» 🗓 Когд
🔥 Приглашаем на бесплатный открытый вебинар курса «Программист С»: «Указатели в Си — от адреса к управлению памятью» 🗓 Когда: 24 сентября, 20:00 (мск) Указатели — это не просто синтаксис, а ключ к пониманию того, как Си общается с памятью. Без них невозможно осознанно работать с массивами, строками, структурами и динамическими данными. На вебинаре разберём указатели от самого основания — адресов и операторов — до передачи параметров по ссылке, чтобы вы перестали бояться звёздочек и начали управлять памятью уверенно. Что будет на вебинаре: • Разбор ключевых понятий: адрес переменной, операторы & и *, объявление и разыменовывание указателей — разберём, как Си работает с памятью напрямую; • Пошаговый анализ связи указателей, массивов и функций — выясним, как передавать параметры по ссылке и заставлять функции изменять переменные вызывающего кода. 👉 Зарегистрируйтесь https://otus.pw/BLgM/?erid=2W5zFHuFYrV Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
715
3
⚡️ В 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 286
4
🔥 Почему в 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 229
5
💡 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 458
6
🔥 Хочешь расти в 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 323
7
📚 Отличная подборка материалов по современному 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
1 805
8
🛠 Как автоматически закрывать файлы из 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, обработчик освобождения вызван не будет.
1 865
9
🐢 Все пытаются ускорить процессоры. А этот проект делает наоборот. Новый проект 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
1 921
10
🚀 Как ядро 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 065
11
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 491
12
🔥 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 013
13
🔥 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 118
14
Согласны ?)
Согласны ?)
1 955
15
✔️ В 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
16
Разбор одной из тех 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 151
17
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 181
18
3D-фрактал Mandelbulb можно отрендерить примерно в 100 строках C++ - вообще без полноценного 3D-движка. В основе всего нескол+1
3D-фрактал Mandelbulb можно отрендерить примерно в 100 строках C++ - вообще без полноценного 3D-движка. В основе всего несколько идей: - Mandelbulb строится через сферическую итерацию в степени 8 - distance estimator примерно определяет расстояние до поверхности фрактала - sphere tracing двигает луч большими шагами через пустое пространство - когда луч приближается к поверхности, конечные разности вычисляют нормаль для освещения - результат записывается напрямую в обычный PPM-файл То есть сложнейший на вид 3D-фрактал получается из математики, ray marching и небольшого количества C++. Особенно красиво здесь то, что геометрия вообще не хранится в виде миллионов полигонов - поверхность вычисляется прямо во время рендера.
2 910
19
🔥 Джулиан Сторер - разработчик с более чем 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 961
20
Как Linux увеличивает счётчик без lock на SMP-системах В ядре Linux есть трюк, который выглядит почти слишком просто: не заст
Как Linux увеличивает счётчик без lock на SMP-системах В ядре Linux есть трюк, который выглядит почти слишком просто: не заставлять все CPU драться за одну переменную. Вместо общего счётчика используется per-CPU переменная - у каждого ядра своя копия данных. На x86 макрос this_cpu_inc(var) превращается в одну инструкцию incl, которая работает с областью данных текущего CPU через GS. Что это даёт: * нет общего lock * нет постоянной конкуренции между ядрами * инкремент выполняется локально для текущего CPU * операция получается быстрой и дешёвой Идея мощная: если данные можно разделить по CPU, не нужно синхронизировать каждый маленький апдейт между всеми ядрами. Так ядро экономит огромное количество лишней блокировки там, где код выполняется постоянно.
2 657