METANIT.COM – Telegram
METANIT.COM
5.76K subscribers
1.64K photos
80 videos
9 files
979 links
Канал о программировании и разработке сайта metanit.com
Download Telegram
Что такое ACID
(продолжение предыдущего поста)

ACID - набор свойств, которые обеспечивают надежность и целостность данных при обработке транзакций в системах управления базами данных (СУБД). ACID расшифровывается как Atomicity (атомарность), Consistency (согласованность), Isolation (изолированность), Durability (долговечность)

1. Atomicity (Атомарность) — «Всё или ничего» (верхний левый угол):
* Гарантирует, что транзакция либо выполняется полностью, либо не выполняется вовсе.
* Если транзакция не может быть завершена, СУБД откатывает все изменения (возвращает базу данных к предыдущему состоянию).
* На схеме показан пример транзакции с операциями write 1, write 2, write 3, write 4, которые либо все фиксируются (commit all), либо отменяются (or nothing).

2. Consistency (Согласованность) — «Сохранение инвариантов базы данных» (верхний правый угол):
* Обеспечивает, что каждая транзакция переводит базу данных из одного согласованного состояния в другое.
* Транзакции не нарушают правила целостности данных.
* На схеме показано, как база данных переходит из consistent state A (согласованное состояние A) в consistent state B (согласованное состояние B) через выполнение транзакций.

3. Isolation (Изолированность) — «Параллельные транзакции изолированы друг от друга» (нижний левый угол):
* Гарантирует, что каждая транзакция выполняется независимо от других, без видимости промежуточных изменений.
* Это предотвращает конфликты между транзакциями.
* На схеме изображены две транзакции (Transaction A и Transaction B), которые выполняются изолированно, не влияя друг на друга.

4. Durability (Долговечность) — «Данные сохраняются после фиксации транзакции даже при сбое системы» (нижний правый угол):
* Гарантирует, что изменения, внесённые транзакцией, сохраняются и становятся постоянными.
* Даже если система выйдет из строя после фиксации транзакции, данные останутся доступными.
* На схеме показан процесс:
1. Фиксация транзакции (commit).
2. Репликация данных на копии базы (replica a, replica b), что обеспечивает сохранность информации.

#database #sql
6🔥4❤‍🔥3
Цикл хайпа применяемых архитектур приложений
22🔥5👏2😭2
Формулы переносов по оси X и Y (Трансляции/переносы или Translations):
- g(x) = f(x) + a — сдвиг графика функции f(x) вверх вдоль оси Oy на величину a.
- g(x) = f(x) – a — сдвиг графика функции f(x) вниз вдоль оси Oy на величину a.
- g(x) = f(x – a) — сдвиг графика функции f(x) вправо вдоль оси Ox на величину a.
- g(x) = f(x + a) — сдвиг графика функции f(x) влево вдоль оси Ox на величину a.
🥱12🔥11👍5🤓4🖕1
Как работает Firewall (межсетевой экран)
(подробное описание в следующем посте)
🔥133💯2
Как работает Firewall (межсетевой экран)
(продолжение предыдущего поста)

Firewall фильтрует входящий и исходящий сетевой трафик, защищая устройства и сеть от угроз: неавторизованного доступа, вирусов, фишинга и других атак. Работает по заданным правилам, разрешая или блокируя соединения.

Два основных типа Firewall:

- Network Firewall (сетевой межсетевой экран):
- располагается между Интернетом и локальной сетью (перед роутером);
- работает на уровнях 3–4 модели OSI (сетевой и транспортный уровни);
- защищает всю сеть целиком, фильтруя трафик, поступающий извне;
- может быть аппаратным, виртуальным или облачным решением.

- Host-based Firewall (межсетевой экран на уровне хоста):
- устанавливается непосредственно на отдельные устройства (например, Desktop — рабочая станция, Server — сервер);
- работает на уровнях 3–7 модели OSI;
- защищает только конкретное устройство, на котором установлен;
- контролирует трафик, направленный к устройству и от него.

Критерии фильтрации трафика

Firewall анализирует трафик по следующим параметрам (указаны слева на схеме):
- IP-адреса — проверяет, разрешены ли соединения с определённых IP-адресов;
- доменные имена — блокирует или разрешает доступ к конкретным доменам;
- протоколы (например, TCP, UDP) — фильтрует трафик по используемым сетевым протоколам;
- программы — контролирует, какие приложения могут выходить в сеть;
- порты — разрешает или запрещает соединения на определённых портах (например, порт 80 для HTTP);
- ключевые слова — фильтрует трафик по содержимому (например, блокирует запросы с подозрительными словами).

Пример работы правил (Example Rules)

На схеме приведён пример правил фильтрации:
- ALLOW TCP ANY:80 — разрешает TCP-трафик на порт 80 (обычно используется для HTTP-трафика);
- ALLOW TCP ANY:25 — разрешает TCP-трафик на порт 25 (используется для SMTP — отправки почты);
- DENY UDP ANY:23 — запрещает UDP-трафик на порт 23 (часто используется для небезопасного протокола Telnet);
- ALLOW TCP ANY:2389 — разрешает TCP-трафик на порт 2389 (может использоваться для специфических сервисов).

Последовательность работы

1. Трафик поступает из Интернета → сначала проходит через Network Firewall.
2. Network Firewall анализирует пакеты данных по заданным правилам: проверяет IP-адреса, порты, протоколы и другие параметры.
3. Если трафик разрешён — он пропускается дальше, к роутеру и устройствам в локальной сети. Если запрещён — блокируется.
4. Роутер распределяет разрешённый трафик между устройствами в локальной сети.
5. На каждом устройстве (Desktop, Server) работает Host-based Firewall, который дополнительно фильтрует трафик, поступающий непосредственно на это устройство.
6. Устройства взаимодействуют с сетью, пропуская только разрешённые соединения и блокируя потенциально опасные.

В итоге Firewall создаёт многоуровневую защиту:
- на сетевом уровне (Network Firewall) — защищает всю инфраструктуру от внешних угроз;
- на уровне отдельных устройств (Host-based Firewall) — предотвращает несанкционированный доступ к конкретным хостам.
🔥10👍65
Краткий совет по Linux:

Работаете с CSV-файлами в терминале?

Вы можете сделать их удобочитаемыми, аккуратно выровняв столбцы относительно столбцов:

$ cat inventory.csv | column -t -s,


Флаг -s указывает, что в качестве разделителей следует использовать запятые, а -t форматирует вывод в чистую таблицу.

Идеально подходит для быстрой проверки данных без открытия электронной таблицы.

#linux
🔥15🍾4👏1🤮1
Чистая архитектура (Clean Architecture)
(продолжение в следующем посте)
7👏2🥰1
Чистая архитектура (Clean Architecture)
(продолжение предыдущего поста)

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

Архитектура обычно делится на четыре основных слоя (от внутреннего к внешнему):

1. Domain (Домен)
- Назначение: содержит ключевые бизнес-правила и логику предприятия — "сердце" приложения.
- Компоненты:
- Entities (сущности) — основные объекты бизнес-логики (например, пользователи, заказы).
- Value Objects (объекты-значения) — неизменяемые данные, характеризующие сущности.
- Exceptions (исключения) — обработка ошибок, связанных с бизнес-логикой.
- Domain Events (доменные события) — уведомления о важных изменениях в состоянии домена.
- Enums (перечисления) — набор констант для типизации данных.
- Repositories (репозитории) — абстракции для доступа к данным, отделяющие домен от инфраструктуры.
- Особенность: этот слой не зависит от внешних технологий (баз данных, фреймворков).

2. Application (Прикладной слой)
- Назначение: реализует сценарии использования (use cases) и координирует работу домена.
- Компоненты:
- Use Cases (сценарии использования) — логика взаимодействия пользователя с системой (например, «создать заказ»).
- Application Services (сервисные компоненты) — связующее звено между use cases и доменом.
- Commands (команды) — запросы на изменение состояния системы.
- Queries (запросы) — получение данных из системы.
- External Interfaces (внешние интерфейсы) — точки взаимодействия с внешними сервисами.
- Особенность: зависит от домена, но не от инфраструктуры.

3. Infrastructure (Инфраструктурный слой)
- Назначение: отвечает за внешние зависимости — базы данных, API, облачные сервисы и т. д.
- Компоненты:
- Databases (базы данных) — хранение данных.
- Identity Providers (провайдеры аутентификации) — управление учётными записями.
- HTTP Clients (HTTP-клиенты) — взаимодействие с внешними API.
- Cloud Storage (облачное хранилище) — хранение файлов.
- Email (электронная почта) — отправка уведомлений.
- Message Brokers (брокеры сообщений) — асинхронная обработка событий.
- Repository Impl. (реализации репозиториев) — конкретные классы для работы с данными (например, ORM).
- Особенность: реализует интерфейсы, определённые в прикладном слое.

4. Presentation (Представления/Интерфейс)
- Назначение: точка входа в систему — обрабатывает пользовательские запросы и возвращает ответы.
- Компоненты:
- API Endpoints (точки API) — URL-адреса для взаимодействия с приложением.
- Services (DI) — сервисы, управляемые контейнером внедрения зависимостей (Dependency Injection).
- gRPC, GraphQL, ASP.NET — технологии для построения API.
- Middleware (промежуточное ПО) — логика, выполняемая до/после обработки запроса (аутентификация, логирование).
- Exceptions (исключения) — обработка ошибок на уровне интерфейса.
- Особенность: зависит от прикладного слоя, но не знает о домене напрямую.

### Ключевые принципы
- Инверсия зависимостей (Dependency Inversion): внутренние слои (домен, приложение) не зависят от внешних (инфраструктура, представление). Зависимости направлены внутрь.
- Слабая связанность: изменение одного слоя минимально влияет на другие.
- Тестируемость: домен и прикладной слой легко тестируются, так как не зависят от внешних систем.
- Гибкость: можно менять технологии (например, базу данных или фреймворк) без переписывания бизнес-логики.

В итоге чистая архитектура обеспечивает:
- чёткое разделение ответственности между слоями;
- независимость бизнес-логики от инфраструктуры;
- удобство тестирования и поддержки кода;
- возможность масштабирования и замены технологий.
7👍3👏2
Сравнение СУБД
(продолжение в следующем посте)
4👍3👏1
Сравнение СУБД
(продолжение предыдущего поста)

Ряд характеристик СУБД могут быть критически важными при выборе СУБД для конкретных задач (например, для работы с большими объёмами данных или при необходимости тонкой настройки параметров хранения).
В частности, мы можем сравнить характеристики различных систем управления базами данных (DBMS) по следующим параметрам:

1. Page Size (Default) — размер страницы по умолчанию (в килобайтах, KB), используемый системой для хранения данных.
2. Configurable Range — диапазон размеров страниц, который можно настроить в данной СУБД.
3. Maximum File Size — максимальный размер файла базы данных, поддерживаемый системой (в терабайтах, TB). Указывается ограничение, обусловленное либо файловой системой, либо внутренними ограничениями СУБД.
4. Maximum Pages per File (Approx.) — приблизительное количество страниц, которое может содержать файл базы данных при заданном размере страницы (рассчитывается как максимальный размер файла, делённый на размер страницы).

Данные по СУБД:

- SQL Server:
- Размер страницы по умолчанию: 8 KB.
- Размер страницы фиксирован, не настраивается.
- Максимальный размер файла: 256 TB (ограничение файловой системы, например, NTFS).
- Максимальное количество страниц: 34.36 миллиарда (256 TB / 8 KB).

- MySQL (InnoDB):
- Размер страницы по умолчанию: 16 KB.
- Диапазон настраиваемых размеров: от 8 KB до 64 KB.
- Максимальный размер файла: 256 TB (ограничение файловой системы).
- Максимальное количество страниц: 17.18 миллиарда (256 TB / 16 KB).

- PostgreSQL:
- Размер страницы по умолчанию: 8 KB.
- Поддерживаемые размеры: 8 KB, 16 KB, 32 KB и др.
- Максимальный размер файла: 16 TB (например, для файловой системы ext4).
- Максимальное количество страниц: 2.15 миллиарда (16 TB / 8 KB).

- Oracle:
- Размер страницы по умолчанию: 8 KB.
- Диапазон настраиваемых размеров: от 2 KB до 32 KB.
- Максимальный размер файла: 128 TB (ограничение для datafile в версии Oracle 12c+).
- Максимальное количество страниц: 17.18 миллиарда (128 TB / 8 KB).

- SQLite:
- Размер страницы по умолчанию: 4 KB.
- Диапазон настраиваемых размеров: от 512 байт до 64 KB.
- Максимальный размер файла: 140 TB (ограничение для файла базы данных).
- Максимальное количество страниц: 37.25 триллиона (140 TB / 4 KB).
👀72💯2👏1
Самые простые условия лицензии
36😁16🤣7👍1
Microsoft анонсирует эволюцию IDE Visual Studio 2026, ориентированную на ускорение современного разработки. Основной акцент — на переходе к непрерывным обновлениям, чтобы соответствовать быстрому темпу создания ПО.
Согласно Misrosoft, Visual Studio превращается в современный, "живой" IDE, адаптированный под быстрый ритм разработки, с ежемесячными обновлениями и ежегодными релизами.
Планируется разделение IDE от инструментов сборки дает свободу и контроль, минимизируя риски для команд, а также новый цикл поддержки, который призван повысить надежность, безопасность и адаптивность — от индивидуальных разработчиков до корпоратов.

Некоторые ключевые моменты:
- Непрерывные обновления: Ежемесячные обновления функций и ежегодный крупный релиз в ноябре (синхронизирован с .NET). Это позволяет разработчикам получать свежие инструменты без задержек.
- Новый цикл поддержки: 1 год ежемесячных обновлений + 1 год только исправлений безопасности. Введены каналы Insiders (для раннего доступа) и Stable (стабильный), плюс опциональный LTSC для корпоратов (дополнительный год статичных функций).
- Разделение IDE и инструментов сборки: IDE обновляется независимо от .NET, C++ (MSVC), SDK и runtime. Компиляторы MSVC теперь обновляются раз в 6 месяцев, с долгосрочными версиями раз в 2 года.
- Лицензирование: Бесплатно для Community (для квалифицированных пользователей); для Professional/Enterprise — ежегодное обновление ключей для standalone-лицензий, подписки без изменений.

Новые функции для современной разработки:
- Ежемесячная доставка улучшений производительности, интеграции GitHub Copilot и новых возможностей (AI-инструменты, расширения).
- Полная совместимость: Проекты, решения и расширения работают без изменений после обновлений.
- Гибкость сборки: Поддержка нескольких версий инструментов, позволяющая командам выбирать график обновлений.

Улучшения производительности:
- Ускорение инноваций: Быстрый доступ к новым функциям без квартальных пауз.
- Минимизация простоев: Автоматические обновления без нарушения сборок или окружений.
- Фокус на разработке: Меньше времени на обслуживание, больше — на код.

Ключевые преимущества для разработчиков:
- Продуктивность: Постоянный доступ к актуальным инструментам и AI.
- Стабильность: Разделение циклов обновлений обеспечивает надежность для корпоратов.
- Гибкость: Контроль над темпом обновлений, от экспериментального до консервативного.

https://devblogs.microsoft.com/visualstudio/visual-studio-built-for-the-speed-of-modern-development/
🔥14💩12👍52😁2🤮1
This media is not supported in your browser
VIEW IN TELEGRAM
Наглядно как выглядит выравнивание данных в памяти
👍19
IPv6-адреса: описание и классификация
(продолжение в следующем посте)
1👍1🔥1
IPv6-адреса: описание и классификация
(продолжение предыдущего поста)

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

1. Общая характеристика IPv6-адресов


- Длина: 128 бит (в отличие от 32 бит в IPv4).
- Формат: шестнадцатеричная нотация, значения разделены двоеточиями.
- Особенности записи:
- ведущие нули в любом 16-битном поле могут быть опущены;
- последовательные поля нулей могут быть заменены на :: (только один раз в адресе).

2. Типы IPv6-адресов

Адреса IPv6 делятся на две основные категории:

a) Unicast Addresses (индивидуальные адреса) — для идентификации конкретного интерфейса устройства. Включают:

- Global Unicast (глобальные индивидуальные адреса):
- уникальны во всём мире, маршрутизируются через интернет;
- префикс: 2000::/3 (первые три бита — 001);
- структура: Global Routing Prefix (45 бит) + Subnet (16 бит) + Interface ID (64 бит);
- пример: 2001:db8:85a3::8a2e:370:7334.

- Link-Local (локальные адреса канала):
- используются для обмена данными в пределах одного канала (подсети);
- не маршрутизируются за пределы канала;
- префикс: fe80::/10;
- структура: 10 бит + 54 бита + Interface ID (64 бита);
- пример: fe80::1234:5678:9abc.

- Unique Local (уникальные локальные адреса):
- аналогичны частным адресам IPv4 (RFC 1918), но не маршрутизируются глобально;
- диапазон: fc00::/7fdff::/7;
- структура: Global Routing Prefix (40 бит) + Subnet (16 бит) + Interface ID (64 бита);
- пример: fd12:3456:789a:1::1.

- Loopback (адрес обратной связи):
- используется узлом для отправки пакетов самому себе;
- формат: ::1/128 (или просто ::1);
- аналог 127.0.0.1 в IPv4.

- Unspecified (неопределённый адрес):
- состоит из нулей, формат: ::/128 (или просто ::);
- используется, когда устройству ещё не назначен постоянный IPv6-адрес или источник пакета не относится к месту назначения.

- Embedded IPv4 (встроенные IPv4-адреса):
- помогают в переходе с IPv4 на IPv6;
- префикс: ::ffff:0:0/96;
- пример: ::ffff:192.168.1.1.

b) Multicast Addresses (групповые адреса) — для отправки пакетов нескольким адресатам одновременно (заменяют broadcast-адреса IPv4). Включают:

- Assigned Multicast (присвоенные групповые адреса):
- зарезервированы для определённых групп устройств и сервисов;
- префикс: ff00::/8;
- пример: ff02::1 (все узлы в сегменте сети).

- Solicited-Node (адреса запрошенного узла):
- используются протоколом обнаружения соседей (Neighbor Discovery Protocol);
- префикс: ff02::1:ff00:0/104;
- пример: ff02::1:ff00:1234.

3. Важные примечания

- В IPv6 нет broadcast-адресов (в отличие от IPv4) — их функцию выполняют multicast-адреса.
- Anycast-адреса синтаксически идентичны unicast-адресам, но могут назначаться нескольким устройствам. Пакет, отправленный на anycast-адрес, направляется к ближайшему устройству с этим адресом.

4. Распространённые зарезервированные multicast-адреса

- ff02::1 — все узлы в локальном сегменте сети;
- ff02::2 — все маршрутизаторы в локальном сегменте сети;
- ff02::5 — все маршрутизаторы OSPF;
- ff02::1:2 — все DHCP-серверы/ретрансляторы.
👍91🔥1👏1
Три основных типа функций
🔥17🤓3👏2🤮1
Обработка ошибок и отладка
(продолжение в следующем посте)
👍51🔥1
Обработка ошибок и отладка
(продолжение предыдущего поста)

Что такое обработка ошибок и отладка?

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

Методы обработки ошибок

→ Блоки try‑catch — заключают рискованный код в оболочку, чтобы можно было перехватить и обработать ошибки.
→ Валидация — проверка вводимых пользователем данных и информации перед обработкой.
→ Резервные варианты — предоставление значений по умолчанию или альтернативных действий при возникновении ошибок.
→ Логирование — запись ошибок для последующего анализа.

Практики отладки

→ Вывод сообщений (print/log) — быстрая проверка с помощью логов или вывода в консоль.
→ Инструменты отладки — использование отладчиков в средах разработки, точек останова и трассировки стека.
→ Инструменты мониторинга — выявление проблем в реальном времени через журналы ошибок и оповещения.
→ Воспроизведение ошибки — выделение условий, при которых возникает сбой.

Распространённые типы ошибок

→ Синтаксические ошибки — некорректно написанный код (например, пропущенная точка с запятой).
→ Ошибки времени выполнения — ошибки, возникающие во время работы программы (например, деление на ноль).
→ Логические ошибки — код выполняется, но выдаёт неверные результаты (их сложнее всего обнаружить).

Рекомендации по предупреждению ошибок:

→ Проверка входные данные
→ Использование понятных сообщений об ошибках.
→ Запись ошибок с достаточной детализацией.
→ Отсутствие конфиденциальной системной информацию в сообщениях об ошибках.
→ Автоматизация оповещений о критических сбоях.
7👍2👏1
Forward Proxy vs Reverse Proxy

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

Прямой прокси-сервер располагается перед клиентом.

Он скрывает личность клиента, фильтрует исходящий трафик и часто используется для контроля доступа, обеспечения конфиденциальности или ограничения доступа пользователей.

Обратный прокси-сервер находится перед сервером.

Он скрывает внутренние серверы, управляет балансировкой нагрузки, обеспечивает безопасность и помогает с кэшированием, завершением TLS и маршрутизацией.

Простой способ запомнить: прямой прокси-сервер защищает клиента, обратный прокси-сервер — сервер.
12🔥1👏1
Наглядно метод Крамера и вычисление определителя матрицы
13🤓7👍4🤮3👏1
Разница между типами токенов JWT и PASETO, используемых при аутентификации
(продолжение в следующем посте)
👍63👏1