DevOps
По всем вопросам- @workakkk @itchannels_telegram - 🔥полезные ит-каналы https://t.me/Golang_google - Golang программирование @golangl - golang chat @GolangJobsit - golang channel jobs @golang_jobsgo - jobs РКН: clck.ru/3FmvZA #VRHSZ
Show more📈 Analytical overview of Telegram channel DevOps
Channel DevOps (@devopsitsec) in the Russian language segment is an active participant. Currently, the community unites 23 348 subscribers, ranking 5 712 in the Technologies & Applications category and 28 445 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 23 348 subscribers.
According to the latest data from 13 July, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -46 over the last 30 days and by 2 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 12.51%. Within the first 24 hours after publication, content typically collects 5.96% reactions from the total number of subscribers.
- Post reach: On average, each post receives 2 923 views. Within the first day, a publication typically gains 1 391 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 9.
- Thematic interests: Content is focused on key topics such as devops, kubernetes, git, github, кластер.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“По всем вопросам- @workakkk
@itchannels_telegram - 🔥полезные ит-каналы
https://t.me/Golang_google - Golang программирование
@golangl - golang chat
@GolangJobsit - golang channel jobs
@golang_jobsgo - jobs
РКН: clck.ru/3FmvZA
#VRHSZ”
Thanks to the high frequency of updates (latest data received on 14 July, 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.
return table1[h1(key)] == key
|| table2[h2(key)] == key;
Вставка работает интереснее: если место занято, новый ключ «выталкивает» старый в его альтернативную позицию.
Отсюда и название: как кукушка, которая выкидывает чужие яйца из гнезда.
Если начинается цикл, таблицу перестраивают с новыми хеш-функциями.
Алгоритм предложили Rasmus Pagh и Flemming Rodler в 2001 году.
И это не просто академическая штука: Linux kernel использует cuckoo hashing в connection tracking table.
Один из тех случаев, когда простая идея даёт очень сильную гарантию по lookup.
for (int i = 0; i < n; i++) {
int j = rand() % n;
swap(a[i], a[j]);
}
На вид всё нормально: каждый элемент случайно меняется местами с другим.
Но проблема в вероятностях.
Для массива из n элементов существует n! перестановок.
Хороший shuffle должен давать каждой перестановке одинаковый шанс.
Наивный вариант делает n шагов, и на каждом шаге выбирает индекс из полного диапазона 0..n-1.
В итоге некоторые перестановки появляются чаще других.
Правильный подход — Fisher-Yates shuffle:
for (int i = n - 1; i > 0; i--) {
int j = random(0, i);
swap(a[i], a[j]);
}
Идея простая:
на каждом шаге мы выбираем элемент только из ещё не зафиксированной части массива.
Сначала выбираем последний элемент из всего массива.
Потом предпоследний — из оставшихся.
Потом следующий — из ещё меньшего диапазона.
Так каждая перестановка получает одинаковую вероятность.
В C++ лучше не писать через rand() % n, потому что там может быть ещё и modulo bias.
Нормальный вариант:
std::mt19937 rng(std::random_device{}());
for (int i = n - 1; i > 0; --i) {
std::uniform_int_distribution<int> dist(0, i);
int j = dist(rng);
std::swap(a[i], a[j]);
}
Shuffle - хороший пример, где код может выглядеть “рандомным”, но математически быть неправильным.Обсудим: • как собрать event-driven-архитектуру на Kafka, PostgreSQL и ClickHouse без ручного управления; • зачем изолировать operational и analytical workloads в enterprise-контуре; • как выстроить telemetry pipeline с managed-подходом и observability «из коробки» с помощью DKP; • как работает сквозная аналитика от датчика до отчёта — live demo IoT-сценария на примере готового решенияЗарегистрироваться бесплатно
madvise(MADV_DONTNEED) для anonymous mappings.
Сценарий такой:
char *region = mmap(NULL, GB,
PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS,
-1, 0);
// потрогали часть страниц
madvise(region, GB, MADV_DONTNEED);
После madvise виртуальные адреса остаются валидными. Процесс всё ещё «видит» тот же диапазон памяти.
Но физические страницы, которые стояли за этим диапазоном, ядро может забрать обратно. То есть адресное пространство осталось, а реальная RAM освободилась.
При следующем обращении к этому участку процесс получит свежие zero-filled страницы. Старых данных там уже не будет.
Почему это полезно:
* можно держать большой виртуальный регион без постоянного удержания RAM
* аллокаторы могут возвращать неиспользуемые страницы ядру
* long-running процессы меньше раздувают RSS
* память можно переиспользовать без полного munmap и нового mmap
Важная деталь: MADV_DONTNEED не означает «удали адреса». Это скорее сигнал ядру: «эти страницы мне сейчас не нужны, можешь забрать физическую память».
Адреса остаются. Страницы уходят. Следующее чтение приносит нули.__sw_hweight64.
Красивый пример того, как старый битовый трюк пережил десятилетия и всё ещё работает в современном системном коде.Kroc, указываете, за какими объектами в Kubernetes нужно следить, и задаёте шаблон ресурса, который должен быть создан на основе найденного объекта.
Например, оператор может смотреть за Deployment, брать из него нужные поля и автоматически создавать связанные Pod, Service, ConfigMap или другие Kubernetes-объекты.
Внутри используется Go и Kubebuilder.
Самое интересное - реактивная модель.
Если исходный объект изменился, производные ресурсы пересоздаются.
Если кто-то вручную удалил созданный объект, оператор создаст его снова, чтобы вернуть кластер в нужное состояние.
По сути, это хороший минимальный пример того, как работает operator pattern в Kubernetes:
наблюдаем за состоянием
сравниваем с желаемым
создаём или пересоздаём ресурсы
держим систему синхронизированной
Архитектура тоже полезная для разбора: проект разделяет логику на несколько контроллеров.
Один отвечает за CRD и конфигурацию, второй наблюдает за внешними Kubernetes-объектами, третий создаёт производные ресурсы из шаблонов.
Для новичков в Kubernetes Operators это намного понятнее, чем сразу лезть в большие production-операторы.
Kroc хорошо показывает базовую механику: CRD, reconcile loop, watch, template rendering и управление жизненным циклом дочерних объектов.
https://github.com/pawelcit/kroc`a³ + b³ = c³`
Её доказал Эндрю Уайлс в 1995 году - спустя 358 лет после формулировки.
Но затем Джон Регер показал забавный пример: цикл, скомпилированный через gcc -O2, мог напечатать:
Fermat's Last Theorem has been disproved
В коде происходило signed integer overflow - переполнение знакового int. А в C это undefined behavior.
Для компилятора это значит: «такого не должно происходить». Поэтому оптимизатор имеет право строить предположения, которые человеку кажутся абсурдными.
В итоге: программа выглядит так, будто нашла контрпример к великой теореме, хотя на деле просто попала в UB.
C не опроверг Ферма.
C просто напомнил, что undefined behavior - это не ошибка выполнения, а разрешение компилятору делать почти всё что угодно.