Forwarded from C# 1001 notes
🧰 .NET Community Toolkit — полезная коллекция библиотек и API для .NET-разработчиков, созданная Microsoft и поддерживаемая сообществом. Этот набор инструментов не привязан к конкретному UI-фреймворку, а значит, его можно использовать в любых проектах — от десктопных приложений до веб-решений.
Среди ключевых компонентов — CommunityToolkit.Mvvm (облегченная MVVM-библиотека, наследник MvvmLight), CommunityToolkit.HighPerformance (оптимизации для работы с памятью и многопоточностью) и CommunityToolkit.Diagnostics (удобные методы валидации). При этом все инструменты уже применяются в реальных продуктах Microsoft, включая новый Microsoft Store.
Разработчики могут легко подключить NuGet-пакеты через Visual Studio, а документация доступна на Microsoft Docs. Планы по развитию публикуются в Roadmap, а для тестирования новых функций можно подключить пререлизные сборки.
🤖 GitHub
Среди ключевых компонентов — CommunityToolkit.Mvvm (облегченная MVVM-библиотека, наследник MvvmLight), CommunityToolkit.HighPerformance (оптимизации для работы с памятью и многопоточностью) и CommunityToolkit.Diagnostics (удобные методы валидации). При этом все инструменты уже применяются в реальных продуктах Microsoft, включая новый Microsoft Store.
Разработчики могут легко подключить NuGet-пакеты через Visual Studio, а документация доступна на Microsoft Docs. Планы по развитию публикуются в Roadmap, а для тестирования новых функций можно подключить пререлизные сборки.
🤖 GitHub
Forwarded from C# 1001 notes
🔥 Лучшая фича в ASP .NET Core 10 — Server-Sent Events (SSE)
SSE — это упрощённая альтернатива SignalR: стриминг данных с сервера к клиенту через обычный HTTP.
🔑 Плюсы SSE:
➡️ Односторонняя передача: только сервер → клиент
➡️ Работает через обычный HTTP (тип `text/event-stream`)
➡️ Не требует WebSocket-рукопожатия
➡️ Браузеры автоматически переподключаются
➡️ Очень низкие накладные расходы
🧪 Можно тестировать прямо через
📌 Когда использовать SSE:
☑️ Лайв-ленты: акции, спорт, новости
☑️ Реальные уведомления: соцсети, алерты
☑️ Отслеживание прогресса: загрузки, долгие операции
☑️ Лайв-дэшборды: мониторинг, аналитика
SSE идеально подходит, когда нужно пушить данные с сервера, но не нужен full-duplex как в WebSockets.
📦 Я сделал пример — Live Stock Market с исходниками для фронта и бэка. Пиши, если интересно!
SSE — это упрощённая альтернатива SignalR: стриминг данных с сервера к клиенту через обычный HTTP.
🔑 Плюсы SSE:
➡️ Односторонняя передача: только сервер → клиент
➡️ Работает через обычный HTTP (тип `text/event-stream`)
➡️ Не требует WebSocket-рукопожатия
➡️ Браузеры автоматически переподключаются
➡️ Очень низкие накладные расходы
🧪 Можно тестировать прямо через
curl
, Postman, Apidog, или HTTP request-файлы в IDE. Поддерживается во всех основных браузерах.📌 Когда использовать SSE:
☑️ Лайв-ленты: акции, спорт, новости
☑️ Реальные уведомления: соцсети, алерты
☑️ Отслеживание прогресса: загрузки, долгие операции
☑️ Лайв-дэшборды: мониторинг, аналитика
SSE идеально подходит, когда нужно пушить данные с сервера, но не нужен full-duplex как в WebSockets.
📦 Я сделал пример — Live Stock Market с исходниками для фронта и бэка. Пиши, если интересно!
Forwarded from C# 1001 notes
🔍 Anton DevTips делится 650+ эксклюзивными бесплатными материалами для прокачки C#, .NET, ASP .NET Core, EF Core и микросервисов:
Отдельные статьи и примеры из подборки:
- Structured Logging & Distributed Tracing в микросервисах
↳ https://antondevtips.com/blog/how-to-implement-structured-logging-and-distributed-tracing-for-microservices-with-seq
- Server-Sent Events в ASP .NET Core 10
↳ https://antondevtips.com/blog/real-time-server-sent-events-in-asp-net-core
- Логирование API-запросов и ответов
↳ https://antondevtips.com/blog/logging-requests-and-responses-for-api-requests-and-httpclient-in-aspnetcore
- GraphQL c HotChocolate
↳ https://antondevtips.com/blog/getting-started-with-hot-chocolate-graphql
- WebAPI на FastEndpoints + Vertical Slice
↳ https://antondevtips.com/blog/productive-web-api-development-with-fast-endpoints-and-vertical-slice-architecture-in-dotnet
- AI-чат-бот на OpenAI + Postgres
↳ https://antondevtips.com/blog/building-multimodel-ai-chat-bot-in-dotnet-with-chat-gpt-and-database-branching-in-neon-postgres
- Мультитенант в Azure Functions
↳ https://antondevtips.com/blog/building-a-multitenant-cloud-application-with-azure-functions-and-neon-postgres
- Snapshot-тестирование с Verify
↳ https://antondevtips.com/blog/how-to-simplify-assertions-in-unit-and-integration-tests-with-verify-in-dotnet
- Интеграционные тесты c WireMock
↳ https://antondevtips.com/blog/how-to-test-integrations-with-apis-using-wiremock-in-dotnet
- Best Practices для ASP .NET Core Integration Testing
↳ https://antondevtips.com/blog/asp-net-core-integration-testing-best-practises?utm_source=linkedin&utm_medium=social&utm_campaign=01-04-2025
- MongoDB + .NET: практики
↳ https://antondevtips.com/blog/best-practices-when-working-with-mongodb-in-dotnet
- CLI-приложения на .NET
↳ https://antondevtips.com/blog/how-to-create-command-line-console-applications-in-dotnet
- Кастомизация ASP .NET Core Identity
↳ https://antondevtips.com/blog/how-to-customize-aspnet-core-identity-with-efcore-for-your-project-needs
- Миграции для нескольких БД в EF Core
↳ https://antondevtips.com/blog/how-to-create-migrations-for-multiple-databases-in-ef-core
- Управление жизненным циклом DbContext
↳ https://antondevtips.com/blog/how-to-manage-ef-core-dbcontext-lifetime
- Views, Stored Procedures и Functions в EF Core
↳ https://antondevtips.com/blog/calling-views-stored-procedures-and-functions-in-ef-core
✔️ PDF-сборник ресурсов — docs, туториалы, блоги, видео
↳ https://anton-devtips.kit.com/dotnet-resources?utm_source=linkedin&utm_medium=social&utm_campaign=dotnet-resources-july-2025
Отдельные статьи и примеры из подборки:
- Structured Logging & Distributed Tracing в микросервисах
↳ https://antondevtips.com/blog/how-to-implement-structured-logging-and-distributed-tracing-for-microservices-with-seq
- Server-Sent Events в ASP .NET Core 10
↳ https://antondevtips.com/blog/real-time-server-sent-events-in-asp-net-core
- Логирование API-запросов и ответов
↳ https://antondevtips.com/blog/logging-requests-and-responses-for-api-requests-and-httpclient-in-aspnetcore
- GraphQL c HotChocolate
↳ https://antondevtips.com/blog/getting-started-with-hot-chocolate-graphql
- WebAPI на FastEndpoints + Vertical Slice
↳ https://antondevtips.com/blog/productive-web-api-development-with-fast-endpoints-and-vertical-slice-architecture-in-dotnet
- AI-чат-бот на OpenAI + Postgres
↳ https://antondevtips.com/blog/building-multimodel-ai-chat-bot-in-dotnet-with-chat-gpt-and-database-branching-in-neon-postgres
- Мультитенант в Azure Functions
↳ https://antondevtips.com/blog/building-a-multitenant-cloud-application-with-azure-functions-and-neon-postgres
- Snapshot-тестирование с Verify
↳ https://antondevtips.com/blog/how-to-simplify-assertions-in-unit-and-integration-tests-with-verify-in-dotnet
- Интеграционные тесты c WireMock
↳ https://antondevtips.com/blog/how-to-test-integrations-with-apis-using-wiremock-in-dotnet
- Best Practices для ASP .NET Core Integration Testing
↳ https://antondevtips.com/blog/asp-net-core-integration-testing-best-practises?utm_source=linkedin&utm_medium=social&utm_campaign=01-04-2025
- MongoDB + .NET: практики
↳ https://antondevtips.com/blog/best-practices-when-working-with-mongodb-in-dotnet
- CLI-приложения на .NET
↳ https://antondevtips.com/blog/how-to-create-command-line-console-applications-in-dotnet
- Кастомизация ASP .NET Core Identity
↳ https://antondevtips.com/blog/how-to-customize-aspnet-core-identity-with-efcore-for-your-project-needs
- Миграции для нескольких БД в EF Core
↳ https://antondevtips.com/blog/how-to-create-migrations-for-multiple-databases-in-ef-core
- Управление жизненным циклом DbContext
↳ https://antondevtips.com/blog/how-to-manage-ef-core-dbcontext-lifetime
- Views, Stored Procedures и Functions в EF Core
↳ https://antondevtips.com/blog/calling-views-stored-procedures-and-functions-in-ef-core
↳ https://anton-devtips.kit.com/dotnet-resources?utm_source=linkedin&utm_medium=social&utm_campaign=dotnet-resources-july-2025
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from C# 1001 notes
🧼 Как элегантно работать с конфигами в .NET?
Раньше я просто тянул значения напрямую из
Это быстро надоедает: много повторений, легко ошибиться, сложно валидировать.
Сейчас всегда использую Options pattern — и вот почему:
✅ Привязываешь конфигурацию к строго типизированным классам
✅ Добавляешь валидацию через аннотации
✅ Чисто внедряешь настройки через DI (`IOptions<T>` или `IOptionsSnapshot<T>`)
Отлично работает для:
-
- фичефлагов
- конфигов внешних сервисов
Если хочешь чистый и масштабируемый код — лучше подхода пока нет.
Раньше я просто тянул значения напрямую из
IConfiguration
. Это быстро надоедает: много повторений, легко ошибиться, сложно валидировать.
Сейчас всегда использую Options pattern — и вот почему:
✅ Привязываешь конфигурацию к строго типизированным классам
✅ Добавляешь валидацию через аннотации
✅ Чисто внедряешь настройки через DI (`IOptions<T>` или `IOptionsSnapshot<T>`)
Отлично работает для:
-
appsettings.json
- фичефлагов
- конфигов внешних сервисов
Если хочешь чистый и масштабируемый код — лучше подхода пока нет.
Forwarded from ITLES | Уроки программирования
Книги по PostgreSQL
Делимся подборкой книг по PostgreSQL. В нее вошли руководства на русском и английском языках. Присутствуют книги как для начинающих, так и для продвинутых. А в комментариях под этим постом ты можешь оставить свои рекомендации.
📂 Перейти к просмотру
ITLES – Курсы программирования
Делимся подборкой книг по PostgreSQL. В нее вошли руководства на русском и английском языках. Присутствуют книги как для начинающих, так и для продвинутых. А в комментариях под этим постом ты можешь оставить свои рекомендации.
📂 Перейти к просмотру
ITLES – Курсы программирования
Шаблон проектирования «состояние» двадцать лет спустя https://habr.com/p/341134/
Habr
Шаблон проектирования «состояние» двадцать лет спустя
Состояние — поведенческий шаблон проектирования. Используется в тех случаях, когда во время выполнения программы объект должен менять своё поведение в зависимости от своего состояния. Классическая...
Автор «сломал» RSA-512 (одна из старых криптосистем) всего за 3,5 часа даже на одном ядре старого ноутбука.
Он переписал задачу факторизации (разложение большого числа на два простых множителя) в виде булевой формулы и отдал ее на решение специальным решателям (SAT-солверам), которые подбирают ответы. То есть вместо того, чтобы напрямую «гадать» множители, он превратил задачу в головоломку из логических уравнений, которую современные алгоритмы щелкают на раз-два.
Получается, что RSA-512 сегодня уже абсолютно небезопасен, его можно разложить за считанные часы без суперкомпьютеров. Если такие методы ускорить или улучшить, то в будущем под угрозой окажутся и более серьёзные ключи вроде RSA-2048, которые сейчас используются в интернете и банках: https://u.habr.com/uMpM0
Он переписал задачу факторизации (разложение большого числа на два простых множителя) в виде булевой формулы и отдал ее на решение специальным решателям (SAT-солверам), которые подбирают ответы. То есть вместо того, чтобы напрямую «гадать» множители, он превратил задачу в головоломку из логических уравнений, которую современные алгоритмы щелкают на раз-два.
Получается, что RSA-512 сегодня уже абсолютно небезопасен, его можно разложить за считанные часы без суперкомпьютеров. Если такие методы ускорить или улучшить, то в будущем под угрозой окажутся и более серьёзные ключи вроде RSA-2048, которые сейчас используются в интернете и банках: https://u.habr.com/uMpM0
Forwarded from Bash Советы
Иногда нужно быстро найти и подсветить все IPv4-адреса в логах или текстовых файлах. Для этого отлично подходит регулярное выражение +
🔎 Что здесь происходит:
📌 Чтобы сразу убрать дубликаты и отсортировать список IP:
Это удобно при анализе логов Nginx/Apache или при поиске подозрительных подключений.
👉@bash_srv
grep
.
grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' access.log
🔎 Что здесь происходит:
-E
— включает расширенные регулярки.-o
— выводит только совпадения, без остальной строки.([0-9]{1,3}\.){3}[0-9]{1,3}
— шаблон поиска IPv4-адреса.📌 Чтобы сразу убрать дубликаты и отсортировать список IP:
grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' access.log | sort -u
Это удобно при анализе логов Nginx/Apache или при поиске подозрительных подключений.
👉@bash_srv
Forwarded from Библиотека задач по C# | тесты, код, задания
Кратко опишите жизненный цикл потока в C#.
✍🏻 Состояние Unstarted (New): новый экземпляр класса Thread инициализирован и не запущен.
✍🏻 Состояние Runnable: вызывается метод Start(), и поток готов к запуску.
✍🏻 Выполняется: поток был выбран планировщиком для запуска.
✍🏻 Не готов к запуску: иногда его называют WaitSleepJoin, поток переходит в это состояние, когда мы вызываем Wait() или Sleep(), а также когда он вызывает Join() в другом потоке.
✍🏻 Состояние Dead: поток завершил свою задачу или был вызван метод Abort(); это последний этап жизненного цикла потока.
Библиотека задач по C#
✍🏻 Состояние Unstarted (New): новый экземпляр класса Thread инициализирован и не запущен.
✍🏻 Состояние Runnable: вызывается метод Start(), и поток готов к запуску.
✍🏻 Выполняется: поток был выбран планировщиком для запуска.
✍🏻 Не готов к запуску: иногда его называют WaitSleepJoin, поток переходит в это состояние, когда мы вызываем Wait() или Sleep(), а также когда он вызывает Join() в другом потоке.
✍🏻 Состояние Dead: поток завершил свою задачу или был вызван метод Abort(); это последний этап жизненного цикла потока.
Библиотека задач по C#
Forwarded from Библиотека собеса по C# | вопросы с собеседований
В .NET Core сервисе под высокой нагрузкой заметны задержки при обработке запросов. Профилирование показывает частые блокировки потоков на lock. Как вы будете искать и устранять проблему?
Проанализирую contention через профилировщики (PerfView, dotTrace), посмотрю, где именно используются lock. Для оптимизации — заменить критические секции на более лёгкие механизмы синхронизации (ReaderWriterLockSlim, SemaphoreSlim), уменьшить область блокировки или перейти на lock-free структуры (ConcurrentDictionary, ConcurrentQueue).
Библиотека собеса по С#
Библиотека собеса по С#
Forwarded from Библиотека собеса по C# | вопросы с собеседований
В .NET Core приложении под высокой нагрузкой вы замечаете, что ответы API начинают задерживаться. Профилирование показывает блокировки потоков в ThreadPool. Как будете искать и устранять проблему?
Проверю, нет ли синхронных вызовов внутри async-методов (.Result, .Wait()), проанализирую contention на lock и тяжёлые операции в основном потоке. Для оптимизации — вынесу CPU-bound задачи в Task.Run или ProcessPool, ограничу параллелизм через SemaphoreSlim, а для I/O оставлю async/await без блокировок.
Библиотека собеса по С#
Библиотека собеса по С#
Forwarded from Библиотека собеса по C# | вопросы с собеседований
Долгоживущий .NET-сервис постепенно “распухает” по памяти без явных LOH-пиков. В дампе видно множество делегатов/лямбд, Timer и CancellationTokenRegistration, висящих в Gen2. Как диагностировать и устранить утечки из-за событий/таймеров/регистраций?
Проанализировать пути до корней (dotMemory/PerfView/dotnet-dump gcroot) — проверить коллекции подписчиков и списки делегатов у источников событий. Убедиться, что:
✍🏻 все подписки снимаются в Dispose/IAsyncDisposable;
✍🏻 CancellationToken.Register хранит IDisposable и корректно Dispose();
✍🏻 Timer/PeriodicTimer/System.Threading.Channels закрываются/завершаются;
✍🏻 не удерживаются замыканиями большие объекты/this.
При необходимости — слабые события/WeakReference, паттерн “own the lifetime”, и тест “утечек” в CI с сравнением heap-снимков.
Библиотека собеса по С#
✍🏻 все подписки снимаются в Dispose/IAsyncDisposable;
✍🏻 CancellationToken.Register хранит IDisposable и корректно Dispose();
✍🏻 Timer/PeriodicTimer/System.Threading.Channels закрываются/завершаются;
✍🏻 не удерживаются замыканиями большие объекты/this.
При необходимости — слабые события/WeakReference, паттерн “own the lifetime”, и тест “утечек” в CI с сравнением heap-снимков.
Библиотека собеса по С#