METANIT.COM – Telegram
METANIT.COM
5.76K subscribers
1.64K photos
80 videos
9 files
979 links
Канал о программировании и разработке сайта metanit.com
Download Telegram
Как работает сборщик мусора (Garbage Collector) в Java #java
(продолжение в следующем посте)
5🔥2👏1💩1
Как работает сборщик мусора (Garbage Collector) в Java #java
(продолжение предыдущего поста)

Java использует систему автоматического управления памятью, которая называется сборщиком мусора (Garbage Collector, GC). Она освобождает память, занятую объектами, которые больше не нужны. Это помогает предотвратить утечки памяти и обеспечивает эффективную работу приложений.

Во время выполнения программы:

→ Виртуальная машина Java (JVM) постоянно отслеживает ссылки на объекты, чтобы определить, какие из них всё ещё доступны из активных потоков и исполняемого кода.
→ Объекты, к которым больше нет доступа, помечаются как подходящие для сборки мусора.
→ Сборщик мусора использует такие алгоритмы, как «Маркировка и очистка» (Mark‑and‑Sweep), «Копирование» (Copying) и «Поколение» (Generational Collection), чтобы выявить неиспользованные объекты и освободить занятую ими память.
→ Молодое поколение (Young Generation) часто обрабатывается с помощью быстрых и эффективных циклов малой сборки мусора (minor GC).
→ Объекты, пережившие несколько циклов, перемещаются в старое поколение (Old Generation), где с долгоживущими объектами работают циклы основной сборки мусора (major GC).
→ После очистки сборщик мусора уплотняет память, чтобы уменьшить фрагментацию и повысить производительность при выделении памяти.
→ Весь процесс выполняется автоматически, позволяя разработчикам на Java сосредоточиться на написании кода без ручного освобождения памяти.

Результат: Java обеспечивает стабильное и эффективное использование памяти, автоматически обнаруживая неиспользованные объекты и освобождая занятое ими пространство посредством оптимизированных циклов сборки мусора.
11🔥2🥰1
RAG - это генерация с дополнением посредством поиска (Retrieval Augmented Generation)

Вот как это работает на практике:

Knowledge Sources (Источники знаний) → PDF‑файлы, документы, базы данных
Embeddings (Векторные представления) → ваши данные разбиваются на фрагменты и преобразуются в векторы
Vector Database (Векторная база данных) → хранит всё для быстрого поиска
Retrieval (Поиск) → находит наиболее релевантный контекст (топ‑k результатов)
Augmentation (Дополнение) → запрос + контекст = более эффективный промпт
Generation (Генерация) → выдаёт точные ответы, основанные на контексте
4👍2👏1
Шпаргалка по перенаправлениям в Linux #linux
6🥰2👎1👏1
Что такое ACID
(продолжение в следующем посте)
4🫡3❤‍🔥2
Что такое 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