Співбесіда з .NET. 150+ запитань для Junior, Middle, Senior
На DOU розміщено понад 450 вакансій для .NET-розробників, що свідчить про популярність цієї технології. Редакція DOU зібрала питання, що ставлять .NET-розробники своїм колегам на технічних співбесідах. Готуйтесь на здоров’я :)
Попередня стаття рубрики присвячена Python.
Запитання для Junior
Загальне
1.Назвіть основні принципи ООП.
2.Що таке спадкування, інкапсуляція, абстракція, поліморфізм: наведіть приклади (бажано з власного досвіду). Від якого класу неявно успадковуються всі класи в .NET? Чи дозволено множинне успадкування в C#?
3.Що таке рекурсія?
4.Що таке лямбда-вираз?
5.Що таке паралельне програмування (багатопотоковість) і його призначення? Які класи використовуються?
6.Що таке JSON?
7.Як ви розумієте REST?
8.Розкажіть про SPA concept.
9.Які GoF-патерни використовували?
10.Яка різниця між GET і POST HTTP методами?
11.Яку проблему вирішує Docker? Які його плюси та мінуси?
12.Чим принципово відрізняються unit-тести від інтеграційних тестів?
Обробка винятків
13.Що таке Exception?
14.Для чого служать try, catch, finaly? В якому випадку може не виконатись блок finaly?
15.Що таке call stack? Які ключові слова ви знаєте?
Платформа .NET
16.Що таке ASP.NET?
17.Які існують типи Action filters?
18.Що таке Web Service?
19.Що таке CLR?
20.Що таке збирач сміття (Garbage Collector) на базовому рівні?
21.Що таке делегат?
22.Чи відрізняється Delegate від Action?
23.Що таке LINQ і для чого використовується? Наведіть кілька прикладів застосування LINQ.
24.Що таке простір імен (namespace) і навіщо це потрібно?
Типи даних, колекції та структури даних
25.Які типи даних ви знаєте?
26.Які примітивні типи знаєте?
27.Що таке Nullable-тип?
28.Що таке тип значення, а що таке тип посилання? Що з цього class, а що struct? У якій ділянці пам’яті вони зберігаються?
29.Чим відрізняються value від reference type? String — це reference чи value?
30.В чому відмінність між string builder і string?
31.Що таке дженерики? Які проблеми вони вирішують?
32.Що таке boxing/unboxing?
33.Що таке Array, List, HashSet, Dictionary? Наведіть приклади використання цих структур даних. Яка складність операцій з ними (пошук, вставка, видалення)?
34.Які знаєте колекції?
35.Що робить оператор yield?
Класи, структури та інтерфейси
36.Що таке клас?
37.Чим відрізняється клас від абстрактного класу?
38.Чим відрізняється абстрактний клас від інтерфейсу? Для чого потрібні інтерфейси і які завдання вони виконують?
39.Які ви знаєте модифікатори доступу?
40.У чому різниця між звичайним класом і статичним?
41.У чому різниця перевизначення методу між ключовими словами new та override?
42.Яка відмінність між const та read only?
43.Різниця між структурою і класом. Наведіть приклади структур.
44.Чи може екземпляр структури зберігатися у купі (heap)? Як це зробити?
Асинхронність
45.Що таке асинхронність і чим вона відрізняється від багатопотоковості?
46.Які є ключові слова для використання асинхронності в коді?
47.Що означають ключові слова async/await?
Бази даних
48.Різниця між реляційними та нереляційними базами, плюси та мінуси використання обох варіантів.
49.Що таке індекси в RDBMS?
50.Які типи JOIN існують у SQL?
Тестування
51.Для чого потрібні unit-тести?
52.Які переваги та недоліки використання unit-тестів?
53.З яких трьох логічних блоків складається unit-тест?
Запитання для Middle
Загальне
54.Ви набираєте google.com у браузері. Розкажіть якомога докладніше, що відбувається в цей час на HTTP-рівні?
55.Як працює HTTPS?
56.Як ви розумієте SOLID?
57.Які протоколи серіалізації ви знаєте і де вони застосовуються?
58.Що таке у вашому розумінні чиста функція? Які у неї переваги?
59.Що таке dependency injection і навіщо воно потрібне?
60.Що таке cohesion та coupling (зв’язаність і зв’язність)?
61.Що таке IaaS, PaaS, SaaS і які відмінності між ними?
62.Які способи налагодження програми ви застосовуєте?
63.Які знаєте патерни? Поясніть суть перерахованих.
64.У чому суть патерну Singleton? Чому його ще називають антипатерном?
65.Для чого потрібен патерн Strategy?
66.Які ключові відмінності між розподіленими системами та монолітними?
67.Які патерни проєктування розподілених систем ви знаєте?
68.Які є принципи роботи Message bus? Чому можуть виникати дублікати в чергах?
69.Які принципи побудови ідемпотентних сервісів знаєте?
70.Розкажіть, як працюють асинхронні методи? Чим асинхронність відрізняється від паралелізму?
Платформа .NET
71.Які винятки не можна зупинити в блоці catch?
72.Яка різниця між .NET Standard Class Library і .NET Core Class Library?
73.Поясніть різницю між відкладеним і негайним виконанням в LINQ. Наведіть приклади.
74.Для чого потрібен метод ConfigureServices в Startup.cs?
75.Яка різниця між services.AddTransient і services.AddScope в ASP.NET Core?
76.Що таке Kestrel?
77.Опишіть ASP.NET MVC request pipeline.
78.Як в ASP.NET WebAPI налаштувати кешування відповідей на HTTP-запити?
Управління пам’яттю
79.Що таке купа і стек? Відмінності, принцип роботи.
80.Як працює збирач сміття?
81.Навіщо нам зарезервоване слово using у C#, якщо у .NET є автоматичне управління пам’яттю? Як з цим пов’язаний disposable-патерн і навіщо такий складний патерн для managed та unmanaged ресурсів?
82.Які особливості роботи з Large Object Heap?
Типи даних, колекції та структури даних
83.Коли генерується дженерик-клас конкретного типу — під час виконання програми чи під час компіляції?
84.Що таке рефлексія?
85.Розкажіть про колекцію LinkedList<T>
. Чим вона відрізняється від інших колекцій?
86.Що таке індексатор?
87.Що таке immutable object? Які переваги дає використання immutable object? Запропонуйте спосіб реалізації його в .NET.
88.Коли використовувати StringBuilder, а коли string? Як працює StringBuilder?
89.Що таке балансування дерев?
90.Що таке Key-value структури?
100.Що таке хеш-функція та навіщо потрібні хеш-таблиці?
101.Якими властивостями має володіти ідеальна хеш-функція?
102.Що таке колізії та як з ними боротися?
103.У чому полягає складність CRUD-операцій в Dictionary<K,V>
у .NET?
104.Де зберігаються масиви? Масиви примітивних типів?
105.У чому відмінність між масивом (T []
) і списком (List<T>
)?
106.У чому різниця між IList<T>
та IEnumerable<T>
?
107.Навіщо потрібні Enumerable, Observable, AsyncEnumerable та які моделі отримання даних вони реалізовують?
108.У чому різниця між IEnumerable та IQueryable?
109.Що таке enum flags?
Бази даних
110.Розкажіть про нормальні форми в РСУБД.
111.Що таке індекс у БД?
112.Коли варто використовувати індекси? Переваги та недоліки.
113.Які типи індексів існують? Чим вони відрізняються?
114.Що таке ACID?
115.Які ви знаєте рівні ізоляції транзакцій?
116.Що таке план виконання запиту (execution plan) в MS SQL?
117.Проблема: запит довго виконується. Які є методи її діагностування та розв’язання?
118.Як ORM (Entity Framework чи Entity Framework Core) транслюють C# код у мову запитів бази даних? Що для цього використовується?
Паралелізм
119.Для чого використовувати Task.ConfigureAwait?
120.Наприклад, є вебсервер, який за HTTP-запитом робить вибірку з бази даних. Усього на сервері 16 тредів (threads). Кожний HTTP-request виконує запит у базу та чекає результатів, у цьому випадку тред блокується. Чи можна оптимізувати цю роботу засобами .NET?
121.Навіщо потрібен ThreadPool? Опишіть механіку роботи: як потік виділяється та повертається назад у ThreadPool.
Запитання для Senior
Загальне
122.Які ще практики, крім ООП, використовували (AOP, FP тощо)?
123.Назвіть три найскладніші проблеми, які вам доводилося розв’язувати. Як ви це зробили, як прийшли до цього рішення?
124.Що таке слабозв’язаний код? Чим він кращий від сильнозв’язаного коду? Як би ви досягали слабшої зв’язності коду?
125.Використання статичних класів підвищує чи зменшує зв’язність коду?
126.Як можна виміряти performance коду? Чи впливає факт замірів на продуктивність?
127.Для чого використовуються і як працюють multi-stage білди в Docker?
128.Як зрозуміти, що якась частина коду утилізує багато пам’яті або довго виконується? Що може бути ботлнеком у різних випадках? Які є способи зменшення пам’яті і трафіку пам’яті?
129.Як би ви реалізували cross-cutting concern (наприклад, логування, валідація, транзакції)?
130.Розкажіть про Rest Maturity Model.
131.Що таке CPU і IO-bound завдання?
132.Що таке маршалінг?
133.Як працює async/await (детально)? Чому не можна використовувати async void методи?
Платформа .NET
134.Як працює lock? Чи можна використовувати структури всередині виразу lock?
135.Що таке Expression Tree?
136.Як працює збирач сміття (детально)? Чому в GC три покоління, а не, скажімо, п’ять, десять або два?
137.Як би ви організували трасування Web API сервісів?
138.Як в .NET Core можна налаштувати зберігання секретів на комп’ютерах розробників і на робочих середовищах?
139.Як би ви організували процес CI/CD .NET Core сервісів для їх дейплойменту в хмарну інфраструктуру?
140.Як увімкнути CORS в AspNetCore?
Типи даних, колекції та структури даних
141.Як реалізовані дженерики?
142.Як створити власний immutable-тип?
143.Як працює IEnumerable<T>
(детально)?
144.Який алгоритм використовує колекція STACK ?
145.Які структури даних ви реалізовували самі для платформи .NET? Розкажіть, чим вони відрізнялися від стандартних реалізацій.
146.Чим відрізняється інтерфейс від абстрактного класу? В яких випадках використали б і те, і те?
147.Чому в структурах немає конструктора за замовчуванням?
Бази даних
148.Як БД зберігає дані?
149.Які типи БД ви знаєте?
150.Які та коли БД краще використовувати?
151.Що таке денормалізація?
152.Коли і які рівні ізоляції транзакцій можна використовувати?
153.Як у популярних РСУБД реалізовані принципи ACID (SQL Server, PostgreSQL тощо)?
154.Чи доводилося оптимізувати запит в БД? Якщо так, то як?
155.Опишіть, які ви знаєте потенційні проблеми, пов’язані з паралельними запитами до БД.
156.Яку базу даних ви б використовували для реалізації distributed lock механізму? Розкажіть деталі реалізації.
Мікросервіси
157.Яку проблему вирішують мікросервіси?
158.Які є способи комунікації мікросервісів?
159.Розкажіть варіанти реалізації розподілених транзакцій у мікросервісах.
160.Що таке circuit breaker?
161.Яким чином ви будете налагоджувати систему, що складається з безлічі мікросервісів, якщо потрібно відстежити повний шлях обробки запиту?
162.Що таке брокери повідомлень? Що таке at-least-once, at-most-once семантика? Чи є якісь брокери, які гарантують exactly-once семантику?
163.Як повинен працювати код клієнта брокера залежно від обраної семантики?
164.Які інструменти для роботи з чергами вам відомі (як у .NET, так і окремі продукти), який інструмент/продукт ви б обрали й чому?
MS Azure
165.Які види сервісів бувають у Service Fabric?
166.Які особливості та обмеження Azure Table Storage?
167.Як боротися з проблемою холодного старту в Azure Functions?
168.У чому відмінність черг і топіків в Azure Service Bus?
Практичні завдання
Junior only
1.Опишіть, як би ви реалізували калькулятор. Якщо знадобиться додати підтримку для римської системи числення, що будете робити?
2.Напишіть програму, щоб перевірити, чи є число простим, чи ні.
3.Знайдіть найменший елемент у масиві.
4.Впорядкуйте структури папок у файловій системі.
5.Напишіть програму, що симулює fizz-buzz.
6.Розкажіть, що робить цей код, і запропонуйте, як його поліпшити.
а)
public bool IsArrayEmpty(string[] array) { if (array.Length > 0) return false; else return true; }
б)
protected string GetClass(object url) { string result = string.Empty; if (SiteMap.CurrentNode != null && SiteMap.CurrentNode.Url == url.ToString()) result = "class=\"active\""; return result; }
Middle
7.Напишіть програму для тиражування послідовності Фібоначчі для заданого числа.
8.Спроєктуйте базу даних лікарів і пацієнтів у SQL. Створіть stored procedure або запит в SQL, що поверне лікарів, які мають більше, ніж N пацієнтів.
9.Перевірте колекцію на наявність дублікатів.
10.Спроєктуйте thread-safe клас Singleton у C#.
11.Треба записати якусь сутність у базу даних і відправити подію у брокер повідомлень. Як це зробити з мінімальним ризиком втрати даних?
12.Є три сервіси. Виконується HTTP-запит на перший. Перший повинен записати дані у другий, а другий — у третій. Як гарантувати, що дані при такій складній комунікації не загубляться? Як запобігти запису дублікатів даних?
13.Чи працюватиме цей код і чому?
a)
SomeClass myClass = null; myClass.SomeMethod();
б)
var table = GetTable(); table.Draw(); … private SomeClass GetTable() { using(var table = new SomeClass()) { table.ID = "www"; table.Width = "95%"; table.Controls.Add(tr); return table; } }
14.Розкажіть, що робить цей код, і запропонуйте, як його поліпшити.
а)
Shape shape = GetNextShape(); if(shape is Circle) Console.WriteLine(((Circle)shape).Radius);
б)
public int Quantity { get { try { return int.Parse(TxtQuantity.Text); } catch (Exception) { return 0; } } }
15.Що не так з кодом?
try { SomeMethod(); } catch(Exception e) { Log(e.Message); throw e; }
Senior
16.Як би ви спроєктували FTP-сервер? Web-сервер? Хостинг картинок з поділом прав доступу? Систему, що складається з front- і back-офісів? Створіть клон будь-якої популярної соціальної мережі (Instagram, Facebook тощо)
17.Припустимо, є сутність угоди (Bid). І в угоді є список партнерів, з якими ця угода укладається. Самі угоди зберігаються в сервісі угод (bidding service), а партнери — у своєму сервісі (partners service). І коли показується список угод, на початковому скрині треба відобразити кількість партнерів. Як би ви спроєктували зберігання і зображення цього лічильника?
18.Задача на знання LINQ: з вихідної колекції даних треба отримати нову колекцію за певними вимогами (наприклад, відсортовану, без дублікатів тощо).
19.Напишіть програму, яка перевіряє, чи є поле судоку 9×9 правильно заповненим.
20.Реалізуйте свій Select, Where, SelectMany з усіма характеристиками LINQ (відкладене виконання, одномоментна (eager) перевірка вхідних даних).
21.За допомогою LINQ напишіть метод, який поверне такі елементи колекції, які діляться на N без залишку, відсортовані від найбільшого значення до найменшого. Сигнатура методу: List<int> Filter(IEnumerable<int> collection, int n);
.
22.Напишіть функцію, яка поверне суму всіх парних елементів масиву, який передається у функцію (JavaScript).
Дякуємо за підготовку статті Олексію Краєвому, Максиму Шнуренку, Андрію Ткаченку, Владу Медведовському, Сергію Селецькому, Андрію Губському, Сергію Марущенку, Олександру Скрінніку, Андрію Соболю, Богдану Нановському, Святославу Аксьончикову, Івану Корнелюку, Михайлу Пивоварову, Олексію Дерке, Євгену Гур’єву, Михайлу Меркулову, Юрію Вороніну.
Наступний матеріал готуємо про JavaScript. Якщо ви співбесідуєте фахівців різних рівнів на позицію JavaScript-розробника, пишіть на [email protected].
Найкращі коментарі пропустити