Forwarded from Proglib.academy | IT-курсы
Где-то есть тесты, где-то их забыли. Где-то агент следует архитектуре проекта, где-то предлагает решение, которое с ней не сочетается.
Завтра покажем, как передать AI инженерный контекст команды и не превратить его внедрение в ещё один источник хаоса.
Бесплатно. 60 минут доклада + 30 минут вопросов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Forwarded from Библиотека задач по C# | тесты, код, задания
Чем BackgroundService отличается от IHostedService?
👾 — Предназначен только для таймеров
👍 — Это базовый класс с циклом ExecuteAsync; IHostedService — лишь интерфейс Start/Stop без цикла
🥰 — Запускается только в Debug
⚡️ — Не поддерживает отмену CancellationToken
Библиотека задач по C#
👾 — Предназначен только для таймеров
👍 — Это базовый класс с циклом ExecuteAsync; IHostedService — лишь интерфейс Start/Stop без цикла
🥰 — Запускается только в Debug
⚡️ — Не поддерживает отмену CancellationToken
Библиотека задач по C#
👍114🥱3⚡1😍1👾1
string в .NET нельзя изменить. Любая конкатенация, замена или обрезка создаёт новый объект. Благодаря этому строки безопасно использовать из нескольких потоков, удобно хранить в качестве ключей словаря, а оператор == сравнивает их содержимое.
Но есть и цена: каждое изменение — это новая аллокация. Поэтому для сборки текста в циклах используют StringBuilder, а не +.
StringBuilder помогает избежать лишних аллокаций, а интернирование стоит использовать только там, где действительно много повторяющихся строк.
#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤2👏2
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Proglib.academy | IT-курсы
Агент работает только с тем контекстом, который ему дали. Если документация неполная или устарела, он начинает додумывать — отсюда появляется неверный код.
Также разберём, как выбирать модель под задачу: Claude, DeepSeek, Qwen и другие
Впереди 7 недель работы со своим репозиторием. Вебинары проходят вживую и остаются в записи.
Стартуем 31 августа. До конца июля можно присоединиться по ранней цене, а доступ к материалам останется бессрочным
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
В .NET 9 появился специальный тип System.Threading.Lock, созданный именно для синхронизации.
private readonly Lock _sync = new();
public void Add(int x)
{
lock (_sync)
{
_items.Add(x);
}
}
Синтаксис lock не изменился, но компилятор распознаёт тип Lock и использует его напрямую, без перехода через Monitor. Это делает код более явным и позволяет снизить накладные расходы.
При необходимости блокировку можно взять и без оператора lock:
using (_sync.EnterScope())
{
_items.Add(x);
}
⚠️ Важно: не приводите Lock к object. В этом случае компилятор предупредит, а оператор lock снова будет работать через старый механизм на базе Monitor.
Для нового кода System.Threading.Lock — рекомендуемый способ реализации взаимного исключения в .NET 9 и новее.
#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
👍28👏4❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁12❤3🔥3🥱1
Forwarded from Библиотека задач по C# | тесты, код, задания
Какой из следующих методов используется для реализации наследования в C#?
👾 — class Derived : Base
👍 — class Derived inherits Base
🥰 — class Derived extends Base
⚡️ — Ничего из вышеперечисленного
Библиотека задач по C#
👾 — class Derived : Base
👍 — class Derived inherits Base
🥰 — class Derived extends Base
⚡️ — Ничего из вышеперечисленного
Библиотека задач по C#
👾134😁19⚡3🥰2👍1
Самая дорогая часть агентной разработки — не всегда код 🥳
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Forwarded from Proglib.academy | IT-курсы
В итоге станет понятнее, сколько ресурсов выделять на запуск, когда его останавливать и в какой момент лучше изменить подход🔍
До 31 июля курс можно купить со скидкой, а все материалы останутся в бессрочном доступе.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3💯1
Один из главных споров в тестировании.
Одни мокают почти всё вокруг проверяемого класса. Такие тесты быстрые, изолированные и падают только из-за логики самого кода.
Другие предпочитают реальные зависимости: базу в контейнере, настоящие сервисы и интеграционные сценарии. Да, такие тесты медленнее, зато они лучше показывают, как код ведёт себя в реальных условиях.
На практике многие выбирают компромисс: внешние API и нестабильные сервисы мокают, а свои компоненты стараются тестировать вместе.
👍 — максимум моков, главное скорость и изоляция.
🔥 — минимум моков, лучше реальные зависимости.
#entry_point
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👍8❤4
Обычный new Regex("...") разбирает шаблон при первом использовании уже во время работы программы. Если регулярное выражение используется часто, это лишние накладные расходы, а ошибки в шаблоне обнаружатся только в рантайме.
В .NET 7 появился атрибут [GeneratedRegex]. Достаточно объявить частичный метод, а генератор исходного кода создаст реализацию ещё на этапе сборки.
Если шаблон известен заранее и используется регулярно, выбирайте [GeneratedRegex]. Если регулярное выражение приходит от пользователя или из конфигурации во время работы программы — остаётся обычный Regex.
#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤4
Большая часть CPU-bound работы и продолжений после await в .NET выполняется на потоках из ThreadPool. Именно поэтому проблемы с производительностью часто начинаются здесь.
Главное правило — не блокируйте потоки пула. Когда код вызывает .Result или .Wait() для незавершённой задачи, поток простаивает, но остаётся занятым.
Если таких потоков становится много, возникает голодание пула (ThreadPool starvation): новые задачи ждут свободных потоков, а приложение начинает «подвисать».
Пул умеет создавать новые потоки, но делает это постепенно, чтобы не тратить ресурсы впустую. Поэтому большое количество блокирующих вызовов особенно болезненно.
#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
Forwarded from Библиотека задач по C# | тесты, код, задания
Какая концепция C# позволяет объекту принимать различные формы и, следовательно, отображать соответствующее поведение?
👾 — Полиморфизм
👍 — Инкапусляция
🥰 — Абстракция
⚡️ — Ничего из вышеперечисленного
Библиотека задач по C#
👾 — Полиморфизм
👍 — Инкапусляция
🥰 — Абстракция
⚡️ — Ничего из вышеперечисленного
Библиотека задач по C#
👾140🥱7⚡3👍2🤩1
🚀 Анализ изменений с git log
Команда git log позволяет понять, как эволюционировал код — просмотреть последовательность коммитов и метаданные.
Просмотр истории:
История коммитов построчно:
Граф веток + метки (ветки, теги) для всех веток:
Показать diff последних двух коммитов:
Коммиты за последние 2 недели от указанного автора:
Настраиваемый формат: короткий хеш, дата, сообщение, автор:
💬 Вы смотрите историю log'ом или используете сторонние инструменты?
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_view
Команда git log позволяет понять, как эволюционировал код — просмотреть последовательность коммитов и метаданные.
Просмотр истории:
git log
История коммитов построчно:
git log --oneline
Граф веток + метки (ветки, теги) для всех веток:
git log --graph --decorate --all
Показать diff последних двух коммитов:
git log -p -2
Коммиты за последние 2 недели от указанного автора:
git log --since="2 weeks ago" --author="ProgLib»
Настраиваемый формат: короткий хеш, дата, сообщение, автор:
git log --pretty=format:"%h %ad | %s%d [%an]" --date=short
#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱6❤3👍3
Можно ли запустить .NET-приложение в браузере без Blazor? Да, существуют несколько альтернативных методов, которые могут подойти для различных проектов.
Один из таких методов — это WebAssembly. Эта технология позволяет компилировать .NET-код в байткод, который выполняется в браузере. Однако WebAssembly не поддерживает все возможности .NET, а настройка может быть сложной.
Если нужна большая гибкость, можно использовать JavaScript Interop. Этот подход позволяет обмениваться данными между JavaScript и .NET, что дает возможность интегрировать их в одно приложение.
Это решение для тех, кто хочет сохранить существующий JavaScript-код, но при этом использовать возможности .NET в клиентской части.
Также можно использовать инструменты вроде Mono и CoreRT для компиляции .NET-приложений в WebAssembly, или платформы, такие как Ooui и Uno Platform, которые упрощают перенос .NET-кода в браузер.
#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍1
В .NET 11 Preview 6 EF Core получил поддержку трансляции нового LINQ-оператора FullJoin в SQL. Теперь запросы могут выполняться целиком на стороне базы данных, без ручных обходных решений.
Сам оператор FullJoin появился в .NET 11 раньше, но сначала работал только для LINQ to Objects. Теперь EF Core умеет преобразовывать его в FULL OUTER JOIN для реляционных провайдеров, которые поддерживают этот оператор.
Это удобно для задач, где нужно сохранить все строки из обеих таблиц, включая несовпавшие: поиск расхождений, сверка данных, объединение нескольких источников или построение отчётов.
Раньше такие запросы часто приходилось собирать вручную из нескольких JOIN и UNION либо писать сырой SQL.
⚠️ Пока это часть .NET 11 Preview 6. До финального релиза в ноябре поведение ещё может измениться.
#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍5
В .NET сборщик мусора работает в двух режимах, и выбор между ними влияет на производительность приложения.
Workstation GC рассчитан на клиентские приложения. Он экономнее расходует память и старается не занимать все доступные ядра.
Ещё одна особенность — Background GC. Во время сборки старших поколений он позволяет сократить длительные паузы, выполняя значительную часть работы параллельно с приложением.
Server GC настраивается через свойство ServerGarbageCollection, хотя многие серверные шаблоны уже используют его по умолчанию.
#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Кажется, у онлайн-обучения появился формат, которого давно не хватало 👇