METANIT.COM – Telegram
METANIT.COM
5.77K subscribers
1.64K photos
79 videos
9 files
981 links
Канал о программировании и разработке сайта metanit.com
Download Telegram
Вышла новая версия Spring - распространенного фрейморка для создания корпоративных приложений на Java/Kotlin - Spring Framework 7.0
В сообщении о релизе отмечается, что Spring Framework 7.0 — это начало нового поколения фреймворка. Его ключевые ориентиры — Java 25 и новейшая экосистема с открытым исходным кодом. Фреймворк станет основой для Spring Boot 4.0.

Это поколение Spring включает обновление базовых компонентов и зависимостей:

* поддержка Java 25 (последняя версия с долгосрочной поддержкой) при сохранении базовой версии Java 17;
* уровень API Jakarta EE 11: Servlet 6.1, JPA 3.2, Bean Validation 3.1;
* комплексная защита от null‑значений с помощью JSpecify;
* поддержка Jackson 3.0 (при этом сохраняется устаревшая поддержка Jackson 2.x);
* Kotlin 2.2;
* JUnit 6.0.

Первый релиз Spring Framework 7.0 содержит широкий набор новых функций, в том числе:

* программную регистрацию бинов;
* базовые функции обеспечения отказоустойчивости;
* JmsClient;
* версионирование API;
* настройку клиента HTTP‑интерфейса;
* RestTestClient.

https://spring.io/blog/2025/11/13/spring-framework-7-0-general-availability/

#spring #java #kotlin
6👍5🤔2😁1👀1
Вопрос века по SQL: какой результат возвратит запрос
🤩22🤣17👀8👍3🗿3👏1😁1🤔1🤯1💯1
В каждой системе есть наиболее нагруженный участок. Это первое, что нужно понять перед масштабированием. Масштабируется то, что нагружено, а не вся система целиком. Рекомендации:

1. Начните с паттерна доступа. Если операций чтения значительно больше, чем операций записи, не масштабируйте их вместе.
Пример: приложение электронной коммерции

* 99% трафика — поиск и просмотр товаров
* 1% трафика — обновление информации о товарах

Разделите их. Позвольте сервисам с высокой нагрузкой на чтение масштабироваться независимо. Оставьте потоки записи лаконичными и безопасными

2. Оптимизируйте хранилище под реальное узкое место. Одна основная БД для записи, несколько реплик для чтения

* Записи остаются консистентными
* Чтение остаётся быстрым
* Пиковые нагрузки не затрагивают источник достоверных данных

3. Добавьте кэш, где это действительно нужно. Кэшируйте:

* страницы товаров
* результаты поиска
* списки "Топ N"
* всё, что запрашивается многократно

Память быстрее диска. Микросекунды быстрее миллисекунд.
👍94💯3❤‍🔥11🔥1
Пользователи смартфонов Samsung заметили подозрительное приложение AppCloud от израильской компании ironSource. Оно обладает расширенными системными правами и его нельзя удалить без потери гарантии.

Пользователи обеспокоены объемом собираемых данных без их согласия. Приложение имеет доступ к биометрическим данным, IP-адресу и геолокации. Также сообщается, что AppCloud может скрытно устанавливать ПО.

При этом полностью удалить AppCloud невозможно — оно восстанавливается с обновлениями One UI, а отключение в настройках не останавливает его процессы.
Эксперты предполагают, что это лишь маркетинговая платформа, однако пользователи Samsung уже направили компании запросы с требованиями предоставить официальные разъяснения, передает портал.


https://www.phonearena.com/news/concern-over-unremovable-spyware-some-galaxy-phones_id175777
🤡27🤬7🤔6
Краткий совет по Linux:

Нужно посмотреть, какие файлы были недавно изменены?

Используйте команду find с опцией -mmin, чтобы проверить файлы, изменённые в определённом временном промежутке:

find . -type f -mmin -10


Эта команда выводит список всех файлов в текущей директории, которые были изменены за последние 10 минут.

Полезно при отслеживании недавних изменений или отладке активности файлов.

#linux
👍16🔥41🥰1
В руководство по языку C# и .NET добавлены новые статьи:

Приложения на основе файлов
https://metanit.com/sharp/tutorial/24.2.php

Нововведения в C# 14
https://metanit.com/sharp/tutorial/23.4.php

#csharp #dotnet
14👍13🔥5🤝1
Cloudflare раскрыла причину масштабного сбоя, из-за которого вчера часть инфраструктуры компании (и с ней многие сайты) не работала более 3 часов.
Сбой произошёл после изменения в структуре БД, после чего файл с параметрами для противодействия ботам увеличился в два раза. В БД образовались дублирующиеся таблицы, при том, что SQL-запрос для формирования файла просто выводил все данные из всех таблиц по ключу, без отсеивания дубликатов.

SELECT
name,
type
FROM system.columns
WHERE
table = 'http_requests_features'
order by name;


Созданный файл стал применяться для обработки входных запросов. В обработчике, использующем данный файл для проверки на боты, указанные в файле параметры сохранялись в оперативной памяти. Для защиты от излишнего расхода памяти в коде был предусмотрен лимит на размер файла. Обычно фактический размер файла был значительно меньше выставленного органичения, но после дублирования таблиц превысил лимит. В итоге в обработчике срабатывало аварийное завершение, которое блокировало дальнейший проброс трафика. Ошибка была вызвана использованием в коде на языке Rust метода unwrap() с типом Result:

// Fetch edge feature based on 'input' struct into ['Features'] buffer.
pub fn fetch_features(
&self,
input: &dyn BotsInput,
features: &mut Features,
) -> Result<(), (ErrorFlags, i32)> {
// update feature checksum (lower 32 bits) and copy edge feature names
features.checksum &= 0xFFFFFFFF00000000;
features.checksum |= u64::from(self.config.checksum);

let (feature_values, _) = features
.append_with_names(self.config.feature_names)
.unwrap(); // Здесь возникла ошибка

Ok(())
}

Когда значение Result имеет состояние "Ok", метод unwrap() возвращает связанный с этим состоянием объект, но если результат не является успешным - вызов приводит к аварийному завершению (вызывается макрос "panic!").

https://blog.cloudflare.com/18-november-2025-outage/
😁2812👍11🔥2🤯2
Microsoft выпустил новое поколение свой СУБД - SQL Server 2025.
Основные изменения:

- Интеграция ИИ непосредственно в ядро ​​SQL Server, что обеспечивает расширенный семантический поиск для более глубокого анализа и понимания естественного языка в корпоративных данных.
Управление моделями встроено в T-SQL, поддерживая бесшовную интеграцию с Microsoft Foundry, Azure OpenAI Service, OpenAI, Ollama и другими системами, что позволяет безопасно разворачивать их где угодно, как локально, так и в облаке. Разработчики могут легко переключаться между моделями, не изменяя код, а такие важные элементы ИИ, как векторное встраивание, фрагментация текста и индексация DiskANN, поддерживаются нативно.

- Большие возможности для разработчиков SQL за последнее десятилетие, оптимизируя разработку и повышая производительность. Встроенная поддержка JSON, REST API, регулярных выражений и нечеткого соответствия строк обеспечивает более эффективное обогащение и проверку данных. Потоковая передача событий изменений позволяет создавать приложения, управляемые событиями в режиме реального времени.

- Инструменты SQL. SQL Server 2025 предлагает важные обновления для всей платформы данных. SQL Server Management Studio (SSMS 22) уже доступна для всех пользователей и предлагает официальную поддержку SQL Server 2025, улучшенную поддержку ИИ и поддержку ARM64. SSMS 22 также включает поддержку ИИ при установке рабочей нагрузки GitHub Copilot, которая использует ту же подписку GitHub, что и GitHub Copilot в Visual Studio или VS Code.

- SQL Server 2025 продолжает развивать безопасность СУБД. Оптимизированная блокировка снижает потребление памяти для блокировки, минимизирует блокировку и повышает параллелизм.
Управление ресурсами пространства Tempdb повышает надежность сервера. Дополнительная оптимизация плана параметров делает производительность запросов более стабильной. SQL Server 2025 продолжает укреплять свои критически важные возможности, улучшая группы доступности Always On (AG) и возможности аварийного восстановления. Основное внимание уделяется более быстрому отказоустойчивому режиму, улучшенной диагностике и гибридной гибкости.

- SQL Server 2025 на Linux представляет несколько важных улучшений. Безопасность усилена поддержкой TLS 1.3, настраиваемыми политиками паролей и подписанными образами контейнеров. Поддержка платформ расширена и теперь включает RHEL 10 и Ubuntu 24.04, а производительность повышена благодаря поддержке tmpfs для tempdb и контейнерных развертываний. Расширенная аналитика доступна благодаря поддержке универсальных источников данных ODBC через PolyBase. Процесс разработки оптимизирован благодаря интеграции с Visual Studio Code для локального развертывания контейнеров с использованием расширения mssql и проверенных шаблонов развертывания в сотрудничестве с Red Hat, что обеспечивает поддержку современных рабочих нагрузок и сценариев ИИ в гибридных средах.

По словам Microsoft, предварительные тесты показывают, что SQL Server 2025, работающий на процессорах AMD EPYC с оборудованием HPE, обеспечивает ощутимый прирост производительности и ценности. Рабочая нагрузка объёмом 10 ТБ устанавливает новый рекорд производительности для SQL Server. По соотношению цена/производительность SQL Server 2025 демонстрирует улучшение на 4% в категории 3 ТБ по сравнению с предыдущими результатами.

https://techcommunity.microsoft.com/blog/sqlserver/sql-server-2025-is-now-generally-available/4470570

#sql #sqlserver #database
🤡13👍6🔥3😁2🤝2🌚1
Линус Торвальдс не возражает против кодирования с использованием Vibe, если оно не используется для чего-то действительно важного.

Создатель Linux и Git Линус Торвальдс раскрыл свое отношение к применению ИИ в разработке программного обеспечения в интервью, назвав себя «довольно позитивно» настроенным к Vibe-кодингу, но только как к способу проникновения в компьютерные вычисления, а не для разработки программного обеспечения в продакшене, где его, вероятно, будет сложно поддерживать, и особенно не для разработки ядра.

ПРи этом, по словам самого Торвальдса, он не использует и даже не экспериментирует с кодированием с помощью ИИ, хотя и заявил: «Уверен, люди рассматривают его даже в качестве кода ядра».

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

Торвальдс с нетерпением ждёт времени, когда ИИ «будет менее рекламируемым и больше будет похож на повседневную реальность, о которой никто постоянно не говорит».

https://www.theregister.com/2025/11/18/linus_torvalds_vibe_coding/?td=rt-3a
👍65🤡6😁4🤓3💩2🐳2🤪21🔥1🤔1
This media is not supported in your browser
VIEW IN TELEGRAM
Краткий совет по Linux 🐧💡

Чтобы получить список файлов, содержащих заданную строку, используйте команду:
𝗴𝗿𝗲𝗽 -𝗿𝗹 𝘀𝘁𝗿𝗶𝗻𝗴 .

-r — для рекурсивного поиска (во всех подкаталогах);
-l — чтобы вывести только имена файлов, в которых найдено совпадение.
👍164🤔4
БАЛАНСИРОВКА НАГРУЗКИ В ПРОЕКТИРОВАНИИ СИСТЕМ
(продолжение в следующем посте)
🔥5
БАЛАНСИРОВКА НАГРУЗКИ В ПРОЕКТИРОВАНИИ СИСТЕМ
(продолжение предыдущего поста)

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

→ ПОЧЕМУ ВАЖНА БАЛАНСИРОВКА НАГРУЗКИ

→ Предотвращает перегрузку сервера
→ Обеспечивает высокую доступность и бесперебойную работу
→ Гарантирует отказоустойчивость при выходе сервера из строя
→ Сокращает общее время отклика
→ Позволяет горизонтальное масштабирование

→ КАК РАБОТАЕТ БАЛАНСИРОВКА НАГРУЗКИ

→ Запрос клиента → Балансировщик нагрузки → Рабочий экземпляр сервера
→ Балансировщик нагрузки отслеживает состояние серверов и направляет трафик только на активные узлы

→ Если один сервер выходит из строя → Балансировщик нагрузки автоматически перенаправляет трафик на другие серверы
→ Работает с веб‑серверами, серверами приложений, микросервисами и базами данных

→ ТИПЫ БАЛАНСИРОВЩИКОВ НАГРУЗКИ

→ Аппаратные балансировщики нагрузки
→ Физические устройства, используемые в корпоративных средах

→ Программные балансировщики нагрузки
→ Примеры: Nginx, HAProxy, Envoy

→ Облачные балансировщики нагрузки
→ AWS ELB, Google Cloud LB, Azure Load Balancer

→ АЛГОРИТМЫ БАЛАНСИРОВКИ НАГРУЗКИ

→ Round Robin (циклический перебор)
→ Запросы распределяются по кругу в циклическом порядке

→ Least Connections (наименьшее число соединений)
→ Трафик направляется на сервер с наименьшим числом активных соединений

→ IP Hash (хеширование по IP)
→ Сервер для обработки запроса определяется по IP‑адресу клиента

→ Weighted Round Robin (циклический перебор с весами)
→ Некоторые серверы получают больше трафика в соответствии с назначенными им весами

→ Randomized Distribution (случайное распределение)
→ Запросы направляются на случайные серверы для равномерного распределения нагрузки

→ ПРОВЕРКА СОСТОЯНИЯ СЕРВЕРОВ

→ Балансировщик нагрузки регулярно проверяет:
→ Состояние сервера → Загруженность процессора → Использование памяти → Доступность сети
→ Автоматически исключает неработоспособные серверы из пула

→ ГЛОБАЛЬНАЯ И ЛОКАЛЬНАЯ БАЛАНСИРОВКА НАГРУЗКИ

→ Локальная балансировка нагрузки:
→ Распределяет трафик между серверами в пределах одного региона или дата‑центра

→ Глобальная балансировка нагрузки:
→ Направляет пользователей в ближайший или наиболее работоспособный регион
→ Используется для глобальных приложений (CDN, развёртывания в нескольких регионах)

→ БАЛАНСИРОВКА НАГРУЗКИ В МИКРОСЕРВИСАХ

→ Каждый сервис может иметь несколько экземпляров
→ Балансировщик нагрузки направляет трафик на нужный экземпляр сервиса
→ Работает совместно с API‑шлюзами и механизмами обнаружения сервисов

→ ПРЕИМУЩЕСТВА БАЛАНСИРОВКИ НАГРУЗКИ

→ Повышенная надёжность
→ Более быстрая обработка запросов
→ Отсутствие простоя при обновлении серверов
→ Способность справляться с пиковыми нагрузками
→ Поддержка автоматического масштабирования
🔥7👍32
Наиболее важные файлы Linux #linux
(описание в следующем посте)
7👍5👏2
Наиболее важные файлы Linux #linux
(описнаие к предыдущему посту)

1. /etc/passwd — содержит информацию об учётных записях пользователей (логины, UID, GID, домашний каталог и т. д.).
2. /etc/shadow — хранит зашифрованные пароли пользователей (доступен только для root).
3. /etc/group — содержит информацию о группах пользователей.
4. /etc/hosts — файл сопоставления локальных имён хостов с IP-адресами (аналог DNS для локальной системы).
5. /etc/hostname — хранит имя машины (hostname).
6. /etc/resolv.conf — содержит настройки DNS (серверы имён, домен по умолчанию).
7. /etc/fstab — описывает файловые системы, которые монтируются при загрузке системы (автоматическое монтирование).
8. /etc/crontab — файл расписания задач (задания, выполняемые по расписанию через cron).
9. /var/log/syslog или /var/log/messages — системные логи (записи о событиях в системе).
10. /var/log/auth.log — логи аутентификации (записи о попытках входа, авторизации и т. д.).
11. /var/log/dmesg — логи ядра (сообщения от ядра ОС, например, о загрузке драйверов).
12. /etc/ssh/sshd_config — конфигурационный файл SSH-сервера (настройки безопасности, порты, аутентификация).
- ~/.ssh/authorized_keys — список разрешённых SSH-ключей для входа на сервер.
13. /etc/systemd/system/ — директория для пользовательских сервисов (скрипты и настройки для управления службами через systemd).
14. /etc/profile и ~/.bashrc — файлы настройки окружения оболочки (shell), задают переменные окружения, алиасы, функции для пользователей.
15. /etc/os-release — информация о версии и дистрибутиве ОС (название, версия, ID и т. д.).
16. /etc/sudoers — файл настроек разрешений sudo (определяет, какие пользователи могут выполнять команды с привилегиями root).
13👍4👏2
Вышла новая подверсия языка программирования PHP - PHP 8.5. Основные изменения в PHP 8.5:

1. URI-расширение

* Встроенная поддержка работы с URI (URL) по стандартам RFC 3986 и WHATWG URL.
* Можно парсить, нормализовать и модифицировать URL через API расширения.

2. Оператор pipe (`|>`)

* Позволяет цепочать вызовы функций в “функциональном” стиле, передавая результат слева направо.
* Упрощает код, избавляет от вложенности и временных переменных.

3. “Clone with” — клонирование с изменением свойств

* Новый синтаксис: clone $obj with ['prop' => $newValue].
* Упрощает паттерн “with-er” (часто используется с readonly-классами).

4. Атрибут `#[\NoDiscard]`

* Этот атрибут предупреждает, если возвращаемое значение функции/метода не используется.
* Помогает избежать ошибок, когда важно обработать результат.

5. Замыкания и first-class callables в константных выражениях

* В PHP 8.5 можно использовать статические замыкания и callables в константах, атрибутах, значениях параметров и свойств.
* Расширяет возможности метапрограммирования.

6. Постоянные cURL share-дескрипторы

* Добавлена функция curl_share_init_persistent(). Дескриптор может быть переиспользован между запросами, что экономит ресурсы.

7. Новые функции для массивов

* array_first() — возвращает первый элемент массива (или null, если массив пуст).
* array_last() — возвращает последний элемент массива (или null).

8. Улучшения отладки и диагностики

* Фатальные ошибки теперь показывают backtrace (трассировку).
* Появились функции get_error_handler() и get_exception_handler(), чтобы узнать текущие обработчики ошибок и исключений.
* Новый CLI-флаг: php --ini=diff — показывает только те INI-настройки, которые отличаются от значений по умолчанию.

9. Локализация (i18n)

* Новая функция locale_is_right_to_left() и метод Locale::isRightToLeft() — проверка, является ли локаль “справа-налево” (например, арабский, иврит).
* Новый класс IntlListFormatter — форматирует списки в зависимости от локали (“яблоко, банан и груша” и т. д.).
* Функция grapheme_levenshtein() — вычисляет “расстояние Левенштейна” между строками с учётом грaфемных кластеров (для Unicode).

10. Другие улучшения синтаксиса и модели объектов

* Свойства, объявленные через конструктор (constructor property promotion), теперь могут быть final.
* Добавлен метод Closure::getCurrent() — упрощает рекурсию в анонимных функциях.
* Новые методы DOM: Dom\Element::getElementsByClassName() и Dom\Element::insertAdjacentHTML().
* Атрибут #[\DelayedTargetValidation] — позволяет подавить ошибки проверки атрибутов на этапе компиляции, если цель атрибута является некорректной.

11. Новый INI-директив

* max_memory_limit — ограничение сверху для memory_limit.
* Полезно для хостинга, контейнеров и сред с жёсткими лимитами памяти.

12. Новая константа сборки PHP

* PHP_BUILD_DATE — содержит дату сборки PHP.

## Устаревания и несовместимости (deprecations)

* Оператор обратных кавычек (backtick), как alias для shell_exec(), теперь устарел.
* Неканоничные названия приведения типов (касты), такие как (boolean), (integer), (double), (binary) — теперь deprecated.
* Настройка disable_classes в INI удалена.
* case-операторы, завершающиеся точкой с запятой (;) вместо двоеточия (:) — deprecated.
* Кастинг float/string → int: если значение не может быть корректно представлено как int, теперь появится предупреждение.


## Влияние и зачем это
8🐳4👍3
* Читаемость кода: новый pipe-оператор и helper-функции (array_first, array_last) делают код более декларативным и понятным.
* Безопасность и устойчивость: #[\NoDiscard] помогает избежать ошибок, когда результаты функции игнорируются.
* Производительность / ресурсы: возможность переиспользовать cURL share-дескрипторы экономит расходы на подключение.
* Отладка: трассировки фатальных ошибок + инструменты для работы с обработчиками ошибок/исключений улучшают дебаг.
* Локализация: новые инструменты i18n помогают создавать приложения, дружелюбные к разным локалям.
* Кодовая база и архитектура: “clone with” и final-промоция свойств способствуют более чистым паттернам “immutable-объектов”.

https://www.php.net/releases/8.5/ru.php

#php
9👍3👏3🥴3
Вышла новая версия фреймворка для создания веб-приложений Angular - Angular v21. Основные нововведения в Angular 21:

1. Signal Forms (в экспериментальном режиме)

* Появился новый способ работы с формами через @angular/forms/signals: формы теперь основаны на *Signals*.
* Это упрощает управление состоянием (значения, валидность, “грязность” полей и т.п.) по сравнению с классическими FormGroup / FormControl.
* Есть пакет compat, который помогает постепенно мигрировать существующие реактивные формы: @angular/forms/signals/compat.

2. Zoneless (без zone.js) по умолчанию

* Для новых приложений Angular 21 “zoneless” режим (без zone.js) теперь используется по умолчанию.
* Это позволяет убрать “заплатки” асинхронности, улучшает производительность, уменьшает размер бандла и делает стек-трейсы чище.
* Для приложений, которым всё ещё нужен zone.js, можно явно вернуть его с помощью провайдера provideZoneChangeDetection().

3. AI-инструменты: MCP-сервер Angular

* В CLI Angular появилось встроенное “серверное” API — MCP (Model Context Protocol). Это позволяет ИИ-ассистентам (LLM) взаимодействовать с вашим проектом: получать структуру, документацию, примеры.
* Инструменты MCP позволяют: list_projects, get_best_practices, search_documentation, find_examples, а также миграции (modernize, onpush_zoneless_migration) и учебный режим (ai_tutor).
* Это шаг к более тесной интеграции Angular-проектов с ИИ и автоматизации задач (генерация кода, рекомендации и т.п.).

4. Angular ARIA (preview)

* Добавлен новый пакет @angular/aria (доступен в режиме Developer Preview).
* Это “headless” библиотека компонентов с акцентом на доступность (accessibility): компоненты без стилей (можно стилизовать как хочется), поддерживают шаблоны ARIA.
* Поддерживаются такие паттерны: Accordion, Combobox, Grid, Listbox, Menu, Tabs, Toolbar, Tree.

5. Vitest — тестовый раннер по умолчанию

* Angular CLI теперь использует Vitest как основной тестовый фреймворк.
* Поддержка Karma/Jasmine устаревает — ожидается их удаление в следующих версиях (начиная с v22).

6. Упрощённый HttpClient

* HttpClient теперь предоставляется в root-инжекторе по умолчанию — больше не нужно вручную вызывать provideHttpClient() при базовой настройке.
* Добавлены новые опции: responseType (в стиле Fetch API) и referrerPolicy для HTTP-запросов.

7. Улучшения шаблонов и компилятора

* В шаблонах теперь поддерживаются регулярные выражения: можно писать выражения вроде {{ /\d+/.test(someValue) }} прямо в шаблоне.
* У @defer директивы теперь есть опция конфигурировать IntersectionObserver, например rootMargin, trigger и т.п.
* SimpleChangesngOnChanges) сделан generic — теперь можно указывать тип компонента, чтобы получить сильную типизацию.

8. Контейнеры стилей (encapsulation)

* Появилась экспериментальная стратегия ExperimentalIsolatedShadowDom, которая использует Shadow DOM, но “изолирует” стили компонента (чтобы они не проникали наружу и внешние стили не влияли).

9. Оптимизация сборки и инструментов разработки

* Улучшены tree-shaking и удаление неиспользуемого кода → уменьшение размера бандлов.
* Улучшения в dev-сервере: более быстрый HMR (горячая перезагрузка), лучшее кеширование и меньшее потребление памяти.
* CLI получает более удобные схемы миграции и улучшенную эргономику для совместимости с новыми паттернами (signal, zoneless и пр.).

## Влияние
👍6🍌3👏2
* Производительность: Переход к “zoneless” делает Angular быстрее, уменьшает накладные расходы, даёт более контролируемое обнаружение изменений.
* Современный подход к формам: Signal Forms упрощают разработку, особенно в реактивных сценариях с валидацией и сложной логикой.
* Доступность: Angular ARIA помогает создавать доступные интерфейсы “из коробки”, облегчая работу с экранными читателями и фокусом.
* ИИ и автоматизация: MCP-сервер создаёт новые возможности для интеграции ИИ-ассистентов: они могут “понимать” структуру вашего Angular-проекта и помогать в рефакторинге, генерации кода и изучении.
* Современные инструменты разработки: Vitest по умолчанию делает тестирование более современным и быстрым, а сборка — более оптимизированной.

https://blog.angular.dev/announcing-angular-v21-57946c34f14b

#angular
👍7🔥2🥰2
Оптимизация SQL в бэкенде
(продолжение в следующем посте)
🍓73👏1
Оптимизация SQL в бэкенде
(продолжение предыдущего поста)

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

✓ 1. Изучение планов выполнения запросов
→ Используйте команды EXPLAIN или EXPLAIN ANALYZE, чтобы понять, как база данных выполняет запрос.
→ Помогает выявить полное сканирование таблиц, неэффективные соединения, отсутствующие индексы или ненужную сортировку.

✓ 2. Индексирование для ускорения поиска
→ Создавайте индексы для столбцов, которые часто используются в запросах (например, поля поиска, внешние ключи).
→ Используйте составные индексы при фильтрации по нескольким столбцам.
→ Избегайте избыточного индексирования: каждый индекс замедляет операции вставки, обновления и удаления.

✓ 3. Избегайте использования SELECT *
→ Выбирайте только необходимые столбцы с помощью конструкции SELECT столбец1, столбец2.
→ Это сокращает объём передаваемых данных и повышает скорость выполнения запроса.

✓ 4. Оптимизация соединений (JOIN)
→ Используйте подходящие типы соединений (INNER, LEFT, RIGHT) в зависимости от задачи.
→ Убедитесь, что столбцы, используемые в соединениях, проиндексированы.
→ Избегайте объединения слишком многих таблиц в одном запросе — при необходимости разбивайте сложную логику.

✓ 5. Эффективное использование условий WHERE
→ Применяйте фильтрацию как можно раньше, используя избирательные условия.
→ По возможности используйте индексированные столбцы в фильтрах WHERE.
→ Избегайте использования функций в WHERE (например, LOWER(name)), так как они препятствуют использованию индексов.

✓ 6. Ограничение количества возвращаемых строк
→ Используйте LIMIT или OFFSET для пагинации вместо возврата огромных наборов данных.
→ Это повышает производительность фронтенда, которому не требуется вся информация сразу.

✓ 7. Избегание проблемы N+1 запросов
→ Возникает при получении связанных данных в циклах.
→ Вместо этого используйте соединения (JOIN) или эффективные пакетные запросы.

✓ 8. Использование кэширования
→ Кэшируйте часто выполняемые запросы на чтение с помощью Redis или Memcached.
→ Это снижает нагрузку на базу данных и значительно повышает скорость работы.

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

✓ 10. Оптимизация операций вставки и обновления
→ Используйте пакетные вставки вместо поочерёдной вставки строк.
→ Избегайте ненужных обновлений: проверяйте, изменились ли значения, прежде чем выполнять обновление.

✓ 11. Разделение больших таблиц
→ Разделяйте большие таблицы по дате или региону для ускорения запросов.
→ Полезно для логов, аналитики или данных временных рядов.
👍11🍓42👏2