Собеседование на позицию разработчика C# .NET включает в себя оценку технических знаний, навыков решения задач, понимания архитектуры и умения работать с кодом. Вопросы на интервью зависят от уровня кандидата: Junior, Middle или Senior.
Для Junior-разработчиков основной упор делается на знание синтаксиса C#, основ .NET и базовые алгоритмы. Middle-разработчиков проверяют на понимание архитектурных решений, работу с базами данных, многопоточность и принципы SOLID. Senior-разработчики должны владеть глубокими знаниями платформы .NET, уметь строить сложные системы, разбираться в паттернах проектирования и оптимизации производительности.
В статье представлены ключевые вопросы для каждого уровня, которые помогут структурировать подготовку к собеседованию.
Платформа .NET
- Что такое управляемый (managed) и неуправляемый (unmanaged) код?
- Что такое JIT-компиляция? Какие у нее преимущества?
- Что такое AOT-компиляция (Ahead-Of-Time)?
- Что такое сборка (Assembly) в .NET?
- Что такое CLR (Common Language Runtime)?
- Что такое CLS (Common Language Specification)?
- Что такое BCL (Base Class Library)?
- Что такое IL-код (Intermediate Language)?
- В чем разница между .NET Core и .NET Framework?
Объектно-ориентированное программирование
- Что такое ООП?
- Какие есть виды программирования кроме ООП?
- Каковы основные принципы ООП?
- Что такое инкапсуляция?
- Что такое наследование?
- Что такое полиморфизм?
- Что такое абстракция?
- Как реализуются принципы ООП?
- Какие есть способы расширить поведение классов?
- Какие есть модификаторы доступа?
- Какие виды полиморфизма существуют?
- В чем разница между перегрузкой метода, переопределением и перекрытием?
- Что такое абстрактные классы и абстрактные методы?
- В чем разница между абстрактным классом и интерфейсом?
Работа с памятью
- Чем отличаются значимые и ссылочные типы данных?
- Что означают ключевые слова
ref
,out
,in
,ref readonly
? - Как работает сборщик мусора?
- Когда вызывается сборка мусора?
- Зачем нужны поколения для сборщика мусора?
- В какое поколение попадают значения в статических полях?
- Почему используется три поколения сборщика мусора?
- Какие существуют кучи в .NET?
- Что такое Large Object Heap (куча больших объектов)?
- В чем разница между
Finalize
иDispose
? - Для чего используется конструкция
using
? - В чем разница между
Equals
и==
? - В чем отличия
var
иdynamic
?
Коллекции и LINQ
- Какие существуют коллекции?
- В чем разница между списком (
List
) и массивом (Array
)? - Что такое
Dictionary<T>
и как он устроен? - Что такое коллизии в хэш-таблицах?
- Как коллизии влияют на производительность?
- Чем отличаются
IEnumerable<T>
иIEnumerator
? - Как работает оператор
yield
? - В чем разница между
IQueryable<T>
иIEnumerable<T>
? - Какие существуют конкурентные коллекции?
- Что такое LINQ?
- Какие основные операторы LINQ?
- Чем
FirstOrDefault
отличается отSingleOrDefault
? - Как написать собственный метод
Where
?
Многопоточность и асинхронность
- Что такое асинхронность?
- Что такое многопоточность?
- В чем разница между асинхронностью и многопоточностью?
- Почему использование
async void
не рекомендуется? - Во что разворачиваются
async
иawait
во время компиляции? - В чем разница между процессом и потоком?
- Что такое параллелизм?
- Как работают
Thread
иThreadPool
? - Что такое TPL (Task Parallel Library)?
- В чем отличие
Thread
отTask
? - Какие проблемы могут возникнуть при многопоточности, и как их избежать?
- Какие существуют способы синхронизации потоков (
Semaphore
,Mutex
,lock
,Monitor
)? - Что такое
DeadLock
иRace Condition
? - В чем разница между
Task
иValueTask
?
Обобщения
Делегаты и события
- Что такое делегат?
- Какие существуют виды делегатов?
- Какие существуют встроенные типы делегатов?
- Что такое групповые делегаты?
- Что такое событие?
- Что такое ковариантность делегатов?
Исключения
- Что такое исключение?
- Когда имеет смысл создавать собственное исключение?
- В чем разница между
throw
иthrow ex
?
Тестирование
- Зачем писать тесты?
- Какие существуют виды тестирования?
- Как писать тесты по принципу AAA (Arrange, Act, Assert)?
- Что такое TDD (Test-Driven Development)?
- Что такое End-to-End тестирование?
Общие вопросы
- В чем разница между структурой, классом и записью?
- В чем разница между
const
иreadonly
? - Что такое статический класс и статический метод?
- Когда выполняется статический конструктор?
- Что такое методы расширения?
- Что такое
partial
классы иpartial
методы? - Что такое лямбда-выражения?
- В чем разница между
string
иStringBuilder
? - Что такое атрибуты?
- В чем разница между
IComparable
иIComparer
? - Что такое индексаторы?
- Что такое анонимный метод?
- В чем разница между
decimal
иdouble
? - Какие методы есть у класса
object
? - Что такое
UpCast
иDownCast
? - Как работает рекурсия?
- Что такое ковариантность и контравариантность?
- Что такое Reflection?
ASP.NET Core
- Что такое REST API?
- Чем отличаются GET, POST, PUT, DELETE?
- Что такое версионирование API?
- Как реализовать пагинацию в API?
- Как защитить API с помощью аутентификации и авторизации?
- Как работает маршрутизация в ASP.NET Core?
- В чем разница между идентификацией, аутентификацией и авторизацией?
- Что такое JWT-токен?
- Что такое кэширование в ASP.NET Core?
- Как обеспечить безопасность веб-приложений?
- Какие компоненты включает ASP.NET Core?
- Что такое Middleware? Как он работает?
- Как настроить обработку ошибок в ASP.NET Core?
- Что такое MVC?
- Что такое Model Binding?
- Как использовать фильтры в ASP.NET Core?
- Какие способы аутентификации есть в ASP.NET Core?
- Что такое SignalR?
- Какие альтернативы SignalR существуют?
Сетевое программирование
- Что такое TCP-рукопожатие (трехэтапное рукопожатие)?
- Как работает WebSocket?
- Как работает модель OSI?
- В чем разница между протоколами TCP и UDP?
- Какие есть особенности работы с IPv6 в по сравнению с IPv4?
Работа с базами данных
- Что такое Entity Framework Core?
- Чем отличаются Code First и Database First подходы?
- Чем отличаются Entity Framework и Dapper в C#?
- Что такое Unit of Work и Repository?
- Как управлять транзакциями в EF Core?
- Какие методы оптимизации LINQ-запросов к БД существуют?
DevOps и развертывание
- Что такое Docker? Как запустить .NET-приложение в контейнере?
- Что такое Kubernetes?
- Что такое CI/CD? Как настроить GitHub Actions / GitLab CI?
Архитектура и паттерны проектирования
- Какие архитектурные подходы существуют?
- Какие плюсы и минусы микросервисной архитектуры?
- Как реализовать взаимодействие между микросервисами?
- Как управлять транзакциями в распределенных системах?
- Что такое связность и связанность?
- Что такое Clean Architecture?
- Что такое CQRS?
- Что такое Event Sourcing?
- Что такое DDD?
- Какие существуют паттерны проектирования?
- Что такое SOLID?
- Что значит DRY, KISS, YAGNI?
- Что такое Inversion of Control и Dependency Injection?
- Как работает Dependency Injection?
- Как избежать нарушения принципа Dependency Inversion?
- Что такое IoC-контейнеры?
- Какие есть типы жизненного цикла зависимостей в DI?
- Чем отличаются
Transient
,Scoped
иSingleton
? - Что такое Data Transfer Object (DTO)?
Безопасность в .NET
- Как защитить .NET-приложение от SQL-инъекций?
- Как предотвратить XSS-атаки?
- Что такое CORS?
- Что такое SSL HTTPS?
- Как использовать Data Protection API?
- Что такое OWASP Top 10?
Брокеры сообщений
- Что такое брокер сообщений?
- Какую проблему решают брокеры сообщений?
- Какая разница между RabbitMQ и Kafka?
- Что такое Exchange в RabbitMQ?
- Какие типы Extange существуют?
Алгоритмы и структуры данных
- Какие существуют алгоритмы?
- Какие есть структуры данных?
- Что значит сложность алгоритма?
- Какая сложность вставки в List, Dictionary?
- Что такое Big O нотация и как она используется для анализа сложности алгоритмов?
- Как реализовать бинарный поиск в массиве. Какая сложность алгоритма?
- Какие различия между временной и пространственной сложностью алгоритма?
- Чем отличается дерево от графа? Какие задачи решаются с их помощью?
- Что такое Хэш таблица? Какая у неё сложность поиска и вставки?
GIT
SQL
- Что такое реляционные и нереляционные СУБД?
- Когда использовать реляционную, а когда нереляционную СУБД?
- Что такое первичный и внешний ключ?
- Какие существуют типы соединений (JOIN)?
- Что такое агрегатные функции?
- Что такое индекс?
- Когда следует использовать индексы?
- Какие типы индексов существуют? Чем они отличаются?
- Чем отличаются кластеризованные и некластеризованные индексы?
- Что такое двоичный поиск?
- Что такое полнотекстовый поиск?
- Что такое DDL, DML, DCL и TCL?
- Что подразумевается под целостностью данных?
- Какие существуют уровни изоляции транзакций?
- Когда и какие уровни изоляции транзакций нужно использовать?
- Что такое ACID?
- Что такое нормализация и денормализация?
- Что такое нормальные формы?
- Как оптимизировать SQL-запрос?
- Что такое CTE?
- Что такое оконные функции?
- Что такое план запроса?
- Какая разница между DELETE и TRUNCATE?
- В чем разница между скалярной и табличной функцией?