Вопросы на собеседовании: .NET-разработчик
100 реальных вопросов с образцовыми ответами и пояснениями для уровня Senior .NET-разработчик.
Смотреть пример резюме: .NET-разработчик →Тренировка флешкарточками
Интервальное повторение · Hunter Pass
Вопросы
Я бы сначала изолировал fulfillment как бизнес-возможность, но до выделения задал ему явный контракт и владение данными внутри монолита.
- Определяю инварианты резервирования, упаковки и отправки и оставляю операции одной транзакции внутри границы fulfillment.
- Другие модули прекращают напрямую писать в таблицы fulfillment и вызывают внутренний facade до его превращения в HTTP, gRPC или messaging.
- Transactional outbox публикует события готовности заказа, а fulfillment владеет своей write model и идемпотентно потребляет события.
- Выделение оправдано, когда отдельные worker и база докажут пятикратную ёмкость записи без межсервисных транзакций.
Зачем это спрашивают: Интервьюер оценивает bounded contexts, владение данными, порядок миграции и решение заявленной задачи масштабирования.
Я бы оставил синхронными только решения, необходимые для ответа, а распространение состояния перенёс в надёжные сообщения.
- Pricing и резерв inventory могут параллельно идти по gRPC с общим дедлайном около 450 мс, оставляя checkout время собрать результат.
- Fraud использует синхронное быстрое решение только если без него нельзя продолжить; глубокая проверка становится pending workflow, а не ещё одним долгим hop.
- Письмо подтверждения, аналитика и warehouse projection потребляют outbox events после commit транзакции checkout.
- Я отклоню цепочку, где каждый сервис получает собственный timeout 600 мс, потому что задержка и вероятность отказа растут на каждом hop.
Зачем это спрашивают: Сильный ответ разделяет критичную для ответа и eventual работу и количественно бюджетирует синхронный путь.
Я бы оставил 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, многоуровневое кэширование, защиту базы и запас на отказ.
Я бы упорядочил 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 и проверку порядка через поведение.
Я бы группировал 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.
Я бы стримил каждое 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, отмену и расчёт памяти.
Я бы добавил понятие без обязательности для старых клиентов, а ломающую смену семантики провёл как миграцию.
- Первый контракт добавляет optional deliveryPreference, а при его отсутствии сервер сохраняет прежнее поведение по умолчанию.
- OpenAPI compatibility checks запрещают удаление, сужение типов и новые required fields в существующей версии.
- Usage telemetry находит клиентов без поля, а инструкция миграции содержит их точный endpoint и дату последнего использования.
- Только через 12 месяцев новая датированная версия потребует поле, а старая до удаления сохранит исходный смысл.
Зачем это спрашивают: Интервьюер проверяет аддитивную эволюцию API, семантические значения по умолчанию, telemetry и обязательное окно депрекации.
Я бы исключил отказ зависимостей из 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 и защиту от усиления перезапусков.
Я бы отделил неизменные 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, атомарную публикацию и ротацию под нагрузкой.
Я бы использовал 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, владение и дисциплину измерений.
Я бы передавал 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.
Я бы пулил большие повторно используемые 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.
Я бы убрал 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 и ограниченную оптимизацию.
Я бы тестировал репрезентативные 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.
Эти 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.
Я бы сравнил оба режима в реальном 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.
Я бы бюджетировал весь 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 и проверку ёмкости.
Я бы рассмотрел 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