Лента постов канала Программирование {BookFlow} (@bookflow) https://t.me/bookflow Мы публикуем лекции и книги по программированию, видеоуроки, доклады с IT конференций. Группа в https://vk.com/bookflow. По всем вопросам @evgenycarter ru https://linkbaza.com/catalog/-1001030556192 Fri, 22 Aug 2025 10:33:15 +0300
Подробнее
]]>
https://linkbaza.com/catalog/-1001030556192 Wed, 20 Aug 2025 10:10:10 +0300
Подробнее
]]>
https://linkbaza.com/catalog/-1001030556192 Tue, 19 Aug 2025 08:26:27 +0300
Подробнее
]]>
https://linkbaza.com/catalog/-1001030556192 Sun, 17 Aug 2025 18:25:55 +0300
Подробнее
]]>
https://linkbaza.com/catalog/-1001030556192 Fri, 15 Aug 2025 13:47:26 +0300
🔥 СВЕЖИЙ АД, ПРЯМО В ТВОЙ МОНИТОР! 💀

Они думали, что ад остался на Марсе…
Они ошибались.
DOOM возвращается — теперь в виде лёгкого, как бензопила в руках Мародёра, и безжалостного, как ракета в лицо кибердемону, порта на Go.
Никаких платформенных цепей. Никакого CGo. Только чистая ярость и кросс-компиляция, рвущая реальность на куски.

🔸 Запускается везде, где бьётся сердце Go
🔸 Минимум балласта — только стандартная библиотека Go
🔸 Полная линейка ада: DOOM, DOOM II, Ultimate DOOM, Final DOOM
🔸 WAD — твой пропуск в бездну: приноси своих демонов
🔸 Память в бронежилете: защита от переполнений буфера (но не от зубов какодемона)
🔸 Оружие массового поражения — кросс-компиляция под любую цель

Подготовься.
Натяни броню.
И перезаряди BFG…

https://github.com/AndreRenaud/gore

👉 @Bookflow
Подробнее
]]>
https://linkbaza.com/catalog/-1001030556192 Fri, 15 Aug 2025 11:03:37 +0300
⚙️ Микросервисы начинают тормозить под нагрузкой?

💡 Узнайте, как масштабировать и оптимизировать систему с помощью CQRS и Event Sourcing на .NET Aspire.

На открытом вебинаре «Оптимизация микросервисов с CQRS и Event Sourcing на .NET Aspire» 19 августа в 20:00 МСК разберем:
◽️ Ограничения классических микросервисов при высокой нагрузке.
◽️ Принципы разделения команд и запросов (CQRS) и хранения истории через Event Sourcing.
◽️ Практическую реализацию: сервис заказов с «команда-обработчик» и хранением событий в MongoDB.
◽️ Конфигурацию проекций для чтения данных.

❗️ Вы освоите оркестрацию через .NET Aspire (API Gateway, Order Service, база событий), внедрите логирование и трейсинг через OpenTelemetry, а также протестируете создание заказа, обновление статуса и визуализацию потока событий.

➡️ Посетите открытый урок и получите скидку на большое обучение «C# ASP.NET Core разработчик»: https://vk.cc/cOAUR7

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Подробнее
]]>
https://linkbaza.com/catalog/-1001030556192 Tue, 12 Aug 2025 05:40:04 +0300
Сессии, куки, JWT, токены, SSO и OAuth 2.0

👉 @Bookflow
Подробнее
]]>
https://linkbaza.com/catalog/-1001030556192 Mon, 11 Aug 2025 09:32:14 +0300
Подробнее
]]>
https://linkbaza.com/catalog/-1001030556192 Fri, 08 Aug 2025 09:17:39 +0300
Давай программировать стек TCP/IP. Part 1: Ethernet & ARP

Написание собственного стека TCP/IP может показаться сложной задачей. Действительно, за более чем тридцать лет существования TCP накопилось множество спецификаций. Однако основная спецификация на удивление компактна — важные части включают разбор заголовков TCP, автомат конечных состояний, контроль перегрузок и вычисление времени ожидания повторной передачи.

Наиболее распространенные протоколы второго и третьего уровней — Ethernet и IP, соответственно, — в сравнении с TCP гораздо проще. В этой серии статей мы реализуем минимальный стек TCP/IP в пространстве пользователя для Linux.

Цель этих публикаций и создаваемого ПО исключительно образовательная — углубленное изучение сетевого и системного программирования.

TUN/TAP устройства
Чтобы перехватывать сетевой трафик низкого уровня из ядра Linux, мы будем использовать TAP-устройство Linux. Если кратко, TUN/TAP устройства часто применяются приложениями в пространстве пользователя для работы с трафиком на уровне L3 и L2 соответственно. Популярным примером является туннелирование, когда пакет инкапсулируется внутри полезной нагрузки другого пакета.

Преимущество TUN/TAP устройств в том, что их легко настроить в программе в пространстве пользователя, и они уже используются во множестве программ, таких как OpenVPN.

Поскольку мы хотим строить стек сетевого взаимодействия, начиная со второго уровня, нам потребуется TAP-устройство. Мы создаем его следующим образом:


/*
* Taken from Kernel Documentation/networking/tuntap.txt
*/
int tun_alloc(char *dev)
{
struct ifreq ifr;
int fd, err;

if( (fd = open("/dev/net/tap", O_RDWR)) < 0 ) {
print_error("Cannot open TUN/TAP dev");
exit(1);
}

CLEAR(ifr);

/* Flags: IFF_TUN - TUN device (no Ethernet headers)
* IFF_TAP - TAP device
*
* IFF_NO_PI - Do not provide packet information
*/
ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
if( *dev ) {
strncpy(ifr.ifr_name, dev, IFNAMSIZ);
}

if( (err = ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0 ){
print_error("ERR: Could not ioctl tun: %s\n", strerror(errno));
close(fd);
return err;
}

strcpy(dev, ifr.ifr_name);
return fd;
}



https://www.saminiir.com/lets-code-tcp-ip-stack-1-ethernet-arp/

#cpp

👉 @Bookflow
Подробнее
]]>
https://linkbaza.com/catalog/-1001030556192 Wed, 06 Aug 2025 08:50:13 +0300
📌10 обязательных алгоритмов для работы с графами

1. Поиск в глубину (DFS)
2. Поиск в ширину (BFS)
3. Топологическая сортировка
4. Алгоритм объединения-поиска (Union Find)
5. Обнаружение циклов
6. Поиск связных компонентов
7. Проверка на двудольность графа
8. Заливка области (Flood Fill)
9. Минимальное остовное дерево
10. Кратчайший путь

♻️ Поделись, чтобы помочь другим подготовиться!

👉 @Bookflow
Подробнее
]]>
https://linkbaza.com/catalog/-1001030556192 Tue, 05 Aug 2025 21:31:06 +0300
📌7 распространённых асимптотических сложностей алгоритмов

1. O(1) — Константное время

- Время выполнения не зависит от размера входных данных.
- Пример: доступ к элементу массива по индексу.

2. O(log n) — Логарифмическое время

- Время выполнения растёт медленно при увеличении размера входных данных. Обычно встречается в алгоритмах, которые на каждом шаге делят задачу пополам.
- Пример: бинарный поиск в отсортированном массиве.

3. O(n) — Линейное время

- Время выполнения растёт прямо пропорционально размеру входных данных.
- Пример: поиск элемента в массиве перебором всех элементов.

4. O(n log n) — Линейно-логарифмическое время

- Время выполнения растёт чуть быстрее линейного, включает логарифмическое число операций для каждого элемента.
- Пример: сортировка массива быстрой сортировкой или сортировкой слиянием.

5. O(n²) — Квадратичное время

- Время выполнения пропорционально квадрату размера входных данных.
- Пример: сортировка пузырьком, где сравниваются и при необходимости меняются местами все пары элементов.

6. O(2ⁿ) — Экспоненциальное время

- Время выполнения удваивается с каждым новым элементом во входных данных. Такие алгоритмы становятся непрактичными для больших входных размеров.
- Пример: генерация всех подмножеств множества.

7. O(n!) — Факториальное время

- Время выполнения пропорционально факториалу размера входных данных.
- Пример: генерация всех перестановок множества.

♻️ Сделай репост, чтобы помочь другим.

👉 @Bookflow
Подробнее
]]>
https://linkbaza.com/catalog/-1001030556192 Thu, 31 Jul 2025 23:02:46 +0300
Подробнее
]]>
https://linkbaza.com/catalog/-1001030556192 Thu, 31 Jul 2025 13:01:16 +0300
В хабе на Хабр «Разработка публичных облаков» — свежие статьи
от инженеров MWS Cloud Platform ⬜️.

➡️ Создаем S3-хранилище с нуля. Ультимативный лонгрид про современный S3-ландшафт и нашу архитектуру Object Storage.

➡️ Multus в Kubernetes. Как мы подключили поды к сервисам в overlay-сети с IPv4 и зачем это вообще понадобилось.

➡️ DHCP-сервер облака. Как мы раздаём один и тот же IP в изолированных сетевых пространствах (VRF), какие используем опции и как мониторим доступность DHCP-серверов.

➡️ Development Platform. Зачем мы пишем общие библиотеки и компоненты, как развиваем внутренний open source и с помощью каких инструментов общаются сервисы MWS Cloud Platform и их создатели.

Если вам интересны архитектурные решения для настоящего highload'а — эти материалы будут вам полезны.

🔗 Подпишись на облачный хаб MWS — там регулярно рассказываем, как строим новое облако с нуля.
Подробнее
]]>
https://linkbaza.com/catalog/-1001030556192 Thu, 31 Jul 2025 10:33:27 +0300
Подробнее
]]>
https://linkbaza.com/catalog/-1001030556192 Wed, 30 Jul 2025 10:01:05 +0300
🚀 Вебинар: Тестируем скорость сайтов как профи с WebPageTest!

Привет, backend-разработчик! Ты уверен, что твой сайт летает, а не ползет, как улитка в пробке? 🐌💨

Бесплатный вебинар по WebPageTest покажет, как измерить скорость твоего веб-приложения без магии и шаманских бубнов: регистрация

Разберем:
✅ Как тестировать скорость правильно (спойлер: F5 – не метод)
✅ Что скрывает архитектура WebPageTest
✅ Как читать результаты тестов и не плакать

После вебинара ты сможешь:
🔹 Выбирать систему тестирования
🔹 Проводить тесты так, чтобы даже Google позавидовал
🔹 Анализировать результаты и чинить тормоза

📅 Регистрируйся → получишь напоминалку перед стартом: регистрация

P.S. Если хочешь прокачаться в оптимизации на 100%, приходи на курс «Оптимизация производительности веб-приложений». Не упусти шанс сделать сайты быстрее, чем твой коллег успевает сказать «Это не баг, это фича»! 😉

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Подробнее
]]>
https://linkbaza.com/catalog/-1001030556192 Mon, 28 Jul 2025 22:24:50 +0300
👩‍💻 Шпаргалка по работе с векторами в C++

👉 @Bookflow
Подробнее
]]>
https://linkbaza.com/catalog/-1001030556192 Sat, 26 Jul 2025 13:06:13 +0300
Git Merge vs Rebase

Одной из самых мощных возможностей Git является работа с ветками.

Однако при работе с ними нам нужно интегрировать изменения из одной ветки в другую, и способов сделать это несколько.

Есть два основных метода:


1. Merge (слияние)

Когда вы сливаете ветку A в ветку B (с помощью git merge), Git создаёт новый merge-коммит.
У этого коммита два родителя — по одному от каждой ветки, что символизирует объединение их истории.

- Это неразрушающая операция, которая сохраняет точную историю проекта.
- Merge особенно полезен в командной работе, когда важно сохранить целостность и хронологию изменений.

Минус: merge-коммиты могут "засорять" историю, усложняя отслеживание конкретных изменений.



2. Rebase (перебазирование)

Когда вы перебазируете ветку A на ветку B (с помощью git rebase), это означает:
"Давайте сделаем вид, что изменения из ветки A были сделаны поверх последних изменений ветки B."

- Rebase переписывает историю проекта, создавая новые коммиты для каждого из исходных коммитов.
- Результат — чистая, линейная история.

Минус: может быть проблематично, если над веткой работают несколько человек, ведь перебазирование переписывает историю, что усложняет совместную работу при уже опубликованных ветках.



Когда что использовать?

- Merge — когда важно сохранить полную историю и вы работаете с общими ветками. Идеально для слияния feature-веток в main или develop.
- Rebase — для личных веток или когда нужна чистая, линейная история для удобства отслеживания изменений.

Важно: не делайте rebase публичной истории. Если ветка уже опубликована и с ней работают другие, переписывание истории приведёт к конфликтам и путанице.


👉 @Bookflow
Подробнее
]]>
https://linkbaza.com/catalog/-1001030556192 Sat, 26 Jul 2025 08:03:08 +0300
Параллелизм vs Конкурентность!

Смотреть на Rutube 📺

👉 @Bookflow
Подробнее
]]>
https://linkbaza.com/catalog/-1001030556192 Fri, 25 Jul 2025 08:01:18 +0300
Нотация «О-большое» за 3 минуты

Смотреть на Rutube 📺

👉 @Bookflow
Подробнее
]]>