C# | Вопросы собесов
5.1K subscribers
35 photos
1 file
984 links
Download Telegram
📌Что такое полиморфизм?

💬 Спрашивают в 56% собеседований

🤔 Полиморфизм — это ключевой принцип ООП, который позволяет одному и тому же интерфейсу принимать множество различных форм. В контексте программирования он обеспечивает возможность работать с объектами разных классов, как если бы они были объектами одного класса, основываясь на общности их поведения. Это достигается за счет использования общих интерфейсов или классов наследования. Полиморфизм может проявляться в двух основных формах:

1️⃣Статический (или компиляционный) полиморфизм:

Реализуется с помощью перегрузки методов (методы в одном классе имеют одинаковое имя, но различаются количеством или типом параметров) и перегрузки операторов. Статический полиморфизм определяется во время компиляции.

🤔 Пример:
      class MathOperations
{
public int Multiply(int a, int b)
{
return a * b;
}

public int Multiply(int a, int b, int c)
{
return a * b * c;
}
}


2️⃣ Динамический (или времени выполнения) полиморфизм:

Реализуется с помощью переопределения методов (когда методы в дочернем классе переопределяют методы родительского класса). Динамический полиморфизм использует механизм виртуальных методов и их переопределения (override) и определяется во время выполнения программы.

🤔 Пример:
      class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("Some sound");
}
}

class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Woof");
}
}


В этом примере метод MakeSound в классе Animal переопределяется в классе Dog для предоставления реализации, специфичной для собак. При вызове MakeSound на экземпляре Dog будет использоваться переопределенная версия метода, что является демонстрацией динамического полиморфизма.

🤔 Краткий ответ:

Полиморфизм упрощает добавление новых классов и функциональностей в программы без изменения существующего кода. Он способствует уменьшению связанности компонентов системы, упрощению ее расширения и облегчению поддержки. Полиморфизм также играет важную роль в реализации принципов SOLID, в частности, в обеспечении гибкости и масштабируемости программного обеспечения.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
📌Что такое ООП?

💬 Спрашивают в 56% собеседований

🤔 Объектно-ориентированное программирование (ООП) — это парадигма, основанная на концепции "объектов", которые могут содержать данные в виде полей, часто известных как атрибуты или свойства, и код, в виде процедур, часто известных как методы. ООП фокусируется на использовании объектов для моделирования реальных или абстрактных сущностей, упрощая разработку и поддержку программных систем.

🤔 Основные концепции:

1️⃣Инкапсуляция:

Инкапсуляция заключается в сокрытии внутреннего состояния объекта от внешнего мира и предоставлении публичного интерфейса для взаимодействия с объектом. Это позволяет скрыть сложность внутри объектов и изменять внутреннюю реализацию без вреда для других частей программы.

2️⃣Наследование:

Наследование позволяет создавать новые классы на основе уже существующих, перенимая их свойства и методы. Это обеспечивает иерархическую организацию классов и уменьшает дублирование кода.

3️⃣Полиморфизм:

Полиморфизм дает возможность использовать объекты разных классов с одинаковым интерфейсом без информации о внутренней структуре объекта. В результате один и тот же метод может быть использован в разных контекстах для объектов разных типов.

4️⃣Абстракция:

Абстракция позволяет сконцентрироваться на важных характеристиках объекта, не углубляясь в детали его реализации. Это достигается за счет определения абстрактных классов и интерфейсов, которые описывают общий для группы объектов функционал.

🤔 Пример:
public abstract class Животное
{
public abstract void Голос(); // Абстрактный метод, определение голоса животного
}

public class Собака : Животное
{
public override void Голос()
{
Console.WriteLine("Гав");
}
}

public class Кошка : Животное
{
public override void Голос()
{
Console.WriteLine("Мяу");
}
}

class Program
{
static void Main(string[] args)
{
Животное мояСобака = new Собака();
мояСобака.Голос(); // Вывод: Гав

Животное мояКошка = new Кошка();
мояКошка.Голос(); // Вывод: Мяу
}
}


В этом примере класс Животное абстрагирует общее понятие животного с методом Голос. Классы Собака и Кошка наследуют от Животное и реализуют метод Голос, демонстрируя полиморфизм — один интерфейс, разные реализации.

🤔 Краткий ответ:

ООП — это подход, который использует объекты для моделирования данных и поведения программы. Основывается на четырех столпах: инкапсуляция, наследование, полиморфизм и абстракция, что облегчает разработку, тестирование и поддержку сложных программных систем.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Какой метод используется для копирования содержимого одного массива в другой в C#?
Anonymous Quiz
46%
Array.CopyTo()
30%
Array.Copy()
23%
Array.Clone()
1%
Array.Transfer()
📌 В чем разница между асинхронностью и многопоточностью?

💬 Спрашивают в 33% собеседований

🤔 Асинхронность и многопоточность — это два различных, но часто связанных понятия, которые используются для управления выполнением задач таким образом, чтобы повысить эффективность и отзывчивость приложений. Хотя они оба направлены на оптимизацию выполнения программ, между ними есть ключевые различия в подходах и использовании.

🤔 Асинхронность

Это подход, при котором задача может выполняться независимо от основного потока программы, и не блокирует его выполнение в ожидании завершения. Это позволяет программе продолжать работу, пока выполняется асинхронная операция, например, доступ к файлу или сетевой запрос. Ключевая особенность асинхронности заключается в том, что она позволяет обрабатывать задачи без блокировки, улучшая отзывчивость и производительность приложения, особенно в средах с графическим интерфейсом пользователя или в серверных приложениях.

🤔 Примеры:

Запросы к веб-сервисам

Операции чтения/записи файлов

Базы данных или сетевые операции

🤔 Многопоточность

Это подход, при котором несколько потоков исполнения работают параллельно, что позволяет выполнять несколько операций одновременно. Это может быть реализовано как на одном процессоре с использованием временной мультиплексированной многозадачности, так и на многоядерных процессорах, где каждый поток может выполняться фактически одновременно на своем ядре. Многопоточность идеально подходит для задач, требующих тяжелых вычислений, и может значительно ускорить выполнение программы за счет распараллеливания работы.

🤔 Примеры:

Параллельные вычисления и обработка больших объемов данных

Серверы, обрабатывающие множество одновременных соединений

Реализация фоновых задач, которые должны исполняться параллельно основному потоку

🤔 Ключевые различия

1️⃣ Цели использования:

Асинхронность обычно используется для улучшения отзывчивости приложений и эффективного использования ожидания (например, I/O операции), тогда как многопоточность применяется для ускорения выполнения вычислительно сложных задач за счет параллелизма.

2️⃣ Управление ресурсами:

Асинхронные операции часто управляются операционной системой и могут использовать меньше ресурсов, поскольку не требуют постоянного выделения отдельного потока. Многопоточность требует более активного управления потоками, что может привести к большему потреблению памяти и процессорного времени.

3️⃣ Сложность разработки:

Работа с многопоточностью часто более сложна из-за необходимости синхронизации доступа к общим ресурсам и управления состоянием, что может привести к ошибкам, таким как взаимные блокировки и состояния гонки. Асинхронное программирование также требует понимания, но оно более структурировано и часто управляется с помощью высокоуровневых паттернов и библиотек.

🤔 Краткий ответ:

Оба эти подхода важны в современной разработке ПО и могут использоваться вместе для создания высокопроизводительных, масштабируемых и отзывчивых приложений.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
📌 Что такое EF?

💬 Спрашивают в 33% собеседований

🤔 Entity Framework (EF) — это объектно-реляционный маппер (ORM), разработанный компанией Microsoft, позволяющий работать с данными на высоком уровне абстракции, оперируя объектами и классами вместо прямых запросов к базе данных. Предоставляет мощные возможности для моделирования, запросов, сохранения и обработки данных в различных базах данных, таких как SQL Server, MySQL, SQLite и других.

🤔 Основные компоненты и возможности:

1️⃣DbContext:

Это основной класс в EF, который управляет взаимодействием с базой данных. Он предоставляет доступ к функциональности, такой как выполнение запросов, сохранение данных и настройка моделей.

2️⃣ DbSet:

Это коллекции объектов определенного класса, которые представляют собой таблицы в базе данных. Классы, которые представляют данные в таблицах, обычно называются сущностями.

3️⃣ LINQ to Entities:

EF позволяет использовать LINQ (Language Integrated Query) для написания запросов к базе данных, которые затем транслируются в SQL-запросы. Это позволяет разработчикам писать запросы к данным в объектно-ориентированном стиле на C#.

4️⃣ Миграции:

EF поддерживает механизм миграций для управления изменениями в структуре базы данных по мере развития приложения. Миграции позволяют автоматически обновлять схему базы данных в соответствии с изменениями в моделях данных.

5️⃣ Конвенции и настройки:

Entity Framework использует набор конвенций для автоматического маппинга классов на таблицы и их свойств на столбцы. Разработчики могут переопределить и дополнить эти конвенции с помощью аннотаций данных или Fluent API.

🤔 Версии:

Entity Framework 6 (EF6):

Последняя версия для .NET Framework. EF6 продолжает поддерживаться и развиваться, включая новые функции и исправления ошибок.

Entity Framework Core (EF Core):

Современная, легковесная, расширяемая и кросс-платформенная версия Entity Framework, разработанная для .NET Core. EF Core предназначен для использования в модернизированных и масштабируемых приложениях и поддерживает широкий спектр баз данных.
using (var context = new BloggingContext())
{
var blog = new Blog { Url = "https://blogs.msdn.com/adonet" };
context.Blogs.Add(blog);
context.SaveChanges();

var blogs = context.Blogs
.Where(b => b.Url.Contains("msdn"))
.ToList();
foreach (var b in blogs)
{
Console.WriteLine(b.Url);
}
}


В этом примере создается новый объект Blog, добавляется в контекст и сохраняется в базе данных. Затем выполняется запрос для извлечения блогов с определенным URL.

🤔 Краткий ответ:

Entity Framework значительно упрощает работу с реляционными базами данных, позволяя разработчикам сосредоточиться на бизнес-логике, вместо деталей реализации доступа к данным. Он предлагает мощные инструменты для абстракции доступа к данным, что делает код чище, проще для понимания и поддержки.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
📌 Что такое индексы, какие типы бывают, использовал ли их на практике?

💬 Спрашивают в 33% собеседований

🤔 Индексы — это структуры данных, которые улучшают скорость операций выборки данных, но могут снижать производительность операций вставки, удаления и обновления из-за необходимости поддержания индекса в актуальном состоянии. Могут быть построены на одном или нескольких столбцах таблицы и позволяют быстро находить строки без необходимости сканирования всей таблицы.

🤔 Типы:

1️⃣ Одиночные индексы (Single-column indexes):

Индексируют значения одного столбца таблицы. Это основной тип индекса, используемый для ускорения запросов, фильтрующих или сортирующих данные по одному столбцу.

2️⃣ Составные индексы (Composite indexes):

Индексируют значения, основанные на нескольких столбцах. Они полезны, когда операции выборки, сортировки или объединения таблиц часто используют одни и те же комбинации столбцов.

3️⃣ Уникальные индексы (Unique indexes):

Гарантируют, что индексируемые значения уникальны. Они часто используются для обеспечения уникальности столбцов или набора столбцов в таблице.

4️⃣ Полнотекстовые индексы (Full-text indexes):

Позволяют проводить полнотекстовый поиск по текстовым данным в базе данных. Они оптимизированы для поиска слов в больших текстовых полях и часто используются в системах, где требуется поиск по содержимому статей, блогов и других текстовых документов.

5️⃣ Пространственные индексы (Spatial indexes):

Используются для индексации пространственных данных, таких как географические объекты. Они оптимизируют запросы, включающие пространственные операции, такие как нахождение объектов внутри заданной области.

На практике индексы — это мощный инструмент для оптимизации производительности баз данных. Однако они должны использоваться осмысленно.

🤔 Осмысленное использование:

Анализ запросов:

Использование индексов должно начинаться с анализа наиболее часто выполняемых запросов и понимания структуры данных. Профилирование и анализ планов выполнения запросов помогут определить, где индексы могут быть полезны.

Сбалансированное использование:

Несмотря на преимущества ускорения чтения, индексы добавляют накладные расходы на операции записи. Каждая операция вставки, удаления или изменения данных требует обновления индексов, что может замедлить эти операции.

Обслуживание индексов:

С течением времени индексы могут фрагментироваться, особенно в активно изменяемых базах данных. Регулярное обслуживание, такое как реорганизация и перестроение индексов, помогает поддерживать их производительность на оптимальном уровне.

🤔 Краткий ответ:

Индексы особенно полезны в больших базах данных, где правильно построенные индексы могут сократить время ответа запросов с нескольких минут до секунд. Важно помнить о затратах на поддержание индексов и влиянии на производительность операций записи. Поэтому перед созданием индекса всегда следует тщательно анализировать и тестировать его влияние на систему.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
📌 Когда инициируется сборка мусора?

💬 Спрашивают в 56% собеседований

Сборка мусора (Garbage Collection, GC) автоматически управляет выделением и освобождением памяти в управляемом куче. Сборка мусора инициируется автоматически в следующих ситуациях:

1️⃣ Недостаток памяти:

Если приложению требуется больше памяти для выделения объектов в управляемой куче и доступной памяти недостаточно, CLR (Common Language Runtime) автоматически инициирует сборку мусора для освобождения памяти, занятой неиспользуемыми объектами.

2️⃣ Достигнут порог выделения памяти:

.NET Framework использует алгоритм, который основывается на объеме выделенной памяти. Для каждого поколения объектов (0, 1, и 2) определен пороговый объем выделенной памяти. Когда приложение выделяет память и этот порог достигается, происходит сборка мусора соответствующего поколения.

3️⃣ Вызов GC.Collect():

Разработчики могут явно запросить сборку мусора, вызвав метод GC.Collect(). Однако использовать этот метод нужно осторожно, так как его неправильное использование может привести к снижению производительности приложения. В большинстве случаев следует избегать явного вызова сборки мусора и полагаться на автоматическое управление памятью CLR.

4️⃣ Завершение работы приложения:

При завершении работы приложения .NET Framework автоматически выполняет сборку мусора для очистки всех управляемых объектов, даже если они еще доступны.

5️⃣ Низкий уровень памяти в системе:

Если операционная система сообщает о низком уровне доступной памяти, CLR может инициировать сборку мусора в попытке освободить память для системы.

🤔 Краткий ответ:

Сборка мусора проектировалась таким образом, чтобы минимизировать необходимость вмешательства программиста в процесс управления памятью. Она позволяет автоматически решать большинство задач по освобождению памяти, что значительно упрощает разработку и повышает надежность программ на .NET.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
3
🤔 Что произойдет, если у класса есть два интерфейса с одинаковыми методами и они реализованы явно?
Anonymous Quiz
12%
Компилятор выбросит ошибку
11%
Методы будут перегружены
72%
Класс должен явно указать, какой метод интерфейса реализован
4%
Методы будут объединены в один
📌 Какая разница между структурой и классом?

💬 Спрашивают в 33% собеседований

Структуры (struct) и классы (class) являются двумя основными конструкциями, используемыми для определения типов данных. Хотя на первый взгляд они могут казаться похожими, между ними есть несколько ключевых различий:

1️⃣ Семантика хранения

Классы:

Классы в C# являются ссылочными типами. Это означает, что при присваивании объекта класса переменной или передаче его методу создается ссылка на объект, а не копия самого объекта. Все переменные класса указывают на один и тот же экземпляр в памяти.

Структуры:

Структуры — это значимые типы. Когда структура присваивается другой переменной или передается методу, создается копия всей структуры. Изменения одной копии не влияют на другую.

2️⃣ Наследование

Классы:

Классы поддерживают как интерфейсное, так и классовое наследование, то есть класс может наследовать поведение другого класса.

Структуры:

Структуры могут реализовывать интерфейсы, но не могут наследовать от других структур или классов. Также структуры не могут быть базовыми для других структур или классов.

3️⃣ Конструкторы

Классы:

Классы могут иметь конструкторы с параметрами и без параметров.

Структуры:

Структуры не могут иметь явно определенного конструктора без параметров, так как автоматически предоставляется конструктор по умолчанию, который инициализирует все поля значениями по умолчанию. Структуры могут иметь конструкторы с параметрами.

4️⃣ По умолчанию null

Классы:

Переменные класса могут быть null, если им не присвоен экземпляр объекта.

Структуры:

Структуры не могут иметь значение null, поскольку они всегда содержат значение.

5️⃣ Память и производительность

Классы:

Так как объекты класса хранятся в куче, работа с классами может привести к дополнительным затратам на управление памятью и сборку мусора.

Структуры:

Поскольку структуры хранятся в стеке и не требуют сборки мусора, работа с ними может быть более быстрой, особенно когда они маленькие и используются в кратковременных или локальных контекстах.

🤔 Пример:
public struct Point
{
public int X;
public int Y;

public Point(int x, int y)
{
X = x;
Y = y;
}
}

public class Circle
{
public Point Center;
public double Radius;

public Circle(int x, int y, double radius)
{
Center = new Point(x, y);
Radius = radius;
}
}


Используйте структуры, когда вам нужно создать небольшой тип данных, который будет использоваться в большом количестве и не требует наследования.

Используйте классы, когда вам нужно создать более сложные объекты, которые потенциально могут быть наследованы другими классами или когда необходимо управление жизненным циклом объекта через сборку мусора.

🤔 Краткий ответ:

Выбор между структурой и классом зависит от требований к производительности, использования памяти и функциональности программы.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👾1
🤔 Какое ключевое слово используется для объявления неявно типизированной локальной переменной?
Anonymous Quiz
16%
dynamic
81%
var
1%
auto
1%
let
📌 Что такое сервис локатор?

💬 Спрашивают в 33% собеседований

Сервис локатор (Service Locator) — это шаблон проектирования, используемый в программировании для управления зависимостям между компонентами. Шаблон сервис локатора предоставляет централизованный реестр, где компоненты могут регистрировать свои сервисы и услуги, а другие части приложения — искать их по необходимости. Это отличается от инъекции зависимостей, где зависимости передаются компонентам через конструкторы или свойства.

🤔 Ключевые характеристики

1️⃣ Централизованный реестр сервисов:

Сервис локатор содержит реестр всех доступных сервисов. Каждый сервис ассоциируется с уникальным ключом или идентификатором.

2️⃣ Получение сервиса по требованию:

Компоненты приложения могут запрашивать нужные сервисы из локатора, предоставляя соответствующий ключ или идентификатор.

3️⃣ Управление зависимостями:

Сервис локатор помогает управлять зависимостями в приложении, позволяя компонентам работать независимо от конкретных реализаций сервисов, с которыми они взаимодействуют.

🤔 Пример:
public interface IService
{
void Execute();
}

public class ServiceLocator
{
private IDictionary<object, IService> services;

public ServiceLocator()
{
services = new Dictionary<object, IService>();
}

public void RegisterService<T>(IService service)
{
services.Add(typeof(T), service);
}

public IService GetService<T>()
{
return services[typeof(T)];
}
}

public class ConcreteService : IService
{
public void Execute()
{
Console.WriteLine("Service Executed");
}
}

class Program
{
static void Main()
{
ServiceLocator locator = new ServiceLocator();
locator.RegisterService<IService>(new ConcreteService());

IService service = locator.GetService<IService>();
service.Execute(); // Output: Service Executed
}
}


🤔 Преимущества:

Гибкость:

Компоненты не зависят от способов создания их зависимостей, что упрощает изменения и тестирование.

Универсальность:

Легко добавить новый сервис или изменить существующий без изменения потребляющих его компонентов.

🤔 Недостатки:

Скрытая связанность:

Зависимости между компонентами и их сервисами не всегда ясны, что может привести к более сложному коду и затруднить его понимание и поддержку.

Сложность управления:

По мере роста приложения управление всеми сервисами через локатор может стать сложным и неудобным.

🤔 Краткий ответ:

Сервис локатор может быть полезен в ситуациях, когда нужна высокая степень гибкости и динамичности в управлении зависимостями, но его использование должно быть оправдано требованиями проекта, так как оно вносит дополнительную сложность в архитектуру приложения.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🤔 Что из перечисленного нельзя использовать в методе с модификатором async?
Anonymous Quiz
15%
try-catch
11%
return
7%
await
68%
lock
📌 Что такое лямбда выражения в С#?

💬 Спрашивают в 56% собеседований

🤔 Лямбда-выражения — это сокращённый способ записи анонимных методов, то есть методов без имени. Эти выражения особенно полезны для создания небольших функций, которые можно передавать в качестве аргументов или использовать в качестве типов делегатов. Они упрощают код и делают его более читаемым, особенно когда речь идёт о работе с коллекциями или асинхронном программировании.

🤔 Основной синтаксис лямбда-выражения:
параметры => выражение


Где => называется лямбда оператором, который можно прочесть как "переходит к".

🤔 Пример без параметров:
() => Console.WriteLine("Привет, мир!");


🤔 Пример с одним параметром:
x => x * x; // Возвращает квадрат x


🤔 Пример с несколькими параметрами:
(x, y) => x + y; // Складывает x и y


🤔 Зачем они нужны?

Лямбда-выражения особенно полезны в LINQ (Language Integrated Query), где они используются для создания кратких и выразительных запросов к данным. Например, чтобы выбрать все положительные числа из списка, можно использовать лямбда-выражение следующим образом:
List<int> числа = new List<int> { -1, 0, 1, 2, 3, 4, 5 };
var положительныеЧисла = числа.Where(x => x > 0).ToList();

foreach (var число in положительныеЧисла)
{
Console.WriteLine(число);
}


Лямбда-выражения также могут быть использованы для создания делегатов в событийно-ориентированных или асинхронных программах, делая код более лаконичным и легко читаемым.

🤔 Краткий ответ:

Лямбда-выражения предоставляют мощный и гибкий способ работы с функциями, позволяя писать компактный и выразительный код. Они идеально подходят для выполнения операций с коллекциями, асинхронного программирования и везде, где требуется краткость и выразительность.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
📌 Что такое middleware в ASP.NET core?

💬 Спрашивают в 67% собеседований

Middleware — это программные компоненты, которые выполняются при каждом запросе к приложению и обрабатываются в определенном порядке в виде конвейера. Эти компоненты могут выполнять различные задачи, такие как аутентификация, логирование, обработка ошибок, управление сессиями, и многое другое. Он позволяет добавлять и настраивать функциональность приложения в точках, через которые проходит HTTP-запрос или ответ.

🤔 Как он работает?

Каждый его компонент имеет возможность обработать запрос перед тем, как он будет передан следующему компоненту в конвейере, а также может изменять ответ после выполнения последующих компонентов. Такая архитектура позволяет создавать легко расширяемые и модульные приложения.

Middleware конфигурируется в методе Configure класса Startup. Порядок, в котором компоненты middleware добавляются в конвейер с помощью метода Use..., определяет порядок их выполнения при обработке запроса и ответа.

🤔 Пример:
public class MyMiddleware
{
private readonly RequestDelegate _next;

public MyMiddleware(RequestDelegate next)
{
_next = next;
}

public async Task InvokeAsync(HttpContext context)
{
// До вызова следующего компонента в конвейере
Console.WriteLine("Before");

await _next(context); // Передача управления следующему middleware

// После возвращения управления от следующих компонентов
Console.WriteLine("After");
}
}

// Регистрация middleware в Startup.cs
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseMiddleware<MyMiddleware>();
// Другие компоненты middleware
}


Middleware часто используют для следующих задач:

Аутентификация и авторизация:

проверка пользовательских данных и определение прав доступа.

Логирование:

запись информации о запросах и ответах для последующего анализа.

Обработка ошибок:

централизованная обработка исключений и формирование соответствующих ответов клиенту.

Управление сессиями и куками:

поддержка пользовательских сессий и управление куками.

Статические файлы:

обработка запросов к статическим файлам, таким как HTML, CSS, изображения.

Middleware обеспечивает гибкую и мощную систему для управления потоком HTTP-запросов и ответов, позволяя разработчикам легко добавлять и настраивать необходимую функциональность в своих веб-приложениях.

🤔 Краткий ответ:

Middleware в ASP.NET Core — это компоненты, которые работают с каждым запросом и ответом в приложении, формируя конвейер для обработки HTTP-сообщений. Они позволяют добавлять нужную функциональность, например, для логирования, аутентификации или обработки ошибок, делая приложение модульным и легко поддерживаемым.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Какое значение по умолчанию имеет тип bool в C#?
Anonymous Quiz
16%
true
72%
false
9%
null
3%
0
📌 Что такое делегат?

💬 Спрашивают в 78% собеседований

Делегат — это тип, который безопасно инкапсулирует метод, подобно указателю на функцию в других языках программирования, но с проверкой типов во время компиляции. Делегаты могут ссылаться на метод, который принимает параметры и возвращает значение. Они используются для реализации обратных вызовов и событий, а также для определения пользовательских операций, которые могут быть выполнены методом, принимаемым в качестве параметра.

🤔 Зачем они нужны?

Делегаты предоставляют способ передачи методов в качестве аргументов другим методам. Это полезно для реализации шаблонов проектирования, таких как наблюдатель (Observer), стратегия (Strategy), и для создания асинхронных вызовов. Они позволяют абстрагироваться от конкретных методов, передавая вместо этого ссылку на метод, что делает код более гибким и масштабируемым.

🤔 Пример:
// Определение делегата
public delegate int Operation(int x, int y);

class Program
{
static void Main(string[] args)
{
// Создание экземпляра делегата, ссылающегося на метод Add
Operation op = Add;

// Вызов метода через делегат
int result = op(5, 5);
Console.WriteLine(result); // Вывод: 10

// Делегат теперь ссылается на метод Subtract
op = Subtract;

// Повторный вызов метода через делегат
result = op(10, 5);
Console.WriteLine(result); // Вывод: 5
}

static int Add(int x, int y)
{
return x + y;
}

static int Subtract(int x, int y)
{
return x - y;
}
}


В этом примере делегат Operation может ссылаться на любой метод, который принимает два целочисленных параметра и возвращает целое число. Сначала делегат ссылается на метод Add, затем на Subtract. Это демонстрирует, как можно динамически изменять методы, на которые указывает делегат, обеспечивая гибкость в выборе выполняемой операции.

🤔 Краткий ответ:

Делегаты — мощный инструмент для создания гибких и масштабируемых приложений, позволяющий передавать методы как параметры, использовать их для определения событий и реализовывать асинхронные операции. Они обеспечивают безопасный и типобезопасный способ работы с методами в качестве объектов первого класса.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4