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

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

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

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

Наши каналы: https://t.me/proglibrary/9197
Download Telegram
В ASP.NET Core под нагрузкой растёт хвост задержек: CPU низкий, но наблюдаются пики длины очереди ThreadPool и таймауты HttpClient. Где искать корень проблемы и как её устранить?

Это типичный признак thread pool starvation из-за sync-over-async: блокировки .Result/.Wait(), синхронные I/O или тяжёлая синхронная работа в request-потоках. Диагностика — EventCounters/PerfView (ThreadPool QueueLength, Contentions), анализ async-стека. Решение — сделать путь запроса полностью асинхронным (DB/HTTP/FS), убрать блокировки, вынести CPU-bound в Task.Run/фоновые очереди, корректно использовать HttpClientFactory, и как временную меру — поднять ThreadPool.SetMinThreads.

Библиотека собеса по С#
Какой результат выдаст программа ниже?

Ответ:
Эта программа выведет число «10» десять раз.

И вот почему: delegate добавляется циклически, однако параметр i передаётся по ссылке. Поэтому, по окончании цикла i равно 10, и при каждом запуске delegate будет выводиться работать с этим значением.
9👍2😁1
Как используется property?

Свойство — это обёртка вокруг поля. Свойство используется как для присвоения, так и для чтения значения из поля с помощью методов set и get. Свойство можно создать для различных полей, таких как закрытые, открытые, защищённые и внутренние.

Библиотека собеса по С#
👍2🥱2
В ASP.NET Core у вас async-метод защищает кэш обычным lock и делает await внутри критической секции. Под нагрузкой — залипания и просадка RPS. В чём проблема и как починить?

await внутри lock держит монитор и блокирует потоки → contention/starvation и возможные deadlock’и. Решение: не делать await под lock; использовать ConcurrentDictionary (например, GetOrAdd с Lazy<Task<T>>) или асинхронную синхронизацию (SemaphoreSlim/AsyncLock, часто per-key), выносить await за пределы критической секции.

Библиотека собеса по С#
🦾 Почему ваши AI-продукты на базе LLM ломаются (и как это чинить)?

Выкатили ИИ-фичу в прод, а она галлюцинирует, падает или выдает мусор? Приглашаем на открытый вебинар, где разберем реальную боль внедрения LLM-агентов и научимся делать так, чтобы «всё работало».

🗓 Когда: 14 мая в 19:00 МСК
⏱️ Формат: 60 минут мяса + 30 минут ответов на ваши вопросы

🧑🏻‍💻 Кто вещает: Эмиль Сатаев — Backend Platform Developer (8+ лет в разработке). Человек, который своими руками внедряет LLM и агентные системы в реальные коммерческие сервисы.

🎁 Главный бонус для онлайна:
Только участникам прямого эфира подарим уникальный промокод на скидку 10.000 ₽ на большой курс AgentOps.

👉 Занять место на вебинаре
Что такое AJAX в ASP.NET?

Полная форма ASP.NET AJAX — это асинхронный JavaScript и XML. ASP.NET AJAX, также известный как AJAX, представляет собой набор дополнений ASP.NET. Он использует асинхронную передачу данных между браузером и веб-сервером, чтобы веб-страницы могли запрашивать небольшие фрагменты информации с сервера вместо целых страниц. Этот метод делает интернет-приложения меньше, быстрее и удобнее для пользователя. Он создан корпорацией Microsoft для выполнения функций AJAX в веб-приложениях. ASP.NET AJAX работает с библиотекой AJAX, которая использует объектно-ориентированное программирование (ООП) для более быстрых многофункциональных веб-приложений.

Библиотека собеса по С#
1
Как запускать один периодический джоб на весь кластер ASP.NET Core без внешнего планировщика?

Оберните BackgroundService в распределённый lock (Redis SET NX PX, Postgres advisory lock и т.п.) с heartbeats/TTL и авто-продлением; выполняйте работу только у лидера. Делайте задачи идемпотентными, держите дедлайны/отмену, при потере lock — немедленно завершайте цикл. Сохраняйте «курсор прогресса» в БД.

Библиотека собеса по С#
👍1
Как правильно реализовать освобождение ресурсов в IAsyncDisposable?

Короткий ответ: Реализуйте шаблон с охраной от повторного вызова: DisposeAsync() вызывает приватный DisposeAsyncCore() и синхронный Dispose(false), закрывает IAsyncDisposable ресурсы через await using, остальные — в Dispose. Используйте AsyncLazy/флаг disposed, прокидывайте CancellationToken только там, где это безопасно, и учитывайте, что await using всегда вызывает именно DisposeAsync().

Библиотека собеса по С#
🗓 14 мая в 19:00 (Мск) встречаемся в онлайне.

Тема: Почему AI-продукты на базе LLM ломаются и как сделать, чтобы работало.

В кружке выше Эмиль Сатаев рассказал, какие именно проблемы с LLM в проде будем разбирать.

Что в программе:
- Разберем реальные кейсы стартапов и ограничения LLM.
- Обсудим рабочие архитектуры: RAG, human-in-the-loop, контроль качества.
- Ответим на ваши вопросы и разберем кейсы участников.


🎁 Бонусы: в конце вебинара подарим промокод на скидку 10.000 ₽ на курсы и разыграем подписки на полезные AI-сервисы.

👉 Зарегистрироваться на вебинар
Please open Telegram to view this post
VIEW IN TELEGRAM
Когда выбирать struct/record struct вместо class?

Для маленьких, неизменяемых и часто копируемых значений (≤ ~16–32 байт), где важна локальность и отсутствие аллокаций. Нужны структурное равенство/with — берите record struct. Если объект крупный/мутабельный/долго живёт — используйте class.

Библиотека собеса по С#
👍71
В Unity-проекте вы замечаете, что FPS резко проседает при активации новых объектов на сцене. Как вы будете искать и устранять проблему?

Сначала проверю профайлером (Unity Profiler, Deep Profile), чтобы понять, тратится ли время на Instantiate, GC или загрузку ассетов. Для оптимизации — применю Object Pooling вместо частого создания/уничтожения объектов, использую Addressables для асинхронной подгрузки, а также разделю тяжёлые операции на несколько кадров (coroutines/Jobs).

Библиотека собеса по С#
👍2
🔥 Знакомьтесь с экспертом Proglib.academy: Эмиль Сатаев

Эмиль — эксперт с 8-летним опытом в разработке, который специализируется на внедрении LLM и агентных подходов в реальные коммерческие сервисы. Он точно знает, как проектировать архитектуру так, чтобы ИИ-функции работали стабильно в связке с внешними системами.

🏃‍♀️ Уже 14 мая Эмиль проведет открытый вебинар!

Обсудим самую «больную» тему: «Почему AI-продукты на базе LLM ломаются и как сделать, чтобы работало».

🗓 Когда: 14 мая в 19:00 (Мск)

Почему Эмиля стоит послушать:

🟣 8+ лет в разработке (Backend и Frontend)
Прошел путь от фулстека до Backend Platform Developer в SMIT.Studio.


🟣 Международный исследовательский опыт
Работал исследователем в Институте ИИ НИУ ВШЭ и в Национальном университете Сингапура (NUS).


🟣 Преподаватель-практик
Ведет семинары в НИУ ВШЭ, в том числе по проектированию и разработке агентских систем.


🟣 Мастер интеграции AI в Backend
Его главная суперсила — умение правильно встраивать LLM через API, выстраивать workflow и агентную логику в сложных распределенных системах.


🔗 Зарегистрироваться на вебинар
Please open Telegram to view this post
VIEW IN TELEGRAM
Объясните, как работают асинхронные делегаты в C#, и как они могут быть использованы для улучшения производительности приложений?

Асинхронные делегаты в C# позволяют выполнить метод асинхронно в отдельном потоке. Это делается с помощью методов BeginInvoke и EndInvoke. BeginInvoke запускает метод асинхронно, а EndInvoke ожидает завершения метода и возвращает результат. Асинхронные делегаты полезны для выполнения длительных операций, таких как I/O операции или сложные вычисления, без блокирования основного потока выполнения. Это улучшает отзывчивость приложения, особенно в GUI-приложениях, где важно поддерживать активный пользовательский интерфейс, в то время как выполняются фоновые задачи. Однако, следует управлять ресурсами и обрабатывать исключения при использовании асинхронных делегатов, чтобы избежать утечек памяти и других проблем.

Библиотека собеса по С#
Как спроектировать высокопроизводительную очередь задач без блокировок?

Используйте System.Threading.Channels: ограниченный Channel даёт backpressure, продюсеры пишут WriteAsync, консьюмеры читают ReadAllAsync параллельно, отмена через CancellationToken. Минимизируйте аллокации (ValueTask, пулы), избегайте глобальных lock, измеряйте throughput/latency и не перегружайте ThreadPool.

Библиотека собеса по С#
🤔2
Перечислите различные методы трассировки, представленные в ASP.NET?

Assert() проверяет условие и выводит сообщение, если условие ложно.
Close() очищает выходной буфер, а затем закрывает прослушиватели, чтобы они больше не получали отладочные выходные данные.
Fail() — этот метод выдает сообщение об ошибке.
GetType() используется для получения типа объекта.
ToString() возвращает строку, представляющую текущий объект.
GetHashCode() — метод работает как хэш-функция для определенного типа. Он подходит для использования в алгоритмах хэширования и структурах данных, таких как хэш-таблица.
Equals() определяет, является ли указанный объект тем же экземпляром, что и текущий объект.
Warn() имеет две формы. Первая форма записывает информацию трассировки в журнал трассировки, включая любые определенные пользователем категории.
Write() имеет две формы. Первая форма записывает информацию в журнал трассировки, включая любые определенные пользователем категории и сообщения.


Библиотека собеса по С#
4
Напишите программу для сложения всех чётных чисел в массиве

Ответ:
static long TotalAllNum(int[] intArray) {
return intArray.Where(i => i % 2 == 0).Sum(i => (long)i);
}

Библиотека собеса по С#
2👍1👏1😁1
Как можно использовать шаблон проектирования Singleton в C#?

Шаблон проектирования Singleton используется в C# в ситуации, когда класс имеет один экземпляр и доступ предоставляется всем.

🐸Библиотека собеса по С#
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱3👍1👏1
Что делает ключевое слово var в C#?

Компилятор выводит статический тип переменной по правой части выражения. Это не dynamic: тип фиксируется на этапе компиляции. Нельзя использовать без инициализации и менять тип этой переменной позже.

Библиотека собеса по С#
👍21
Что такое Span<T> и Memory<T> в C# и в чём между ними разница?

Span<T> — это ref-структура, представляющая непрерывный участок памяти (массив, стек, неуправляемая память) без аллокаций в куче. Позволяет работать с подмассивами, строками и буферами без копирования. Так как это ref struct, Span<T> живёт только на стеке: его нельзя сохранять в полях класса, использовать в async-методах, итераторах или захватывать в лямбдах.
Memory<T> — обычная структура с теми же возможностями по представлению участка памяти, но без ограничений ref-структуры. Её можно хранить в полях, передавать через await, использовать в асинхронном коде. Получить Span<T> из Memory<T> можно через свойство .Span.
Правило выбора: Span<T> — для синхронного, горячего кода с максимальной производительностью; Memory<T> — когда нужно пересечь границы async/await или сохранить ссылку на буфер.

Библиотека собеса по С#
4👍1
Как работает async/await и роль SynchronizationContext?

async/await преобразует метод в машину состояний. При await выполнение приостанавливается, а продолжение может быть запланировано на исходном SynchronizationContext (например, UI-поток). В ASP.NET Core его нет, и продолжение выполняется в ThreadPool. ConfigureAwait(false) отключает возврат в контекст.

Библиотека собеса по С#
👍5