P
prepair.app
Пройти інтерв'ю →
EnglishУкраїнськаРусскийDeutsch
🟣

Senior .NET Backend DeveloperПитання на співбесіді .NET

Senior · 5+ років досвіду

Співбесіда з .NET іде на двох рівнях: сама мова C# і рантайм під нею — CLR, збирач сміття, те, як насправді працює async/await, — а далі переходить до ASP.NET Core та Entity Framework Core, де живе більшість прикладних питань. Нижче питання, які ставлять найчастіше, кожне з еталонною відповіддю. Senior: архітектуру, трейд-офи, менторство та прийняття рішень.

Спробувати — без реєстрації
Готуємо питання…

Теми для підготовки

Типи C#, LINQ і nullable reference types
Async/await і модель Task
CLR, JIT і збирання сміття
ASP.NET Core: middleware і dependency injection
Entity Framework Core і продуктивність запитів
Тестування на xUnit/Moq, Docker і деплой у хмару

5 питань рівня Senior з відповідями

1

Чим відрізняються workstation і server GC і коли їх налаштовувати?

Відповідь

Workstation GC виконує збирання на потоці, який їх викликав, і налаштований на низькі паузи для навантаження, близького до UI; Server GC піднімає купу і потік на ядро, орієнтований на пропускну здатність і є замовчуванням для ASP.NET Core в більшості сценаріїв хостингу. Concurrent (фоновий) GC дозволяє збиранням gen 2 йти паралельно із застосунком ціною частини пропускної здатності. За dotnet-counters і dotnet-trace йдуть дивитися частоту збирань і паузи, перш ніж чіпати будь-яке налаштування, — сліпе тюнінгування міняє одну проблему на гіршу.

2

Чим Native AOT жертвує порівняно зі стандартною JIT-моделлю деплою?

Відповідь

Native AOT компілює заздалегідь у самодостатній нативний виконуваний файл — без прогріву JIT, майже миттєвий старт, менший розмір, що важливо для контейнерів, які масштабуються до нуля, або функцій, де холодний старт — ключова метрика. Плата в тому, що рефлексія в рантаймі, динамічна генерація коду і деякі сторонні бібліотеки, побудовані навколо семантики JIT, або ламаються, або потребують явних анотацій для trimming, а збірка стає платформозалежною. Це виправдано для чутливого до затримок сервісу з відомим, сумісним з AOT деревом залежностей, а не за замовчуванням.

3

Як ви підходите до контейнеризації та деплою сервісу на ASP.NET Core у продакшн?

Відповідь

Багатоетапний Dockerfile збирає в SDK-образі, публікує і копіює лише результат у runtime-образ ASP.NET, що помітно скорочує розмір образу і прибирає SDK з поверхні атаки. Конфігурація надходить зі змінних оточення і менеджера секретів — Azure Key Vault, AWS Secrets Manager, — ніколи не зашита в образ. У продакшні важливіші за сам Dockerfile — graceful shutdown через IHostApplicationLifetime, health-check ендпоінти для оркестратора і структуровані логи, що відправляються туди, де їх можна шукати, бо docker logs у мертвого контейнера — не стратегія налагодження.

4

Джуніор у вашій команді викотив сервіс, який проходить усі тести, але падає за таймаутом під продакшн-навантаженням. Як ви ведете розслідування?

Відповідь

Починають з того, чим продакшн відрізняється від тестів, — зазвичай це конкурентність і обсяг даних, які однопотоковий прогін xUnit за замовчуванням повністю приховує. Беруть dotnet-trace або APM-дані замість здогадок, бо «схоже на базу» — так втрачають години; голодування пулу потоків через блокувальний виклик асинхронного коду (.Result чи .Wait() усередині запиту) виглядає ідентично повільному запиту, поки не подивишся насправді. Після фіксу цінніше перетворити це на те, що команда може перевіряти автоматично, — правило аналізатора чи пункт чек-листа код-рев'ю, — щоб такий клас багів не викотився вдруге.

5

Як ви оцінюєте, чи варто переносити legacy-застосунок на .NET Framework на сучасний .NET?

Відповідь

Починають з того, що реально заважає — хостинг лише під Windows, бібліотека, що вийшла з підтримки, або справжня стеля продуктивності, — бо міграція заради міграції спалює місяці, не рухаючи продукт вперед. .NET Framework і сучасний .NET розходяться найсильніше навколо Web Forms, WCF і деяких бібліотек, щільно завʼязаних на рефлексію, — жодна з них не має чистої заміни один-в-один, тому реальна вартість у інвентаризації саме цих місць, а не в основній масі звичайного ASP.NET MVC/Web API коду. Інкрементальний шлях — старе і нове працюють поруч за реверс-проксі, міграція маршрут за маршрутом — постійно приносить цінність замість заморожування команди на багатоквартальному переписуванні без результату до самого кінця.

🦎

Прочитати відповіді недостатньо

На співбесіді ти говориш вголос під тиском. Кем поставить ті самі питання, оцінить кожну відповідь і покаже, що саме підтягнути.

Пройти інтерв'ю Senior .NET Backend Developer →
Безкоштовно · 3 інтерв'ю на місяць

Інші рівні — .NET Backend Developer

Junior .NET Backend DeveloperMiddle .NET Backend DeveloperУсі питання .NET Backend Developer

Інші спеціалізації

🔍Senior QA Manual🤖Senior QA AutomationSenior Java Backend🐍Senior Python Backend🐘Senior PHP Backend🦫Senior Go Backend🟢Senior Node.js Backend💎Senior Ruby on Rails🔷Senior C++🟨Senior JavaScript