Основні питання включають:
Я думаю, що це зазвичай допомагає попросити ваших заявників виконати просту процедуру кодування, наприклад:
- Напишіть свій власний клас списку без використання вбудованих класів.
- Напишіть власний клас хештелю, не використовуючи вбудовані класи.
- Напишіть клас, який представляє двійкове дерево. Напишіть метод, який обходить усі вузли дерева.
- Напишіть метод для виконання двійкового пошуку на масиві без використання вбудованих методів.
- Намалюйте схему бази даних для блогу. Кожен користувач має лише один блог, кожен блог має багато категорій, кожна категорія має багато публікацій, і кожна публікація може належати до декількох категорій. Попросіть свого заявника написати запити, щоб витягнути конкретну інформацію.
Далі, шукайте конкретні технічні ноу-хау:
- (Обробники подій) Створіть клас за допомогою спеціального обробника подій, створіть інший клас, який зачепить на спеціальний обробник подій.
- (XML) Завантажте документ XML та виберіть усі вузли із властивостями x, y та z.
- (Функціональне програмування) Створіть функцію, яка приймає іншу функцію як параметр. Функція «Карта» або «Згорнути» працює для цього дуже добре.
- (Рефлексія) Напишіть функцію, яка визначає, чи має клас певний атрибут.
- (Regex) Напишіть регулярний вираз, який видаляє всі теги з блоку HTML.
Жоден із цих питань не має особливо складних питань, на які повинен відповісти досвідчений програміст C #, і вони повинні дати вам гарне уявлення про конкретні переваги ваших претендентів. Ви також можете попрацювати над кількома питаннями / зразком коду, які використовують конкретні шаблони дизайну.
[Редагувати для уточнення] :
Здається, що багато людей не розуміють, чому я задаю такі питання. Дозвольте торкнутися коментарів кількох людей (я не цитую прямо, а перефразую натомість):
Питання: Коли востаннє хтось використовував летючі речовини або слабкі посилання?
Відповідь: Коли я даю технічні інтерв'ю, я дивлюсь, чи розуміє людина особливості .NET високого та низького рівня. Нестабільні та слабкі посилання - це дві низькорівневі функції, які надає .NET - навіть якщо ці функції не використовуються часто на практиці, відповіді на ці питання надзвичайно показові:
Добре розуміння летких речовин показує, що людина розуміє, як оптимізація компілятора змінює правильність коду, як потоки зберігають локальні копії спільного стану, які можуть бути синхронізовані в будь-який момент часу, і мінімально усвідомлює деякі складності багатопотокового коду .
Добре розуміння слабких посилань свідчить про те, що людина знає про інтимні деталі сміттєзбірника та як він вирішує, коли звільнити пам’ять. Звичайно, ви можете запитати кандидатів "як працює сміттєзбірник", але запитання про слабкі довідки отримує набагато кращу, більш продуману відповідь.
.NET є досить абстрактною мовою, але розробники зірок майже завжди глибоко розуміють CLR та деталі низького рівня виконання .NET.
Запитання: Чому комусь потрібно впроваджувати свій власний хешблей чи пов'язаний список?
Відповідь: Я не маю на увазі, що клас Словник є неповноцінним або що люди повинні згортати свій хештел. Це основне питання, яке перевіряє, чи має людина мінімальне розуміння структур даних. Ось для чого ці питання перевіряють: мінімальне розуміння.
Ви дізнаєтесь про ці хештелі та пов’язані списки в перший день Структури даних 101. Якщо хтось не може написати хештеб або пов'язаний список з нуля, то у них є великий розрив у технічних знаннях.
Питання: Чому ці питання настільки грубо орієнтовані?
Відповідь: Тому що назва цієї теми - "питання, які повинен знати кожен хороший розробник .NET". Кожен розробник .NET починає свою кар’єру з написання грубих додатків, і 90% усіх людей, які розробляють додатки, заробляють на життя, займаються додатками бізнес-бізнесу.
Я вважаю, що питання, які перевіряють знання людей про додатки бізнес-бізнесу, в більшості випадків доречні, якщо тільки ви не шукаєте розробників у дуже специфічних нішах, таких як розробка компілятора, розробка ігрового двигуна, доказ теорем, обробка зображень тощо .