C# (C Sharp) programming
前往频道在 Telegram
По всем вопросам- @notxxx1 Реестр РКН: https://clck.ru/3Fk3kb #VRHSZ
显示更多📈 Telegram 频道 C# (C Sharp) programming 的分析概览
频道 C# (C Sharp) programming (@csharp_ci) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 18 129 名订阅者,在 技术与应用 类别中位列第 7 041,并在 俄罗斯 地区排名第 36 302 位。
📊 受众指标与增长动态
自 невідомо 创建以来,项目保持高速增长,吸引了 18 129 名订阅者。
根据 29 八月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -78,过去 24 小时变化为 -7,整体触达仍然可观。
- 认证状态: 未认证
- 互动率 (ER): 平均受众互动率为 15.03%。内容发布后 24 小时内通常能获得 7.44% 的反应,占订阅者总量。
- 帖子覆盖: 每篇帖子平均可获得 2 725 次浏览,首日通常累积 1 348 次浏览。
- 互动与反馈: 受众积极参与,单帖平均反应数为 0。
- 主题关注点: 内容集中在 .net, api, логика, архитектура, string 等核心主题上。
📝 描述与内容策略
作者将该频道定位为表达主观观点的平台:
“По всем вопросам- @notxxx1
Реестр РКН: https://clck.ru/3Fk3kb
#VRHSZ”
凭借高频更新(最新数据采集于 30 八月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。
18 129
订阅者
-724 小时
-157 天
-7830 天
帖子存档
18 129
🚫 EF Core + «репозитории» = лишний слой
Часто советуют заворачивать EF Core в Repository Pattern.
Но на практике это делает код только сложнее:
-
DbContext уже реализует Repository и Unit of Work
- Репозитории со временем превращаются в «монстров» с десятками методов
- Каждый новый фильтр = новая копипаста
В итоге — абстракция над абстракцией и трудности с поддержкой.
---
✅ Что вместо этого? Specification Pattern
Specification = маленький класс, описывающий правило или фильтр.
Вы комбинируете их и получаете сложные запросы без раздутых репозиториев.
Плюсы:
- 🧩 Простая композиция правил
- 🔍 Ясный и читаемый код
- ♻️ Повторное использование условий
- 🧪 Лёгкое тестирование
📌 Пример
// Бизнес-правило: активные клиенты с заказами за последние 30 дней
public sealed class ActiveCustomersSpec : Specification<Customer>
{
public ActiveCustomersSpec(DateTime since)
{
Criteria = c => c.IsActive && c.Orders.Any(o => o.CreatedAt >= since);
AddInclude(c => c.Orders);
}
}
// Применение
var spec = new ActiveCustomersSpec(DateTime.UtcNow.AddDays(-30));
var customers = await db.Set<Customer>().Apply(spec).ToListAsync();
💡 Итог:
EF Core = уже Repository + UoW
Репозитории поверх EF Core → лишняя абстракция
Specification Pattern → гибкость и читаемость без «метод-монстров»18 129
Быстрый поиск подстроки: Кнут–Моррис–Пратт на практике!
Разберём алгоритм Кнута–Морриса–Пратта (КМП): почему он работает за линейное время и как «переиспользует» уже найденные совпадения. Покажем, где наивный подход теряет секунды (и деньги), а КМП — нет.
После вебинара вы:
— понимаете префикс-функцию и логику «сдвигов»;
— умеете сравнить наивный поиск и КМП на реальных данных;
— знаете, как внедрить быстрый поиск в проде.
⏰ Урок пройдёт 24 сентября в 20:00 МСК в преддверие старта курса «Алгоритмы и структуры данных». Всем участникам — персональные условия обучения.
👉 Для участия зарегистрируйтесь:
https://otus.pw/R52E/
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ", ИНН: 9705100963
18 129
🐧 Часто новички в Linux путаются в терминах: Terminal, Shell, Prompt, Command line.
Разберёмся по порядку 👇
- Terminal — это программа, которая запускает shell. Примеры: Terminator, Konsole.
- Shell — сам интерпретатор команд (bash, zsh, fish и др.).
- Prompt — строка перед тем, как вы начинаете вводить команду (обычно с именем пользователя, директории и т.д.).
- Command line — общее понятие: интерфейс, где можно вводить команды (есть в любой ОС).
🔑 Обычно вы открываете Terminal, видите Prompt, пишете команду — её обрабатывает Shell. Всё просто 😉
18 129
Можно ли использовать string.GetHashCode() в алгоритмах генерации хеша пароля?
#ПятничныйКвиз
18 129
❗️C# вопрос с собеседования: Middle–Senior level
Вопрос: почему возникает предупреждение о возможном null, если
ProductStock здесь явно не равен null?
Код:
private static IEnumerable<Error> VerifyProductQuantities(
List<ProductStock> products,
Dictionary<string, Domain.Entities.ProductStock> stocks)
{
foreach (var product in products)
{
if (!stocks.TryGetValue(product.ProductName, out var stock))
{
yield return StockErrors.ProductNotFound(product.ProductName);
}
if (stock.AvailableQuantity < product.Quantity)
{
yield return StockErrors.InsufficientStocks(
product.ProductName, product.Quantity, stock.AvailableQuantity);
}
}
}
Компилятор выдет: «Dereference of a possibly null reference» для переменной stock.
Почему так происходит?
• Метод TryGetValue возвращает false, и тогда stock остаётся равным null.
• Даже если мы отфильтровали это через if (!TryGetValue(...)), компилятор не гарантирует, что в блоке после условия stock точно не null.
• В результате в строке if (stock.AvailableQuantity < product.Quantity) возникает предупреждение.
Как исправить?
1. Добавить continue после yield return внутри блока if (!TryGetValue(...)). Тогда компилятор поймёт, что кода после этой ветки для null не будет.
2. Либо использовать оператор !:
if (stock!.AvailableQuantity < product.Quantity) — но это безопасно только если мы уверены, что значение точно не null.
3. Более читаемый вариант — переписать логику так, чтобы работа с stock была строго в ветке, где оно гарантированно задано.
Вопрос для проверки понимания nullable reference types и поведения компилятора при анализе путей выполнения кода.18 129
🚀 Микросервисная платформа для страхования
Yosef — это открытая микросервисная платформа для финансовой страховой отрасли, разработанная на .NET, Python, TypeScript и Golang. Она обеспечивает масштабируемость, гибкость и высокую наблюдаемость для современных страховых приложений.
🚀 Основные моменты:
- Микросервисная архитектура для легкости масштабирования
- Централизованное управление идентификацией и доступом
- Полный цикл страхования от оценки до создания полиса
- Высокая наблюдаемость с использованием Grafana и Prometheus
- Интеграция с современными инструментами безопасности
📌 GitHub: https://github.com/elyosemite/Yosef
#csharp
18 129
🚀 SQL Ultimate Course — бесплатный полный курс по SQL на GitHub
Если хочешь освоить SQL с нуля и дойти до продвинутого уровня — бери готовый репозиторий:
📂 Что внутри:
- datasets/ — реальные данные из ERP и CRM
- scripts/ — готовые SQL-скрипты для практики
- docs/ — документация и материалы курса
✅ MIT-лицензия — можно использовать и менять свободно
🌍 Подходит для всех СУБД (PostgreSQL, MySQL и др.)
🎥 К курсу прилагаются видео и гайды от автора
Автор: Data With Baraa — практик и ютубер, собравший в одном месте полный SQL-путь от простого
SELECT до оптимизации запросов и реальных кейсов.
🔗 Репозиторий здесь: https://github.com/DataWithBaraa/sql-ultimate-course
Сохраняй, проходи и прокачивай SQL 💡18 129
🎮 Клад для геймдева — Kenney Assets
Бесплатная библиотека 2D и 3D-ассетов: спрайты, текстуры, звуки, шрифты и даже модели для VR/AR. Всё под лицензией CC0 — можно использовать где угодно, включая коммерческие проекты.
📌 Плюсы:
- Регулярные обновления и новые пакеты
- Идеально для прототипов, обучения и инди-игр
- Никаких ограничений по использованию
🔥 Забирай здесь: https://kenney.nl/assets
18 129
⚡ Как выбор структур данных влияет на скорость .NET приложений
Недавно я оптимизировал 12 крупных систем на ASP .NET Core и каждый раз сталкивался с одной и той же проблемой.
Разработчики тратят много времени на оптимизацию запросов, индексов и кэша, но забывают про базу — правильный выбор коллекций.
Ошибка в выборе структуры данных может замедлить приложение в 10 раз.
Вот простые примеры:
1. Поиск по ключу
-
List<T>.Find() → O(n) — медленно на больших объёмах
- ✅ Dictionary<K,V> → O(1) — быстрый доступ
2. Вставка в начало списка
- List<T>.Insert(0, item) → O(n) — сдвигает все элементы
- ✅ LinkedList<T> → O(1) — мгновенная вставка
3. Уникальные элементы
- List<T> + Contains() → O(n) на каждую проверку
- ✅ HashSet<T> → O(1) — уникальность проверяется сразу
4. Упорядоченные данные
- List<T> + Sort() → O(n log n) и нужен свой поиск
- ✅ SortedDictionary<K,V> → встроенный порядок и быстрый поиск
5. Кэширование API-ответов
- Static Dictionary → риск утечек памяти и «зависших» данных
- ✅ MemoryCache → встроенная очистка и управление временем жизни
💡 Итог: чаще всего не нужны «хитрые оптимизации». Достаточно выбрать правильную коллекцию — и производительность вырастет кратно.
👉 Вопрос к вам: какая самая серьёзная проблема с производительностью у вас решилась заменой структуры данных?18 129
⏹️Новая специализация, о которой почти никто не знает: проще вход, ниже конкуренция, выше чеки
В архитектурной сфере катастрофически не хватает разработчиков. Проектировщики и инженеры нуждаются в плагинах для софта, а программистов, которые умеют их писать, — единицы. Конкуренция минимальна, спрос растет, а чеки за проекты выше, чем в классическом аутсорсе.
▶️Освоив Revit API, вы сможете быстро войти в нишу, где каждый навык напрямую конвертируется в деньги.
На курсе «Программирование в Autodesk Revit» от EdTech-платформы STEMPS вы научитесь:
➡️Писать плагины и инструменты на C# для инженеров
➡️Автоматизировать рутинные процессы и проверки моделей
➡️Создавать востребованный софт для архитектурных и проектных бюро
👤Автор курса — Дмитрий Смирнов, CTO DynamicLabs, STEMPS, Atomtech, Plancy. Разрабатывал системы автоматизации и SaaS-системы для компаний на 700+ сотрудников.
🗓 Старт курса — 23 сентября.
📍Студенты получат документ о повышении квалификации.
🔥Успейте записаться на курс со скидкой 10%:
https://stemps.ru/
18 129
⚡ Как выбор структур данных влияет на скорость .NET приложений
Недавно я оптимизировал 12 крупных систем на ASP .NET Core и каждый раз сталкивался с одной и той же проблемой.
Разработчики тратят много времени на оптимизацию запросов, индексов и кэша, но забывают про базу — правильный выбор коллекций.
Ошибка в выборе структуры данных может замедлить приложение в 10 раз.
Вот простые примеры:
1. Поиск по ключу
-
List<T>.Find() → O(n) — медленно на больших объёмах
- ✅ Dictionary<K,V> → O(1) — быстрый доступ
2. Вставка в начало списка
- List<T>.Insert(0, item) → O(n) — сдвигает все элементы
- ✅ LinkedList<T> → O(1) — мгновенная вставка
3. Уникальные элементы
- List<T> + Contains() → O(n) на каждую проверку
- ✅ HashSet<T> → O(1) — уникальность проверяется сразу
4. Упорядоченные данные
- List<T> + Sort() → O(n log n) и нужен свой поиск
- ✅ SortedDictionary<K,V> → встроенный порядок и быстрый поиск
5. Кэширование API-ответов
- Static Dictionary → риск утечек памяти и «зависших» данных
- ✅ MemoryCache → встроенная очистка и управление временем жизни
💡 Итог: чаще всего не нужны «хитрые оптимизации». Достаточно выбрать правильную коллекцию — и производительность вырастет кратно.
👉 Вопрос к вам: какая самая серьёзная проблема с производительностью у вас решилась заменой структуры данных?18 129
🖥 Notepads — легковесный и функциональный текстовый редактор для Windows, который является альтернативой стандартному блокноту!
💡 Это открытое приложение с современным интерфейсом, ориентированное на простоту использования, но при этом обладающее рядом полезных функций для повседневного редактирования текста и работы с кодом.
🔍 Основные особенности Notepads:
🌟 Минималистичный интерфейс с возможностью использования вкладок для работы с несколькими документами.
🌟 Поддержка синтаксической подсветки для популярных языков программирования (например, Python, JavaScript, HTML и другие).
Возможность использования темной и светлой темы.
🌟 Автосохранение документов и высокая производительность, что делает редактор удобным для работы с небольшими текстовыми файлами и кодом.
🌟 Поддержка Unicode и работы с многоязычными текстами.
Интеграция с Windows 10 API, что позволяет использовать функциональные возможности операционной системы, такие как улучшенные окна и взаимодействие с пользовательским интерфейсом.
🔐 Лицензия: MIT
🖥 Github
@csharp_ci
18 129
⚡ .NET 9 — самая быстрая платформа 2025 года
Microsoft прокачала .NET так, что он обгоняет почти все популярные фреймворки: Java, Go, Node.js, Python и даже PHP.
🚀 Что сделали:
- Мусорщик (GC) стал адаптивным → меньше пауз даже при высоких нагрузках.
- JIT-компилятор быстрее разогревает код и оптимизирует горячие участки.
- Векторизация через AVX10 и Arm SVE ускоряет циклы в несколько раз.
- Native AOT уменьшает размер бинарников и ускоряет запуск (контейнеры, IoT, edge).
- Сеть (сокеты, HTTP/3) стала работать быстрее с низкой задержкой.
- JSON обрабатывается через System.Text.Json максимально эффективно.
- Меньше аллокаций → меньше нагрузка на память и GC.
- Thread-pool и многопоточность лучше распределяют задачи по ядрам.
- Минимальные API и оптимизация исключений дали ещё +15% к скорости.
📊 Бенчмарки показывают:
- Java (Spring) — медленнее в 2.5 раза
- Go (Fiber) — в 1.3 раза
- Node.js (Fastify) — в 4 раза
- Python (FastAPI) — в 10 раз
- PHP (Laravel) — в 15 раз
- Ruby (Rails) — в 20 раз
💡 Итог: .NET 9 — быстрый старт, низкая задержка и топ-производительность. Отличный выбор для веба, микросервисов и облака.
#dotnet #performance #benchmark #backend
18 129
⁉️Хотите начать карьеру Data Scientist? Освойте методы ансамблирования ML
Чтобы понять, как добиться высокого качества предсказания в машинном обучении, присоединяйтесь к открытому вебинару 8 сентября в 18:00 МСК! На уроке мы разберем ключевые методы ансамблирования моделей, которые использует каждый Data Scientist: Бэггинг, Random Forest и Градиентный бустинг. Эти методы помогут вам повысить точность ваших моделей и научиться их эффективно применять в реальных задачах.
После занятия вы будете уверенно работать с ансамблями моделей на Python и знать, как применять их на практике для получения лучших результатов.
➡️ Присоединяйтесь и получите скидку на курс «Machine Learning. Basic»: https://otus.pw/OiTt/?erid=2W5zFHvwwRz
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
18 129
🚀 Docker + .NET pro tip
Для .NET приложений используйте многоступенчатую сборку: сначала компилируем и публикуем, потом копируем только готовые бинарники в минимальный рантайм-образ.
# Этап сборки
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY *.csproj .
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o /app/publish
# Этап финального образа
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "MyApp.dll"]
💡 Преимущества:
- минимальный размер финального контейнера,
- быстрый запуск без SDK, только рантайм,
- меньше уязвимостей благодаря облегчённому окружению.
@csharp_ci18 129
⚡ ASP.NET Core: Глобальный обработчик исключений
Красивый и лаконичный пример реализации
IExceptionHandler в .NET 8+ через switch`-выражение и сервис `IProblemDetailsService.
internal sealed class GlobalExceptionHandler(
IProblemDetailsService problemDetailsService,
ILogger<GlobalExceptionHandler> logger) : IExceptionHandler
{
public async ValueTask<bool> TryHandleAsync(
HttpContext httpContext,
Exception exception,
CancellationToken cancellationToken)
{
logger.LogError(exception, "Unhandled exception occurred");
httpContext.Response.StatusCode = exception switch
{
ApplicationException => StatusCodes.Status400BadRequest,
_ => StatusCodes.Status500InternalServerError
};
return await problemDetailsService.TryWriteAsync(new ProblemDetailsContext
{
HttpContext = httpContext,
Exception = exception,
ProblemDetails = new ProblemDetails
{
Type = exception.GetType().Name,
Title = "An error occured",
Detail = exception.Message
}
});
}
}
📌 Что тут важно:
- switch по типу исключения для назначения статуса ответа
- IProblemDetailsService для единообразного формирования ответа
- Логгирование всех необработанных ошибок
🔥 Такой подход делает код чище, централизует обработку ошибок и избавляет от дублирования в middleware.