Skip to content

Вопросы на собеседовании: .NET-разработчик

100 реальных вопросов с образцовыми ответами и пояснениями для уровня Senior .NET-разработчик.

Смотреть пример резюме: .NET-разработчик

Тренировка флешкарточками

Интервальное повторение · Hunter Pass

Вопросы

system-designcapacityaspnet

Я бы сначала изолировал fulfillment как бизнес-возможность, но до выделения задал ему явный контракт и владение данными внутри монолита.

  • Определяю инварианты резервирования, упаковки и отправки и оставляю операции одной транзакции внутри границы fulfillment.
  • Другие модули прекращают напрямую писать в таблицы fulfillment и вызывают внутренний facade до его превращения в HTTP, gRPC или messaging.
  • Transactional outbox публикует события готовности заказа, а fulfillment владеет своей write model и идемпотентно потребляет события.
  • Выделение оправдано, когда отдельные worker и база докажут пятикратную ёмкость записи без межсервисных транзакций.

Зачем это спрашивают: Интервьюер оценивает bounded contexts, владение данными, порядок миграции и решение заявленной задачи масштабирования.

asyncgrpcpricing

Я бы оставил синхронными только решения, необходимые для ответа, а распространение состояния перенёс в надёжные сообщения.

  • Pricing и резерв inventory могут параллельно идти по gRPC с общим дедлайном около 450 мс, оставляя checkout время собрать результат.
  • Fraud использует синхронное быстрое решение только если без него нельзя продолжить; глубокая проверка становится pending workflow, а не ещё одним долгим hop.
  • Письмо подтверждения, аналитика и warehouse projection потребляют outbox events после commit транзакции checkout.
  • Я отклоню цепочку, где каждый сервис получает собственный timeout 600 мс, потому что задержка и вероятность отказа растут на каждом hop.

Зачем это спрашивают: Сильный ответ разделяет критичную для ответа и eventual работу и количественно бюджетирует синхронный путь.

designavailabilityaspnet

Я бы оставил request path stateless, агрессивно кэшировал read models и ограничил каждую общую зависимость.

  • Kestrel instances стоят за zone-aware load balancer, раздельно показывают readiness и liveness и сохраняют минимум 30% ёмкости после потери одной зоны.
  • CDN обслуживает публичные immutable responses, Redis хранит общие проекции товаров, а малый IMemoryCache принимает самые горячие versioned keys.
  • EF Core проецирует только нужные поля с AsNoTracking, а конкурентность соединений SQL Server ограничена и не растёт вместе с числом pods.
  • Нагрузочные тесты используют реальное распределение ключей и требуют p99 ниже 120 мс при 125 000 RPS и отключённой зоне.

Зачем это спрашивают: Интервьюер проверяет масштабирование ASP.NET Core, многоуровневое кэширование, защиту базы и запас на отказ.

endpointsrate-limitingcors

Я бы упорядочил middleware по состоянию запроса, которое каждый компонент должен установить или защитить.

  • Forwarded headers идут первыми для доверенных proxies, затем exception handling и HSTS задают правильную схему и единые ошибки до прикладной работы.
  • Routing выбирает endpoint metadata до того, как CORS, authentication, authorization и endpoint-specific rate limiting используют эти metadata.
  • Authentication предшествует authorization, а CORS запускается до формирования ответа, чтобы даже отклонённые cross-origin requests получили правильные headers.
  • Проверяю порядок integration tests для preflight, unauthenticated, forbidden, rate-limited и throwing endpoints, а не визуально.

Зачем это спрашивают: Интервьюер оценивает конкретные зависимости middleware и проверку порядка через поведение.

endpointsopenapiauth

Я бы группировал minimal APIs по возможностям и явно задавал контракт каждого endpoint при регистрации.

  • MapGroup применяет route prefixes, tags, authorization policies и общие conventions к областям вроде orders или billing.
  • TypedResults и именованные request records делают response unions и OpenAPI metadata видимыми компилятору вместо возврата произвольного IResult повсюду.
  • Endpoint filters обрабатывают повторную request validation, а middleware остаётся для pipeline-wide concerns вроде correlation и exception mapping.
  • Contract tests генерируют OpenAPI и проверяют все 180 operations на случайное удаление, новые required fields и изменённые status codes.

Зачем это спрашивают: Интервьюер проверяет, остаются ли minimal APIs структурированными и безопасными для контрактов при нетривиальном числе endpoints.

designaspnetconcurrency

Я бы стримил каждое body прямо в надёжное хранилище и отклонял слишком большие или медленные загрузки до буферизации.

  • Kestrel и reverse proxy одинаково задают лимит 2 ГБ, header timeout и minimum data rate, чтобы ограничения нельзя было обойти на другом слое.
  • Endpoint читает Request.BodyReader ограниченными сегментами и пишет в multipart upload blob storage без ToArray и binding файла целиком.
  • Semaphore ограничивает активные записи в хранилище по измеренной bandwidth, а отмена запроса прерывает multipart upload и освобождает ресурсы.
  • Load test запускает 200 потоков максимального размера и доказывает ограниченную managed memory вместо роста вместе с байтами загрузок.

Зачем это спрашивают: Интервьюер оценивает streaming ASP.NET Core, server limits, отмену и расчёт памяти.

aspnetapipromises

Я бы добавил понятие без обязательности для старых клиентов, а ломающую смену семантики провёл как миграцию.

  • Первый контракт добавляет optional deliveryPreference, а при его отсутствии сервер сохраняет прежнее поведение по умолчанию.
  • OpenAPI compatibility checks запрещают удаление, сужение типов и новые required fields в существующей версии.
  • Usage telemetry находит клиентов без поля, а инструкция миграции содержит их точный endpoint и дату последнего использования.
  • Только через 12 месяцев новая датированная версия потребует поле, а старая до удаления сохранит исходный смысл.

Зачем это спрашивают: Интервьюер проверяет аддитивную эволюцию API, семантические значения по умолчанию, telemetry и обязательное окно депрекации.

kuberneteshealth-checkssql

Я бы исключил отказ зависимостей из liveness и использовал readiness, чтобы прекратить отправку запросов в неспособные обслуживать pods.

  • Liveness проверяет только способность процесса и его внутреннего цикла двигаться, поэтому отказ SQL Server не создаёт restart storm из 80 pods.
  • Readiness может включать короткую проверку базы, если API действительно не работает без неё, с hysteresis против частого flapping endpoint.
  • Startup покрывает migrations, configuration validation или warmup, которые законно дольше обычного liveness timing.
  • Tests отключают SQL Server на 40 секунд и требуют ноль перезапусков, отсутствие трафика на unready pods и автоматическое восстановление.

Зачем это спрашивают: Интервьюер оценивает семантику orchestrator и защиту от усиления перезапусков.

validationconfigaspnet

Я бы отделил неизменные startup options от малого versioned secret, который безопасно перезагружать.

  • Endpoint, timeout и retry limits связываются со strongly typed options и вызывают ValidateOnStart, чтобы неверные значения не прошли readiness.
  • Credentials приходят из managed secret provider через IOptionsMonitor, а consumers атомарно меняют полный immutable credential snapshot.
  • Reload никогда не меняет endpoint и credential частично, а старый credential остаётся рабочим в документированном overlap window.
  • Integration tests ротируют secret под 1 000 конкурентных вызовов и проверяют отсутствие смешанной конфигурации.

Зачем это спрашивают: Интервьюер проверяет options validation, безопасную область reload, атомарную публикацию и ротацию под нагрузкой.

memory

Я бы использовал spans для slicing и parsing существующего буфера без substrings, но только после подтверждения горячего parser в allocation profile.

  • ReadOnlySpan<byte> может искать delimiters и разбирать numeric fields прямо из request buffer без временных strings.
  • Span нельзя хранить в heap или держать через await, поэтому нужные позже данные становятся owned value или Memory<byte>.
  • Возврат span в pooled buffer небезопасен после возврата этого buffer, поэтому ownership важнее заявления о zero allocations.
  • BenchmarkDotNet должен показать снижение аллокаций и рост throughput на реальном распределении headers, не только на маленьком synthetic input.

Зачем это спрашивают: Интервьюер оценивает пользу Span<T>, ограничения ref struct lifetime, владение и дисциплину измерений.

asyncmemoryci-cd

Я бы передавал owned Memory<byte> через асинхронные границы и создавал короткие spans только внутри синхронного parsing.

  • Span<byte> нельзя держать через await, а Memory<byte> можно сохранить в item этапа и нарезать без копирования.
  • Owner должен жить дольше всех 3 этапов, поэтому pooled IMemoryOwner<byte> освобождается лишь после завершения последнего consumer.
  • Этап, сохраняющий данные дольше окна владения, получает копию, потому что use-after-return corruption хуже одной измеренной аллокации.
  • Stress test независимо задерживает этапы и проверяет checksums, выявляя lifetime bugs, незаметные обычному throughput test.

Зачем это спрашивают: Интервьюер проверяет async memory lifetimes, пределы zero-copy и явное владение между этапами.

Я бы выделял на stack только небольшой фиксированный диапазон, а выше использовал pooled или heap memory.

  • Политика вроде stackalloc до 1 КБ ограничивает расход stack независимо от контролируемого атакующим input.
  • Большие buffers арендуются из ArrayPool<byte> внутри try-finally, а чувствительные bytes очищаются перед возвратом.
  • stackalloc не используется внутри loop, потому что повторные allocations остаются до выхода метода и могут исчерпать stack.
  • Benchmarks включают recursion depth и конкурентную request load, а не только наносекунды отдельного метода.

Зачем это спрашивают: Интервьюер оценивает ёмкость stack, ограничения input, pooling fallback и реалистичный scope benchmark.

serialization

Я бы пулил большие повторно используемые buffers, если profiling связывает их с Gen 2 или LOH pressure, а ownership остаётся простым.

  • ArrayPool<byte> может вернуть больший грязный array, поэтому callers отслеживают valid length и очищают customer data перед возвратом.
  • Каждая аренда имеет return в finally, и ни одна async operation не сохраняет array после возврата.
  • Ограничиваю retained bucket sizes или использую custom pool, если редкие payloads по 20 МБ удерживают лишнюю память.
  • Решение требует снижения allocation rate и GC pause time при том же throughput, а не только более быстрого microbenchmark.

Зачем это спрашивают: Интервьюер проверяет пользу pooling, безопасность данных, ownership, цену retention и production evidence.

monitoringapitypes

Я бы убрал object boundary на измеренном горячем пути через generics или span-based formatting.

  • Generic method с constrained formatting сохраняет value types без boxing, а TryFormat пишет прямо в destination span.
  • Проверяю IL или allocation profiles для подтверждения boxing, а не считаю, что каждый interface call выделяет память.
  • Structs остаются маленькими, immutable и value-like; превращение крупных mutable domain objects в structs добавит copying и semantic risk.
  • Benchmark сообщает operations per second и allocated bytes, а существующий object API сохраняется вне hot formatter при необходимости совместимости.

Зачем это спрашивают: Интервьюер оценивает механику boxing, constrained generics, компромиссы structs и ограниченную оптимизацию.

experimentsdesign

Я бы тестировал репрезентативные payloads и аллокации в контролируемом harness, а победителя проверил на end-to-end path.

  • Suite покрывает маленькие, median, large, valid и malformed inputs, а текущий parser отмечен как Baseline.
  • MemoryDiagnoser показывает allocated bytes и GC counts, а warmup и несколько iterations снижают шум JIT и timer.
  • Inputs реально потребляются, чтобы dead-code elimination не удалил parsing, и каждый benchmark использует одинаковые runtime и deployment architecture.
  • Выигрыш microbenchmark в 25 нс важен лишь при измеренном bottleneck parser и заметном улучшении throughput или CPU сервиса.

Зачем это спрашивают: Интервьюер проверяет валидность benchmark и связь micro-results с production economics.

api

Эти buffers обычно попадают в Large Object Heap, поэтому постоянный churn может вызвать дорогие Gen 2 collections и нарушить цель пауз.

  • Gen 0 оптимизирован для короткоживущих малых объектов, но LOH objects собираются вместе с Gen 2 даже при короткой жизни.
  • При 8 000 allocations в секунду сначала применяю streaming, сокращение или pooling 90 КБ buffer, а не подстраиваю GC под лишний churn.
  • dotnet-counters и trace должны связать allocation rate, LOH size, Gen 2 frequency и pause duration с request load.
  • Pooling принимается только с bounded retention и безопасным ownership, потому что большой pool может заменить паузы resident memory.

Зачем это спрашивают: Интервьюер оценивает generational GC, последствие порога LOH и снижение измеренных аллокаций.

Я бы предпочёл строго рассчитанный NoGCRegion, только если allocation ceiling на 400 мс измерен и соблюдаем.

  • TryStartNoGCRegion получает достаточно места под известный allocation budget, а код обрабатывает невозможность входа вместо предположения о гарантии.
  • EndNoGCRegion запускается в finally, а monitoring фиксирует неожиданный GC из-за превышения budget.
  • SustainedLowLatency шире и может откладывать intrusive collections ценой роста heap, поэтому подходит более длинному ограниченному периоду с менее предсказуемыми allocations.
  • Сначала уменьшаю allocations, потому что latency modes не делают тяжёлый по аллокациям путь бесплатным.

Зачем это спрашивают: Интервьюер проверяет точную семантику latency modes, memory budgeting и fallback behavior.

validationcontainersaspnet

Я бы сравнил оба режима в реальном container, потому что server GC может обменять дополнительные heaps и memory на throughput.

  • Server GC использует dedicated collection threads и несколько heaps, что помогает устойчивой параллельной нагрузке, но заметно расходует лимит 768 МБ.
  • Workstation GC может лучше подойти малому ограниченному process при умеренных request concurrency и live set.
  • Test сравнивает throughput, p99 pause, GC CPU, heap size и working set при одинаковых load и CPU quota.
  • До выбора быстрого результата оставляю non-GC headroom на thread stacks, native buffers, JIT code и libraries.

Зачем это спрашивают: Интервьюер оценивает компромиссы GC mode в containers вместо слепого выбора server defaults.

memorydata-structures

Я бы бюджетировал весь process, а не приравнивал managed heap size к памяти container.

  • Thread stacks, native HTTP buffers, compression, JIT code, mapped files и allocator fragmentation могут объяснить оставшиеся 182 МБ.
  • GC heap hard limit оставляет измеренный native headroom, например 300 МБ только после наблюдения peak non-GC use под реальным трафиком.
  • Уменьшение heap повышает collection frequency, поэтому до rollout сравниваю p99 latency, GC CPU и allocation rate.
  • Лимиты pod и heap тестируются на maximum concurrency и больших payloads с safety margin, а не по average working set.

Зачем это спрашивают: Интервьюер проверяет учёт памяти container, цену heap hard limit и проверку ёмкости.

cachingapiasync

Я бы рассмотрел ValueTask<T> только после доказательства существенной цены Task allocation на этом объёме и сохранил single-consumption semantics.

  • Синхронный hit может вернуть значение без нового Task<T>, а 3% асинхронных misses оборачивают настоящую operation.
  • ValueTask<T> является более крупным struct и обычно await один раз, не кэшируется, не хранится широко и не потребляется повторно.
  • Если реализация уже возвращает cached Task<T>, ValueTask может добавить сложность без удаления allocations.
  • Benchmark должен включать callers, потому что copying, AsTask conversions и async state machines могут съесть локальный выигрыш.

Зачем это спрашивают: Интервьюер оценивает обоснованность ValueTask и понимание ограничений его использования.

Закрытые вопросы

  • 21

    В горячем ASP.NET Core handler есть 12 мелких async wrappers, создающих 1,5 КБ аллокаций на запрос; что генерирует compiler и что вы оптимизируете?

    asyncoptimizationaspnet
  • 22

    Общую library используют ASP.NET Core и WPF desktop client; где нужен ConfigureAwait(false), учитывая отсутствие request SynchronizationContext в ASP.NET Core?

    aspnetconfigasync
  • 23

    У ASP.NET Core request есть server deadline 700 мс, отмена клиентом и вызовы SQL Server и HttpClient; спроектируйте распространение cancellation.

    designresilienceaspnet
  • 24

    Endpoint возвращает до 5 миллионов audit rows, а clients обычно останавливаются после первых 10 000; выберите Task<List<T>> или IAsyncEnumerable<T>.

    endpointsasync
  • 25

    Компонент при cleanup отправляет encrypted buffer 16 МБ в remote storage; должен он реализовать IDisposable, IAsyncDisposable или оба?

    componentsencryptionresource-management
  • 26

    Worker принимает bursts по 50 000 items, каждый retained item занимает 8 КБ, а consumers обрабатывают 5 000 items в секунду; настройте Channel без превышения 160 МБ queued payloads.

    configdata-structures
  • 27

    При 2 000 concurrent requests сервис вызывает Task.Result вокруг asynchronous SQL и HTTP APIs; оцените риск масштабирования и перепроектируйте путь.

    asyncconcurrencyhttp
  • 28

    Нужно обработать 10 000 независимых HTTP items, но downstream допускает 200 одновременных вызовов и 1 000 requests per second; настройте Parallel.ForEachAsync.

    concurrencyhttpconfig
  • 29

    Сервис защищает изменение in-memory state длительностью 100 микросекунд и отдельно ограничивает 40 конкурентных вызовов зависимости; выберите lock, SemaphoreSlim или оба.

    memorydependenciesconcurrency
  • 30

    State flag ровно один раз переходит из Pending в Running, а completion вместе меняет status, timestamp и result; где использовать Interlocked, а где lock?

  • 31

    Singleton каждую минуту перезагружает routing table размером 5 МБ, пока 200 threads читают её без locks; как безопасно публиковать обновления?

    concurrency
  • 32

    ConcurrentDictionary.GetOrAdd создаёт remote client стоимостью $0,05, а при contention factory запускается 30 раз для одного key; как предотвратить повторные side effects?

    concurrency
  • 33

    Read-heavy authorization cache содержит 50 000 rules, обслуживает 100 000 lookups в секунду и получает 10 updates в минуту; выберите immutable snapshots или concurrent mutable collection.

    concurrencyimmutabilityauth
  • 34

    Назначьте DI lifetimes для ASP.NET Core request с stateless formatter, DbContext, tenant context и thread-safe metadata cache, общей для всех requests.

    ormcachingconcurrency
  • 35

    Constructor singleton pricing cache получает scoped DbContext; service проходит development tests, но падает на scope validation в production mode. Исправьте captive dependency.

    pricingcachingdependencies
  • 36

    Singleton BackgroundService обрабатывает 500 messages в секунду и требует DbContext и scoped tenant resolver на каждое сообщение; определите ownership scope.

    ownershipconcurrencyorm
  • 37

    Request разрешает 3 disposable transient services и один scoped DbContext; кто освобождает каждый и что меняется при ручном создании одного transient?

    orm
  • 38

    У сервиса 4 payment providers, выбираемых по merchant, и нужны decorators для metrics и retries; справится ли встроенный .NET container без стороннего container?

    containersmonitoringdependencies
  • 39

    EF Core endpoint читает 20 000 orders, обновляет 5 из них и сейчас tracks весь результат; выберите tracking, no-tracking или identity resolution.

    ormendpoints
  • 40

    EF Core endpoint возвращает 100 orders по 8 lines, но выполняет 101 SQL statement и не укладывается в p95 150 мс; измените форму без over-fetching.

    sqlormendpoints
  • 41

    EF Core query делает Include двух collections по 40 и 60 rows на parent, размножая одного parent в 2 400 joined rows; выберите single или split query.

    queriesorm
  • 42

    Один EF Core lookup вызывается 80 000 раз в секунду, возвращает одну row по key и уже использует правильный index; поможет ли compiled query?

    indexesqueriesorm
  • 43

    Multi-tenant API использует DbContext pooling, и 0,1% requests после reuse context читают предыдущего tenant; перепроектируйте хранение tenant state.

    queriesormapi
  • 44

    EF Core update inventory может конфликтовать, transient SQL retries включены, а 50 000 rows требуют одной смены status; спроектируйте concurrency, transaction и bulk update.

    sqltransactionsorm
  • 45

    У protobuf contract 30 consumers на mixed versions 9 месяцев; безопасно добавьте delivery window и удалите старое enum value.

  • 46

    Server-streaming gRPC method может отправить 1 миллион records, имеет client deadline 30 секунд, а некоторые clients читают в 100 раз медленнее остальных; спроектируйте call.

    designstreaminggrpc
  • 47

    Internal pricing API должен обслуживать 200 000 calls в секунду с payloads по 4 КБ, а browsers и partners нужны те же данные; выберите gRPC, JSON HTTP или оба.

    httpgrpcpricing
  • 48

    Reflection-based serializer добавляет 120 мс к startup на 300 serverless .NET instances; будете ли вы создавать incremental source generator?

    serializationgenerators
  • 49

    Публикация с trimming уменьшает image сервиса на 35%, но plugins из assembly scanning исчезают; сделайте приложение trimming-safe.

  • 50

    Малый ASP.NET Core API должен cold-start быстрее 100 мс и использовать меньше 120 МБ, но зависит от dynamic proxies и reflection-heavy JSON; выберете Native AOT?

    decision-makingapiaspnet
  • 51

    Heap .NET API растёт с 1,2 до 7,8 ГБ за 6 часов, число Gen 2 collections увеличивается с 2 до 40 в час, а pods перезапускаются на 9 ГБ; как найти удерживаемые objects?

    data-structures
  • 52

    Image API выделяет buffers от 120 КБ до 4 МБ, LOH fragmentation достигает 48%, а p99 GC pause растёт с 35 до 620 мс под 3 000 RPS; что вы измените?

    api
  • 53

    После переноса сервиса в containers с 1 CPU p99 stop-the-world вырос с 20 до 280 мс при включённом server GC и неизменном throughput; как решить, менять ли GC mode?

    throughputcontainers
  • 54

    GC pauses превышают 900 мс каждые 4 минуты, live set равен 6 ГБ в process на 10 ГБ, а SustainedLowLatency уже включён; как вы реагируете?

    concurrency
  • 55

    Service держит только 2 ГБ managed heap, но container на 6 ГБ получает OOM kill через 90 минут; 25 000 objects ждут finalization. Как расследовать?

    containersdata-structures
  • 56

    High-throughput socket service показывает 3 ГБ свободного места внутри managed segments, но не может выделить contiguous buffers по 2 МБ; GC traces находят 180 000 pinned objects.

    throughput
  • 57

    Working set растёт на 400 МБ в час при стабильном GC heap 900 МБ; release добавил native compression library и memory-mapped files. Какие evidence вы собираете?

    memorydata-structures
  • 58

    IMemoryCache растёт с 300 МБ до 5 ГБ за 2 часа из-за 2 миллионов tenant keys с TTL 24 часа; трафик не выдержит полного cache flush.

    caching
  • 59

    WPF client зависает, когда button handler вызывает LoadAsync().Result; LoadAsync ожидает HttpClient, а continuation нужен UI SynchronizationContext. Разберите deadlock и исправление.

    asynclocking
  • 60

    Legacy ASP.NET application зависает на 400 concurrent requests после замены await на .Wait() в helper; CPU равен 18%, а request threads продолжают расти.

    asyncconcurrencyaspnet
  • 61

    ASP.NET Core API получает 6 000 RPS, ThreadPool queue length растёт с 0 до 90 000, CPU остаётся 45%, а p99 достигает 12 секунд; как доказать starvation?

    concurrencydata-structuresapi
  • 62

    Разработчик обернул CPU-heavy PDF rendering в Task.Run внутри каждого request; при 500 concurrent requests CPU достигает 100%, а latency превышает 30 секунд. Что изменить?

    concurrencyasynclatency
  • 63

    Timer callback использует async void, падает дважды в день и иногда завершает process без correlated job ID; перепроектируйте его.

    asyncconcurrencycallbacks
  • 64

    Clients отменяют 35% report requests через 2 секунды, но SQL queries работают 40 секунд и занимают 120 database sessions; как найти и исправить потерю cancellation?

    sqldatabasequeries
  • 65

    SemaphoreSlim ограничивает external API числом 50 calls, но после нескольких timeouts CurrentCount навсегда падает до 0 и 4 000 requests ждут; найдите bug и восстановите service.

    resilienceapi
  • 66

    Unbounded Channel вырос до 12 миллионов messages и 18 ГБ после замедления consumers с 80 000 до 25 000 items в секунду; producer не может потерять принятую работу.

  • 67

    p99 read endpoint EF Core растёт со 180 мс до 1,9 секунды после начала tracking 35 000 entities на request; database time остаётся 90 мс.

    databaseormendpoints
  • 68

    Production endpoint на 200 orders выполняет 201 SQL command, поднимает SQL CPU с 30% до 88%, а p99 достигает 4,2 секунды; как доказать и убрать N+1?

    sqln+1endpoints
  • 69

    Добавление двух collection Includes меняет результат EF Core query с 12 000 до 2,8 миллиона rows, а p99 с 300 мс до 9 секунд; выберите production fix.

    queriesorm
  • 70

    Команда внедряет EF.CompileAsyncQuery для исправления lookup с p99 1,3 секунды; profiling показывает 0,4 мс EF compilation и 1,2 секунды SQL. Что вы решаете?

    sqldeploymentprofiling
  • 71

    При 2 500 RPS waits SqlClient pool достигают 8 секунд, все 200 connections заняты, а request timeouts превышают 35%; как отличить slow SQL от leaked connections?

    sqlresilience
  • 72

    Singleton repository случайно удерживает один DbContext; tracked entities растут до 700 000, memory увеличивается на 4 ГБ, а между requests появляются stale reads.

    ormmemory
  • 73

    EF Core transaction остаётся открытой во время трёхсекундного payment API call; под нагрузкой lock waits достигают 18 секунд, а 600 requests стоят за 40 rows.

    transactionsormapi
  • 74

    SQL Server сообщает 900 deadlocks в час после того, как два EF Core workflows стали обновлять Account и Ledger в обратном порядке; как исправить и безопасно делать retry?

    sqllockingorm
  • 75

    Один parameterized EF Core query занимает 40 мс для большинства tenants и 11 секунд для крупнейшего tenant после изменения plan cache; как исследовать parameter sensitivity?

    queriesormcaching
  • 76

    Batch использует ExecuteUpdate для изменения 80 000 rows, но long-lived DbContext возвращает старые statuses и позже перезаписывает часть updates; как исправить flow?

    ormbatch
  • 77

    ASP.NET Core release поднимает p99 с 220 мс до 1,8 секунды только выше 4 000 RPS, при этом CPU, SQL duration и error rate выглядят нормально; как использовать dotnet-trace?

    sqlaspnet
  • 78

    CPU вырос с 35% до 92% после включения feature flag, но request count не изменился; спроектируйте low-risk сравнение profiling .NET.

    designprofilingfeature-flags
  • 79

    Lock contention time достигает 42%, а p99 равен 3 секундам в cache на 96 cores; hottest lock защищает один Dictionary по 70 микросекунд на request.

    caching
  • 80

    Новый validation path бросает 250 000 exceptions в минуту для ожидаемых input misses, повышая CPU на 28% и allocations на 14 ГБ в минуту.

    validationerror-handling
  • 81

    JSON response serialization потребляет 46% CPU и создаёт 9 ГБ allocations в минуту при 20 000 RPS; что вы профилируете и меняете первым?

    serialization
  • 82

    Outbound calls начинают падать на 7 000 RPS; hosts показывают 120 000 TIME_WAIT sockets, а код создаёт новый HttpClient на request. Как восстановиться без вечного stale DNS?

    dns
  • 83

    gRPC server-streaming endpoint удерживает 6 ГБ, когда 300 clients читают по 50 КБ/с, а producers генерируют по 2 МБ/с на client; где сломан backpressure?

    endpointsgrpcbackpressure
  • 84

    Kestrel active requests остаются на 10 000, application queue time достигает 6 секунд, а dependency latency равна лишь 80 мс; как локализовать delay?

    latencydependenciesdata-structures
  • 85

    Polly, HttpClient и service mesh разрешают исходный payment call плюс 2 retries каждый; во время outage 1 000 logical payments могут создать до 27 000 attempts. Что изменить?

    service-mesh
  • 86

    BackgroundService принимает 40 000 jobs в memory, deployment отправляет SIGTERM с grace period 30 секунд, и на каждом release исчезают 6 000 принятых jobs.

    memorydeployment
  • 87

    Native AOT canary стартует за 70 мс вместо 480 мс, но возвращает 500 для 3% routes с reflection-created validators; продолжите rollout?

    validationdeployment-strategies
  • 88

    Incremental source generator увеличивает clean build с 90 секунд до 11 минут в 200 projects; incremental builds также перезапускают большинство stages после изменения одного file.

    generators
  • 89

    Singleton BackgroundService захватывает scoped SDK client и DbContext; через 8 часов connections растут с 40 до 900, а tenant data устаревают.

    orm
  • 90

    Runtime configuration reload меняет retry count с 1 на 8 до прихода нового timeout 200 мс, вызывая пятиминутный traffic spike; как сделать reload атомарным?

    resilienceconfigconcurrency
  • 91

    Middle .NET engineer присылает handler с Task.Run вокруг EF Core, двумя .Result и без CancellationToken за два дня до запуска на 5 000 RPS; как вы проводите review?

    ormresilienceasync
  • 92

    Junior engineer исправил memory issue вызовом GC.Collect после каждых 500 requests; p99 кратко улучшился, но throughput упал на 38%. Как вы его менторите?

    throughputmemorymentoring
  • 93

    Engineer отвечает на pool exhaustion увеличением Max Pool Size со 100 до 1 000; SQL CPU уже 92%, а 600 commands заблокированы. Какую обратную связь дать?

    zero-to-onesqlfeedback
  • 94

    Способный engineer постоянно использует широкие Include chains в EF Core; последний endpoint возвращает 3 миллиона rows на 500 parents и промахивается по p99 на 7 секунд. Как его обучить?

    ormendpoints
  • 95

    На review senior engineer утверждает, что ConfigureAwait(false) обязателен после каждого await в ASP.NET Core service, иначе performance упадёт на 20%; как разрешить спор?

    asyncperformanceconfig
  • 96

    BackgroundService вашего mentee потерял 14 000 in-memory jobs во время deployment из-за fire-and-forget Tasks; как провести follow-up?

    memorydeployment
  • 97

    Два .NET engineers спорят между lock и ConcurrentDictionary для cache с 5 updates в минуту и 200 000 reads в секунду; спор блокирует review 4 дня.

    conflictcachingconcurrency
  • 98

    Incremental source generator middle engineer работает, но добавляет 6 минут к каждому build из-за GetSymbolsWithName по всей compilation для каждого syntax node; как направить rewrite?

    generators
  • 99

    Engineer, расследующий GC pauses 800 мс, хочет изменить 12 runtime knobs сразу до capture trace; release через 3 дня. Как перенаправить работу?

  • 100

    Staff engineer одобряет workaround с singleton DbContext, сокращающий allocations на 2%, но вызывающий 0,4% cross-request stale reads; вы не его manager. Что делать?

    orm