Підготовка до співбесіди · IT та розробка

Питання на співбесіді .NET-розробника

Питання на співбесіді .NET-розробника: C#, async/await, LINQ, ASP.NET Core, Entity Framework Core, тестування й архітектура в сучасному .NET. Junior, Middle і Senior — з прикладами відповідей.

Популярні теми

Junior C#

Чим відрізняються типи-значення і типи-посилання?

Приклад відповіді

Типи-значення (int, struct, DateTime) зберігають дані безпосередньо і копіюються при присвоєнні. Типи-посилання (class, string, масиви) зберігають посилання на об'єкт у керованій купі — кілька змінних можуть вказувати на один об'єкт.

Через це зміна поля структури в копії не впливає на оригінал, а зміна поля класу — впливає. string хоч і тип-посилання, але незмінний.

Junior C#

Що таке record і чим він відрізняється від класу?

Приклад відповіді

record — тип для незмінних даних із порівнянням за значенням: два записи з однаковими полями рівні. Компілятор генерує Equals, GetHashCode, ToString і підтримку with для створення зміненої копії.

Звичайний клас порівнюється за посиланням. Записи зручні для DTO, повідомлень і value objects.

Junior C#

Навіщо nullable reference types?

Приклад відповіді

Режим <Nullable>enable</Nullable> змушує явно позначати, чи може посилання бути null (string?), а компілятор попереджає про можливий NullReferenceException.

Це ловить велику частину помилок ще до запуску. У нових проєктах режим увімкнено за замовчуванням, і попередження варто сприймати серйозно, а не глушити оператором !.

Junior ASP.NET Core

Що таке Dependency Injection в ASP.NET Core?

Приклад відповіді

Залежності реєструють у контейнері, а фреймворк сам передає їх у конструктори контролерів і сервісів. Є три тривалості життя:

  • Transient — новий екземпляр щоразу;
  • Scoped — один на HTTP-запит (наприклад, DbContext);
  • Singleton — один на весь застосунок.

Типова помилка — впровадити scoped-сервіс у singleton: він житиме вічно і може тримати застарілі дані.

Middle Асинхронність

Чому не можна викликати .Result або .Wait() в асинхронному коді?

Приклад відповіді

Блокуюче очікування займає потік, поки задача виконується, а в деяких контекстах (старий ASP.NET, WinForms, WPF) призводить до дедлоку: задача чекає повернення в зайнятий потік.

В ASP.NET Core дедлоку немає, але блокування вичерпує пул потоків під навантаженням. Правило — async до кінця ланцюжка, плюс передача CancellationToken, щоб скасовувати роботу при закритті запиту.

Middle EF Core

Як оптимізувати запити Entity Framework Core?

Приклад відповіді

Основні прийоми:

  • AsNoTracking() для запитів лише на читання;
  • проєкції через Select у DTO замість завантаження цілих сутностей;
  • Include для потрібних зв'язків, щоб уникнути N+1, і AsSplitQuery() для великих колекцій;
  • індекси на полях фільтрації;
  • ExecuteUpdate / ExecuteDelete для масових змін без завантаження в пам'ять.

Дивитися згенерований SQL через логування або ToQueryString().

Middle C#

Чим IEnumerable відрізняється від IQueryable?

Приклад відповіді

IEnumerable виконує LINQ-операції в пам'яті застосунку. IQueryable будує дерево виразів, яке провайдер (EF Core) перетворює на SQL і виконує в базі.

Якщо передчасно перетворити запит на IEnumerable або викликати ToList(), фільтрація відбудеться в пам'яті після завантаження всієї таблиці. Тому фільтри й пагінацію додають до виконання запиту.

Middle ASP.NET Core

Як працює pipeline middleware в ASP.NET Core?

Приклад відповіді

Кожен middleware обробляє запит і вирішує, передати його далі через next() чи завершити. Порядок реєстрації в Program.cs визначає порядок виконання: обробка винятків, HTTPS, статика, маршрутизація, автентифікація, авторизація, ендпоінти.

Неправильний порядок — часта помилка: наприклад, UseAuthorization до UseAuthentication не бачитиме користувача.

Senior Архітектура

Як ви підходите до Clean Architecture в .NET і де її межі доцільності?

Приклад відповіді

Ідея — домен у центрі без залежностей від інфраструктури, а EF Core, зовнішні API й UI — на краях. Це спрощує тестування й заміну інфраструктури.

Але для невеликих сервісів повна структура з десятком проєктів, репозиторіями поверх EF Core і MediatR на кожну дію — надмірна. Альтернатива — vertical slice architecture: код організовано за функціями. Добра відповідь показує, що ви обираєте структуру під розмір і складність домену.

Senior Архітектура

Як забезпечити спостережуваність .NET-сервісу в продакшні?

Приклад відповіді

Три складники: структуровані логи (Serilog або вбудований ILogger з JSON), метрики й трасування. У сучасному .NET усе це стандартизовано через OpenTelemetry, а .NET Aspire спрощує локальну розробку з дашбордом телеметрії.

Важливо корелювати логи з трасуванням за trace ID, мати health checks для оркестратора й алерти на p95/p99 затримки та частку помилок, а не лише на падіння сервісу.

Senior Асинхронність

Що таке ValueTask і коли його використовувати?

Приклад відповіді

ValueTask — структура, яка дозволяє уникнути алокації Task, коли результат часто доступний синхронно (наприклад, із кешу). Це важливо в гарячих шляхах із мільйонами викликів.

Обмеження: ValueTask не можна чекати двічі чи кешувати. Для звичайного бізнес-коду Task простіший і безпечніший — ValueTask варто обирати після вимірювань.

Senior EF Core

Як обробляти конкурентні оновлення одного запису?

Приклад відповіді

Оптимістична конкурентність: токен конкурентності (rowversion у SQL Server або xmin у PostgreSQL). Якщо запис змінився після читання, EF Core кине DbUpdateConcurrencyException, і можна повторити операцію або показати конфлікт користувачу.

Песимістичне блокування (SELECT ... FOR UPDATE) використовують, коли конфлікти часті й дорогі, наприклад при резервуванні обмежених ресурсів.

Типові помилки кандидатів

  • Блокувати асинхронний код через `.Result` і не передавати CancellationToken.
  • Завантажувати цілі таблиці через EF Core і фільтрувати в пам'яті.
  • Не розуміти тривалості життя сервісів у DI.
  • Будувати Clean Architecture з десятком шарів для простого CRUD.
  • Не знати, що змінилося в .NET після .NET Framework 4.x.

Як підготуватися

  • Повторіть async/await, LINQ та різницю IEnumerable і IQueryable.
  • Будьте готові пояснити порядок middleware в ASP.NET Core.
  • Перегляньте нововведення останньої LTS-версії .NET і C#.
  • Підготуйте приклад оптимізації EF Core-запиту з SQL до і після.
  • Розкажіть, як ви налаштовували логування й моніторинг у продакшні.

Актуальні вакансії: .NET Developer

Схожі професії

Перевірте знання перед співбесідою

Випадкові питання, таймер на кожну відповідь і розбір помилок наприкінці. Можна пройти кілька разів — питання щоразу інші.