
🌸 Майская распродажа
Скидки до 70% в каталоге + дополнительно 3,5% по промокоду HAPPYMAY
В каталог
27.9

C# 1001 notes
5.0
6
Поделиться
В избранное
Купить рекламу в этом канале
Формат:
keyboard_arrow_down
- 1/24
- 2/48
- 3/72
- Нативный
- 7 дней
- Репост
1 час в топе / 24 часа в ленте
Количество:
keyboard_arrow_down
- 1
- 2
- 3
- 4
- 5
- 8
- 10
- 15
Стоимость публикации:
local_activity
6 573.42₽6 573.42₽local_mall
0.0%
Осталось по этой цене:0
Последние посты канала
imageИзображение не доступно для предпросмотра
🚀 Silk.NET 3.0: грядущая революция в .NET-графике
Сообщество Silk.NET анонсировало работу над третьей версией своего фреймворка — амбициозным переосмыслением того, как должны работать низкоуровневые .NET-биндинги для графики и мультимедиа.
Особенность проекта всегда заключалась в кроссплатформенности и минимальных накладных расходах при работе с GPU. В 3.0 разработчики обещают переработанную систему биндингов и улучшенную интеграцию с современными .NET-стэками.
🤖 GitHub
@csharp_ci
Сообщество Silk.NET анонсировало работу над третьей версией своего фреймворка — амбициозным переосмыслением того, как должны работать низкоуровневые .NET-биндинги для графики и мультимедиа.
Особенность проекта всегда заключалась в кроссплатформенности и минимальных накладных расходах при работе с GPU. В 3.0 разработчики обещают переработанную систему биндингов и улучшенную интеграцию с современными .NET-стэками.
🤖 GitHub
@csharp_ci
1300
14:20
28.04.2025
imageИзображение не доступно для предпросмотра
ИТ-событие, которое нельзя пропустить. Участие бесплатное
6 июня разработчики из российских бигтехов на практических примерах покажут, как ИИ перестал быть экспериментом и стал частью разработки.
В программе:
— Больше 40 докладов от известных ученых и ИТ-компаний.
— Выступления зарубежных спикеров с индексом Хирша более 50.
— Концентрация практических кейсов: как создаются большие проекты с применением AI.
— Доклады по архитектуре, бэкенд-разработке и построению ИТ-платформ.
— AI-интерактивы и технологические квесты.
— Пространство для нетворкинга,
Когда: 6 июня
Где: Москва, МТС Live Холл и онлайн
Регистрация по ссылке
1500
12:20
28.04.2025
📌 Задача: "Высоконагружённый кэш с автоматической очисткой и конкурентным доступом"
❗️Условие:
Реализуйте класс
- Позволять безопасно добавлять и получать элементы из кэша в многопоточной среде (`Get`, `Set`).
- Автоматически удалять элементы через N секунд после их добавления (TTL).
- Поддерживать высокую производительность при массовом доступе (тысячи операций в секунду).
- Минимизировать блокировки (`lock`) или использовать неблокирующие структуры.
- Корректно работать с истекшими элементами:
- Не возвращать их через
- Не копить мусор в памяти.
---
▪️ Ограничения:
- Можно использовать стандартные коллекции .NET (`ConcurrentDictionary`,
- Нельзя использовать внешние библиотеки типа
- Нужно поддерживать работу под большой нагрузкой (много ключей и операций параллельно).
---
▪️ Подсказки:
- Для конкурентного доступа подойдёт
- Для очистки устаревших данных:
- Можно использовать фоновую задачу (`Task`) с таймером, которая периодически чистит старые записи.
- Обратите внимание на гонки состояний: между проверкой срока жизни элемента и его удалением.
---
▪️ Что оценивается:
- Умение проектировать потокобезопасные структуры данных.
- Продуманность балансировки между скоростью операций и частотой очистки.
- Правильная работа со временем жизни (`TTL`).
- Чистота и лаконичность кода.
---
▪️ Разбор возможного решения:
▪️ Основная идея:
- В кэше храним не просто значение, а пару (значение + время истечения).
- При
- Проверяем, истёк ли элемент.
- Если истёк — удаляем его и возвращаем
- При
- Сохраняем значение с текущим временем + TTL.
- Отдельная фоновая задача (`Task`) регулярно сканирует кэш и удаляет устаревшие элементы.
▪️ Мини-пример структуры:
📌 Важные моменты:
- Кэш конкурентный (`ConcurrentDictionary`) — доступ без явных блокировок.
- Периодическая чистка не мешает основным операциям.
- Удаление истёкших элементов происходит "мягко" (через проверку срока жизни).
- Фоновая задача корректно завершается через
❗️Условие:
Реализуйте класс
SmartCache<TKey, TValue>
в .NET, который должен:- Позволять безопасно добавлять и получать элементы из кэша в многопоточной среде (`Get`, `Set`).
- Автоматически удалять элементы через N секунд после их добавления (TTL).
- Поддерживать высокую производительность при массовом доступе (тысячи операций в секунду).
- Минимизировать блокировки (`lock`) или использовать неблокирующие структуры.
- Корректно работать с истекшими элементами:
- Не возвращать их через
Get
.- Не копить мусор в памяти.
---
▪️ Ограничения:
- Можно использовать стандартные коллекции .NET (`ConcurrentDictionary`,
Timer
, Task
, CancellationToken
и т.д.).- Нельзя использовать внешние библиотеки типа
MemoryCache
, Redis
, LazyCache
и др.- Нужно поддерживать работу под большой нагрузкой (много ключей и операций параллельно).
---
▪️ Подсказки:
- Для конкурентного доступа подойдёт
ConcurrentDictionary<TKey, ValueWithExpiry>
.- Для очистки устаревших данных:
- Можно использовать фоновую задачу (`Task`) с таймером, которая периодически чистит старые записи.
- Обратите внимание на гонки состояний: между проверкой срока жизни элемента и его удалением.
---
▪️ Что оценивается:
- Умение проектировать потокобезопасные структуры данных.
- Продуманность балансировки между скоростью операций и частотой очистки.
- Правильная работа со временем жизни (`TTL`).
- Чистота и лаконичность кода.
---
▪️ Разбор возможного решения:
▪️ Основная идея:
- В кэше храним не просто значение, а пару (значение + время истечения).
- При
Get(key)
:- Проверяем, истёк ли элемент.
- Если истёк — удаляем его и возвращаем
null
или default
.- При
Set(key, value)
:- Сохраняем значение с текущим временем + TTL.
- Отдельная фоновая задача (`Task`) регулярно сканирует кэш и удаляет устаревшие элементы.
▪️ Мини-пример структуры:
using System;
using System.Collections.Concurrent;
using System.Threading;
using System.Threading.Tasks;
public class SmartCache<TKey, TValue>
{
private readonly ConcurrentDictionary<TKey, (TValue Value, DateTime Expiry)> _cache = new();
private readonly TimeSpan _ttl;
private readonly CancellationTokenSource _cts = new();
public SmartCache(TimeSpan ttl)
{
_ttl = ttl;
StartCleanupTask();
}
public void Set(TKey key, TValue value)
{
_cache[key] = (value, DateTime.UtcNow.Add(_ttl));
}
public TValue Get(TKey key)
{
if (_cache.TryGetValue(key, out var entry))
{
if (entry.Expiry > DateTime.UtcNow)
{
return entry.Value;
}
else
{
_cache.TryRemove(key, out _);
}
}
return default;
}
private void StartCleanupTask()
{
Task.Run(async () =>
{
while (!_cts.Token.IsCancellationRequested)
{
foreach (var key in _cache.Keys)
{
if (_cache.TryGetValue(key, out var entry) && entry.Expiry <= DateTime.UtcNow)
{
_cache.TryRemove(key, out _);
}
}
await Task.Delay(TimeSpan.FromSeconds(30), _cts.Token); // периодическая очистка
}
});
}
public void Dispose()
{
_cts.Cancel();
}
}
📌 Важные моменты:
- Кэш конкурентный (`ConcurrentDictionary`) — доступ без явных блокировок.
- Периодическая чистка не мешает основным операциям.
- Удаление истёкших элементов происходит "мягко" (через проверку срока жизни).
- Фоновая задача корректно завершается через
CancellationToken
.1600
13:40
27.04.2025
⚡️Легкий способ получать свежие обновления и следить за трендами в разработке на вашем языке. Находите свой стек и подписывайтесь:
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Собеседования DS: t.me/machinelearning_interview
Нерйросети t.me/ai_machinelearning_big_data
C++ t.me/cpluspluc
Docker: t.me/DevopsDocker
Хакинг: t.me/linuxkalii
Devops: t.me/DevOPSitsec
Data Science: t.me/data_analysis_ml
Javascript: t.me/javascriptv
C#: t.me/csharp_ci
Java: t.me/javatg
Базы данных: t.me/sqlhub
Python собеседования: t.me/python_job_interview
Мобильная разработка: t.me/mobdevelop
Golang: t.me/Golang_google
React: t.me/react_tg
Rust: t.me/rust_code
ИИ: t.me/vistehno
PHP: t.me/phpshka
Android: t.me/android_its
Frontend: t.me/front
Big Data: t.me/bigdatai
МАТЕМАТИКА: t.me/data_math
Kubernets: t.me/kubernetc
Разработка игр: https://t.me/gamedev
Haskell: t.me/haskell_tg
Физика: t.me/fizmat
💼 Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.me/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://t.me/addlist/mzMMG3RPZhY2M2Iy
😆ИТ-Мемы: t.me/memes_prog
🇬🇧Английский: t.me/english_forprogrammers
🧠ИИ: t.me/vistehno
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
📕Ит-книги бесплатно: https://t.me/addlist/BkskQciUW_FhNjEy
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Собеседования DS: t.me/machinelearning_interview
Нерйросети t.me/ai_machinelearning_big_data
C++ t.me/cpluspluc
Docker: t.me/DevopsDocker
Хакинг: t.me/linuxkalii
Devops: t.me/DevOPSitsec
Data Science: t.me/data_analysis_ml
Javascript: t.me/javascriptv
C#: t.me/csharp_ci
Java: t.me/javatg
Базы данных: t.me/sqlhub
Python собеседования: t.me/python_job_interview
Мобильная разработка: t.me/mobdevelop
Golang: t.me/Golang_google
React: t.me/react_tg
Rust: t.me/rust_code
ИИ: t.me/vistehno
PHP: t.me/phpshka
Android: t.me/android_its
Frontend: t.me/front
Big Data: t.me/bigdatai
МАТЕМАТИКА: t.me/data_math
Kubernets: t.me/kubernetc
Разработка игр: https://t.me/gamedev
Haskell: t.me/haskell_tg
Физика: t.me/fizmat
💼 Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.me/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://t.me/addlist/mzMMG3RPZhY2M2Iy
😆ИТ-Мемы: t.me/memes_prog
🇬🇧Английский: t.me/english_forprogrammers
🧠ИИ: t.me/vistehno
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
📕Ит-книги бесплатно: https://t.me/addlist/BkskQciUW_FhNjEy
1400
12:35
27.04.2025
imageИзображение не доступно для предпросмотра
❓Сталкиваетесь с задачами, когда вам нужно выбрать лучший алгоритм, но не понимаете, как анализировать их сложность? Ваш код может быть медленным или неэффективным, и вы не знаете, как это исправить?
📗На открытом вебинаре 21 апреля в 20:00 мск вы освоите важные инструменты для анализа сложности алгоритмов, улучшите свой навык решения алгоритмических задач и на примере простых алгоритмов сортировки и увидите разницу при применении алгоритмов разной степени сложности.
➡️Регистрируйтесь прямо сейчас и получите скидку на большое обучение «C# Developer» по промокоду SHARP_SPEC_4: https://otus.pw/ph5R/?erid=2W5zFJYeybN
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
📗На открытом вебинаре 21 апреля в 20:00 мск вы освоите важные инструменты для анализа сложности алгоритмов, улучшите свой навык решения алгоритмических задач и на примере простых алгоритмов сортировки и увидите разницу при применении алгоритмов разной степени сложности.
➡️Регистрируйтесь прямо сейчас и получите скидку на большое обучение «C# Developer» по промокоду SHARP_SPEC_4: https://otus.pw/ph5R/?erid=2W5zFJYeybN
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
915
08:04
18.04.2025
imageИзображение не доступно для предпросмотра
Вы используете локальные переменные в LINQ и используете let? 👇
Ключевое слово let позволяет вводить временную переменную прямо внутри запроса LINQ — как локальную переменную в цикле.
Разбивайте сложные вычисления на части
Делайте запрос модульнее и чище
Меньше проходов по данным → выше производительность
👉 Простой пример:
csharp
Ключевое слово let позволяет вводить временную переменную прямо внутри запроса LINQ — как локальную переменную в цикле.
Разбивайте сложные вычисления на части
Делайте запрос модульнее и чище
Меньше проходов по данным → выше производительность
👉 Простой пример:
csharp
from order in orders
let total = order.Items.Sum(i => i.Price * i.Quantity)
where total > 1000
let categories = order.Items.Select(i => i.Category).Distinct()
select new
{
OrderId = order.Id,
Total = total,
Categories = categories
};
let total
= … — вычисляем сумму заказа только один разwhere total >
1000 — фильтруем по готовому значениюlet categories =
… — собираем уникальные категории2300
10:22
17.04.2025
В третьем предварительном выпуске .NET 10 Preview 3, Microsoft сосредоточила внимание на улучшении производительности, удобстве для разработчиков и современных облачных паттернах.
Хотя этот выпуск не содержит значимых новых функций, он предлагает значительные усовершенствования в различных областях.
🔧 Основные нововведения
🐳 Нативная публикация контейнеров для консольных приложений
Теперь консольные приложения могут создавать контейнерные образы с помощью команды:
Это стало возможным без необходимости устанавливать свойство <EnableSdkContainerSupport> в значение true в файле проекта. Если требуется отключить эту поддержку, можно установить это свойство в false.
📦 Управление форматом контейнерных образов
Разработчики получили возможность явно указывать формат контейнерного образа (.Docker или .OCI) с помощью нового свойства <ContainerImageFormat> в SDK. По умолчанию SDK выбирает формат на основе архитектуры контейнера и базового образа, но теперь это поведение можно переопределить, что особенно полезно для команд, стандартизирующихся на формате OCI.
🌐 Обновления для облачных и веб-приложений
ASP.NET Core: Добавлена поддержка OpenAPI 3.1, что обеспечивает лучшую интеграцию с современными API-шлюзами и инструментами проектирования. Также теперь можно обслуживать документы OpenAPI в формате YAML, что широко используется в инфраструктуре как код и DevOps-процессах.
Blazor Web Apps: Введён новый компонент ReconnectModal для более плавной обработки отключений клиента. Улучшения также коснулись компонента QuickGrid, включая условное стилизование строк и управление пользовательским интерфейсом. Навигация стала более предсказуемой, избегая ненужной прокрутки страниц и лучше обрабатывая строки запроса. Кроме того, скрипт фреймворка Blazor теперь обслуживается как статический веб-ресурс с отпечатком, улучшая кэширование и производительность, особенно в средах с CDN или на периферии сети.
⚙️ Дополнительные улучшения
Оптимизация SDK: Автоматическое удаление неиспользуемых ссылок на пакеты, предоставляемые фреймворком, что снижает использование диска и улучшает производительность сборки.
- Улучшения CLI:
Введены новые алиасы команд, такие как dotnet package add, для повышения ясности и согласованности командной строки.
Теперь можно генерировать скрипты автодополнения оболочки с помощью команды dotnet completions generate <SHELL> для bash, zsh, powershell и других.
В интерактивных терминалах команды CLI теперь по умолчанию работают в интерактивном режиме, упрощая взаимодействие с пользователем.
- Улучшения JIT-компилятора:
Возможность деинлайнить и инлайнить методы интерфейса на массивах, улучшая производительность в коде с интенсивным использованием коллекций.
Оптимизация перечисления массивов, позволяющая лучшую инлайнизацию JIT и размещение в стеке.
Поддержка инлайнинга методов, которые становятся деинлайненными после предыдущих шагов инлайнинга.
Разрешение размещения в стеке для небольших массивов фиксированного размера, состоящих из типов значений без указателей GC, снижая нагрузку на кучу.
- Новые API и улучшения:
Поддержка поиска сертификатов по отпечатку с использованием алгоритмов, отличных от SHA-1, таких как SHA-256.
Улучшения в кодировании PEM: API PEM теперь поддерживают чтение ASCII/UTF-8 текста напрямую, упрощая кроссплатформенную работу с ключами и сертификатами.
Поддержка DateOnly в ISOWeek: новые перегрузки для работы со значениями DateOnly в логике, основанной на неделях.
Нормализация строк для Span<char> и ReadOnlySpan<char>: новые API позволяют выполнять нормализацию Unicode напрямую на этих типах, снижая количество выделений памяти.
Для получения более подробной информации сюда
Хотя этот выпуск не содержит значимых новых функций, он предлагает значительные усовершенствования в различных областях.
🔧 Основные нововведения
🐳 Нативная публикация контейнеров для консольных приложений
Теперь консольные приложения могут создавать контейнерные образы с помощью команды:
dotnet publish /t:PublishContainer
Это стало возможным без необходимости устанавливать свойство <EnableSdkContainerSupport> в значение true в файле проекта. Если требуется отключить эту поддержку, можно установить это свойство в false.
📦 Управление форматом контейнерных образов
Разработчики получили возможность явно указывать формат контейнерного образа (.Docker или .OCI) с помощью нового свойства <ContainerImageFormat> в SDK. По умолчанию SDK выбирает формат на основе архитектуры контейнера и базового образа, но теперь это поведение можно переопределить, что особенно полезно для команд, стандартизирующихся на формате OCI.
🌐 Обновления для облачных и веб-приложений
ASP.NET Core: Добавлена поддержка OpenAPI 3.1, что обеспечивает лучшую интеграцию с современными API-шлюзами и инструментами проектирования. Также теперь можно обслуживать документы OpenAPI в формате YAML, что широко используется в инфраструктуре как код и DevOps-процессах.
Blazor Web Apps: Введён новый компонент ReconnectModal для более плавной обработки отключений клиента. Улучшения также коснулись компонента QuickGrid, включая условное стилизование строк и управление пользовательским интерфейсом. Навигация стала более предсказуемой, избегая ненужной прокрутки страниц и лучше обрабатывая строки запроса. Кроме того, скрипт фреймворка Blazor теперь обслуживается как статический веб-ресурс с отпечатком, улучшая кэширование и производительность, особенно в средах с CDN или на периферии сети.
⚙️ Дополнительные улучшения
Оптимизация SDK: Автоматическое удаление неиспользуемых ссылок на пакеты, предоставляемые фреймворком, что снижает использование диска и улучшает производительность сборки.
- Улучшения CLI:
Введены новые алиасы команд, такие как dotnet package add, для повышения ясности и согласованности командной строки.
Теперь можно генерировать скрипты автодополнения оболочки с помощью команды dotnet completions generate <SHELL> для bash, zsh, powershell и других.
В интерактивных терминалах команды CLI теперь по умолчанию работают в интерактивном режиме, упрощая взаимодействие с пользователем.
- Улучшения JIT-компилятора:
Возможность деинлайнить и инлайнить методы интерфейса на массивах, улучшая производительность в коде с интенсивным использованием коллекций.
Оптимизация перечисления массивов, позволяющая лучшую инлайнизацию JIT и размещение в стеке.
Поддержка инлайнинга методов, которые становятся деинлайненными после предыдущих шагов инлайнинга.
Разрешение размещения в стеке для небольших массивов фиксированного размера, состоящих из типов значений без указателей GC, снижая нагрузку на кучу.
- Новые API и улучшения:
Поддержка поиска сертификатов по отпечатку с использованием алгоритмов, отличных от SHA-1, таких как SHA-256.
Улучшения в кодировании PEM: API PEM теперь поддерживают чтение ASCII/UTF-8 текста напрямую, упрощая кроссплатформенную работу с ключами и сертификатами.
Поддержка DateOnly в ISOWeek: новые перегрузки для работы со значениями DateOnly в логике, основанной на неделях.
Нормализация строк для Span<char> и ReadOnlySpan<char>: новые API позволяют выполнять нормализацию Unicode напрямую на этих типах, снижая количество выделений памяти.
Для получения более подробной информации сюда
2000
11:20
16.04.2025
imageИзображение не доступно для предпросмотра
.NET митап в Нижнем Новгороде + трансляция
Когда: 21 апреля, 19:00 (мск)
Офлайн: КУПНО, регистрация обязательна, число мест ограничено
Онлайн: VK и Youtube, зарегистрируйтесь, чтобы получить ссылки на просмотр/запись.
В программе доклады:
• О построении распределенных систем и паттерне outbox от Андрея Цветцих (Т-Банк),
• О расчете вероятности любого события инструментами .NET от Кирилла Панина (Altenar),
• О миграции данных с MS SQL на Postgres SQL от Дмитрия Ершова (Рексофт).
Когда: 21 апреля, 19:00 (мск)
Офлайн: КУПНО, регистрация обязательна, число мест ограничено
Онлайн: VK и Youtube, зарегистрируйтесь, чтобы получить ссылки на просмотр/запись.
В программе доклады:
• О построении распределенных систем и паттерне outbox от Андрея Цветцих (Т-Банк),
• О расчете вероятности любого события инструментами .NET от Кирилла Панина (Altenar),
• О миграции данных с MS SQL на Postgres SQL от Дмитрия Ершова (Рексофт).
1500
12:09
14.04.2025
🔧 Задача на C# для внимательных разработчиков
Что выведет следующий код?
Варианты ответа:
A)
B)
C)
D)
---
✅ Правильный ответ:B
Почему:
Лямбда-функции захватывают переменную по ссылке, а не её значение на каждой итерации. После завершения цикла , и все замыкания ссылаются на одно и то же . Это классическая ловушка замыканий в C#.
Что выведет следующий код?
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var actions = new List<Action>();
for (int i = 0; i < 3; i++)
{
actions.Add(() => Console.WriteLine(i));
}
foreach (var action in actions)
action();
}
}
Варианты ответа:
A)
1
2
B)
3
3
C)
0
0
D)
---
✅ Правильный ответ:
Почему:
Лямбда-функции захватывают переменную
i
i == 3
i
2100
12:02
13.04.2025
imageИзображение не доступно для предпросмотра
🛡Хотите строить защищенные и масштабируемые микросервисы с помощью ASP.NET Core?
Присоединяйтесь к открытому уроку 17 апреля в 20:00 МСК и узнайте, как создать безопасные микросервисы с использованием JWT, OpenID Connect, и .NET Aspire. Мы разберем, как защитить API, оптимизировать производительность и внедрить современные подходы к аутентификации и авторизации.
❗️Что разберем:
- Принципы и преимущества архитектуры микросервисов.
- Защиту API с использованием JWT и OpenID Connect.
- Инструменты .NET Aspire для оркестрации сервисов и настройки окружения.
- Реальные шаги по созданию микросервисов, настройке безопасности и работе с Docker.
🚀 Урок пройдет в преддверии старта курса «C# ASP.NET Core разработчик».
🎁 Все участники получат скидку на обучение по промокоду: ASP_NET_04.
Присоединяйтесь: https://otus.pw/M71Fp/?erid=2W5zFJ19jdJ
Промокод действителен до 28.04.2025
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
Присоединяйтесь к открытому уроку 17 апреля в 20:00 МСК и узнайте, как создать безопасные микросервисы с использованием JWT, OpenID Connect, и .NET Aspire. Мы разберем, как защитить API, оптимизировать производительность и внедрить современные подходы к аутентификации и авторизации.
❗️Что разберем:
- Принципы и преимущества архитектуры микросервисов.
- Защиту API с использованием JWT и OpenID Connect.
- Инструменты .NET Aspire для оркестрации сервисов и настройки окружения.
- Реальные шаги по созданию микросервисов, настройке безопасности и работе с Docker.
🚀 Урок пройдет в преддверии старта курса «C# ASP.NET Core разработчик».
🎁 Все участники получат скидку на обучение по промокоду: ASP_NET_04.
Присоединяйтесь: https://otus.pw/M71Fp/?erid=2W5zFJ19jdJ
Промокод действителен до 28.04.2025
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
1400
14:29
10.04.2025
close
С этим каналом часто покупают
Отзывы канала
keyboard_arrow_down
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
5.0
0 отзыва за 6 мес.
m
**cromarketing@****.ru
на сервисе с августа 2023
23.07.202407:30
5
Оперативное размещение
Показать еще
Лучшие в тематике
Статистика канала
Рейтинг
27.9
Оценка отзывов
5.0
Выполнено заявок
68
Подписчики:
6.6K
Просмотры на пост:
lock_outline
ER:
13.0%
Публикаций в день:
0.0
CPV
lock_outlineВыбрано
0
каналов на сумму:0.00₽
Подписчики:
0
Просмотры:
lock_outline
Перейти в корзинуКупить за:0.00₽
Комментарий