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

Профессор Си

رفتن به کانال در Telegram
2 817
مشترکین
-124 ساعت
-27 روز
-1230 روز
آرشیو پست ها
👩‍💻 Открытый урок «Как работают структуры данных 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

Что будет выведено на экран?
Anonymous voting

photo content

Вакансии для С# разработчиков Ищите работу на С#? Устали пролистывать сотни неактуальных предложений? Подписывайтесь на канал
Вакансии для С# разработчиков Ищите работу на С#? Устали пролистывать сотни неактуальных предложений? Подписывайтесь на канал 👉 «Вакансии для С# разработчиков» Что тебя ждёт: ✔️ Свежие вакансии каждый день ✔️ Junior, Middle, Senior — для любого уровня ✔️ Только проверенные работодатели Не упусти шанс найти работу мечты! 🗂 Подписывайся и будь первым, кто узнает о новых вакансиях. [Вакансии для С# разработчиков]

Как делать видеоигры в 2025 году (без движка) Я искренне считаю, что создание игр без огромного «многофункционального» движка
Как делать видеоигры в 2025 году (без движка) Я искренне считаю, что создание игр без огромного «многофункционального» движка может быть проще и интереснее, а часто и позволяет оптимальнее тратить вычислительные ресурсы. Я не делаю игру, в которой «есть всё», поэтому мне не нужны 90% фич, предоставляемых движками. Все мои игры обладают конкретным стилем и у меня есть конкретные способы работы с моими инструментами. https://habr.com/ru/articles/911370/

Вакансии для C#/.NET разработчиков за последние 14 дней:Junior C# Developer. Офис (РФ) ✓ Full stack разработчик (Middle) Удалёнка (РФ, Беларусь), 150–200 т.р. ✓ Разработчик C#. Гибрид (Москва) или удалёнка, 200–400 т.р. ✓ Разработчик .Net. Удалёнка или офис, 250–500 т.р. ✓ Unity разработчик (Middle/Senior) Удалёнка, ЗП по договорённости ✓ Unity разработчик (Middle/Senior) Удалёнка (Нидерланды), ЗП по договорённости #подборка #csharp

using System.Linq;

public class Program
{
    public static bool isIdentical(string str)
    {
        return str.Distinct().Count() == 1;
    }
}
#задача #ответ@csharpovich