Основы C# и .NET
Платформа .NET, типы и переменные, строки, ООП, классы и интерфейсы, исключения, коллекции, методы, LINQ, структура проекта и dotnet CLI.
Фундамент, с которого начинается любое собеседование на Junior. Здесь нет «магии под капотом» — только то, что нужно уверенно понимать, чтобы писать корректный код на C# каждый день. Более глубокие вопросы про runtime, async и память — в следующем разделе.
- 1 Что такое .NET: CLR, CIL, JIT, BCL, SDK и Runtime? .NET — платформа для разработки: языки (C#, F#, VB), среда выполнения (CLR), библиотеки (BCL) и инструменты (SDK, dotnet CLI). Кроссплатформенна: Windows, Linux, macOS. … Junior7 мин
- 2 Типы данных в C#: int, double, decimal, bool, char, var, const и readonly? C# — статически типизированный язык: тип каждой переменной известен при компиляции. Встроенные типы — псевдонимы типов .NET: int = System.Int32, string = System.String. … Junior7 мин
- 3 Строки в C#: неизменяемость, StringBuilder, интерполяция, сравнение? string — ссылочный тип, но ведёт себя как значение: он неизменяем (immutable). Любая «модификация» (+, Replace, ToUpper) создаёт новую строку, исходная не меняется. Конк… Junior5 мин
- 4 Четыре принципа ООП на примерах C#: инкапсуляция, наследование, полиморфизм, абстракция Инкапсуляция — объект скрывает своё внутреннее состояние и даёт менять его только через методы, которые сохраняют правила (инварианты). В C#: private поля, публичные мет… Junior6 мин
- 5 Класс, абстрактный класс, интерфейс и struct — в чём разница и что выбрать? Класс — шаблон объекта с данными и поведением. Можно создать экземпляр (new), наследовать (один базовый класс). Абстрактный класс (abstract) — незавершённый базовый клас… Junior6 мин
- 6 Модификаторы доступа, static, sealed, partial — что означают и когда использовать? Модификаторы доступа определяют, кто видит член или тип: public (все), private (только этот тип — по умолчанию для членов), protected (тип и наследники), internal (вся с… Junior7 мин
- 7 virtual, override, new и перегрузка методов: в чём разница? Перегрузка (overload) — несколько методов с одним именем и разными параметрами в одном типе. Выбор делает компилятор по типам аргументов. Переопределение (virtual + over… Junior5 мин
- 8 Конструкторы и свойства: порядок инициализации, init, required, primary constructors? Конструктор создаёт объект в корректном состоянии. Можно иметь несколько (перегрузка), вызывать друг друга через : this(...) и конструктор базового класса через : base(.… Junior6 мин
- 9 Исключения в C#: try/catch/finally, throw vs throw ex, свои исключения? Исключение — объект, описывающий ошибку, которую код не может обработать на месте. Выброс (throw) прерывает выполнение и раскручивает стек вызовов до ближайшего подходящ… Junior6 мин
- 10 Коллекции: Array, List, Dictionary, HashSet, Queue, Stack — что выбрать и какая сложность? Array T[] — фиксированный размер, быстрый доступ по индексу O(1). List<T> — динамический массив: добавление в конец амортизированно O(1), вставка/удаление в середине O(n… Junior7 мин
- 11 Сравнение объектов: ==, Equals, ReferenceEquals и GetHashCode? Два вида равенства: ссылочное (это один и тот же объект в памяти) и по значению (объекты содержат одинаковые данные). Для классов по умолчанию == и Equals сравнивают ссы… Junior5 мин
- 12 Параметры методов: передача по значению и по ссылке, ref, out, in, params? В C# всё передаётся по значению по умолчанию: метод получает копию аргумента. Для значимых типов копируется само значение, для ссылочных — копия ссылки (на тот же объект… Junior6 мин
- 13 LINQ для начинающих: Where, Select, OrderBy, GroupBy, First vs Single, Any vs Count? LINQ (Language Integrated Query) — единый набор операторов для запросов к коллекциям, БД (EF Core), XML. Работает с любым IEnumerable<T>. Основные операторы: Where (филь… Junior6 мин
- 14 Лямбда-выражения, замыкания и методы расширения? Лямбда — анонимная функция, записанная кратко: x => x * 2, (a, b) => a + b, () => Console.WriteLine("Hi"). Присваивается делегату (Func<int, int>, Action) или дереву выр… Junior5 мин
- 15 Enum, кортежи, деконструкция и record — когда что использовать? enum — именованный набор целочисленных констант (OrderStatus.Paid). По умолчанию тип int, значения 0, 1, 2… Делает код читаемым и типобезопасным по сравнению с «магическ… Junior6 мин
- 16 Сложность алгоритмов (Big O): что нужно знать разработчику на практике? Big O описывает, как растёт время (или память) алгоритма с ростом объёма данных n, отбрасывая константы: важна форма роста, а не точные миллисекунды. Основные классы: O(… Junior6 мин
- 17 Структура .NET-решения: solution, csproj, NuGet, dotnet CLI, Debug и Release? Solution (.sln / .slnx) — контейнер для нескольких проектов. Проект (.csproj) — описание сборки на MSBuild: целевая платформа (<TargetFramework>net10.0</TargetFramework>… Junior5 мин