Частые вопросы C# и .NET: блиц
↑ 9.2 Финальная подготовка: проекты, live coding, вопросы · ← Предыдущая · → Следующая
Зачем это на собесе
Короткие вопросы для быстрого повторения перед интервью: отвечайте за 20–30 секунд.
Язык и платформа
Value type и reference type?
Value types (
struct,int,enum) хранят значение, копируются при присваивании; reference types (class,string, массивы) хранят ссылку на объект в куче. Struct может лежать в стеке или внутри объекта.
Что такое boxing?
Упаковка value type в
object(аллокация в куче и копирование); обратная операция — unboxing. Дорого в горячих путях; избегают generic-ами.
stringimmutable — что это значит?Изменение создаёт новую строку. Для многократной конкатенации —
StringBuilder.
Чем
==отличается отEquals?
==для ссылочных типов по умолчанию сравнивает ссылки (дляstringиrecord— значения),Equalsможно переопределять.
abstract classилиinterface?Интерфейс — контракт (можно множественная реализация, default-методы), абстрактный класс — общее состояние и частичная реализация, одиночное наследование.
readonly,const,static readonly?
const— константа времени компиляции;readonly— присваивается в конструкторе;static readonly— один раз при инициализации типа.
Что такое
record?Ссылочный (или
record struct) тип со значимой семантикой равенства, неизменяемостью по умолчанию,with-выражениями.
Память и сборка мусора
Как работает GC?
Поколения 0/1/2, куча больших объектов (LOH); собирает недостижимые объекты; поколение 0 собирается часто и быстро. Режимы: Workstation/Server, concurrent.
IDisposableи финализатор?
Disposeдетерминированно освобождает неуправляемые ресурсы (using); финализатор — страховка, замедляет GC. Шаблон:Dispose(bool)+GC.SuppressFinalize.
Утечки памяти в .NET — откуда?
Подписки на события, статические коллекции, кэши без ограничения, не освобождённые
IDisposable, замыкания,HttpClient-ошибки.
Асинхронность
Что делает
await?Освобождает поток на время ожидания, компилятор превращает метод в конечный автомат; продолжение выполняется после завершения задачи.
TaskиValueTask?
ValueTaskизбегает аллокации при синхронном завершении; нельзя дваждыawaitи хранить без осторожности.
ConfigureAwait(false)?Не возвращаться в исходный контекст; в библиотеках — желательно, в ASP.NET Core приложении — не нужно.
Коллекции и LINQ
Отложенное выполнение LINQ?
Запрос выполняется при переборе (
foreach,ToList); повторный перебор пересчитывает; опасно при изменяемых источниках.
IEnumerableиIQueryable?
IEnumerableработает в памяти (делегаты),IQueryableстроит дерево выражений и транслируется провайдером (SQL).
List<T>иT[]?Массив фиксированного размера, список — динамический массив с амортизированным O(1) добавлением.
ASP.NET Core и EF
Время жизни сервисов DI?
Singleton, Scoped (на запрос), Transient; scoped в singleton — captive dependency.
Middleware и filters?
Middleware — на уровне HTTP-конвейера; filters — внутри MVC/endpoint с контекстом action.
N+1 в EF Core?
Запрос за списком и по запросу на каждую связь; решают
Include, проекции, split queries.
AsNoTracking?Отключает отслеживание изменений: быстрее и меньше памяти для чтения.
Многопоточность
lockиSemaphoreSlim?
lock— эксклюзивный, синхронный, реентерабельный;SemaphoreSlim— счётчик, поддерживаетWaitAsync, не реентерабелен.
Deadlock: как возникает?
Взаимное ожидание ресурсов; в async — блокировка
.Resultпри контексте синхронизации.