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

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

Middle · 2–4 роки досвіду

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

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

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

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

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

1

Що насправді відбувається при `await` для `Task`?

Відповідь

Компілятор переписує метод у скінченний автомат: код до await виконується синхронно, а якщо задача ще не завершена, метод одразу віддає керування виклику й звільняє потік замість блокування. Продовження відновлюється, коли задача завершиться, за замовчуванням у захопленому SynchronizationContext, тому бібліотечний код викликає ConfigureAwait(false), щоб уникнути дедлоків і зайвих перемикань контексту.

2

Як покоління GC повʼязані з патерном `IDisposable`?

Відповідь

CLR підвищує обʼєкти, що вижили, з покоління 0 до 1, потім до 2, збираючи gen 0 дешево й часто, а gen 2 — рідко, але дорого. GC звільняє лише керовану памʼять — некеровані ресурси на кшталт файлових дескрипторів чи зʼєднань з базою потребують явного очищення, для чого й існують IDisposable та фіналізатор як страховка: Dispose() звільняє їх детерміновано, а фіналізатор ловить випадок, коли викликач забув його викликати.

3

Як відстеження змін в EF Core спричиняє проблеми з продуктивністю і як цього уникнути?

Відповідь

За замовчуванням кожна сутність, завантажена через DbContext, відстежується — EF Core тримає знімок для виявлення змін під час SaveChanges(). Для списку лише на читання це чисті накладні витрати, тому для читання потрібен .AsNoTracking(). Інша класична проблема — N+1: звернення до навігаційної властивості всередині циклу без Include() робить по запиту на рядок.

4

Коли обрати Minimal APIs замість MVC-контролерів в ASP.NET Core?

Відповідь

Minimal APIs прибирають церемонію контролерів — одна лямбда app.MapGet(...) з параметрами, привʼязаними з маршруту, query чи тіла запиту, — цього достатньо для невеликого сервісу, і стартує швидше завдяки меншому використанню рефлексії. Контролери відпрацьовують своє, коли потрібні угоди model binding, валідація [ApiController], фільтри або велика поверхня API, де групування дій за ресурсом тримає код навігованим.

5

Як юніт-тестувати клас, що залежить від інших сервісів у .NET?

Відповідь

xUnit — фреймворк за замовчуванням: [Fact] для окремого випадку, [Theory] з [InlineData] для параметризованих. Залежності замінюють моками Moq: Mock<IRepository> дозволяє налаштувати значення, що повертаються, через .Setup() і перевірити виклики через .Verify(), щоб тест перевіряв клас ізольовано, а не реальну базу. Пастка — надлишок моків: тест, який просто перевіряє, що пʼять залежностей викликано у потрібному порядку, тестує налаштування моків, а не поведінку.

🦎

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

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

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

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

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

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

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