METANIT.COM – Telegram
METANIT.COM
5.81K subscribers
1.65K photos
80 videos
9 files
999 links
Канал о программировании и разработке сайта metanit.com
Download Telegram
Проблема N+1 запросов
(продолжение в следующем посте)
🔥3
Проблема N+1 запросов
(продолжение к предущему посту)

Проблема N+1 запросов - это ситуация, когда один запрос возвращает набор результатов, и для каждого из них требуется дополнительный запрос. Количество запросов, необходимых для загрузки страницы, зависит от размера набора результатов, что приводит к низкой производительности при большом значении N.

Пример (псевдокод):

// 1 запрос
users = db.query('SELECT * FROM users');

// ...что приводит к N дополнительным запросам
for (const user of users) {
posts = db.query(`
SELECT * FROM posts
WHERE user_id = user->id`);
user.posts = posts;
}
// Теперь можно вернуть результат запрашивающей стороне


Вместо этого можно переписать код как один запрос с JOIN, чтобы получить все данные за одно обращение к БД:

results = await db.query(
`SELECT u.*, p.*
FROM users u
LEFT JOIN posts p
ON u->id = p->user_id`);


Для некоторых запросов влияние N+1 может быть минимальным. Если N — небольшое число, всё может казаться «быстрым», если БД хорошо настроена и находится рядом с серверами приложений. Но при N=100 начинают проявляться замедления, и БД загружается сильнее, чем необходимо. Устранение таких проблем улучшает пользовательский опыт и снижает нагрузку на БД.
👍9🤗3🔥2
Шпаргалка по интервью по API
(описание в следующем посте)
Шпаргалка по интервью по API
(продолжение предыдущего поста)

Основы API

*Что такое API?*
API — это программное обеспечение, которое действует как посредник между приложениями, помогая им взаимодействовать друг с другом с помощью HTTP-запросов.

*Типы API*
* Открытые API
* Закрытые API
* Партнерские API
* Композитные API

Тестирование API

*Что такое тестирование API?*
Тестирование API — это стратегия тестирования программного обеспечения, которая гарантирует, что API стабильны, функциональны, надежны и безопасны.

*Преимущества тестирования API*
* Удобство
* Лучше, чем тестирование GUI
* Независимость от языка
* Гибкость в выборе языка программирования

REST vs SOAP

*REST*
* Использует XML или JSON
* Поддерживает HTTP
* Быстрее, чем SOAP
* Поддерживает кэширование

*SOAP*
* Использует только XML
* Поддерживает HTTP и HTTPS
* Более безопасен, чем REST
* Не поддерживает кэширование

API Testing vs Unit Testing

*Тестирование API*
* Использует тестирование «черного ящика»
* Проверяет функциональность

*Юнит-тестирование*
* Использует тестирование «белого ящика»
* Проверяет отдельные блоки кода

CRUD
Эта аббревиатура представляет четыре основные операции, распространенные в реляционных базах данных: создание, чтение, обновление и удаление.

Архитектура REST API
Схема показывает взаимодействие между клиентом и сервером через REST API, включая запросы и ответы.

Дополнительные вопросы об API

*Что такое аутентификация API?*
Аутентификация API — это процесс проверки прав доступа пользователя к данным и ресурсам, которые он запрашивает.

*Что такое Runscope?*
Runscope — это веб-приложение, используемое для мониторинга, отладки и тестирования производительности веб-сервисов API.

*Что такое документация API?*
Документация API — это технический контент, который подробно описывает API. Она включает все, что нужно знать об API, от эффективной интеграции до обновлений жизненного цикла API, проектирования и покрытия тестирования.
🤔5🔥43🥱2
#### Аутентификация и авторизация (OAuth, JWT, сессии)
(описание в следующем посте)
2👍2🔥1
#### Аутентификация и авторизация (OAuth, JWT, сессии)
(продолжение предыдущего поста)

##### Что такое аутентификация?

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

→ Пример: Вход в систему с использованием имени пользователя и пароля.

##### Что такое авторизация?

Авторизация определяет, какие действия аутентифицированному пользователю разрешено выполнять в системе. Она устанавливает разрешения и уровни доступа.

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

##### OAuth (Open Authorization)

→ Стандартный протокол для аутентификации и авторизации на основе токенов.
→ Позволяет пользователям входить в систему через сторонних провайдеров, таких как Google, Facebook или GitHub.
→ Пример: Кнопка «Войти через Google» на веб-сайтах.

##### JWT (JSON Web Token)

→ Компактный и безопасный формат токенов, используемый для аутентификации.
→ Содержит закодированную информацию о пользователе и подписывается для обеспечения целостности.
→ Часто используется в аутентификации без сохранения состояния, когда сервер не хранит данные о сессии.
→ Пример: После входа в систему сервер выдаёт JWT, который клиент отправляет с каждым запросом.

##### Сессии

→ Метод, при котором сервер временно хранит данные аутентификации пользователя.
→ Идентификатор сессии сохраняется в браузере клиента (cookie) и сопоставляется с данными на стороне сервера.
→ Пример: Традиционные веб-приложения, где пользователь остаётся авторизованным до истечения сессии или до выхода из системы.

##### Ключевые различия

OAuth: Передаёт аутентификацию внешним провайдерам.
JWT: Аутентификация без сохранения состояния, токены хранятся на клиенте.
Сессии: Аутентификация с сохранением состояния, данные хранятся на сервере.
👍87👏1
Как работает Big O

* Big O показывает, насколько медленнее становится код при увеличении входных данных.

* Для конкретного алгоритма существуют три случая: наилучший, средний и наихудший.

* Кроме того, существуют оценки Big O для эффективности использования времени, памяти и хранилища.

* Big O помогает понять, какие структуры данных или алгоритмы демонстрируют лучшую производительность.

* Big O показывает скорость роста, а не фактическую скорость выполнения. Поэтому важно тестировать входные данные на практике.


Сложность Big-O

* O(1) — Доступ к значению в хеш-таблице по ключу.
* O(n!) — Добавление вложенного цикла для каждого ввода.
* O(2^n) — Наивное рекурсивное вычисление последовательности Фибоначчи.
* O(log n) — Алгоритмы «разделяй и властвуй».
* O(n) — Проход по списку.
* O(n log n) — Итерации, использующие «разделяй и властвуй».
* O(n^2) — Вложенный цикл на одном и том же вводе.
👍146👏1
«Лаборатория Касперского» выпустила обзорную статью на тему безопасности мессенджеров, в которой сравнила различные мессенджеры, в частности, по разрешениям, и пояснила, что мобильное приложение Max даже несколько «отстаёт» по своим «аппетитам» от других мессенджеров.

«В последнее время (особенно в контексте запуска мессенджера Max) обсуждение разрешений, требуемых современным мессенджерам, идёт особенно горячо. Давайте сравним разрешения, запрашиваемые тремя самыми актуальными для российских пользователей мессенджерами под Android: Telegram, WhatsApp и Max», — рассказали в «Лаборатории Касперского».

Эксперты компании выяснили, что запрашиваемые разрешения в целом примерно одинаковы для популярных приложений-мессенджеров, а Max тут даже не особо выделяется.

https://www.kaspersky.ru/blog/messengers-threats-and-countermeasures/40451/
🤣35🤔8🤮5💩3👍1🤡1
This media is not supported in your browser
VIEW IN TELEGRAM
На SQL теперь тоже пишут игры.

Проект DOOMQL развивает вариант игры DOOM на SQL и способный выполняться внутри СУБД CedarDB, частично совместимой с PostgreSQL. Игра поддерживает многопользовательский режим и выполняет отрисовку при помощи ASCII-графики.

Все компоненты игры (в том числе рендеринг, синхронизация состояния игроков в многопользовательской игре, игровой цикл) написаны на SQL. Игровая логика реализована при помощи таблиц, представлений и хранимых процедур

Игровой цикл для обработки и обновления игрового состояния запускается с помощью 20-строчного shell-скрипта, который 30 раз в секунду выполняет SQL-код для расчёта траектории выстрелов, анализа столкновений, обработки ввода и возрождения игроков

3D-рендер на SQL поддерживает трассировку лучей, проекцию спрайтов на 3D-сцену, обработку перекрытия объектов и HUD-интерфейс. Вся логика рендеринга реализована при помощи представлений. Синхронизация состояния игроков осуществляется при помощи таблиц и представлений

https://github.com/cedardb/DOOMQL
🤯31🔥84👏3🕊1
Функциональные индексы
(описание в следующем посте)
Функциональные индексы
(продолжение предыдущего поста)

Что такое функциональный индекс?

* Обычный индекс говорит: «Я помогу тебе быстрее найти эту колонку».
* Функциональный индекс говорит: «Я помогу тебе быстрее найти результат этой функции».

Пример:

-- Обычный фильтр (медленно)
WHERE EXTRACT(YEAR FROM order_date) = 2023;

-- С функциональным индексом
CREATE INDEX idx_order_year ON orders ((EXTRACT(YEAR FROM order_date)));

Теперь функция YEAR() не вычисляется для каждой строки.
Система просто ищет значение, как в словаре.

Почему это важно?
Вы постоянно используете такие запросы:

* LOWER(email) → поиск без учёта регистра
* SUBSTRING(code, 1, 4) → частичное совпадение
* price * quantity → вычисляемые столбцы
* EXTRACT(MONTH FROM signup_date) → фильтрация по месяцу

Угадайте что? Все они работают медленно без функционального индекса.

Когда следует использовать?

* Вы применяете фильтры к вычисляемым значениям
* Выполняете операции с датами, строками или вычислениями в столбцах
* Ваше приложение ориентировано на чтение данных
* Вы хотите, чтобы запросы выполнялись менее чем за 100 мс

Важно запомнить:

1. Функциональные индексы хранят результат функции
2. Они избегают повторного вычисления при каждом запросе
3. Делают медленные фильтры молниеносными
4. Но... они занимают место на диске и работают только с детерминированными функциями

Сохраняйте спокойствие и изучайте SQL!
❤‍🔥12👍7👏1
Вышел первый RC для .NET 10 вместе с C# 14 и обновлениями для .NET MAUI, Entity Framework Core, ASP NET Core и т.д., релиз которого ожидается в ноябре 2025.
Этот релиз-кандидат главным образом ориентирован на улучшение качества. Из обновлений следуюет отметить следующие (по категориям):

🌐ASP.NET Core и Blazor
Поддержка постоянного состояния компонентов для улучшенной навигации
Новые метрики идентификации ASP.NET Core
Улучшения валидации для Minimal API и Blazor
Улучшения генерации схемы OpenAPI

📱 .NET MAUI
Диагностика и отслеживание метрик
События HybridWebView
Свойство RefreshView IsRefreshEnabled
.NET для Android: экспериментальная поддержка среды выполнения CoreCLR

🖥 Windows Forms
Темный режим теперь полностью интегрирован
Уточнение по ControlStyles ApplyThemingImplicitlyUsage
Несколько дополнительных улучшений в рендеринге, асинхронности и управлении состоянием

🎁 Entity Framework Core
Векторный поиск в SQL Server
Поддержка типов JSON в SQL Server
Полнотекстовый и гибридный поиск в Cosmos
Сложные типы
Заполнение для параметризованных коллекций

Подробнее: https://devblogs.microsoft.com/dotnet/dotnet-10-rc-1/
👍14🔥42🤮1
Также Microsoft выпустил первые превью-сборки новой среды Visual STudio 2026 для инсайдеров - среды, которая должна прийти на смену текущей Visual Studio 2022
https://visualstudio.microsoft.com/insiders/

Новые фичи:
### Производительность
Расширенные элементы управления редактором
Исключения файлов при поиске

### GitHub Copilot
Добавление своей модели в чат
Адаптивная вставка
Действия Copilot в контекстном меню
Рендеринг диаграммы Mermaid
URL-контекст Copilot
Улучшенные ответы Copilot

### Отладка и диагностика
Profiler Copilot Agent
Шаблон проекта BenchmarkDotNet
Диагностика CMake стала ещё лучше
Оптимизация массивов нулевой длины с Copilot
Новый интерфейс запуска Profiler
Встроенные значения после возврата
Поиск в текстовом визуализаторе

### Инструментарий Git
Встроенные комментарии к pull-запросам
Улучшенный искусственный интеллект для проверки кода
Контекст Git в чате Copilot

### IDE
Покрытие кода
Новый внешний вид и функциональность
Современный интерфейс настроек

### Облако
Устаревание облачных сервисов (расширенная поддержка)
Обновление инструментов Service Fabric

### .NET
.NET 10 и C# 14
Улучшения Hot Reload
Улучшения редактора Razor

### C++
Поддержка Toolset Windows
Устаревание и удаление функций C++
Обновления C++ STL
Улучшение Class View
Обновления шаблонов проектов
Подсветка синтаксиса для атрибутов C++
Улучшения clang-tidy
👍144🔥4🤔1🤬1🤮1
По данным hh_ru, за первые 8 месяцев 2025 г. было открыто 88 тыс. вакансий для программистов и размещено 445 тыс. резюме
На 1 вакансию приходится 14 активных резюме. Наибольшая конкуренция – среди джунов: 18,6 резюме на 1 вакансию, у мидлов – 14,7 резюме. У сеньоров – лишь 3 резюме на 1 вакансию

В 2025 г. в вакансиях чаще стал упоминаться 1С – он оказался в тройке самых востребованных наряду PostgreSQL и Git. Но спецов по нему нет

47% всех открытых вакансий за 8 месяцев 2025 г. - в Москве. СПБ на 2-м месте с 13%. За ним - Свердловская и Новосибирская области и Татарстан - по 3% от общего числа вакансий

Хуже всего в ХМАО – зафиксировано 40 резюме на 1 вакансию. На 2 месте – Ставропольский край с результатом 38,1. У Оренбургской области – 28,9 резюме на 1 вакансию, у Ульяновской области – 28,1
Наилучшая ситуация в МСК – 10,3 резюме на 1 вакансию, в СПБ – 13,3, в Свердловской и Новосибирской областях – 11,5 и 12,4 резюме на вакансию
https://www.cnews.ru/news/top/2025-09-11_v_rossii_ostryj_defitsit_opytnyh
👍8🤔8🤮3👏2😁2😨21
Microsoft разрешила разработчикам публиковать приложения для Windows в Microsoft Store без комиссии. Теперь разработчики получили возможность отправлять в магазин приложения Win32 (включая .NET WPF и WinForms), UWP, PWA, .NET MAUI и Electron без уплаты каких-либо регистрационных сборов.
Также Microsoft возьмёт на себя хостинг и подписание каждого приложения, избавив разработчиков от необходимости платить за эти услуги.

Компания предлагает упаковать приложение в MSIX, чтобы разместить исполняемый файл в инфраструктуре, а Microsoft возьмёт на себя оплату распространения, поэтому разработчикам не нужно настраивать собственную CDN. Microsoft бесплатно подпишет отправленное приложение, чтобы повысить доверие и безопасность, а Windows будет автоматически устанавливать обновления.

Разработчики неигровых приложений для Windows смогут развернуть собственную систему внутренних платежей, чтобы получать весь доход.

Для отправки приложения нужно иметь учётную запись Microsoft и следовать инструкциям нового интерфейса. Однако перед публикацией приложения разработчикам необходимо подтвердить свою личность, отсканировав действительное удостоверение личности государственного образца и сделав селфи.

https://blogs.windows.com/windowsdeveloper/2025/09/10/free-developer-registration-for-individual-developers-on-microsoft-store/
32🔥10👍9
В Албании назначили первого в мире «неподкупного ИИ-министра»
Модель на базе искусственного интеллекта будет использоваться в Албании в качестве «ИИ-министра» по имени «Диелла». Первый в мире ИИ-министр будет отвечать за госзакупки
Премьер-министр Эди Рама заявил, что «Диелла» будет заниматься гостендерами, в рамках которых правительство заключает контракты с частными компаниями. В результате госзакупки будут «защищены от коррупции».
https://www.rbc.ru/politics/11/09/2025/68c30edf9a7947eb7aea850b?from=newsfeed
😁28🤡25🥴4👍3🔥1
Что такое MQTT?
(продолжение в следующем посте)
3👍2🔥2
### Что такое MQTT?
(продолжение предыдущего поста)

MQTT (первоначально «Message Queuing Telemetry Transport» — транспорт телеметрии с очередями сообщений) — это:
* Лёгковесный протокол обмена сообщениями по принципу «публикация-подписка».
* Разработан для быстрой, эффективной и надёжной коммуникации между устройствами, особенно в условиях ограниченной пропускной способности и высокой задержки.
* Использует брокер, который маршрутизирует сообщения от издателей (устройств, отправляющих данные) к подписчикам (устройствам или приложениям, заинтересованным в этих данных), при этом им не нужно знать друг о друге.

### История развития

Создан в 1999 году Энди Стэнфорд-Кларком (IBM) и Арленом Ниппером (Arcom) для мониторинга нефтяных трубопроводов через ненадёжные спутниковые каналы связи.

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

* В 2010 году IBM выпустила MQTT 3.1 как открытый протокол.
* Стандартизирован OASIS в 2013 году.
* MQTT 5 выпущен в 2019 году.

На сегодняшний день MQTT является фактическим стандартом для обмена сообщениями в IoT и широко применяется в различных отраслях.

### Примеры практического применения

Умная домашняя автоматизация:
* Умный термостат отправляет данные о температуре брокеру MQTT.
* Умные светильники или системы HVAC подписываются на эти данные и автоматически регулируют настройки.
* Владельцы домов могут управлять всеми устройствами и отслеживать их работу через единое приложение.

Другие важные области применения:
* Промышленный интернет вещей.
* Управление автопарками.
* Умные электросети.
* Здравоохранение (удаленный мониторинг).
* Сельское хозяйство.
* Логистика.
5👍4🔥2
Oracle сократила команду разработки открытой СУБД MySQL на 70 человек. Оставшихся ее членов американская корпорация объединила с разработчиками, работающими над облачным коммерческим продуктом на базе MySQL - Heatwave.

Стоявшие у истоков MySQL специалисты опасаются, что это может означать скорый конец открытой СУБД.

https://www.theregister.com/2025/09/11/oracle_slammed_for_mysql_job/
👎19😭12😱7🤯3🤬1
Шпаргалка по LVM (Logical Volume Manager) - системе управления томами в Linux.
(продолжение в следующем посте)
👍4🔥2👏1