ar
Feedback
Библиотека шарписта | C#, F#, .NET, ASP.NET

Библиотека шарписта | C#, F#, .NET, ASP.NET

الذهاب إلى القناة على Telegram

Все самое полезное для C#-разработчика в одном канале. Наши курсы: https://clc.to/y3LDtw По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

إظهار المزيد

📈 نظرة تحليلية على قناة تيليجرام Библиотека шарписта | C#, F#, .NET, ASP.NET

تُعد قناة Библиотека шарписта | C#, F#, .NET, ASP.NET (@csharpproglib) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 21 701 مشتركاً، محتلاً المرتبة 5 943 في فئة التكنولوجيات والتطبيقات والمرتبة 30 267 في منطقة روسيا.

📊 مؤشرات الجمهور والحراك

منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 21 701 مشتركاً.

بحسب آخر البيانات بتاريخ 29 أغسطس, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار -48، وفي آخر 24 ساعة بمقدار -6، مع بقاء الوصول العام مرتفعاً.

  • حالة التحقق: غير موثّقة
  • معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 16.72‎%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 7.84‎% من ردود الفعل نسبةً إلى إجمالي المشتركين.
  • وصول المنشورات: يحصل كل منشور على متوسط 3 628 مشاهدة. وخلال اليوم الأول يجمع عادةً 1 702 مشاهدة.
  • التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 23.
  • الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل .net, шарписта, навигация, await, string.

📝 الوصف وسياسة المحتوى

يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
Все самое полезное для C#-разработчика в одном канале. Наши курсы: https://clc.to/y3LDtw По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 30 أغسطس, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.

21 701
المشتركون
-624 ساعات
-57 أيام
-4830 أيام
أرشيف المشاركات
✏️ Как найти два повторяющихся числа в массиве Вам дан массив nums длиной n+2, содержащий числа от 0 до n-1. Два числа случайным образом появились в списке дважды. Нужно вернуть эти два числа. Например, для входа [0][1][1][2][3][3][4] ответ будет [1][3]. Для решения можно воспользоваться подсчётом количества появлений каждого числа. Если встретили число во второй раз — записываем его в ответ:
public int[] GetSneakyNumbers(int[] nums)
{
    int n = nums.Length;
    int[] count = new int[101];
    int[] res = new int[2];
    int idx = 0;

    foreach (var num in nums)
    {
        count[num]++;
        if (count[num] == 2)
        {
            res[idx] = num;
            idx++;
        }
    }
    return res;
}
При помощи вспомогательного массива считаем, сколько раз встречается каждое число, и когда оно появилось второй раз — запоминаем. ➡️ Попробовать решить 🐸 Библиотека шарписта #dotnet_challenge

🎃 Хэллоуин и код Сегодня день, когда можно немного отвлечься от кода и рутины. Костюм помогает прочувствовать праздник, даже
🎃 Хэллоуин и код Сегодня день, когда можно немного отвлечься от кода и рутины. Костюм помогает прочувствовать праздник, даже если это всего один день. 💬 Делитесь, кто в костюме сегодня, оставляйте свои истории 👇 🐸 Библиотека шарписта #entry_point

🎃 Хэллоуин в Proglib Academy: скидки, призы и... немного паники Сегодня 31 октября, и это не просто время тыкв и призраков,
🎃 Хэллоуин в Proglib Academy: скидки, призы и... немного паники Сегодня 31 октября, и это не просто время тыкв и призраков, это ПОСЛЕДНИЙ ДЕНЬ, когда ты можешь выиграть макбук! → Купи любой курс со скидкой 40% 💸 → Начни обучение, чтобы пройти 2 недели к 15 ноября 🎓 → Напиши куратору #розыгрыш ✍️ Всё! Теперь ты в игре. 👉 Сейчас или никогда!

👨‍💻 Ленивый фильтр больших файлов Когда файл огромный, главное — не тянуть всё в память. Пример:
var errors = File.ReadLines(logPath).Where(l => l.Contains("ERROR"));
ReadLines читает файл построчно, не загружая всё сразу. Не добавляйте .ToList(), если хочется сохранить ленивость — иначе всё материализуется в памяти. 🐸 Библиотека шарписта #sharp_view

⭐️ Подборка вакансий для шарпистов .NET-разработчик на удалёнку. Backend-developer в Москве от 200 000 ₽. .NET Developer от 200 000 ₽ с удалёнкой. Бустер — Удалённо (в любом городе мира). ➡️ Еще больше топовых вакансий — в нашем канале C# Jobs

⚡️ Deadlock в EF Core: как восстановиться Даже самая оптимизированная система не застрахована от deadlock на 100%. При высоких нагрузках, пиковых моментах или редких edge-case сценариях они всё равно могут возникнуть. Важно не предотвращение на 100% (это невозможно), а грамотное восстановление. • Умный ретрай с экспоненциальной задержкой Простой повтор без задержки только усугубит ситуацию. Используйте экспоненциальную задержку:
public async Task<bool> SaveWithRetryAsync(DbContext context, int maxRetries = 3)
{
    for (int attempt = 0; attempt < maxRetries; attempt++)
    {
        try
        {
            await context.SaveChangesAsync();
            return true;
        }
        catch (DbUpdateException ex) when (IsDeadlock(ex))
        {
            if (attempt == maxRetries - 1)
                throw;
                
            // Экспоненциальная задержка: 100ms, 200ms, 400ms
            var delay = TimeSpan.FromMilliseconds(100 * Math.Pow(2, attempt));
            await Task.Delay(delay);
            
            Console.WriteLine($"Deadlock detected, retry {attempt + 1}/{maxRetries}");
        }
    }
    
    return false;
}

bool IsDeadlock(Exception ex) =>
    ex.InnerException is SqlException sqlEx && 
    (sqlEx.Number == 1205 || // Deadlock victim
     ex.InnerException.Message.Contains("deadlocked"));
• Ограничение параллелизма Если ваше приложение обрабатывает большие пакеты данных, ограничьте количество одновременных операций:
public class OrderProcessor
{
    private readonly SemaphoreSlim _semaphore = new SemaphoreSlim(5); // Макс 5 одновременно
    
    public async Task ProcessOrdersAsync(List<int> orderIds)
    {
        var tasks = orderIds.Select(id => ProcessWithSemaphoreAsync(id));
        await Task.WhenAll(tasks);
    }
    
    private async Task ProcessWithSemaphoreAsync(int orderId)
    {
        await _semaphore.WaitAsync();
        try
        {
            await using var context = new AppDbContext();
            var order = await context.Orders.FindAsync(orderId);
            order.Status = "Processed";
            await SaveWithRetryAsync(context);
        }
        finally
        {
            _semaphore.Release();
        }
    }
}
• Логирование и анализ Недостаточно просто повторить — нужно понять причину:
catch (DbUpdateException ex) when (IsDeadlock(ex))
{
    _logger.LogWarning(ex, 
        "Deadlock on order {OrderId}, attempt {Attempt}/{MaxAttempts}", 
        orderId, attempt + 1, maxRetries);
    
    // Отправьте метрику в мониторинг
    _telemetry.TrackMetric("Deadlocks", 1, new Dictionary<string, string>
    {
        ["Entity"] = "Order",
        ["Operation"] = "Update"
    });
}
• Захват графов блокировок SQL Server создаёт подробные графы взаимоблокировок. Настройте их захват:
-- Extended Events для захвата deadlock
CREATE EVENT SESSION [DeadlockMonitoring] ON SERVER
ADD EVENT sqlserver.xml_deadlock_report
ADD TARGET package0.event_file(SET filename = N'C:\Logs\Deadlocks.xel')
WITH (MAX_MEMORY = 4096 KB, EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS);

ALTER EVENT SESSION [DeadlockMonitoring] ON SERVER STATE = START;
Сочетание правильного предотвращения и надежного восстановления создаст устойчивую систему, способную справиться с любыми нагрузками. Чтобы строить надёжные решения нужно знать архитектуру и уметь её спроектировать. Для этого можно пройти наш интенсив по архитектуре и шаблонам проектирования. Осталось всего 3 дня скидок! 🐸 Библиотека шарписта #sharp_view

❌ 14 вопросов, после которых вам не перезвонят Разбираем 14 вопросов, которые лучше не задавать на собеседовании: что не так
14 вопросов, после которых вам не перезвонят Разбираем 14 вопросов, которые лучше не задавать на собеседовании: что не так с каждым из них и как переформулировать, чтобы получить нужную информацию без риска для репутации. ➡️ Прочитать статью 🐸 Библиотека шарписта

Повышение надёжности .NET-приложений: как обрабатывать сбои и предотвращать каскадные ошибки. Даже самые стабильные системы л
Повышение надёжности .NET-приложений: как обрабатывать сбои и предотвращать каскадные ошибки. Даже самые стабильные системы ломаются — вопрос лишь в том, насколько вы готовы к этому. Библиотека Polly позволяет гибко управлять сбоями и повышать устойчивость микросервисов и API. На открытом вебинаре курса OTUS C# ASP.NET Core разработчик Виктор Дзицкий покажет, как использовать Polly и HttpClientFactory для защиты приложений от временных отказов и непредсказуемых сетевых ошибок. 📌 6 ноября, 20:00 Повышение надежности .NET-приложений с Polly — ключевые стратегии и политики Polly — настройка и комбинирование стратегий для сложных сценариев — защита от каскадных сбоев и готовые паттерны устойчивости — улучшения в .NET 8 Вебинар бесплатный и подойдёт .NET-разработчикам, работающим с микросервисами и внешними API, которые хотят сделать свои системы по-настоящему отказоустойчивыми. 👉 Регистрируйтесь: https://clc.to/zyj9ow Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

C#-навигация прямо в браузере? Да, теперь и такое есть! 👀 Для тех, кто работает с C#, приятные новости от SourceCraft. Платф
C#-навигация прямо в браузере? Да, теперь и такое есть! 👀 Для тех, кто работает с C#, приятные новости от SourceCraft. Платформа добавила умную навигацию, которая понимает связи между функциями и позволяет переходить по объявлениям прямо в веб-интерфейсе — как в вашей любимой IDE. 🔥 А ИИ-ассистент теперь дописывает методы на C# не изолированно, а в контексте всего проекта. Для команд с разнесёнными код-ревью или для быстрого онбординга новичков — просто находка. Можно даже коммитить правки из браузера, не теряя типизацию.

⚡️ Deadlock в EF Core: как предотвратить Дедлоки редко проявляются в ходе разработки, но часто всплывают под реальной нагрузкой в продакшне. Дедлок — ситуация, когда две или более сессии базы данных блокируют друг друга, ожидая освобождения ресурсов. В итоге SQL Server прерывает одну из транзакций:
SqlException: Transaction (Process ID xx) was deadlocked on resources...
Пример простого дедлока: два контекста одновременно меняют одну строку и пытаются сохранить изменения. Один запрос блокирует строку, второй вызывает дедлок.
await using var context1 = new AppDbContext();
await using var context2 = new AppDbContext();

var order1 = await context1.Orders.FindAsync(1);
var order2 = await context2.Orders.FindAsync(1);

order1.Status = "Paid";
order2.Status = "Shipped";

await context1.SaveChangesAsync(); // Блокирует строку
await context2.SaveChangesAsync(); // Возможен deadlock
Стратегии предотвращения • Короткие транзакции Минимизируйте работу внутри транзакции:
await using var tx = await context.Database.BeginTransactionAsync();
var order = await context.Orders.FindAsync(orderId);
order.Status = "Paid";
await context.SaveChangesAsync();
await tx.CommitAsync();
Избегайте сетевых вызовов и посторонних запросов перед коммитом. • Правильные индексы Отсутствие индексов приводит к сканированию таблиц и длительным блокировкам. Используйте SQL Profiler для мониторинга. • Оптимальный уровень изоляции ReadCommitted обычно достаточен для большинства операций:
await using var tx = await context.Database.BeginTransactionAsync(
    IsolationLevel.ReadCommitted);
• Логика повторов Используйте встроенную политику retry в EF Core:
services.AddDbContext<AppDbContext>(options =>
    options.UseSqlServer(connectionString, sql =>
        sql.EnableRetryOnFailure(
            maxRetryCount: 3,
            maxRetryDelay: TimeSpan.FromSeconds(5),
            errorNumbersToAdd: null)));
• RowVersion для контроля конкурентности
public class Order
{
    public int Id { get; set; }
    public string Status { get; set; }
    
    [Timestamp]
    public byte[] RowVersion { get; set; }
}
EF Core выбросит DbUpdateConcurrencyException при конфликте изменений. Дедлоки не баги, а следствие паттернов конкурентного доступа. 🐸 Библиотека шарписта #sharp_view

🎁 Конкурс от Proglib Academy! Кстати, если кто-то ещё не в курсе — у нас тут раздают MacBook Pro 14. Да-да, не шутка, настоя
🎁 Конкурс от Proglib Academy! Кстати, если кто-то ещё не в курсе — у нас тут раздают MacBook Pro 14. Да-да, не шутка, настоящий, железный, с M3 Pro Но! Чтобы успеть пройти 2 недели обучения к 15 ноября, курс нужно взять до конца октября — и сейчас на всё скидка 40%. Чтобы поучаствовать, нужно: 1️⃣ Покупаешь любой курс до конца октября; 2️⃣ Проходишь 2 недели обучения к 15 ноября; 3️⃣ Написать куратору в чат #розыгрыш. До 15 ноября, потом всё — поезд (и макбук) уйдёт. 👉 Участвовать в розыгрыше

🤩 Как взять последние символы строки в C# Когда работаешь с идентификаторами, хешами или логами, часто нужно быстро достать последние символы из строки. Для получения последних 10 символов используется оператор диапазона:
var last10 = text[^10..];
Такой способ делает код короче и легче для чтения. Но есть один момент — если строка короче десяти символов, программа выбросит ошибку. Чтобы этого избежать, добавьте проверку:
var last10 = text.Length >= 10 ? text[^10..] : text;
Теперь код работает безопасно даже с короткими строками. 🐸 Библиотека шарписта #sharp_view

Не пропусти МТС True Tech Champ — масштабный фестиваль 21 ноября для тех, кто живет технологиями 🔥 Тебя ждут: ▫️ Захватывающая сюжетная линия. Тебя ждет уникальная кибервселенная с возможностью влиять на ход происходящего. ▫️ Конференция с международными спикерами. Эксперты расскажут о трендах в ИИ и инновациях в индустрии. ▫️ ИТ-качалка. Наращивай экспертизу на воркшопах. ▫️ Шоу-финал ИТ-чемпионата. Более 250 талантов со всей России сразятся в лайв-кодинге и программировании роботов на скоростное прохождение лабиринтов со спецэффектами. Выбирай и болей за фаворитов. ▫️ Айтивности. Тебя ждут бои роботов, кодерские челленджи, пайка плат и не только. Заработай True Coins и обменяй их на стильный мерч. ▫️ HR-Hub. Команда МТС расскажет о возможностях для развития в компании и поможет перезагрузить карьерный трек. ▫️ Афтепати со звездными хэдлайнерами. Зажги под популярные хиты. Когда: 21 ноября, МТС Live Холл в Москве и онлайн. Регистрируйся на сайте. Участие бесплатно, количество мест ограничено.

C#-навигация прямо в браузере? Да, теперь и такое есть! 👀 Для тех, кто работает с C#, приятные новости от SourceCraft. Платф
C#-навигация прямо в браузере? Да, теперь и такое есть! 👀 Для тех, кто работает с C#, приятные новости от SourceCraft. Платформа добавила умную навигацию, которая понимает связи между функциями и позволяет переходить по объявлениям прямо в веб-интерфейсе — как в вашей любимой IDE. 🔥 А ИИ-ассистент теперь дописывает методы на C# не изолированно, а в контексте всего проекта. Для команд с разнесёнными код-ревью или для быстрого онбординга новичков — просто находка. Можно даже коммитить правки из браузера, не теряя типизацию.

👨‍💻 6 дней работы Внимание! Вы проживаете аномальную неделю прямо сейчас. Вся неделя сдвинулась на один день и мы снова про
👨‍💻 6 дней работы Внимание! Вы проживаете аномальную неделю прямо сейчас. Вся неделя сдвинулась на один день и мы снова проживаем понедельник. Или у нас будет две пятницы. Учёные ещё не определились. 💬 Как вы? Уже устали или ещё полны энергии? 🐸 Библиотека шарписта #entry_point

💾 Всем фичам фича Вышло октябрьское обновление 86Box — эмулятора ПК IBM PC. Главное новшество — звуки флоппи-дисководов, зап
💾 Всем фичам фича Вышло октябрьское обновление 86Box — эмулятора ПК IBM PC. Главное новшество — звуки флоппи-дисководов, записанные с реальных устройств. Разработчик записал звуки с настоящих 3.5" и 5.25" дисководов. Эмулятор отслеживает активность мотора и головки дисковода в реальном времени и проигрывает соответствующие звуки. Получается достоверная звуковая картина — как будто перед вами настоящее железо из 90-х. ➡️ Полный список изменений 🐸 Библиотека шарписта #async_news

👨‍💻 Три структуры данных, которые игнорируются зря List — это универсальный солдат C#. Но универсальный не значит оптимальн
👨‍💻 Три структуры данных, которые игнорируются зря List<T> — это универсальный солдат C#. Но универсальный не значит оптимальный. Пока вы перебираете 10 000 элементов через .FirstOrDefault(), Dictionary находит нужное за одно обращение. И это только начало. Queue — когда порядок имеет значение Обрабатываете задачи по очереди? Вот вам готовое решение:
var tasks = new Queue<UserRequest>();

tasks.Enqueue(new UserRequest { Id = 1, Name = "Alice" });
tasks.Enqueue(new UserRequest { Id = 2, Name = "Bob" });

// Безопасное извлечение (с .NET 6+)
while (tasks.TryDequeue(out var request))
{
    await ProcessAsync(request);
}
Первым пришел — первым обработался. Никаких индексов, никаких сортировок. Stack — для истории действий Делаете undo/redo или навигацию? Стек решает это из коробки:
var history = new Stack<string>();

history.Push("/home");
history.Push("/products");
history.Push("/cart");

// Вернуться назад
if (history.TryPop(out var lastPage))
{
    Console.WriteLine($"Back to: {lastPage}"); // /cart
}
Последнее действие всегда доступно первым. Логика браузерной кнопки «Hазад» готова. Dictionary — когда нужна скорость Поиск по ключу за O(1) вместо перебора всего списка:
var users = new Dictionary<int, User>();

users.Add(1, new User { Name = "Alice" });
users.Add(2, new User { Name = "Bob" });

// Безопасная проверка
if (users.TryGetValue(2, out var user))
{
    Console.WriteLine(user.Name); // Bob
}
Никаких .FirstOrDefault(x => x.Id == 2) с перебором тысяч записей. List отлично работает, когда вам нужен доступ по индексу и порядок элементов. Но если задача укладывается в одну из этих трёх структур — используйте их. 🐸 Библиотека шарписта #il_люминатор

🧠 Готовишься к собесам, а ноутбук еле тянет IDE? Самое время прокачать скиллы и апгрейднуть железо! Proglib Academy разыгрыв
🧠 Готовишься к собесам, а ноутбук еле тянет IDE? Самое время прокачать скиллы и апгрейднуть железо! Proglib Academy разыгрывает MacBook Pro 14 (M3 Pro, 36 GB, 1 TB SSD) 💻 Купи любой наш курс до 15 ноября → пройди 2 недели обучения → напиши куратору #розыгрыш. Всё, ты в игре! 📚 Среди курсов: ▫️ Алгоритмы и структуры данных — топ для подготовки к собесам в Яндекс и FAANG. ▫️ Архитектуры и шаблоны проектирования — чтобы думать как senior. ▫️ Python, математика для DS, основы IT и другие направления. 👉 Принять участие