Топ-50 вопросов для собеседования по C# с ответами (2021) – для новичков и опытных разработчиков
C# — универсальный объектно-ориентированный язык, работающий на платформе .NET. Он используется в веб-приложениях ASP.NET, десктопном ПО и даже в разработке игр через Unity. Если вы строите карьеру в C#, знание этих вопросов поможет продемонстрировать глубину и широту знаний работодателям.
Вопросы для собеседования по C# для новичков и разработчиков с опытом 2/3/5/10 лет
Эти вопросы охватывают базовые концепции, синтаксис и типичные ошибки, которые интервьюеры ожидают от кандидатов.
1. Что такое C#?
C# — статически типизированный, типобезопасный, объектно-ориентированный язык, компилируемый в промежуточный язык Microsoft (MSIL) средой выполнения .NET.
2. Объясните типы комментариев в C# с примерами
• Однострочный: // Это однострочный комментарий
• Многострочный: /* Это многострочный комментарий. Он может занимать несколько строк */
• XML-документация: /// <summary>Установить сообщение об ошибке</summary>
3. Может ли выполняться несколько блоков catch?
Нет. Как только выполняется подходящий блок catch, управление передается в блок finally (если есть), а затем в код после конструкции try-catch.
4. В чем разница между public, static и void?
public — доступен из любого кода, ссылающегося на тип.
static — принадлежит самому типу, а не экземпляру.
void — указывает, что метод не возвращает значение.
5. Что такое объект?
Объект — экземпляр класса, создаваемый ключевым словом new. Он предоставляет доступ к членам класса (методам, свойствам, полям).
6. Определите конструкторы.
Конструктор — специальный метод с тем же именем, что и класс. Он запускается автоматически при создании экземпляра, инициализируя поля и выполняя настройку.
7. Что такое зубчатые массивы?
Зубчатые массивы — массивы массивов. Каждый элемент может ссылаться на массив разной длины, позволяя создавать нерегулярные структуры данных.
8. В чем разница между параметрами ref и out?
ref требует инициализации переменной до вызова. out не требует; вызываемый метод должен присвоить значение перед возвратом.
9. Для чего используется оператор using в C#?
Блок using гарантирует автоматическое освобождение ресурса IDisposable при выходе из блока, даже если возникло исключение.
10. Что такое сериализация?
Сериализация преобразует объект в поток байтов для хранения или передачи. Десериализация — обратный процесс. Типы должны быть отмечены [Serializable] или реализовывать ISerializable.
11. Можно ли использовать ключевое слово this в статическом методе?
Нет. this ссылается на текущий экземпляр, которого у статических методов нет.
12. В чем разница между константами и полями только для чтения?
Константы — значения времени компиляции, которые нельзя изменить. Поля только для чтения назначаются один раз во время выполнения (в строке или в конструкторе) и после этого не меняются.
Продвинутые вопросы по C# для опыта 3/5/10 лет
13. Что такое интерфейс? Приведите пример.
Интерфейс объявляет контракт методов и свойств без реализации. Пример:
public interface IGreeter { void SetName(string name); string Greet(); } public class FriendlyGreeter : IGreeter { private string _name; public void SetName(string name) => _name = name; public string Greet() => $"Hello, {_name}!"; }
14. Что такое типы значений и ссылочные типы?
Типы значений (например, int, struct) хранят данные напрямую в стеке. Ссылочные типы (например, class, string) содержат ссылку на объект в куче.
15. Что такое пользовательские элементы управления и пользовательские контролы?
Пользовательские элементы управления компилируются в DLL и могут помещаться на формы. Пользовательские контролы (.ascx) — составные контролы из существующих элементов, удобные для повторно используемых UI-компонентов.
16. Что такое запечатанные классы в C#?
Запечатанный класс нельзя наследовать. Модификатор sealed предотвращает наследование, гарантируя неизменность поведения класса.
17. Что такое перегрузка методов?
Перегрузка позволяет нескольким методам иметь одно имя, но разные списки параметров. Компилятор выбирает подходящую перегрузку на основе аргументов.
18. В чем разница между Array и ArrayList?
Array имеет фиксированный размер и однородные типы элементов. ArrayList (теперь в основном заменен на List<T>) динамичен и хранит объекты.
19. Можно ли переопределить приватный виртуальный метод?
Нет. Приватный метод невидим для производных классов, поэтому его нельзя переопределить.
20. Опишите модификатор доступности protected internal.
Члены с protected internal доступны в той же сборке или из производных классов в других сборках.
21. В чем разница между System.String и System.Text.StringBuilder?
String неизменяем; каждое изменение создает новый экземпляр. StringBuilder изменяем, предназначен для эффективной манипуляции строками.
22. Разница между Array.CopyTo() и Array.Clone()?
Clone() создает поверхностную копию всего массива. CopyTo() копирует элементы в существующий целевой массив.
23. Как отсортировать массив в порядке убывания?
Используйте Array.Sort(), затем Array.Reverse(), или предоставьте пользовательский компаратор.
24. Напишите синтаксис C# для перехвата исключения.
Пример:
try { GetAllData(); } catch (Exception ex) { // Обработка ошибки }
25. Разница между интерфейсом и абстрактным классом?
Интерфейсы объявляют только сигнатуры; все члены неявно public и abstract. Абстрактные классы могут предоставлять конкретные реализации и приватные члены.
26. Разница между Finalize() и Dispose()?
Dispose детерминированно освобождает неуправляемые ресурсы. Finalize (деструктор) вызывается сборщиком мусора и недетерминированен.
27. Что такое циклические ссылки?
Два или более объекта ссылаются друг на друга, что может препятствовать сборке мусора и вызывать утечки памяти.
28. Что такое обобщения (generics) в C#?
Обобщения позволяют писать типобезопасный, повторно используемый код (например, List<T>), уменьшая приведение типов во время выполнения и повышая производительность.
29. Что такое пул объектов в .NET?
Пул объектов хранит набор инициализированных объектов для повторного использования, минимизируя затратные аллокации и сборку мусора.
30. Перечислите часто используемые типы исключений в .NET.
ArgumentException, ArgumentNullException, ArgumentOutOfRangeException, ArithmeticException, DivideByZeroException, OverflowException, IndexOutOfRangeException, InvalidCastException, InvalidOperationException, IOException, NullReferenceException, OutOfMemoryException, StackOverflowException и др.
31. Что такое пользовательские исключения?
Пользовательские исключения — типы, производные от Exception, адаптированные под специфические сценарии ошибок.
32. Что такое делегаты?
Делегаты — типобезопасные указатели на функции, позволяющие реализовывать обратные вызовы и обработку событий.
33. Как наследовать класс в C#?
Используйте синтаксис с двоеточием:
public class Derived : Base { }
34. Какой базовый класс является родителем для всех классов .NET?
System.Object.
35. Разница между переопределением и перегрузкой метода?
Переопределение меняет реализацию виртуального метода в производном классе. Перегрузка создает несколько методов с одним именем, но разными сигнатурами.
36. Какими способами можно перегрузить метод?
Изменяя тип, порядок или количество параметров.
37. Почему нельзя указывать доступность для методов внутри интерфейса?
Члены интерфейса неявно public; указание доступности было бы избыточным.
38. Как разрешить наследование класса, но запретить переопределение метода?
Объявите метод как sealed внутри не запечатанного класса.
39. Что происходит, если унаследованные интерфейсы имеют конфликтующие имена методов?
Реализуйте метод один раз в производном классе, обеспечивая выполнение всех контрактов интерфейсов.
40. Разница между struct и class?
Структуры — типы значений в стеке, не могут наследоваться от других структур, по соглашению неизменяемы. Классы — ссылочные типы в куче.
41. Как использовать типы, допускающие null, в .NET?
Добавьте ? к типу значения:
int? id = null; if (id.HasValue) { /* используем id.Value */ }
42. Как создать массив с нестандартными значениями?
Используйте Enumerable.Repeat или инициализаторы коллекций.
43. Разница между операторами is и as?
is проверяет совместимость типов и возвращает bool. as выполняет приведение и возвращает null при неудаче.
44. Что такое multicast-делегат?
Делегат, ссылающийся на несколько методов; вызов его запускает все привязанные методы по порядку.
45. Что такое индексаторы в C#?
Индексаторы позволяют обращаться к объектам как к массивам:
public int this[int index] { get { … } set { … } }
46. Разница между throw и throw ex?
throw сохраняет исходную трассировку стека; throw ex сбрасывает её, усложняя отладку.
47. Что такое атрибуты C# и их значение?
Атрибуты добавляют метаданные к типам и членам; их можно запрашивать через рефлексию во время выполнения.
48. Как реализовать паттерн Singleton?
Пример:
public sealed class Singleton { private static readonly Singleton _instance = new Singleton(); public static Singleton Instance => _instance; private Singleton() { } }
49. Разница между DirectCast и CType?
DirectCast требует точного совпадения типа во время выполнения. CType выполняет преобразование, определенное целевым типом, потенциально вызывая операторы преобразования.
50. Является ли C# управляемым или неуправляемым кодом?
C# — управляемый код; CLR компилирует его в MSIL и управляет памятью.
51. Что такое консольное приложение?
Консольное приложение запускается в окне командной строки и часто является первым шагом для новичков в .NET.
52. Пример удаления элемента из очереди (Queue)
Используйте Dequeue() для удаления переднего элемента:
Queue<int> queue = new Queue<int>(); queue.Enqueue(1); queue.Enqueue(2); queue.Enqueue(3); int removed = queue.Dequeue(); // removed = 1
Язык C
- Ключевые облачные метрики, управляющие опытом конечного пользователя и производительностью
- Руководство по собеседованиям в облаке 2024: экспертные вопросы и ответы
- Топ-5 вызовов 5G: навигация по спектру, стоимости, покрытию, устройствам и безопасности
- Топ-10 IDE для C# на Windows, macOS и Linux — обзор 2021
- Финансирование цепочки поставок 2019: тренды, вызовы и ключевые вопросы
- Robotics & Automation News объявляет церемонию наград 2021 — виртуальное событие в конце 2021
- MEO Class 4 Electrical Oral Exam: комплексный справочник вопросов и ответов для морских электротехников
- 5G и Edge: возникающие кибербезопасные вызовы 2021 года
- Беспилотное производство для цехов ЧПУ: FAQ и руководство по внедрению
- Топ-5 статей 2021 года по сжатому воздуху и газу: ключевые инновации и отраслевые стандарты