Библиотека собеса по C# | вопросы с собеседований
5.66K subscribers
271 photos
6 videos
1 file
642 links
Вопросы с собеседований по C# и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/4c2f1c3b

Для обратной связи: @proglibrary_feeedback_bot

Наши каналы: https://t.me/proglibrary/9197
Download Telegram
Как проектировать высокопроизводительные API без копий с Span<T>/ReadOnlySpan<T>?

Принимайте вход как 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>>.


🐸Библиотека собеса по С#
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41
Как правильно задавать таймауты и отмену в 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 через логировани
е.

Библиотека собеса по С#
👍21
Что такое GAC? Возможно ли поместить два файла с одинаковым именем в Global Assembly Cache?

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. Записи локальных и глобальных ресурсов будут выглядеть идентичными, поэтому единственным различием будет папка, в которой они находятся. Но они используются по-разному.

Библиотека собеса по С#
Как ViewModel взаимодействует с Model в паттерне MVVM

ViewModel взаимодействует с Model, запрашивая и преобразуя данные для отображения в UI. Она использует привязку данных для обновления UI и обрабатывает действия пользователя, инициируя изменения в Model. ViewModel служит посредником между View и Model, обеспечивая логику преобразования данных, но не содержащую логику представления. Это позволяет разделить ответственность: Model управляет данными, View — отображением, а ViewModel — взаимодействием между ними.

🐸Библиотека собеса по С#
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% ДЕШЕВЛЕ!

Работа с AI начинается с систем.
Системы — с AgentOps.


🔥 Забрать скидку и изучить программу.
Почему в C# используются Async и Await?

Если у нас есть программа, которая требует, чтобы методы запускались независимо от основного процесса, нам нужно использовать асинхронное программирование. Это позволяет нам запускать процессы и, при необходимости, заставлять их ждать, не блокируя остальную часть программы.

Для этого мы используем ключевое слово Async для создания асинхронного метода и Await для его запуска без блокировки нашей программы.


Библиотека собеса по С#
🥱6👍1🌚1👾1