Как проектировать высокопроизводительные API без копий с Span<T>/ReadOnlySpan<T>?
Принимайте вход как ReadOnlySpan<T>/Span<T>, возвращайте данные через ReadOnlyMemory<T>/Memory<T> для async-границ, избегайте удержания Span вне стека, используйте ref readonly/scoped где уместно, не создавать лишних строк/массивов, использовать пулы буферов и инкрементальный парсинг/запись.
Библиотека собеса по С#
Принимайте вход как ReadOnlySpan<T>/Span<T>, возвращайте данные через ReadOnlyMemory<T>/Memory<T> для async-границ, избегайте удержания Span вне стека, используйте ref readonly/scoped где уместно, не создавать лишних строк/массивов, использовать пулы буферов и инкрементальный парсинг/запись.
Библиотека собеса по С#
Как работать со временем и часовыми поясами без багов?
Храните время в UTC, наружу отдавайте DateTimeOffset. Избегайте DateTime.Now и Kind=Unspecified; для интервалов применяйте Stopwatch. Конвертацию делайте через TimeZoneInfo (с правилами DST), зависимости от времени инъецируйте через абстракцию часов (ISystemClock), время парсите/форматируйте в ISO-8601. Тестируйте переходы часовых поясов и «дырки» DST.
Библиотека собеса по С#
Библиотека собеса по С#
❤4
Как защитить внешний API от перегрузки в .NET 7+ с предсказуемым throttling?
Используйте System.Threading.RateLimiting (Token/Fixed/Sliding/ConcurrencyLimiter) и middleware UseRateLimiter. Для per-user/per-key — политику с partitioner; задайте QueueProcessingOrder и длину очереди, чтобы получить backpressure или немедленные отказы. Оборачивайте вызовы Polly-политиками (timeouts/ретраи с джиттером).
Библиотека собеса по С#
Библиотека собеса по С#
❤4👍4
Как писать код, устойчивый к триммингу и AOT (NativeAOT/Blazor WASM)?
Избегайте неявной рефлексии/динамики; для JSON используйте source-generators (JsonSerializerContext), для DI — compile-time контейнеры или дескрипторы без сканирования. Помечайте необходимые члены DynamicallyAccessedMembers/DynamicDependency, держите TrimmerRootDescriptor/link.xml минимальным. Не делайте Assembly.GetTypes() без фильтров; проверяйте PublishTrimmed сборками и тестами.
Библиотека собеса по С#
Библиотека собеса по С#
Можете ли вы определить разницу между перегрузкой и переопределением?
Перегрузка — когда у вас есть два или более методов в одной области действия с одинаковым именем, но разными параметрами.
Переопределение — позволяет вам изменить поведение метода в подклассе или дочернем классе.
Библиотека собеса по С#
Переопределение — позволяет вам изменить поведение метода в подклассе или дочернем классе.
Библиотека собеса по С#
Какой параметр можно использовать для возврата нескольких значений из функции?
Ссылочные или выходные параметры можно использовать для возврата нескольких значений из функции.
Библиотека собеса по С#
Библиотека собеса по С#
В чем разница в ключевых словах ref и out?
Основное различие между ключевыми словами ref и out в C# заключается в том, что ref требует, чтобы переменная была инициализирована перед передачей в метод, тогда как ключевое слово out не требует инициализации переменной перед передачей в метод.
Библиотека собеса по С#
Библиотека собеса по С#
Назовите различные способы передачи параметров методу в C#.
Существует три способа передачи параметров:
📌 Параметры значений
📌 Ссылочные параметры
📌 Выходные параметры
Библиотека собеса по С#
📌 Параметры значений
📌 Ссылочные параметры
📌 Выходные параметры
Библиотека собеса по С#
Почему Span<T>/ReadOnlySpan<T> — это ref struct, что это запрещает (heap/async/итераторы/лямбды), и как передавать “срезы” через async-границы?
ref struct → только стек: нельзя боксить, хранить в полях классов, захватывать в замыканиях, использовать в async/итераторах — их состояния живут в куче, что небезопасно для byref-типов.
Используйте Span<T> локально и синхронно; создавайте через stackalloc, слайсинг O(1).
Для перехода через async/долгоживущего хранения берите Memory<T>/ReadOnlyMemory<T>; по месту обратно получайте .Span.
Нельзя возвращать/принимать Task<Span<T>>; нужно Task<Memory<T>>.
🐸 Библиотека собеса по С#
Используйте Span<T> локально и синхронно; создавайте через stackalloc, слайсинг O(1).
Для перехода через async/долгоживущего хранения берите Memory<T>/ReadOnlyMemory<T>; по месту обратно получайте .Span.
Нельзя возвращать/принимать Task<Span<T>>; нужно Task<Memory<T>>.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1
Как правильно задавать таймауты и отмену в async-цепочке без конфликтов?
Держите один источник истины для отмены: передавайте общий CancellationToken вниз по стеку, избегайте вложенных таймаутов. Для HTTP вместо HttpClient.Timeout используйте Polly Timeout или CancellationTokenSource.CancelAfter, везде прокидывайте токен и корректно обрабатывайте OperationCanceledException.
Библиотека собеса по С#
Библиотека собеса по С#
Как ускорить EF Core под высокую нагрузку без лишних аллокаций и N+1?
Для чтения — AsNoTracking и проекции Select на DTO, избегайте широких Include; используйте compiled queries и параметризацию, дробите кардинальность AsSplitQuery, для массовых правок — ExecuteUpdate/Delete или bulk-библиотеки; объединяйте SaveChanges, держите DbContext краткоживущим (скоуп) и следите за N+1 через логировани е.
Библиотека собеса по С#
Для чтения — AsNoTracking и проекции Select на DTO, избегайте широких Include; используйте compiled queries и параметризацию, дробите кардинальность AsSplitQuery, для массовых правок — ExecuteUpdate/Delete или bulk-библиотеки; объединяйте SaveChanges, держите DbContext краткоживущим (скоуп) и следите за N+1 через логировани
Библиотека собеса по С#
👍2❤1
Что такое GAC? Возможно ли поместить два файла с одинаковым именем в Global Assembly Cache?
GAC (Global Assembly Cache) — глобальный кэш сборок, место где хранятся разделяемые сборки. В GAC нельзя помещать полностью одинаковые сборки (сборки с полностью совпадающим сложным именем). Сложное имя сборки состоит из нескольких частей:
✍🏻 Имя сборки без расширения
✍🏻 Номер версии. Благодаря разграничению по версии можно хранить разные версии одной и ой же сборки
✍🏻 Открытый ключ
✍🏻 Необязательное значение для культуры (при локализации сборки)
✍🏻 Цифровая подпись, которая создается с помощью хэш-значения содержимого сборки и значения секретного ключа. Секретный ключ представляет собой файл с расширением *.snk. Если совпадают у двух сборок только имена сборки, а все остальное отличается, то их можно помещать в GAC вместе.
Библиотека собеса по С#
GAC (Global Assembly Cache) — глобальный кэш сборок, место где хранятся разделяемые сборки. В GAC нельзя помещать полностью одинаковые сборки (сборки с полностью совпадающим сложным именем). Сложное имя сборки состоит из нескольких частей:
✍🏻 Имя сборки без расширения
✍🏻 Номер версии. Благодаря разграничению по версии можно хранить разные версии одной и ой же сборки
✍🏻 Открытый ключ
✍🏻 Необязательное значение для культуры (при локализации сборки)
✍🏻 Цифровая подпись, которая создается с помощью хэш-значения содержимого сборки и значения секретного ключа. Секретный ключ представляет собой файл с расширением *.snk. Если совпадают у двух сборок только имена сборки, а все остальное отличается, то их можно помещать в GAC вместе.
Библиотека собеса по С#
Как проектировать высокопроизводительные API без копий с Span<T>/ReadOnlySpan<T>?
Принимайте вход как ReadOnlySpan<T>/Span<T>, возвращайте данные через ReadOnlyMemory<T>/Memory<T> для async-границ, избегайте удержания Span вне стека, используйте ref readonly/scoped где уместно, не создавать лишних строк/массивов, использовать пулы буферов и инкрементальный парсинг/запись.
Библиотека собеса по С#
Библиотека собеса по С#
В проде на HTTP/2 (TLS) под пиками растёт p99: при единичной потере пакета “проседают” сразу несколько параллельных запросов на одном соединении. Почему так происходит и как это смягчить без переписывания приложения?
Это TCP Head-of-Line blocking внутри одного HTTP/2-мультиплексированного TCP-соединения: ретрансмит одного сегмента задерживает все потоки. Смягчение: перейти на HTTP/3/QUIC (stream-level loss recovery) или шардировать запросы по нескольким TCP (connection pooling/limit concurrent streams), настроить приоритизацию, таймауты/keep-alive, включить современный congestion control (напр., BBR) и использовать CDN ближе к клиенту. Диагностика: метрики retransmits/RTT, pcap, qlog (для H3).
Библиотека собеса по С#
Библиотека собеса по С#
👍3🤔1
Объясните, что такое локальные и глобальные ресурсы?
Локальный ресурс явно относится к определенной странице, которая является той, которая может получить к нему доступ, в то время как глобальные ресурсы могут быть доступны из любого места. Локальные ресурсы хранятся в органайзере App_LocalResources, в то время как глобальные хранятся в папке App_GlobalResources. Записи локальных и глобальных ресурсов будут выглядеть идентичными, поэтому единственным различием будет папка, в которой они находятся. Но они используются по-разному.
Библиотека собеса по С#
Библиотека собеса по С#
Please open Telegram to view this post
VIEW IN TELEGRAM
Что вы подразумеваете под массивом и какие типы массивов существуют в C#?
Коллекция схожих элементов, доступных через числовой индекс, называется массивом. Бывают одномерные массивы, двумерные массивы и jagged массивы.
Библиотека собеса по С#
Библиотека собеса по С#
В чем разница между понятиями namespace и assembly?
Namespace (пространство имен) является логическим соглашением, используемым во время разработки, в то время как assembly (сборка) устанавливает область видимости имени в процессе выполнения.
Библиотека собеса по С#
Библиотека собеса по С#
❤1
Как поддерживать сессии в MVC ASP .NET?
Мы можем поддерживать сессии в MVC тремя различными способами:
— Временные данные
— Просмотр данных
— Просмотр сумки
Библиотека собеса по С#
— Временные данные
— Просмотр данных
— Просмотр сумки
Библиотека собеса по С#
🌚5
🤖 Ваш ИИ-агент съедает бюджет на токены и падает при сбоях API?
Пора переходить на новый уровень. Открыли продажи курса по AgentOps — управлению ИИ-агентами в рабочих процессах.
Рынок требует инженеров, которые умеют:
• Контролировать метрики и качество ответов;
• Эффективно работать с RAG-архитектурой;
• Строить системы, готовые к реальным нагрузкам.
Обучение займет 6-12 недель под руководством практиков с опытом в AI и Data Science в крупных IT-компаниях, таких как Яндекс, Сбер, МТС, Huawei, Raft и др.
🎁 Можно подождать, пока про AgentOps начнут говорить все. Или зайти сейчас — НА 30% ДЕШЕВЛЕ!
🔥 Забрать скидку и изучить программу.
Пора переходить на новый уровень. Открыли продажи курса по AgentOps — управлению ИИ-агентами в рабочих процессах.
Рынок требует инженеров, которые умеют:
• Контролировать метрики и качество ответов;
• Эффективно работать с RAG-архитектурой;
• Строить системы, готовые к реальным нагрузкам.
Обучение займет 6-12 недель под руководством практиков с опытом в AI и Data Science в крупных IT-компаниях, таких как Яндекс, Сбер, МТС, Huawei, Raft и др.
🎁 Можно подождать, пока про AgentOps начнут говорить все. Или зайти сейчас — НА 30% ДЕШЕВЛЕ!
Работа с AI начинается с систем.
Системы — с AgentOps.
🔥 Забрать скидку и изучить программу.
Почему в C# используются Async и Await?
Если у нас есть программа, которая требует, чтобы методы запускались независимо от основного процесса, нам нужно использовать асинхронное программирование. Это позволяет нам запускать процессы и, при необходимости, заставлять их ждать, не блокируя остальную часть программы.
Для этого мы используем ключевое слово Async для создания асинхронного метода и Await для его запуска без блокировки нашей программы.
Библиотека собеса по С#
Для этого мы используем ключевое слово Async для создания асинхронного метода и Await для его запуска без блокировки нашей программы.
Библиотека собеса по С#
🥱6👍1🌚1👾1