es
Feedback
Профессор Си

Профессор Си

Ir al canal en Telegram
2 804
Suscriptores
-124 horas
-107 días
-1730 días
Archivo de publicaciones
Основы протокола HTTP. Бесплатный урок курса «Проектирование API» API невозможно проектировать хорошо, если HTTP воспринимает
Основы протокола HTTP. Бесплатный урок курса «Проектирование API» API невозможно проектировать хорошо, если HTTP воспринимается как «просто способ отправить запрос». Ошибки в методах, заголовках, кодах ответа и семантике запросов быстро превращаются в неудобные интеграции, неочевидное поведение клиентов и лишние переделки уже после запуска. 📅 На открытом уроке 15 апреля 2026 в 20:00: — Разберём основы протокола HTTP с точки зрения проектирования API. — Поговорим о том, как устроено взаимодействие клиент–сервер, зачем нужны методы, заголовки, коды ответа и какие решения в дизайне интерфейсов напрямую зависят от понимания HTTP. — Это тот фундамент, без которого невозможно осознанно проектировать предсказуемые, удобные и устойчивые интерфейсы. Урок не для тех, кто хочет выучить пару кодов ответа и считать тему закрытой, или продолжает относиться к HTTP как к набору случайных соглашений без логики и правил. 👉 Записаться: https://vk.cc/cWnc5D Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

C# .NET Разработчик ЗП: 180 000 - 240 000 ₽ Гибрид https://talento.works/jobs/86b65e0f-3f51-4a94-9413-67ef7a2195bd

👩‍💻 Открытый урок «Облегчённые (Slim) примитивы синхронизации» 🗓 16 апреля в 20:00 МСК 🆓 На открытом уроке рассмотрим: ✔️
👩‍💻 Открытый урок «Облегчённые (Slim) примитивы синхронизации» 🗓 16 апреля в 20:00 МСК 🆓 На открытом уроке рассмотрим: ✔️ Проблему синхронизации доступа к общему ресурсу в многопоточном приложении в рамках внутрипроцессного взаимодействия; ✔️ Разберём классическую задачу читателей–писателей и её реализацию с использованием примитивов синхронизации из пространства имён System.Threading; ✔️ Отдельно обсудим, в каких случаях облегчённые версии примитивов (например, SemaphoreSlim и ReaderWriterLockSlim) оказываются эффективнее стандартных решений, таких как Monitor, Mutex и конструкция lock. Для кого: Вебинар будет полезен разработчикам, которые уже знакомы с базовыми механизмами синхронизации в .NET и хотят углубить понимание инструментов, предоставляемых стандартной библиотекой для построения безопасных и производительных многопоточных приложений. 🔗 Ссылка на регистрацию: https://vk.cc/cVMWrb Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Где хранятся экземпляры типов значений?
Anonymous voting

👩‍💻 Открытый урок «Производительность кода на примере алгоритмов сортировки» 🗓 21 апреля в 20:00 МСК 🆓 На этом открытом у
👩‍💻 Открытый урок «Производительность кода на примере алгоритмов сортировки» 🗓 21 апреля в 20:00 МСК 🆓 На этом открытом уроке мы разберёмся, как скорость работы программы зависит от выбранного способа решения задачи - на понятном примере сортировки данных. 🔍 Что вы узнаете на вебинаре: - Почему существует несколько способов выполнить одну и ту же задачу. - Как разные подходы к сортировке данных влияют на скорость работы программы. - Почему одни решения подходят для маленьких объёмов данных, а другие — для больших. - Что происходит с программой, когда данных становится в 10, 100 или 1000 раз больше. - Как разработчики заранее прогнозируют производительность. 🎯 Кому будет полезно: - Тем, кто только присматривается к профессии разработчика на C#. - Новичкам, которые начали изучать C# и хотят понимать, как писать «быстрый» код. - Всем, кто хочет разобраться, от чего зависит скорость работы приложений. - Тем, кто рассматривает обучение на курсе «Разработчик на C# с нуля» и хочет познакомиться с подходом к обучению. 🔗 Ссылка на регистрацию: https://vk.cc/cVDYi9 Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Как правильно определять классы?
Anonymous voting

Как Microsoft задушил Delphi, создав .NET: история одного программиста и одного чемодана Личный взгляд программиста с стажем
Как Microsoft задушил Delphi, создав .NET: история одного программиста и одного чемодана Личный взгляд программиста с стажем на то, как Microsoft переманил Хейлсберга, создал .NET и вытеснил Delphi с технологической сцены. История предательства, перехода эпох и чемодана, который до сих пор скрипит в углу. https://habr.com/ru/articles/902476/

👩‍💻 Открытый урок «Как работают структуры данных C# "под капотом"» 🗓 13 апреля в 20:00 МСК 🆓 На этом открытом уроке мы пр
👩‍💻 Открытый урок «Как работают структуры данных C# "под капотом"» 🗓 13 апреля в 20:00 МСК 🆓 На этом открытом уроке мы простым и понятным языком разберём структуры данных, что происходит внутри программы, когда она хранит и обрабатывает данные. Что рассмотрим на вебинаре: ✔️ Внутреннее устройство ключевых коллекций ✔️ Принципы работы и алгоритмическую сложность операций ✔️ Особенности реализации, влияющие на производительность Кому будет полезно: ✔️ Начинающим разработчикам - чтобы углубить понимание платформы .NET и писать эффективный, надёжный код. ✔️ Тем, кто готовится к техническим собеседованиям (вопросы о внутреннем устройстве коллекций и сложности операций - классика интервью). ✔️ Всем, кто хочет осознанно выбирать структуры данных - избегать типичных ошибок, понимать компромиссы и узкие места. 🔗 Ссылка на регистрацию: https://vk.cc/cVx2Fg Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

⭐️ ValueTask в C# Мы уже разбирали ValueTask раньше, но сейчас напомним ключевые моменты. ValueTask это структура, которая может хранить либо готовый результат, либо Task, чтобы избежать аллокаций в простых случаях. Особенности использования ValueTask: • Повторное ожидание запрещено Вызывать await несколько раз для одного и того же ValueTask нельзя, так как это может привести к неожиданным результатам:
ValueTask<int> task = GetValueAsync();
int value1 = await task;
int value2 = await task; // Ошибка
• Конвертация в Task Eсли требуется передать ValueTask в API, которое ожидает Task, можно вызвать метод .AsTask():
Task<int> task = GetValueAsync().AsTask();
• Когда использовать ValueTask: + Операция часто завершается синхронно. + Создание объекта Task может быть слишком накладным. + Вы пишете библиотеку с высокой производительностью. • Когда НЕ использовать ValueTask: - Операция всегда асинхронна. - Производительность не является критически важной. - Приложение не оптимизировано под работу с ValueTask. Профессор Си

✏️ Не копируйте gitignore, генерируйте Мы раньше кидали эту команду. dotnet new gitignore делает все за вас. В ней уже прописаны все типичные исключения: каталоги bin/, obj/, кэш NuGet, файлы публикаций, временные артефакты IDE и прочие служебные данные, которые не должны попадать в репозиторий. Не нужно искать шаблон на GitHub или копировать его вручную — всё доступно из коробки. Профессор Си

⚡️ Apache Camel в архитектуре решений бэкенда 📅 4 февраля | 20:00 мск | бесплатно Хотите строить надёжные и гибкие интеграци
⚡️ Apache Camel в архитектуре решений бэкенда 📅 4 февраля | 20:00 мск | бесплатно Хотите строить надёжные и гибкие интеграции между сервисами без лишней сложности?                                            На вебинаре разберём: - Роль Apache Camel в современной backend-архитектуре - Enterprise Integration Patterns и их практическое применение - Типовые сценарии: синхронные и асинхронные интеграции - Camel как связующее звено между микросервисами, брокерами сообщений и внешними системами - Архитектурные преимущества и реальные ограничения использования Apache Camel ✅ После вебинара вы сможете: - Определять, когда Apache Camel — правильный архитектурный выбор - Проектировать интеграционные потоки на основе проверенных паттернов - Строить устойчивые и слабо связанные backend-решения - Принимать осознанные архитектурные решения в области интеграций 👉 Регистрируйтесь https://otus.pw/ObyWM/ Занятие приурочено к старту курса "Software Architect", обучение на котором позволит освоить компетенции архитектора по моделированию и построению отказоустойчивых, масштабируемых и хорошо интегрируемых информационных систем. Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

👀 Сортировать все ради одного значения — это дорогая привычка В продакшене до сих пор встречается LINQ паттерн, где коллекцию сначала сортируют, а потом берут первый элемент:
var youngest = people
    .OrderBy(p => p.Age)
    .First();
На вид код нормальный, но по факту он платит за сортировку, хотя нужна всего одна крайняя точка. Правильнее выразить намерение напрямую через MinBy:
var youngest = people.MinBy(p => p.Age);
MinBy возвращает элемент с минимальным ключом и не требует полной сортировки последовательности. Если в коде встречается OrderBy().First() или OrderByDescending().First(), это повод остановиться и проверить, не ищется ли просто минимум или максимум. Профессор Си

📎 Когда хочется коротко, но выходит долго GroupBy в LINQ удобный и выразительный, поэтому его часто тянут в любой код, где надо что то посчитать по ключу. Проблема в том, что GroupBy решает задачу группировки, а агрегация это частный случай, и за него иногда приходится платить лишним. Типичный паттерн выглядит так:
var totals = orders
    .GroupBy(o => o.CustomerId)
    .Select(g => new
    {
        CustomerId = g.Key,
        Total = g.Sum(o => o.Amount)
    })
    .ToList();
Выглядит читабельно, но GroupBy внутри строит структуру групп, а значит элементы буферизуются и создаются объекты группировок, даже если в итоге нужен только итоговый Total. Если нужна именно аккумуляция, проще и дешевле сделать один проход и складывать суммы в словарь:
var totals = new Dictionary<int, decimal>();
foreach (var order in orders)
{
    if (totals.TryGetValue(order.CustomerId, out var current))
        totals[order.CustomerId] = current + order.Amount;
    else
        totals[order.CustomerId] = order.Amount;
}
Это скучно, зато алгоритм читается буквально, один проход, явные обновления, без сюрпризов с материализацией групп. Профессор Си

⚡️ Готовые решения и лучшие практики для надёжной защиты API в архитектуре бэкенда 📅 26 января | 20:00 мск | бесплатно Хотит
⚡️ Готовые решения и лучшие практики для надёжной защиты API в архитектуре бэкенда 📅 26 января | 20:00 мск | бесплатно Хотите, чтобы ваши API были надёжно защищены без потери производительности? На вебинаре разберём: - Типовые угрозы и уязвимости API - Аутентификация и авторизация - Защита на уровне архитектуры - Роль API Gateway и прокси в обеспечении безопасности - Лучшие практики проектирования защищённых API и контрактов ✅ После вебинара вы сможете: - Проектировать API с учётом безопасности на уровне архитектуры - Применять готовые решения для защиты API - Осознанно балансировать между безопасностью, сложностью и производительностью 👉 Регистрация https://otus.pw/NvH2/ Занятие приурочено к старту курса "Software Architect" в OTUS. Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

👨‍💻 Когда if начинает распухать Паттерн стратегия подходит, когда один и тот же сценарий можно выполнить несколькими способами, и выбор зависит от условий. Вместо большого switch внутри сервиса разные варианты выносятся в отдельные классы с общим интерфейсом, а контекст просто делегирует работу выбранной реализации. Типовая схема такая. Есть интерфейс Strategy, есть несколько конкретных стратегий, и есть контекст, который держит ссылку на стратегию и вызывает ее метод, не зная деталей реализации. Это снижает связность и позволяет добавлять новые варианты без переписывания старого кода. Мини пример на C#:
public interface IDiscountStrategy
{
    decimal Apply(decimal total);
}

public sealed class RegularDiscount : IDiscountStrategy
{
    public decimal Apply(decimal total) => total;
}

public sealed class VipDiscount : IDiscountStrategy
{
    public decimal Apply(decimal total) => total * 0.9m;
}

public sealed class Checkout
{
    private readonly IDiscountStrategy _discount;

    public Checkout(IDiscountStrategy discount) => _discount = discount;

    public decimal TotalWithDiscount(decimal total) => _discount.Apply(total);
}
Если стратегия выбирается по условиям, условие должно выбирать объект, а не ветку кода:
var checkout = serviceProvider.GetRequiredService<Checkout>();
var total = checkout.TotalWithDiscount(100m);
Выбор стратегии лучше делать на границе приложения, например в фабрике или при конфигурации через DI, потому что прямое создание зависимостей внутри сервиса жестко привязывает код к конкретной реализации. Профессор Си

Какой из следующих вариантов НЕВЕРНЫЙ в контексте использования Dispose в C#?
Anonymous voting

🎯 Открытый урок «Сетевой чат на C#». 🗓 22 января в 20:00 МСК 🆓 Бесплатно. Урок в рамках старта курса «C# Developer». На ве
🎯 Открытый урок «Сетевой чат на C#». 🗓 22 января в 20:00 МСК 🆓 Бесплатно. Урок в рамках старта курса «C# Developer». На вебинаре: ✔️ Рассмотрим написание сетевого приложения на C#. ✔️ Мы реализуем простые клиент и сервер с помощью одного из сетевых протоколов. ✔️Также затронем темы многопточности и асинхронности Кому будет полезно: - Вебинар будет полезен начинающим разработчикам, желающим разобраться в сетевом и многопочном\асинхронном программировании. Что вы получите: - По итогам вебинара смогут проектировать сетевые приложения. - Получат представление о работе сетевых протоколов, и многопоточности\асинхронности в приложениях. - На практике попробуют разработать такое приложение. 🔗 Ссылка на регистрацию: https://vk.cc/cTr1Ep Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

«Удалённо» управляем компьютером с доступом в BIOS Сейчас для удалённого управления компьютером есть великое множество програ
«Удалённо» управляем компьютером с доступом в BIOS Сейчас для удалённого управления компьютером есть великое множество программ на любой цвет, вкус и запах. Но что, если мы хотим пойти немного дальше, и наши требования к удалённому управлению становятся немного жёстче: Мы хотим иметь возможность не только работать в операционной системе, но и заходить в биос, или вообще эту систему переустановить. По тем или иным причинам, компьютер не может быть подключён к сети, но управлять им мы от этого меньше не хотим, а рядом у нас есть компьютер, который в сети находиться может. Но как это сделать? Вот этим мы тут и будем заниматься… https://habr.com/ru/companies/ruvds/articles/847842/

🎯 Открытый урок «Linq на практике». 🗓 14 января в 20:00 МСК 🆓 Бесплатно. Урок в рамках старта курса «C# Developer». На веб
🎯 Открытый урок «Linq на практике». 🗓 14 января в 20:00 МСК 🆓 Бесплатно. Урок в рамках старта курса «C# Developer». На вебинаре будут рассмотрены: ✔️ синтаксис операторов linq; ✔️синтаксис компараторов, применяемых в linq-запросах; ✔️примеры linq-запросов для наиболее популярных коллекций. Кому будет полезно: - данная тема будет интересна всем, кто работает с массивами данных в рамках .NET. Вы сможете эффективно использовать простой синтаксис для наиболее частых операций применяемых в рамках работы с коллекциями. Что вы получите: - вы сможете писать свои linq-запросы, опираясь на синтаксис linq.Будете знать разницу при применении тех или иных методов в рамках написания linq-запросов. 🔗 Ссылка на регистрацию: https://vk.cc/cTkWsE Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Fullstack Senior Разработчик Компания: SSP SOFT ЗП: 350 000 ₽ Формат: удалённо Занятость: Full-time Описание: https://t.me/rabotacschap/507