.NET Tutorial
Уровень Junior

Трек Junior: 63 вопроса

Фундамент: синтаксис и типы C#, ООП, коллекции, исключения, LINQ, основы ASP.NET Core, SQL и Git. То, без чего не пройти первое собеседование.

Основы C# и .NET17

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

C# и .NET углублённо7

  1. 18 Чем отличается .NET Framework от .NET Core / .NET 5+? .NET Framework (1.0–4.8.1) — только Windows, устанавливается в систему целиком, одна версия на машину, развивается лишь исправлениями безопасности. .NET Core → .NET 5+ —… Junior6 мин
  2. 19 Что такое managed vs unmanaged память? Когда нужен IDisposable? Managed — объекты в управляемой куче CLR; их освобождает GC автоматически. Unmanaged — всё, о чём GC не знает: файловые дескрипторы, сокеты, соединения с БД, нативная па… Junior6 мин
  3. 20 Value types vs reference types: стек, куча, boxing/unboxing, struct vs class? Value type (struct, int, DateTime, enum) хранит сами данные; при присваивании и передаче в метод копируется целиком. Reference type (class, string, массивы, делегаты) — … Junior7 мин
  4. 21 Что такое IEnumerable vs IQueryable? Где используется каждый? IEnumerable<T> — последовательность в памяти. LINQ-методы принимают делегаты (Func<T,bool>) и выполняются в вашем процессе (LINQ to Objects). IQueryable<T> — описание за… Junior5 мин
  5. 22 Delegates, Action, Func, Predicate — разница и применение? Делегат — типобезопасная ссылка на метод (или несколько методов). Под капотом — класс, наследник MulticastDelegate, хранящий объект-цель (Target) и указатель на метод. A… Junior5 мин
  6. 23 Что такое record types и positional records в C# 9+? record (= record class) — ссылочный тип с равенством по значению: два record равны, если равны все их поля. Positional record record Person(string Name, int Age); — комп… Junior6 мин
  7. 24 Nullability annotations и nullable reference types в C# 8+? Nullable reference types (NRT) — режим компилятора (<Nullable>enable</Nullable>), в котором string означает «не может быть null», а string? — «может быть null». Это толь… Junior6 мин

ASP.NET Core9

  1. 25 HTTP и REST API: методы, статус-коды, заголовки, идемпотентность? HTTP — текстовый протокол «запрос → ответ». Запрос: метод, URL, заголовки, необязательное тело. Ответ: статус-код, заголовки, тело (чаще JSON). REST — стиль API: ресурсы… Junior7 мин
  2. 26 Жизненный цикл HTTP-запроса в ASP.NET Core: middleware pipeline? Запрос принимает Kestrel, создаёт HttpContext и передаёт его в конвейер middleware — цепочку компонентов, каждый из которых может обработать запрос, передать дальше (awa… Junior6 мин
  3. 27 Как работает Dependency Injection встроенный в ASP.NET Core? DI — зависимости передаются объекту снаружи (обычно через конструктор), а не создаются внутри через new. Это даёт слабую связанность, тестируемость и управление временем… Junior5 мин
  4. 28 Scoped vs Transient vs Singleton — разница и ловушки? Singleton — один экземпляр на всё приложение. Должен быть потокобезопасным. Для: кэшей, клиентов (HttpClient через фабрику), конфигурации, TimeProvider. Scoped — один эк… Junior5 мин
  5. 29 Как работают Minimal API vs Controllers? Оба подхода работают поверх endpoint routing и одного конвейера middleware; различается модель описания эндпоинтов. Controllers (MVC): классы-наследники ControllerBase, … Junior5 мин
  6. 30 Model Binding и Validation: DataAnnotations, FluentValidation? Model binding превращает данные HTTP-запроса (маршрут, query, заголовки, форма, JSON-тело) в параметры действия. Источник задаётся атрибутами [FromRoute], [FromQuery], [… Junior5 мин
  7. 31 Как настроить CORS и почему это важно? Same-Origin Policy — правило браузера: JavaScript со страницы https://app.example.com не может читать ответы запросов к другому origin (схема + хост + порт), например ht… Junior5 мин
  8. 32 Kestrel vs IIS — чем отличаются, как хостировать? Kestrel — встроенный в ASP.NET Core кроссплатформенный веб-сервер. Он есть всегда (кроме in-process режима IIS, где используется IISHttpServer). Быстрый, поддерживает HT… Junior6 мин
  9. 33 Configuration: appsettings, переменные среды, IOptions<T>, secrets? Конфигурация — набор провайдеров, объединённых в одно дерево «ключ → значение». Порядок по умолчанию: appsettings.json → appsettings.{Environment}.json → User Secrets (D… Junior5 мин

Entity Framework Core6

  1. 34 Что такое ORM и EF Core: DbContext, DbSet, первые запросы и миграции? ORM (Object-Relational Mapping) — библиотека, которая сопоставляет классы C# с таблицами БД: вы работаете с объектами и LINQ, а ORM генерирует SQL и заполняет объекты ре… Junior6 мин
  2. 35 Code First vs Database First vs Model First? Code First — источник истины — C#-классы и конфигурация. Схема БД генерируется и эволюционирует через миграции. Стандарт для новых проектов на EF Core. Database First — … Junior5 мин
  3. 36 Lazy Loading vs Eager Loading vs Explicit Loading? Eager loading — связанные данные загружаются сразу вместе с основной сущностью через Include / ThenInclude (JOIN или отдельные запросы при AsSplitQuery). Предсказуемо, к… Junior6 мин
  4. 37 N+1 проблема — как обнаружить и решить? N+1: один запрос загружает список из N записей, затем для каждой записи выполняется ещё по запросу за связанными данными. Итого N+1 запросов вместо 1–2. Причины в EF Cor… Junior6 мин
  5. 38 Как работает AsNoTracking и когда его использовать? AsNoTracking() говорит EF Core не регистрировать загруженные сущности в Change Tracker: не создаются EntityEntry, снимки исходных значений, нет Identity Map. Результат: … Junior5 мин
  6. 39 Конфигурация через Fluent API vs Data Annotations? Модель EF Core строится из трёх источников с растущим приоритетом: соглашения (conventions) → Data Annotations (атрибуты на классах) → Fluent API (OnModelCreating). Flue… Junior5 мин

Базы данных и SQL5

  1. 40 Основы SQL: SELECT, WHERE, GROUP BY, HAVING, ORDER BY и порядок выполнения запроса? Реляционная БД хранит данные в таблицах (строки и столбцы). Первичный ключ (PK) однозначно идентифицирует строку, внешний ключ (FK) ссылается на строку другой таблицы и … Junior6 мин
  2. 41 ACID — что означает каждое свойство, как обеспечивается в SQL? Atomicity (атомарность) — транзакция выполняется целиком или никак. Обеспечивается журналом (WAL/transaction log) и механизмом отката (undo / версии строк). Consistency … Junior6 мин
  3. 42 Нормализация: 1NF-3NF-BCNF, денормализация — когда оправдана? Нормализация — организация данных так, чтобы каждый факт хранился в одном месте. Цель — избежать аномалий: вставки, обновления, удаления. 1NF — атомарные значения, нет п… Junior6 мин
  4. 43 JOIN-ы: INNER, LEFT, RIGHT, FULL OUTER, CROSS, самосоединение? INNER JOIN — только пары строк, у которых условие соединения выполнено (пересечение). LEFT JOIN — все строки левой таблицы + совпадения справа; нет совпадения → NULL в п… Junior7 мин
  5. 44 Разница между SQL и NoSQL: когда выбирать каждый? SQL (реляционные): данные в таблицах со строгой схемой, связи через внешние ключи, мощный язык запросов с JOIN-ами и агрегатами, ACID-транзакции. PostgreSQL, SQL Server,… Junior6 мин

Архитектура и паттерны3

  1. 45 SOLID: расшифровка, реальные примеры нарушений на .NET? S — Single Responsibility: у класса одна причина для изменения (один «владелец» требований). Нарушение — «божественный» OrderService на 3000 строк. O — Open/Closed: откр… Junior8 мин
  2. 46 DRY, KISS, YAGNI — в чём смысл и где грань? DRY (Don't Repeat Yourself) — каждое знание (бизнес-правило, формула, решение) должно иметь одно авторитетное представление в системе. Речь о дублировании знаний, а не с… Junior6 мин
  3. 47 Слоистая архитектура: Presentation → Application → Domain → Infrastructure? Код делится на слои по ответственности: Presentation (API, UI — принять запрос, вернуть ответ), Application (сценарии использования, оркестрация, транзакции), Domain (би… Junior5 мин

Тестирование5

  1. 48 Пирамида тестирования: Unit → Integration → E2E? Пирамида (Майк Кон): внизу — много быстрых и дешёвых unit-тестов, в середине — меньше интеграционных, наверху — немного медленных и хрупких E2E. Unit — логика одного кла… Junior5 мин
  2. 49 Что такое xUnit, NUnit, MSTest — основные отличия? Все три — полноценные фреймворки для .NET, запускаются через dotnet test, поддерживаются IDE и CI. Выбор чаще определяется привычками команды. xUnit — самый популярный в… Junior5 мин
  3. 50 Mock vs Stub vs Fake vs Spy — когда что использовать? Test double — общее название объектов-заменителей реальных зависимостей в тестах (термин Джерарда Месароша). Dummy — заглушка, которую передают, но не используют (параме… Junior6 мин
  4. 51 AAA-паттерн (Arrange-Act-Assert)? AAA — структура теста из трёх частей: Arrange (подготовить объект, зависимости, данные), Act (выполнить одно действие), Assert (проверить результат). Цель — читаемость: … Junior5 мин
  5. 52 Code Coverage — что измеряет и что не измеряет? Code coverage — доля кода, выполненного во время тестов. Виды: line (строки), branch (ветки if/switch/&&/?:), method, statement. Инструменты .NET: Coverlet (сбор, --coll… Junior5 мин

Очереди и асинхронная обработка4

  1. 53 Для чего нужны очереди сообщений: RabbitMQ, Kafka, Azure Service Bus? Брокер сообщений — посредник, который принимает сообщения от производителей, надёжно хранит их и доставляет потребителям. Отправитель и получатель не обязаны работать од… Junior7 мин
  2. 54 Разница между очередью (Queue) и топиком (Topic/Exchange)? Очередь (point-to-point) — каждое сообщение обрабатывает ровно один потребитель из группы (competing consumers). Модель для команд и задач: «отправь письмо», «сгенерируй… Junior5 мин
  3. 55 Dead Letter Queue — зачем нужна? Dead Letter Queue (DLQ) — отдельная очередь для сообщений, которые не удалось обработать после всех попыток, истёк TTL, превышен размер/лимит доставок или сообщение откл… Junior5 мин
  4. 56 Background Services: IHostedService, BackgroundService? IHostedService — интерфейс фонового компонента, которым управляет Generic Host: StartAsync при старте приложения и StopAsync при остановке. Регистрация — AddHostedServic… Junior6 мин

DevOps и инфраструктура2

  1. 57 Docker: Dockerfile для .NET, multi-stage builds, оптимизация образов? Контейнер упаковывает приложение со всеми зависимостями в неизменяемый образ: одинаково работает на ноутбуке, в CI и в продакшене. Образ собирается из слоёв, каждая инст… Junior6 мин
  2. 58 12-factor app — принципы применительно к .NET? The Twelve-Factor App (Heroku, 2011) — набор принципов для облачных сервисов: переносимость между окружениями, горизонтальное масштабирование, непрерывный деплой. Ключев… Junior6 мин

Безопасность1

  1. 59 SQL Injection, XSS, CSRF — как предотвращать в ASP.NET Core? SQL Injection — пользовательский ввод становится частью SQL-кода. Защита: параметризованные запросы (EF Core LINQ, FromSql($"..."), Dapper-параметры, SqlParameter); нико… Junior7 мин

Работа в команде и процессы4

  1. 60 Git для разработчика: commit, branch, merge, rebase, конфликты и pull request? Git — распределённая система контроля версий: у каждого разработчика полная копия истории. Три области: рабочая директория → git add → индекс (staging) → git commit → ло… Junior6 мин
  2. 61 Code review: как проводить и как принимать замечания? Цели ревью (по убыванию важности): найти ошибки и риски (корректность, безопасность, данные, производительность), сохранить поддерживаемость кода, распространить знания … Junior7 мин
  3. 62 Git flow vs GitHub flow vs trunk-based development: что выбрать? Git flow: долгоживущие ветки main (релизы) и develop (интеграция), плюс feature/*, release/*, hotfix/*. Подходит для версионируемых релизов (коробочный продукт, мобильны… Junior6 мин
  4. 63 Оценка задач: story points, T-shirt sizes, planning poker — как оценивать и не ошибаться? Оценка — это прогноз с неопределённостью, а не обещание. Хорошая оценка честно показывает диапазон и риски: «3–5 дней, если API партнёра работает как в документации». St… Junior6 мин
Трек Middle →Трек Senior →