Языки программирования

Вопросы на собеседовании: C#

15 уроков · 5 разделов · бесплатно, без регистрации

Реальные вопросы с C#/.NET-собеседований: от boxing и структур до async/await и сборки мусора — с примерами, которые можно запустить.

Курс «Вопросы на собеседовании: C#» состоит из 5 разделов и 15 уроков: Типы и память, ООП в C#, Коллекции и LINQ, Асинхронность и CLR и подводные камни. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.

Программа курса

  1. 1 Типы и память

    1. Типы значений и ссылочные типы

      Что выведет код, если изменить объект внутри метода? Разбираем value type и reference type, стек и кучу, ref/out/in и ловушку со string.

    2. Boxing и unboxing

      Что такое упаковка значимого типа в object, сколько она стоит в памяти и где происходит незаметно: ArrayList, string.Format, интерфейсы. Разбор с кодом.

    3. struct или class: что выбрать

      Чем struct отличается от class в C#: семантика, память, значения по умолчанию. Почему мутабельные структуры опасны и когда struct действительно оправдан.

  2. 2 ООП в C#

    1. Интерфейс или абстрактный класс

      Когда выбирать интерфейс, а когда абстрактный класс в C#: множественная реализация, явная реализация и default-методы интерфейсов из C# 8 с примерами кода.

    2. virtual, override и new: что выведет код

      virtual, override и new в C#: что на самом деле выведет код, как работает позднее связывание, чем сокрытие метода отличается от переопределения и где ловушка.

    3. Свойства, автосвойства и инкапсуляция

      Свойства и поля в C#: get/set и их модификаторы, автосвойства, init-only из C# 9, инкапсуляция и почему публичные поля — плохая практика. С разбором кода.

  3. 3 Коллекции и LINQ

    1. Как устроены List и Dictionary

      Собеседование по C#: динамический массив с удвоением ёмкости, хеш-таблица и роль GetHashCode, сложность операций и выбор коллекции под задачу.

    2. LINQ и отложенное выполнение

      Вопрос с собеседования по C#: почему LINQ-запрос не выполняется, пока его не перечислили, чем опасно многократное перечисление и зачем нужен ToList().

    3. IEnumerable против IQueryable

      Вопрос с собеседования по C#: чем IQueryable отличается от IEnumerable, где выполняется фильтрация — в базе или в памяти, и что такое деревья выражений.

  4. 4 Асинхронность

    1. async/await под капотом

      Что компилятор C# делает с async-методом, почему async не значит «в другом потоке», как работает машина состояний и контекст синхронизации.

    2. Task против Thread

      Чем Task отличается от Thread в C#: пул потоков, Task как абстракция над работой, когда нужен Task.Run и почему асинхронный ввод-вывод не занимает поток.

    3. Deadlock и ConfigureAwait

      Почему .Result и .Wait() вешают приложение в UI и ASP.NET: механика классического deadlock, роль ConfigureAwait(false) и правило «async всю дорогу».

  5. 5 CLR и подводные камни

    1. Сборка мусора и поколения

      Поколения 0/1/2, почему GC в .NET быстрый, что такое Large Object Heap и как в управляемом коде возникает утечка памяти через подписку на событие.

    2. IDisposable и using

      IDisposable в C#: неуправляемые ресурсы, детерминированное освобождение, во что компилятор разворачивает using, полный паттерн Dispose и почему финализатор его не заменяет.

    3. == , Equals и GetHashCode

      Почему == для строк работает по значению, а для object — по ссылке, в чём контракт Equals и GetHashCode и что именно ломается в Dictionary, если его нарушить.