Программирование {BookFlow}
16.7K subscribers
1.51K photos
450 videos
145 files
2.04K links
Мы публикуем лекции и книги по программированию, видеоуроки, доклады с IT конференций, новости технологий.

Группа в https://vk.com/bookflow.

По всем вопросам @evgenycarter

РКН https://clck.ru/3KoAbH
Download Telegram
Media is too big
VIEW IN TELEGRAM
BIOS и UEFI / стадии UEFI / драйвера и протоколы

Сергей Пушкарёв — руководитель отдела разработки BIOS в YADRO.
Сергей начал работу с BIOS и UEFI ещё в университете и может очень много рассказать об этой области.

С Еленой Лепилкиной и Антоном Афанасьевым наш герой во всех подробностях разобрал, что происходит на самом низком уровне софта после того, как пользователь нажимает кнопку включения компьютера. Параллельно осветил разные подходы и типичные проблемы разработки в своей сфере, тонкости взаимодействия драйверов, а также разницу между BIOS и UEFI. А напоследок ответил, к чему приводят баги в BIOS и как стараются их избежать, если цена ошибки слишком высока.

0:00 - Тизер
1:12 - Представление Сергея Пушкарева
2:11 - Карьерный путь Сергея
4:50 - История развития BIOS и UEFI и разница между ними
11:28 - Достоинства UEFI
14:14 - Стадии работы UEFI
15:09 - Что работает до UEFI
18:25 - стадия SEC и режим Cache-Is-RAM
22:58 - стадия PEI
27:54 - переход в 64-битный режим
28:42 - PE-файлы,Terse Executable и вопросы производительности
30:46 - DXE стадия и запуск драйверов
33:02 - Протоколы для взаимодействия драйверов
37:58 - Эволюция спецификации: новые архитектуры, Device path для нового железа
40:31 - Загрузка ноутбука через Wi-Fi, разница драйверов Linux и UEFI
42:58 - Работа разработчиков BIOS
44:06 - Баги в UEFI
46:45 - Разработка UEFI под новую платформу
50:38 - Взаимодействие BIOS с BMC, Redfish
53:22 - Разработка драйвера на EDK2
59:55 - Нужен ли ассемблер разработчику BIOS
1:04:13 - Как поменялся процесс загрузки с приходом UEFI
1:05:51 - Взаимодействие BIOS и операционной системы
1:07:20 - Как UEFI работает на ARM
1:11:29 - VFR - DSL-язык для описания меню
1:14:23 - Активное использование Open-Source
1:16:22 - Рынок компаний разработчиков UEFI
1:20:33 - Разработка UEFI для системы, которой нет в железе
1:21:37 - Баги в релизах и процесс тестирования
1:25:59 - Дальнейшее развитие BIOS: ускорение работы, драйверы на Rust
1:35:07 - Заключение

источник

👉 @Bookflow
🔥83👍2
Media is too big
VIEW IN TELEGRAM
Ядро в операционной системе: Скрытая мощь, управляющая каждым компьютером!

Ядро в операционной системе — это её сердце, невидимый, но жизненно важный слой, который обеспечивает работу всего: от приложений до оборудования.

В этом разборе я объясню:
Что такое ядро на самом деле
Как оно управляет временем ЦП, памятью, файлами и «железом»
В чём разница между монолитным и микроядром
Почему инженеры до сих пор помешаны на проектировании ядер
Где ещё встречаются «ядра» — например, в GPU и квантовых вычислениях

Будь ты системным инженером или просто интересующимся, как запускается твой компьютер — это видео проведёт тебя по архитектуре и внутреннему устройству ядра с понятными аналогиями и наглядными примерами.


🕒 Таймкоды:
0:00 – Вступление: Почему ядра важнее, чем ты думаешь
0:44 – Что такое ядро? (Пользовательский режим vs режим ядра)
1:32 – 4 ключевые задачи ядра (процессы, память, файловый ввод-вывод, прерывания)
3:30 – Почему инженеры так одержимы проектированием ядер
3:48 – Монолитное и микроядро: объяснение компромиссов
5:00 – Особые ядра: GPU, ИИ и квантовые системы
5:50 – Заключение: Биение сердца каждого компьютера

источник

👉 @Bookflow
👍81
🚀 Как выстроить архитектуру компании так, чтобы поддержать стратегические цели и цифровую трансформацию?

Корпоративная архитектура — это не просто набор диаграмм, а система доменов: бизнес-процессы, IT-сервисы, данные, инфраструктура.

На открытом уроке 22 июля в 19:00 МСК эксперты из Otus и Sila Union расскажут, как выделять эти домены и моделировать их в архитектурном репозитории.

🔹 Аналитики и бизнес-архитекторы узнают, как связать бизнес-процессы с IT-ландшафтом.

🔹 CTO и тимлиды получат инструменты для обоснованных инвестиций в цифровизацию.

🔹 CPO и продуктовые лидеры научатся проектировать масштабируемые продукты и интегрировать их в архитектуру.

Мероприятие проходит в преддверии старта курса «Enterprise Architect». Все участники получат скидку на обучение!

👉 Зарегистрируйтесь и расширьте свои архитектурные навыки: https://vk.cc/cNJ7pn

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
👍2
Media is too big
VIEW IN TELEGRAM
7 обязательных стратегий для масштабирования вашей базы данных

Смотеть на Rutube 📺

👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥54
Media is too big
VIEW IN TELEGRAM
DevOps vs SRE vs платформенная инженерия — развенчание крупных заблуждений

Смотеть на Rutube 📺

👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Параллелизм против Конкурентности — это не одно и то же

➡️𝐂𝐨𝐧𝐜𝐮𝐫𝐫𝐞𝐧𝐜𝐲 (Конкурентность):
Конкурентность означает, что приложение продвигается сразу по нескольким задачам одновременно.

Хотя одно ядро процессора может выполнять только одну задачу за раз, оно достигает конкурентности за счёт быстрого переключения между задачами.

Пример: Слушать музыку и писать код одновременно. Процессор так быстро переключается между задачами, что создаётся ощущение одновременного выполнения.

Основная цель конкурентности — максимально загрузить CPU, минимизируя время простоя.


➡️𝐏𝐚𝐫𝐚𝐥𝐥𝐞𝐥𝐢𝐬𝐦 (Параллелизм):
Параллелизм означает одновременное выполнение нескольких задач.

Для достижения параллелизма задачи разбиваются на независимые подзадачи и обрабатываются одновременно на нескольких CPU, ядрах или GPU.

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

Цель параллелизма — увеличение скорости обработки за счёт параллельного выполнения задач.


Они не исключают друг друга:

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

👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73🤡2🫡1💘1
Media is too big
VIEW IN TELEGRAM
7 концепций системного дизайна, объяснённые за 10 минут

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

👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤‍🔥1
Media is too big
VIEW IN TELEGRAM
8 самых важных концепций системного дизайна, которые вы должны знать

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

👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🤡2🤮1
Media is too big
VIEW IN TELEGRAM
Свойства ACID в базах данных с примерами

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

👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🤮1🤡1
Media is too big
VIEW IN TELEGRAM
API, объясняю за 6 минут

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

👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍6🔥1
Media is too big
VIEW IN TELEGRAM
Нотация «О-большое» за 3 минуты

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

👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Media is too big
VIEW IN TELEGRAM
Параллелизм vs Конкурентность!

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

👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
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
👍73
👩‍💻 Шпаргалка по работе с векторами в C++

👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🤮1
🚀 Вебинар: Тестируем скорость сайтов как профи с WebPageTest!

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

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

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

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

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

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

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Что_каждый_системный_программист_должен_знать_о_параллелизме.pdf
1.3 MB
Что каждый системный программист должен знать о параллелизме
Мэтт Клайн

Системные программисты хорошо знакомы с такими инструментами, как мьютексы, семафоры и условные переменные.
Но как они работают? Как писать параллельный код, когда этих инструментов нет — например, при работе ниже уровня операционной системы в встраиваемой среде или когда нельзя блокировать выполнение из‑за жёстких временных ограничений? И если компилятор и процессор «сговариваются», превращая ваш код в то, чего вы не писали, выполняя его в порядке, которого вы не ожидали, то как вообще работают многопоточные программы?

Параллелизм — это сложная и неочевидная тема, но давайте попробуем разобрать некоторые её основы.

👉 @Bookflow
👍3
Детальный обзор полей Галуа

"Попросите Якоби или Гаусса публично высказать своё мнение — не о истинности, а о важности этих теорем. Позже, я надеюсь, найдутся люди, которым будет выгодно разобраться во всём этом хаосе."

Этими словами заканчивалось письмо Эвариста Галуа, написанное для своего друга Огюста Шевалье за два дня до его смерти от полученных на дуэли ран на 21 году жизни. Ни Якоби, ни Гаусс в его теоремах не разобрались, зато спустя 15 лет разобрался Жозеф Лиувилль и опубликовал работы Галуа, ставшие впоследствии фундаментом современной алгебры, известные сейчас как теория Галуа. В статье расскажу про одну из частей этой теории - поля Галуа, получившая настолько повсеместное применение в криптографии и избыточном кодировании, что Intel и AMD выпустили набор процессорных расширений для эффективной реализации операций над этими полями.

Заметка! Если вам довелось использовать/реализовывать поля Галуа, то большая часть статьи для вас скорее всего будет не интересна, но возможно в последних разделах будет что-то для вас новое.

https://habr.com/ru/articles/916740/

👉 @Bookflow
👍42
📌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
👍64
📌10 обязательных алгоритмов для работы с графами

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

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

👉 @Bookflow
👍2