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

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

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

РКН https://clck.ru/3KoAbH
Download Telegram
🔍 Мини-гайд: Индексы в PostgreSQL

1. Зачем нужны индексы?

▪️ Ускоряют SELECT, JOIN, ORDER BY, GROUP BY.
▪️Снижают нагрузку при выборках без полного сканирования таблицы.

2. Типы индексов

▪️B-tree (по умолчанию): точный поиск (=), диапазоны (<, >), сортировки.


CREATE INDEX idx_users_email ON users(email);

▪️Hash: для точного сравнения, но используется редко.
▪️GIN: массивы и полнотекстовый поиск.


CREATE INDEX idx_docs_content
ON documents USING GIN(to_tsvector('russian', content));

▪️GiST: геоданные (PostGIS), диапазоны (int4range, tsrange).
▪️BRIN: очень большие таблицы, где данные «почти упорядочены» (по дате).


CREATE INDEX idx_logs_created_at
ON logs USING BRIN(created_at);


3. Практические советы

▪️Оценивайте запросы через EXPLAIN ANALYZE или pg_stat_statements.
▪️Не создавайте индекс «про запас»: каждый замедляет INSERT/UPDATE/DELETE.
▪️Составные индексы: порядок колонок критичен.


CREATE INDEX idx_users_city_age
ON users(city, age);

▪️Избегайте низкокардинальных колонок (boolean, ENUM) — индекс неэффективен, если фильтр возвращает большинство строк.
▪️Актуализируйте статистику: запускайте ANALYZE после больших загрузок/удалений.
▪️Удаляйте устаревшие индексы:


DROP INDEX IF EXISTS idx_old_column;

▪️Используйте REINDEX для устранения фрагментации:


REINDEX INDEX idx_users_email;


4. Подводные камни

▪️Бесполезный индекс: если WHERE возвращает ≥90% строк (например, is_active = true при 99% активных).
▪️Функциональные индексы: CREATE INDEX ON table ((LOWER(name))) сработает только при точном вызове WHERE LOWER(name) = 'ivan'.
▪️Блокировки: для создания без блокировки пишите:


CREATE INDEX CONCURRENTLY idx_orders_status ON orders(status);


Но этот процесс дольше и требует больше места.
▪️Индексы на внешних ключах: без них при удалении/обновлении родительской записи будут долгие сканы.

Итог:
Индексы — мощный инструмент, если их грамотно использовать. Анализируйте планы запросов, не создавайте лишних, следите за статистикой и удаляйте устаревшие.

Сохрани, чтобы не забыть, и поделись с коллегами. А как ты выбираешь индексы у себя? Пиши в комментариях!

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

📲 Мы в MAX

👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2🏆1
Как избежать выгорания программисту 🔥👨‍💻

Выгорание – частая “болезнь” айтишников: дедлайны давят, код не сходится, а в голове постоянно мысли о задачах. Чтобы не оказаться “выгоревшим” через пару месяцев интенсивной работы, обратите внимание на эти практики:

1. Распознавайте первые признаки

🔹Хроническая усталость, даже после полноценного сна
🔹Потеря интереса к проектам, раньше приятным казавшимся
🔹Снижение концентрации и продуктивности
🔹Раздражительность, нервозность без видимых причин

Если вы заметили хотя бы пару пунктов – пора действовать заранее.

2. Организуйте рабочий процесс

🔹Чёткое планирование: разбейте крупные задачи на маленькие шаги. Каждодневный список дел (to-do) поможет “не тонуть” в мелочах.
🔹Техника Pomodoro: 25 минут работы + 5 минут отдыха. После 4 циклов — длинный перерыв 15–20 минут. Такой ритм позволяет сохранять свежесть мыслей.
🔹Ограничьте время “погружения”: не сидите за кодом по 12 часов подряд. Оптимальная рабочая смена для программиста – 6–8 часов с регулярными паузами.

3. Выделяйте время на восстановление

🔹Физическая активность: хотя бы 30 минут в день. Прогулка, лёгкая пробежка, упражнения на растяжку между задачами улучшают кровообращение и снимают напряжение.
🔹Сон и режим: ложитесь и вставайте в одно и то же время, даже в выходные. Качественный ночной сон (7–8 часов) – залог продуктивности и хорошего настроения.
🔹Цифровой детокс: вечером полностью отвяжитесь от гаджетов, чтобы мозг успел “отключиться” от задач. Ограничьте соцсети и мессенджеры минимум за час до сна.

4. Умейте сказать “нет”

🔹Реалистичные дедлайны: если видите, что не успеваете, обсудите с менеджером или заказчиком перенос. Лучше честно признаться, чем до последней минуты “ломать” себя.
🔹Не берите задачу сверх возможностей: если проект слишком сложный или сроки нереальны, предложите альтернативный подход или помощь коллег.

5. Баланс между “я” и “кодом”

🔹Хобби вне IT: найдите увлечение, не связанное с технологией — музыка, рисование, спорт, настольные игры. Это переключит мозг и наполнит энергией.
🔹Кружки и сообщества: общайтесь с теми, кто разделяет ваши интересы: книжные клубы, клубы настольных игр, спортивные секции. Социальная поддержка помогает “не застрять” только в рабочих задачах.

6. Периодические “мини-отпуска”

🔹Отпуск хотя бы раз в полгода: даже короткая поездка на уик-энд без работы способна “перезагрузить” голову.
🔹Регулярные выходные без диагоналки: не проверяйте почту, не отвечайте на рабочие сообщения. Дайте себе реально отдохнуть.

7. Постоянное обучение – но без перегрузок

🔹Учитесь постепенно: вместо марафонов видеокурсов лучше 30 минут в день. Так новые знания встраиваются в мозг легче и без стресса.
🔹Не гонитесь за всеми трендами: выбирайте то, что важно именно для ваших проектов и целей, а не всё подряд.

8. Работайте в команде и делегируйте

🔹Парное программирование (pair programming): совместная работа помогает находить ошибки быстрее и снижает психологическую нагрузку.
🔹Помощь коллег: если застряли, не мучайтесь в одиночку – попросите совета. Иногда взгляд со стороны решает проблему за пару минут.

9. Осознанность и простые практики

🔹Медитация или дыхательные упражнения (5–10 минут утром/вечером). Помогают снизить уровень тревожности.
🔹Ведение дневника: записывайте мысли и идеи, избавляясь от “ментального шума”. Это упорядочивает внутреннее состояние.

10. Регулярно оценивайте свой “уровень выгорания”

🔹Раз в месяц задавайте себе вопросы: “Насколько я воодушевлён проектом?”, “Что вызывает раздражение?”, “Когда в последний раз я отдыхал без мыслей о работе?”
🔹Если градус недовольства растёт – сразу включайте превентивные меры: пора добавить отдыха, сменить активность или обратиться к ментору/психологу.

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

📲 Мы в MAX

👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣5🔥43👍2👏1
This media is not supported in your browser
VIEW IN TELEGRAM
🌦 Weathr - погода прямо в терминале

Если ты живёшь в консоли, то это маст-хэв: weathr рисует живую погоду в виде ASCII-анимаций - дождь, снег, грозы, смена дня/ночи и даже пролетающие самолётики. Данные тянет из Open-Meteo.

Что умеет:

🔴realtime-погода + атмосферные ASCII-анимации
🔴автоопределение локации (по IP) или ручные координаты в конфиге
🔴гибкие единицы измерения (metric/imperial)
🔴режим симуляции погоды для теста (--simulate rain/snow/thunderstorm/...)

Установка (самый простой вариант):
cargo install weathr

Про приватность: авто-локация делает запрос к ipinfo.io, но это опционально - можно отключить и указать координаты вручную.

⭐️ Репозиторий: GitHub https://github.com/Veirt/weathr

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

📲 Мы в MAX

👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍65🔥4👏2🥰1😁1
RAG против Агентов (RAGs vs Agents)

Спросите LLM (большую языковую модель) о данных вашей компании, и она начнет гадать. Два паттерна, которые исправляют это - RAG и агенты, и они решают разные задачи.

RAG (Поисково-ориентированная генерация)

RAG объединяет LLM с поиском информации, чтобы обосновать ответы фактами. Этот процесс состоит из 4 шагов:

Шаг 1: Запрос пользователя (User Query) векторизуется и отправляется на этап поиска (Retrieval).
Шаг 2: Компонент поиска извлекает наиболее релевантные фрагменты из базы знаний (Knowledge Base: PDF-файлы, вики-страницы и т.д.).
Шаг 3: Эти фрагменты вставляются в промпт в качестве контекста.
Шаг 4: LLM пишет ответ, опираясь на извлеченный текст (Answer grounded).

Особенности: Один поиск. Одна генерация. Дешево, предсказуемо и легко поддается отладке.



Агенты (Agents)

Агенты оборачивают LLM в цикл рассуждений с набором инструментов (Tools) для выполнения конкретных действий.

Шаг 1: Запрос пользователя поступает в среду выполнения агента (Agent runtime) — цикл рассуждений вокруг LLM.
Шаг 2: LLM анализирует цель и выбирает нужный инструмент (Чтение, Запись, Редактирование, Bash и т.д.).
Шаг 3: Среда выполнения (runtime) запускает инструмент и передает результат обратно в LLM.
Шаг 4: LLM снова проводит рассуждения, выбирает следующий инструмент и повторяет этот цикл, пока задача не будет выполнена.

Особенности: Более гибко. Расходует больше токенов. Сложнее отлаживать, так как ошибки накапливаются от шага к шагу.


Главное эмпирическое правило (из центральной части картинки):

• Используйте RAG, когда ответ находится внутри ваших документов.
• Используйте Агента, когда решение задачи требует действий в других системах.

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

📲 Мы в MAX

👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1
⚡️ 10 терминальных инструментов, которые делают работу


1. zoxide
Умный cd, который запоминает твои привычки
https://github.com/ajeetdsouza/zoxide

2. fzf
Fuzzy-поиск файлов, процессов, git и истории
https://github.com/junegunn/fzf

3. ripgrep
Быстрый поиск по коду с учётом .gitignore
https://github.com/BurntSushi/ripgrep

4. lazygit
Удобный интерфейс для работы с git в терминале
https://github.com/jesseduffield/lazygit

5. starship
Лёгкий и быстрый prompt с полезной информацией
https://github.com/starship/starship

6. atuin
История команд с поиском и синхронизацией
https://github.com/atuinsh/atuin

7. bat
Просмотр файлов с подсветкой синтаксиса
https://github.com/sharkdp/bat

8. eza
Современная замена ls с иконками и цветами
https://github.com/eza-community/eza

9. yazi
Быстрый файловый менеджер в терминале
https://github.com/sxyazi/yazi

10. delta
Удобный просмотр git diff с подсветкой
https://github.com/dandavison/delta

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

📲 Мы в MAX

👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32🔥2
🚀 Подборка полезных IT каналов в Max


Системное администрирование, DevOps 📌

https://max.ru/i_odmin Все для системного администратора
https://max.ru/bash_srv Bash Советы
https://max.ru/sysadminof Книги для админов, полезные материалы
https://max.ru/i_odmin_book Библиотека Системного Администратора
https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др.
https://max.ru/tipsysdmin Типичный Сисадмин

Excel лайфхак 📌
https://t.me/Excel_lifehack Excel лайфхак

1C разработка 📌
https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С

Программирование C++📌
https://max.ru/cpp_lib Библиотека C/C++ разработчика

Программирование Go📌
https://max.ru/golang_lib Библиотека Go (Golang) разработчика

Программирование React📌
https://max.ru/react_lib React

Программирование Python 📌
https://max.ru/python_of Python академия.
https://max.ru/BookPython Библиотека Python разработчика

Java разработка 📌
https://max.ru/bookjava Библиотека Java разработчика

GitHub Сообщество 📌
https://max.ru/githublib Интересное из GitHub

Базы данных (Data Base) 📌
https://max.ru/database_info Все про базы данных

Фронтенд разработка 📌
https://max.ru/frontend_1 Подборки для frontend разработчиков

Библиотеки 📌
https://max.ru/programmist_of Книги по программированию
https://max.ru/proglb Библиотека программиста
https://max.ru/bfbook Книги для программистов

Программирование 📌
https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций
https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT
https://max.ru/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻

Шутки программистов 📌
https://max.ru/itumor Шутки программистов

Защита, взлом, безопасность 📌
https://max.ru/thehaking Канал о кибербезопасности
https://max.ru/xakkep_1 Хакер Free

Книги, статьи для дизайнеров 📌
https://max.ru/odesigners Статьи, книги для дизайнеров

Математика 📌
https://max.ru/Pomatematike Канал по математике
https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике

Вакансии 📌
https://max.ru/progjob Вакансии в IT

Мир технологий 📌
https://max.ru/mir_teh Канал для любознательных


Бонус 📌
https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга
https://max.ru/mockva_life Свежие новости Москвы
https://max.ru/piterspb Питер Новости: Санкт-Петербург / СПБ / ДТП
🖕6💩3👎1🤡1
🚀 Регулярные выражения (RegEx) в Linux: Полная шпаргалка

Сохраняйте в избранное, чтобы всегда было под рукой при работе с grep, sed, awk или при написании Bash-скриптов! 📌

🧩 Базовые символы (Matching Characters)

. — Любой символ (кроме переноса строки)
\w — Буквенно-цифровой символ + подчеркивание
\W — Любой НЕ буквенно-цифровой символ
\d — Любая цифра (0-9)
\D — Любой символ, кроме цифры
\s — Пробельный символ (пробел, таб, перенос)
\S — Непробельный символ

⚓️ Якоря (Anchors)

^ — Начало строки
$ — Конец строки
\b — Граница слова
\B — Не граница слова

🧮 Квантификаторы (Quantifiers)

* — 0 или более вхождений
+ — 1 или более вхождений
? — 0 или 1 вхождение
{n} — Ровно n вхождений
{n,}n или более вхождений

👻 Жадные vs Ленивые (Greedy vs Lazy)

* — Жадный (захватывает как можно больше символов)
*? — Ленивый (захватывает как можно меньше символов)
+?, ??, {n}? — Ленивые версии остальных квантификаторов

🗂 Классы символов (Character Classes)

[abc] — Любой символ из списка: a, b или c
[^abc] — Любой символ, КРОМЕ a, b или c
[a-z] — Любая буква в диапазоне от a до z
[0-9] — Любая цифра от 0 до 9

📦 Группы и Диапазоны (Groups and Ranges)

(abc) — Захватывающая группа (сохраняет совпадение)
(?:abc) — Незахватывающая группа (ищет, но не сохраняет)
| — Логическое ИЛИ (например, cat|dog)
\1, \2, \3 — Ссылки на 1-ю, 2-ю, 3-ю захваченные группы

🚩 Флаги / Модификаторы (Flags)

g — Глобальный (ищет все совпадения, а не только первое)
i — Игнорировать регистр (A = a)
m — Многострочный (^ и $ работают для каждой строки текста)
s — Dotall (позволяет точке . совпадать с переносами строк)
x — Extended (позволяет использовать пробелы и комментарии в самом RegEx)

🛡 Экранирование (Escaping)

\ — Используется для экранирования спецсимволов, чтобы искать их буквально.
Символы, которые нужно экранировать: [ \ ^ $ . | ? * + ( ) { }

👀 Опережающие и ретроспективные проверки (Lookarounds)

(?=abc) — Позитивный lookahead (совпадает, если дальше идет abc)
(?!abc) — Негативный lookahead (совпадает, если дальше НЕ идет abc)
(?<=abc) — Позитивный lookbehind (совпадает, если перед ним идет abc)

🌐 Свойства Unicode (работают с флагом u)

\p{L} — Любая буква из любого языка
\p{N} — Любой числовой символ
\p{Sc} — Любой символ валюты

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

📲 Мы в MAX

👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥31🏆1
🔄 Git шпаргалка: в чем разница между fetch, pull и pull --rebase?

Казалось бы, все эти команды нужны для того, чтобы забрать изменения из удаленного репозитория. Но дьявол кроется в деталях (и в структуре вашей истории коммитов!).


🟢 1. git fetch

Вы скачиваете новые коммиты из удаленного репозитория (C и D), но они не сливаются с вашим кодом автоматически.

Что происходит: Обновляется только указатель origin/main. Ваша локальная ветка main с вашими коммитами (X и Y) остается нетронутой.
Когда использовать: Когда нужно просто посмотреть, что там нового написали коллеги, не ломая свою текущую работу.

🔵 2. git pull

Эта команда делает fetch, а затем сразу же автоматически пытается слить (merge) удаленные изменения с вашими локальными.

•. Что происходит: Создается новый специальный мерж-коммит (M), который соединяет ветку с изменениями коллег и вашу ветку. Ваши коммиты X и Y остаются в исходном виде.
•. Когда использовать: Самый частый сценарий, но будьте готовы к тому, что история коммитов превратится в «паутину» из-за обилия мерж-коммитов.

🟣 3. git pull --rebase

Комбинация fetch + rebase. Вместо создания мерж-коммита, Git берет ваши локальные коммиты и «переносит» их на самый верх свежих изменений из удаленного репозитория.

•. Что происходит: Старые коммиты X и Y стираются, а вместо них создаются новые X' и Y', которые аккуратно встают после коммитов C и D.
•. Когда использовать: Когда вы хотите, чтобы история вашего репозитория выглядела как одна красивая прямая линия, без лишнего мусора.


💡 Краткий итог:

• Хотите просто проверить? 👉 git fetch
•. Быстро обновиться (по классике)? 👉 git pull
• Нужна чистая, линейная история коммитов? 👉 git pull --rebase


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

📲 Мы в MAX

👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41🔥1
Как работает Git?

Для начала важно понять, где хранится наш код. Обычно предполагается, что существует только два места: удалённый сервер (например, GitHub) и локальный компьютер. Однако это не совсем так. Git использует три локальных хранилища на нашем компьютере, а значит, наш код может находиться в четырёх местах:
Рабочая директория (Working directory): место, где мы редактируем файлы.
Область подготовки (Staging area): временное место, где файлы находятся перед коммитом.
Локальный репозиторий (Local repository): содержит закоммиченный код.
Удалённый репозиторий (Remote repository): сервер, где хранится код (например, GitHub).

Большинство команд Git в основном перемещают файлы между этими четырьмя локациями.

Теперь вопрос к тебе: знаешь ли ты, с каким хранилищем работает команда git tag?
Эта команда позволяет добавлять аннотации к коммиту.

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

📲 Мы в MAX

👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1
В чём разница между аутентификацией на сессиях и JWT?

Многие разработчики не знают об этом различии, хотя оно критически важно.

Большинство веб-приложений используют один из двух подходов к аутентификации:
сессии (где состояние хранится на сервере) или JWT (где состояние передаётся вместе с клиентом).

1. Аутентификация на основе сессий

Когда пользователь входит в систему, бэкенд генерирует случайный session ID, сохраняет его в кэше или базе данных и устанавливает этот ID как HttpOnly cookie в браузере. При каждом запросе браузер отправляет cookie, сервер находит соответствующую запись и восстанавливает пользовательский контекст.

Такой подход:
• сохраняет чувствительные данные на сервере;
• позволяет мгновенно завершить сессию удалением записи.

Преимущества сессий:
🔹 Мгновенная деактивация доступа (“выйти отовсюду”) - одной строкой: просто удалить запись из Redis или SQL.
🔹 Секреты никогда не покидают сервер, что снижает риск утечки.
🔹 Отлично подходит для малых и средних систем, где кэш - не узкое место.

Но: при горизонтальном масштабировании понадобятся «липкие» сессии или реплицированный кэш, что добавляет задержки и усложняет инфраструктуру.

2. Аутентификация с помощью JWT (JSON Web Token)

После входа сервер подписывает JWT, содержащий:
• заголовок (например, alg, typ),
• полезную нагрузку (claims - sub, role и т.д.),
• цифровую подпись.

JWT - это просто base64-строка (не шифрованная): любой может прочитать данные, но подделать их может только владелец секрета. Сервер не хранит состояние - любой узел может локально проверить подпись и доверять данным.

Преимущества JWT:
🔸 Беспамятный (stateless): не требует общего хранилища, подходит для микросервисов и edge-нод.
🔸 Удобен для SPA и мобильных приложений, напрямую работающих с бэкендами.
🔸 Лёгкий: помещается в заголовок Authorization или cookie.

Минус: JWT нельзя отозвать после выдачи - он действителен до истечения срока, так что «экстренный выход» или блокировка аккаунта требуют дополнительной логики.

Вывод:
• Если главное - возможность немедленно отозвать доступ, выбирай сессии.
• Если нужна масштабируемость без состояния, выбирай JWT, но помни, что токены нельзя «забрать обратно» после их выдачи.

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

📲 Мы в MAX

👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2👌1
🚀 Как улучшить производительность API?
Оптимизация API — ключ к быстрой и стабильной работе приложений. Вот 5 проверенных техник:

1️⃣ Пагинация (Pagination)
Разбиваем большой объем данных на страницы.
🔹 Уменьшает нагрузку
🔹 Позволяет обрабатывать большие выборки

2️⃣ Асинхронное логирование (Async Logging)
Сохраняем логи в буфер, а затем на диск.
🔹 Меньше задержек
🔹 Выше пропускная способность

3️⃣ Кэширование (Caching)
Часто используемые данные храним в кэше, а не в БД.
🔹 Быстрый доступ
🔹 Меньше запросов к базе данных

4️⃣ Сжатие данных (Payload Compression)
Сжимаем запросы и ответы.
🔹 Уменьшение объема трафика
🔹 Быстрая загрузка/выгрузка

5️⃣ Пул соединений (Connection Pool)
Повторно используем открытые соединения с БД.
🔹 Снижение накладных расходов
🔹 Повышение эффективности

📌 Используй эти подходы, чтобы ускорить свой API и улучшить пользовательский опыт.

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

📲 Мы в MAX

👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
🚀 Подборка полезных IT каналов в Max


Системное администрирование, DevOps 📌

https://max.ru/i_odmin Все для системного администратора
https://max.ru/bash_srv Bash Советы
https://max.ru/sysadminof Книги для админов, полезные материалы
https://max.ru/i_odmin_book Библиотека Системного Администратора
https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др.
https://max.ru/tipsysdmin Типичный Сисадмин

Excel лайфхак 📌
https://t.me/Excel_lifehack Excel лайфхак

1C разработка 📌
https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С

Программирование C++📌
https://max.ru/cpp_lib Библиотека C/C++ разработчика

Программирование Go📌
https://max.ru/golang_lib Библиотека Go (Golang) разработчика

Программирование React📌
https://max.ru/react_lib React

Программирование Python 📌
https://max.ru/python_of Python академия.
https://max.ru/BookPython Библиотека Python разработчика

Java разработка 📌
https://max.ru/bookjava Библиотека Java разработчика

GitHub Сообщество 📌
https://max.ru/githublib Интересное из GitHub

Базы данных (Data Base) 📌
https://max.ru/database_info Все про базы данных

Фронтенд разработка 📌
https://max.ru/frontend_1 Подборки для frontend разработчиков

Библиотеки 📌
https://max.ru/programmist_of Книги по программированию
https://max.ru/proglb Библиотека программиста
https://max.ru/bfbook Книги для программистов

Программирование 📌
https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций
https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT
https://max.ru/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻

Шутки программистов 📌
https://max.ru/itumor Шутки программистов

Защита, взлом, безопасность 📌
https://max.ru/thehaking Канал о кибербезопасности
https://max.ru/xakkep_1 Хакер Free

Книги, статьи для дизайнеров 📌
https://max.ru/odesigners Статьи, книги для дизайнеров

Математика 📌
https://max.ru/Pomatematike Канал по математике
https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике

Вакансии 📌
https://max.ru/progjob Вакансии в IT

Мир технологий 📌
https://max.ru/mir_teh Канал для любознательных


Бонус 📌
https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга
https://max.ru/mockva_life Свежие новости Москвы
https://max.ru/piterspb Питер Новости: Санкт-Петербург / СПБ / ДТП
🖕3👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Алгоритм Дейкстры - это классический алгоритм на графах, который находит кратчайшие пути от одной заданной вершины (источника) до всех остальных вершин в графе.

Проще говоря, это цифровой аналог поиска самого быстрого маршрута на карте от вашего дома до любой другой точки в городе.

🔑 Главная фишка (жадный выбор)

Алгоритм работает по «жадному» принципу: на каждом шаге он выбирает ту вершину, до которой на данный момент известен самый короткий путь, фиксирует его как окончательный, а затем проверяет, нельзя ли через эту новую вершину быстрее добраться до её соседей (этот процесс называется релаксацией рёбер).

⚙️ Как он работает (на пальцах)

1. Вы стоите в начальной точке. Расстояние до неё равно 0, до всех остальных точек - бесконечность (мы их ещё не знаем).

2. Вы смотрите на всех соседей текущей точки и считаете расстояние до них. Если новый путь короче того, что был записан раньше, обновляете значение.

3. Отмечаете текущую точку как «посещённую» - сюда мы уже нашли самый короткий маршрут.

4. Выбираете среди непосещённых точек ту, до которой сейчас получилось самое маленькое расстояние, перемещаетесь в неё и повторяете шаг 2.

5. Алгоритм завершается, когда все доступные точки будут посещены.


⚠️ Важное ограничение

• Алгоритм Дейкстры корректно работает только графах с неотрицательными весами рёбер.
• Если в графе есть дороги с «отрицательным весом» (например, за проезд по участку вам доплачивают, а не вы платите), алгоритм уйдёт в ступор или выдаст неверный результат. Для таких задач используют алгоритм Беллмана-Форда.

🛠 Где применяется?

Навигаторы и карты (Google Maps, Яндекс.Карты) - поиск кратчайшего автомобильного маршрута.
Сетевая маршрутизация - протокол OSPF (Open Shortest Path First) использует этот алгоритм для поиска кратчайшего пути передачи пакетов данных в компьютерных сетях.
Игры - поиск путей для юнитов или персонажей на карте.

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

📲 Мы в MAX

👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥4
💡 Топ-15 строительных блоков системного дизайна, которые стоит знать:

1. Балансировщик нагрузки (Load Balancer): Распределяет входящий трафик между несколькими серверами, предотвращая перегрузку одного из них. Повышает доступность, устойчивость к сбоям и уменьшает время отклика.

2. API-шлюз (API Gateway): Единая точка входа для всех клиентских запросов в архитектуре микросервисов. Обрабатывает маршрутизацию, аутентификацию, ограничение частоты запросов и агрегацию данных.

3. DNS (Система доменных имён): Преобразует читаемые доменные имена в IP-адреса.

4. Кэш (Cache): Хранит часто запрашиваемые данные в памяти. Существенно снижает задержки и нагрузку на базу данных.

5. CDN (Сеть доставки контента): Доставляет статический контент (изображения, CSS, JS и т.п.) с серверов, расположенных ближе к пользователю. Снижает задержки и расход трафика, особенно на глобальном уровне.

6. База данных (Database): Основное хранилище данных. Может быть SQL или NoSQL в зависимости от требований. Поддерживает запросы, индексацию, транзакции и надёжность.

7. API (Программные интерфейсы): Определяют, как сервисы взаимодействуют между собой, часто через HTTP или gRPC. Обеспечивают модульность и чёткое разделение ответственности.

8. Микросервисы (Microservices): Разделяют монолитное приложение на независимо развёртываемые сервисы. Повышают гибкость, изоляцию ошибок и масштабируемость.

9. Ограничитель запросов (Rate Limiter): Контролирует количество запросов от пользователя или сервиса в заданный период. Защищает API от злоупотреблений и обеспечивает справедливость.

10. Объектное хранилище (Object Storage): Хранит большие бинарные объекты (изображения, видео, резервные копии) с высокой доступностью и надёжностью. Примеры — AWS S3, Google Cloud Storage и др.

11. Очередь сообщений (Message Queue): Обеспечивает асинхронную коммуникацию между сервисами через очередь (например, Kafka, RabbitMQ). Позволяет слабо связать компоненты и справляться с пиками нагрузки.

12. Шардинг (Sharding): Разделение больших объёмов данных между несколькими базами или таблицами. Обеспечивает масштабирование и повышение производительности запросов.

13. Репликация (Replication): Копирование данных между узлами базы данных. Повышает отказоустойчивость и производительность чтения.

14. Консистентное хеширование (Consistent Hashing): Метод распределения данных между узлами с минимальными изменениями при масштабировании. Часто используется в кэшировании и распределённых хранилищах.

15. Система мониторинга (Monitoring System): Отслеживает состояние системы, собирает логи и метрики, отправляет оповещения при сбоях или аномалиях. Критически важна для наблюдаемости, отладки и обеспечения доступности.

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

📲 Мы в MAX

👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1