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

Автор: Aaron Cao · Оновлено

Яких питань про .NET очікувати на співбесіді?
Очікуйте питань про середовище виконання (CLR, збирання сміття, типи-значення й посилальні типи), мову (async і await, LINQ, узагальнення, записи), фреймворки (проміжне ПЗ і впровадження залежностей в ASP.NET Core, EF Core), а також ситуаційних завдань, як-от витік пам’яті в довготривалій службі або повільна кінцева точка API. Інтерв’юери оцінюють хід міркувань.

Очікуйте питань про середовище виконання (CLR, збирання сміття, типи-значення й посилальні типи), мову (async і await, LINQ, узагальнення, записи), фреймворки (проміжне ПЗ і впровадження залежностей в ASP.NET Core, EF Core), а також ситуаційних завдань, як-от витік пам’яті в довготривалій службі або повільна кінцева точка API. Інтерв’юери оцінюють хід міркувань.

З яких питань про середовище виконання й мову починають співбесіду з .NET?

Інтерв’юери починають із того, з чого починається фреймворк: із середовища виконання. Будьте готові пояснити, що робить Common Language Runtime (завантажує збірки, компілює проміжну мову безпосередньо перед виконанням, керує пам’яттю), а потім заглибитися у збирання сміття. Ланцюжок додаткових запитань передбачуваний: чому збирач сміття використовує покоління, через що об’єкт переходить до старшого покоління, для чого потрібна купа великих об’єктів і навіщо взагалі існують IDisposable та using, якщо пам’ять керована. На останнє запитання відповідайте, згадавши некеровані ресурси, як-от файлові дескриптори та з’єднання, які збирач сміття не вміє своєчасно звільняти.

  • Типи-значення та посилальні типи. Де зберігається кожен із них, що для них означає копіювання та якою є вартість пакування.
  • async і await. Поясніть, що очікуване завдання звільняє потік виклику, а не блокує його, чому async void призначено лише для обробників подій і яке взаємоблокування мають на увазі, коли застерігають від .Result.
  • LINQ. Пастка полягає у відкладеному виконанні: запит IEnumerable виконується під час перебирання, а не написання, а запит до постачальника бази даних перетворюється на SQL лише для зрозумілих йому виразів.
  • Узагальнення, інтерфейси та записи. Обмеження, переваги інтерфейсів над базовими класами для тестованості та користь рівності за значенням у записах.

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

Який вигляд мають питання про ASP.NET Core та EF Core?

Ви впевнено пишете контролери, але хвилюєтеся, що запитання стосуватимуться внутрішньої інфраструктури, якої ви майже не торкаєтеся. Це обґрунтоване занепокоєння, адже саме тут починаються питання про фреймворк. Нижче цю інфраструктуру наведено у звичному порядку запитань разом із типовими уточненнями.

  • Конвеєр запитів. Проміжне ПЗ виконується в порядку реєстрації, а кожен компонент вирішує, чи викликати наступний. Уточнення: де автентифікація має бути відносно авторизації та що станеться, якщо зареєструвати їх у зворотному порядку?
  • Життєві цикли впроваджених залежностей. Singleton існує протягом роботи застосунку, scoped — протягом одного запиту, а transient створюється за кожного отримання. Класична пастка — впровадження scoped-служби, наприклад контексту бази даних, у singleton; будьте готові пояснити, чому це помилка.
  • Конфігурація та параметри. Багатошарові джерела, перевизначення для середовищ і шаблон параметрів для типізованих налаштувань.
  • EF Core. Відстеження змін і доцільність його вимкнення для запитів лише на читання, проблема N+1 та її уникнення за допомогою завчасного завантаження чи проєкції, міграції й чесне визначення моменту, коли власноруч написаний запит кращий за LINQ.
  • Тестування. Як інтерфейси й контейнер DI роблять службу тестованою та що постачальник у пам’яті доводить і не доводить щодо справжньої бази даних.

Найсильніші кандидати пов’язують ці теми: scoped-контекст, отриманий усередині фонової singleton-служби, — не теоретичне запитання, а реальна помилка пам’яті та коректності, яку інтерв’юери вже випускали в робоче середовище; вони хочуть почути, що ви явно створите область.

Як проходять ситуаційні запитання?

На співбесідах для досвідчених фахівців вам описують симптом і спостерігають за вашим методом. Типовий приклад: бекенд-інженеру, який проходить співбесіду на старшу посаду в логістичній компанії, кажуть, що споживання пам’яті API на ASP.NET Core зростає протягом кількох днів, доки контейнер не перезапуститься. Сильний кандидат не вгадує. Він запитує, що змінилося, перевіряє об’єкти, захоплені статичними кешами або довготривалими підписками на події, шукає scoped-служби, утримувані singleton-об’єктами, досліджує зростання купи великих об’єктів і аналізує знімок пам’яті, перш ніж пропонувати виправлення. Інтерв’юер оцінює порядок дослідження.

Інші поширені сценарії: кінцева точка, що сповільнюється лише під навантаженням, де аналіз переходить від синхронних викликів бази даних до async, вичерпання пулу з’єднань і кешування; стан перегонів у спільній колекції та вартість потокобезпечних колекцій і варіантів блокування; запит, що має викликати три нижчі служби, і ваші способи обробки тайм-аутів, повторних спроб та часткової відмови; міграція, яка має додати стовпець без простою. У кожному випадку сформулюйте обмеження, виберіть механізм і вголос назвіть компроміс.

Усе це значно легше, якщо ви тренувалися відповідати вголос на додаткові запитання. Саме для цього створено режим імітації співбесіди; інші добірки за мовами й посадами зібрано на сторінці питань за посадою та темою.

Чи може AI-помічник допомогти з питаннями про .NET?

На розмовних етапах — так, у межах заявлених обмежень. Нативний настільний застосунок SubcueAI для macOS і Windows захоплює системний звук і звук із мікрофона та показує короткі підказки з відповідями в локальному накладеному вікні. Тому, коли інтерв’юер запитує, чому scoped-контекст усередині singleton є помилкою, механізм відображається на вашому екрані, поки ви пояснюєте його власними словами. Розширення браузера підтримує дзвінки у вкладках Chrome та Edge, захоплюючи лише звук вкладки зустрічі. Жоден бот не приєднується до дзвінка, і на сторінку зустрічі нічого не вбудовується; налаштування описано на сторінці посібника.

Обмеження: прокторингове оцінювання, запис екрана, керований компанією ноутбук або завдання з написанням коду наживо, де ви під наглядом вводите C#, не охоплюються; помічник найменш корисний саме тоді, коли на співбесіді потрібно писати код. Найкраще він допомагає з наведеними вище питаннями про середовище виконання, фреймворки та компроміси. Спочатку надайте йому своє резюме, щоб підказки відображали системи, які ви справді створювали; цей профіль міститься в конструкторі резюме.

Часті запитання

Чому збирач сміття .NET використовує покоління?

Більшість об’єктів швидко припиняють існувати, тому часте й недороге збирання найновішого покоління звільняє більшу частину пам’яті без сканування всієї купи. Об’єкти, що вижили, переходять до старших поколінь і збираються рідше, завдяки чому паузи за типових схем виділення пам’яті залишаються короткими.

У чому різниця між singleton, scoped і transient в ASP.NET Core?

Singleton створюється один раз для застосунку, scoped — один раз на запит, transient — за кожного отримання. Впровадження scoped-служби в singleton утримує її протягом усього часу роботи застосунку, що є поширеною помилкою для контекстів бази даних.

Що насправді робить await?

Він реєструє решту методу як продовження та повертає керування стороні виклику, тож потік залишається вільним, поки очікувана робота не завершиться. Натомість блокування завдання через .Result або .Wait може спричинити взаємоблокування в контекстах, яким потрібно повернути цей потік.

Що таке проблема N+1 в EF Core?

Це завантаження списку батьківських об’єктів, а потім виконання окремого запиту для дочірніх об’єктів кожного з них. Завчасне завантаження через Include або проєкція лише потрібних полів перетворює це на один чи два запити.

Чи може SubcueAI допомогти під час прокторингового тесту з програмування на .NET?

Ні. Прокторингові й записувані оцінювання не охоплюються, а написання коду наживо під наглядом є вашою власною роботою. Помічник призначений для розмовних етапів, а режим імітації співбесіди дає змогу підготуватися до них заздалегідь.

Схожі запитання

← Докладніше: Питання для співбесід за роллю та темою