es
Feedback

¡No caigas en manos de tramposos! Telemetrio encuentra y marca estos canales 👉 Si quieres ver la etiqueta, suscríbete

C# | Вопросы собесов

C# | Вопросы собесов

Ir al canal en Telegram

Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads

Mostrar más
4 995
Suscriptores
-324 horas
-67 días
-1530 días
Archivo de publicaciones
🤔 Какие методы есть в Action фильтре? Используются для выполнения логики до и после выполнения метода действия контроллера. Они предоставляют механизм для выполнения кросс-секционных задач, таких как логирование, обработка исключений, валидация и т.д. Action фильтры реализуют интерфейс IActionFilter или IAsyncActionFilter. 🚩Методы в Action фильтре 🟠OnActionExecuting Этот метод вызывается перед выполнением метода действия. Здесь можно добавить логику, которая будет выполняться до вызова действия, например, логирование или проверка условий.
public void OnActionExecuting(ActionExecutingContext context)
{
    // Логика до выполнения действия
}
🟠OnActionExecuted Этот метод вызывается после выполнения метода действия. Здесь можно добавить логику, которая будет выполняться после вызова действия, например, логирование результатов или модификация ответа.
public void OnActionExecuted(ActionExecutedContext context)
{
    // Логика после выполнения действия
}
🟠OnActionExecutionAsync Этот метод объединяет функциональность OnActionExecuting и OnActionExecuted в одном асинхронном методе. Здесь можно определить логику, которая будет выполняться как до, так и после выполнения метода действия.
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
    // Логика до выполнения действия
       
    var resultContext = await next();
       
    // Логика после выполнения действия
}
🚩Реализации Action фильтра Синхронный Action фильтр:
public class SampleActionFilter : IActionFilter
{
    public void OnActionExecuting(ActionExecutingContext context)
    {
        // Логика до выполнения действия
        Console.WriteLine("Before executing action");
    }

    public void OnActionExecuted(ActionExecutedContext context)
    {
        // Логика после выполнения действия
        Console.WriteLine("After executing action");
    }
}
Асинхронный Action фильтр:
public class SampleAsyncActionFilter : IAsyncActionFilter
{
    public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
    {
        // Логика до выполнения действия
        Console.WriteLine("Before executing action");
        
        var resultContext = await next();
        
        // Логика после выполнения действия
        Console.WriteLine("After executing action");
    }
}
🚩Применение Action фильтра Action фильтр можно применять к контроллерам или действиям контроллера с помощью атрибута [ServiceFilter] или [TypeFilter]. Также его можно зарегистрировать глобально в Startup.cs. Применение к контроллеру или действию:
[ServiceFilter(typeof(SampleActionFilter))]
public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}
Глобальная регистрация:
public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers(config =>
    {
        config.Filters.Add(typeof(SampleActionFilter));
    });
}
Ставь 👍 и забирай 📚 Базу знаний

Обнулите все свои кредиты и долги! Долги от 200 000₽. Поможем бесплатно списать долг и расторгнуть все кредитные договоры! По
Обнулите все свои кредиты и долги! Долги от 200 000₽. Поможем бесплатно списать долг и расторгнуть все кредитные договоры! Получить консультацию #реклама нет-кредит.рф О рекламодателе

🤔 Что такое Scoped? Scoped — объект создаётся один раз на каждый HTTP-запрос. Все компоненты в рамках одного запроса получают один и тот же экземпляр, но при следующем запросе создаётся новый. Подходит для работы с данными и контекстом, например, DbContext. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Может ли абстрактный метод быть вне абстрактного класса? Нет, абстрактный метод не может существовать вне абстрактного класса. В C# это ограничение встроено в язык, чтобы поддерживать строгую логику наследования и полиморфизма. 🚩Почему абстрактный метод требует абстрактного класса? Абстрактный метод — это метод, который объявлен, но не имеет реализации. Он выступает как "контракт", который обязан быть реализован в производном классе.
public abstract class Shape
{
    public abstract double CalculateArea();
}
Абстрактные методы имеют следующие особенности: Они не могут содержать тело (реализацию). Их цель — заставить производные классы реализовать конкретную функциональность. Они всегда принадлежат абстрактным классам. 🚩Пример ошибки Если попытаться объявить абстрактный метод в обычном классе, компилятор выдаст ошибку
public class RegularClass
{
    public abstract void SomeMethod(); // Ошибка: абстрактный метод может быть только в абстрактном классе
}
🚩Логика дизайна C# требует, чтобы абстрактные методы находились только в абстрактных классах, потому что: Абстрактные классы могут содержать как абстрактные, так и обычные методы. Это позволяет определять базовое поведение в абстрактном классе и оставлять специфическую реализацию производным классам. Обычные классы не могут содержать абстрактные методы, так как они предназначены для создания объектов, а объект не может содержать "незавершённый" метод. Ставь 👍 и забирай 📚 Базу знаний

🤔 В чём суть extension-методов? Extension-методы позволяют добавлять методы к существующим типам, не изменяя их исходный код. Это: - Делается с помощью static-класса и ключевого слова this перед параметром. - Вызывается как обычный метод у объекта. Это делает код более читаемым и расширяемым. Особенно полезны в LINQ и утилитарных сценариях. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как по ключу получить значение? Для получения значения по ключу в словаре (Dictionary<TKey, TValue>) используются методы и свойства, такие как индексатор [], метод TryGetValue, и метод ContainsKey. 🟠Индексатор `[]` Индексатор позволяет получить значение по ключу напрямую. Если ключ отсутствует в словаре, будет выброшено исключение KeyNotFoundException.
var dictionary = new Dictionary<int, string>
{
    { 1, "One" },
    { 2, "Two" },
    { 3, "Three" }
};

try
{
    string value = dictionary[2]; // Получение значения по ключу 2
    Console.WriteLine(value); // Выведет "Two"
}
catch (KeyNotFoundException)
{
    Console.WriteLine("Key not found");
}
🟠Метод `TryGetValue` Метод TryGetValue позволяет безопасно получить значение по ключу. Он возвращает true, если ключ найден, и false, если ключ отсутствует. При этом значение записывается в выходной параметр.
var dictionary = new Dictionary<int, string>
{
    { 1, "One" },
    { 2, "Two" },
    { 3, "Three" }
};

if (dictionary.TryGetValue(2, out string value))
{
    Console.WriteLine(value); // Выведет "Two"
}
else
{
    Console.WriteLine("Key not found");
}
🟠Метод `ContainsKey` Метод ContainsKey проверяет наличие ключа в словаре. Его можно использовать в сочетании с индексатором для получения значения.
var dictionary = new Dictionary<int, string>
{
    { 1, "One" },
    { 2, "Two" },
    { 3, "Three" }
};

if (dictionary.ContainsKey(2))
{
    string value = dictionary[2];
    Console.WriteLine(value); // Выведет "Two"
}
else
{
    Console.WriteLine("Key not found");
}
Ставь 👍 и забирай 📚 Базу знаний

Дарим подписку на Яндекс Музыку Ответьте на 1 вопрос и Яндекс Музыка ваша для вас и 3-х ваших близких. Кинопоиск и Яндекс Книги тоже в подписке. Попробуйте бесплатно❤️ Попробовать #реклама 18+ music.yandex.ru О рекламодателе Реклама на Яндексе

🤔 Для чего нужно разделение Large Object Heap и Small Object Heap? Разделение позволяет оптимизировать работу сборщика мусора, так как большие объекты редко перемещаются, а их обработка происходит отдельно, минимизируя накладные расходы. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что делать, если есть два интерфейса с одинаковым названием? Если в проекте присутствуют два интерфейса с одинаковым названием, это может привести к конфликту имен. Чтобы избежать этой проблемы, можно использовать несколько решений: 🟠Использование пространств имен (Namespaces) Наиболее очевидное и правильное решение — поместить интерфейсы в разные пространства имен и указывать их при использовании.
namespace FirstNamespace
{
    public interface ILogger
    {
        void Log(string message);
    }
}

namespace SecondNamespace
{
    public interface ILogger
    {
        void LogError(string message);
    }
}
Если в коде требуется использовать оба интерфейса, можно указать полное имя интерфейса
using FirstNamespace;
using SecondNamespace;

class Program
{
    static void Main()
    {
        FirstNamespace.ILogger logger1;
        SecondNamespace.ILogger logger2;
    }
}
🟠Использование псевдонимов для пространств имен Чтобы избежать длинных имен, можно задать псевдонимы:
using FirstLogger = FirstNamespace.ILogger;
using SecondLogger = SecondNamespace.ILogger;

class Program
{
    static void Main()
    {
        FirstLogger logger1;
        SecondLogger logger2;
    }
}
🟠Наследование интерфейсов Если оба интерфейса схожи по функциональности, можно создать общий интерфейс и наследовать его
public interface IBaseLogger
{
    void Log(string message);
}

public interface ILogger1 : IBaseLogger
{
}

public interface ILogger2 : IBaseLogger
{
}
🟠Явная реализация интерфейсов Если класс должен реализовывать оба интерфейса с одинаковыми методами, можно использовать явную реализацию интерфейсов:
using FirstNamespace;
using SecondNamespace;

class Logger : FirstNamespace.ILogger, SecondNamespace.ILogger
{
    void FirstNamespace.ILogger.Log(string message)
    {
        Console.WriteLine("First Logger: " + message);
    }

    void SecondNamespace.ILogger.LogError(string message)
    {
        Console.WriteLine("Second Logger Error: " + message);
    }
}

class Program
{
    static void Main()
    {
        Logger logger = new Logger();
        ((FirstNamespace.ILogger)logger).Log("Hello");
        ((SecondNamespace.ILogger)logger).LogError("Error");
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Интерполяция — это возможность использовать в строке переменные? Да, строковая интерполяция — это способ вставить значение переменной прямо внутрь строки. Это улучшает читаемость, заменяя конкатенацию. Используется как способ встроенного форматирования текста. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Почему вы не используете Битрикс24 CRM с AI? 1- не знал 2- забыл Рассказываем и напоминаем! ✅Битрикс24 CRM с AI помогает увел
+5
Почему вы не используете Битрикс24 CRM с AI? 1- не знал 2- забыл Рассказываем и напоминаем! ✅Битрикс24 CRM с AI помогает увеличивать продажи, работать с постоянными клиентами и сохранять все важные данные. AI-помощник CoPilot внутри сервиса расшифрует телефонные разговоры и автоматически заполнит карточки клиента в CRM. Битрикс24 можно использовать бесплатно для всех команд, независимо от их размера. ⚡Не тратьте время на рутину. Узнать больше #реклама 16+ bitrix24.ru О рекламодателе

🤔 Что такое метод set? Метод set в контексте чаще всего используется в свойствах (properties) класса и служит для установки значения свойства. Он работает как часть автоматического или пользовательского свойства, позволяя контролировать, что происходит, когда свойству присваивается значение. 🚩Что такое свойство? Свойство (property) в C# – это синтаксический сахар, который позволяет обращаться к полям класса как к переменным, но при этом добавляет возможность добавлять логику для получения (get) и установки (set) значений.
public class Person
{
    private string name; // Закрытое поле

    public string Name // Свойство
    {
        get { return name; } // Получить значение
        set { name = value; } // Установить значение
    }
}
🚩Зачем нужен метод `set`? 🟠Контролировать логику установки значений Например, вы можете ограничить, какие значения можно присваивать. 🟠Выполнять дополнительные действия при присваивании Например, логирование или обновление других полей. 🟠Защищать данные Вы можете использовать метод set для проверки значений на валидность или ограничения доступа (например, сделать его приватным). 🚩Пример использования `set` Проверка входных данных:
public class Person
{
    private int age;

    public int Age
    {
        get { return age; }
        set
        {
            if (value < 0)
            {
                throw new ArgumentException("Возраст не может быть отрицательным.");
            }
            age = value;
        }
    }
}
Только для чтения Вы можете сделать set приватным, чтобы свойство можно было только читать извне:
public class Person
{
    public string Name { get; private set; }

    public Person(string name)
    {
        Name = name;
    }
}
Автоматические свойства Если вам не нужна дополнительная логика, можно использовать автоматические свойства
public class Person
{
    public string Name { get; set; } // Автоматически создаются get и set
}
Ставь 👍 и забирай 📚 Базу знаний

Ищешь высокооплачиваемые проекты? Попробуй SkillStaff SkillStaff — это платформа для ИТ-специалистов, менеджеров и креаторов,
Ищешь высокооплачиваемые проекты? Попробуй SkillStaff SkillStaff — это платформа для ИТ-специалистов, менеджеров и креаторов, которым мало одного оклада. Здесь можно найти клиентов, выполнять их проекты и увеличивать свой доход. - Проекты с гибким графиком: part time, full time, удаленка и гибрид - Ставка за час работы — та, что ты сам выбрал - Клиенты — ведущие бренды, проверенные с юридической точки зрения при регистрации на платформе - Оплата поступает ежемесячно на расчетный счет исполнителя - Удобный личный кабинет и функционал, автоматизирующий документооборот Все, что нужно для работы — иметь статус самозанятого или ИП, а платформа поможет со всеми нюансами. Регистрируйся прямо сейчас Зарегистрироваться #реклама 16+ skillstaff.ru О рекламодателе

🤔 Как работает Routing? Это механизм сопоставления URL с соответствующими обработчиками в веб-приложении. 1. Сервер анализирует URL-запроса и перенаправляет его в нужный контроллер или обработчик. 2. Используется в веб-фреймворках (например, ASP.NET, Express.js) для обработки маршрутов. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Зачем нужны поколения для сборщика мусора в JS? В JavaScript (как и в C#) сборщик мусора (Garbage Collector, GC) использует поколения (generational GC) для оптимизации работы с памятью. Это помогает быстрее и эффективнее очищать ненужные объекты, минимизируя задержки в работе программы. 🚩Зачем нужны поколения в GC? 🟠Большинство объектов "живут" недолго В среднем, переменные и объекты в JS создаются и быстро перестают использоваться. Например, временные объекты в функциях. 🟠Некоторые объекты "живут" долго Например, глобальные переменные, кэш данных или объекты в setInterval. 🟠Очистка памяти должна быть быстрой Проверять всю память каждый раз — дорого по времени. GC должен быстро убирать "мусор", не замедляя выполнение кода. 🚩Как работают поколения? JS-движки, например V8 (Chrome, Node.js), используют Generational Garbage Collection — деление объектов на молодые (new generation) и старые (old generation). 🟠Молодое поколение (Young Generation) Сюда попадают новые объекты. GC часто проверяет эту область и быстро очищает. Если объект "выжил" несколько проверок, он переносится в старшее поколение. 🟠Старое поколение (Old Generation) Здесь хранятся "долгоживущие" объекты. Проверяется реже, так как здесь объекты реже становятся мусором. Очистка более сложная и дорогая по времени. Пример работы GC в V8
function createObjects() {
    let obj1 = { name: "temp" }; // попадает в Young Generation
    let obj2 = { data: new Array(1000).fill(0) }; // тоже в Young Generation
}

// После выхода из функции obj1 и obj2 становятся мусором и очищаются GC.
Ставь 👍 и забирай 📚 Базу знаний

🤔 Какие основные свойства и методы IEnumerable? IEnumerable предоставляет: - Возможность перебора элементов в коллекции. - Метод GetEnumerator(), возвращающий итератор. - Поддерживает foreach. IEnumerable<T> используется для отложенного выполнения и однократного прохода по данным. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какие есть виды привязок данных и когда применяются? Привязка данных (Data Binding) — это механизм, который позволяет автоматически синхронизировать данные между источником (например, моделью) и интерфейсом (например, элементами UI). 🚩Односторонняя привязка (One-Way Binding) Данные идут только в одном направлении: из модели в UI. - Для вывода данных, которые не должны изменяться пользователем - Например, для отображения текущего времени Пример в WPF
<TextBlock Text="{Binding UserName}" />
🚩Двусторонняя привязка (Two-Way Binding) Данные синхронизируются в обе стороны: UI ↔️ Модель - В формах ввода (например, TextBox), чтобы обновлять данные в модели - Используется в MVVM Пример в WPF
<TextBox Text="{Binding UserName, Mode=TwoWay}" />
🚩Привязка к событиям (Event Binding) Позволяет связывать UI с методами обработки событий. - Для обработки кнопок (Button.Click) - В реактивных фреймворках (Blazor, WinForms) Пример в Blazor
<button @onclick="IncrementCount">Добавить</button>

@code {
    private int count = 0;
    private void IncrementCount() => count++;
}
🚩Привязка к командам (Command Binding) Используется в паттерне MVVM вместо событий - В WPF и Xamarin - Позволяет отделить логику от UI Пример в WPF
<Button Content="Сохранить" Command="{Binding SaveCommand}" />
🚩Привязка к коллекциям (ItemsSource Binding) Позволяет привязывать списки к элементам UI (ListBox, DataGrid) - В списках, таблицах, дропдаунах Пример в WPF
<ListBox ItemsSource="{Binding Users}" DisplayMemberPath="Name" />
Ставь 👍 и забирай 📚 Базу знаний

Крупнейший университет искусственного интеллекта Приглашаем на бесплатный однодневный интенсив по AI! Освой искусственный инт
Крупнейший университет искусственного интеллекта Приглашаем на бесплатный однодневный интенсив по AI! Освой искусственный интеллект для профессионального роста: создавай нейросети, автоматизируй бизнес-задачи и зарабатывай на AI-решениях. ✨ 8 000+ студентов со всего мира ✨ 600+ AI-проектов, созданных студентами ✨ Сборная Университета — победители крупнейших AI-хакатонов России ✨ Стажировки в крупнейших компаниях России (РЖД, Ростелеком, РУДН, Совкомбанк, Самолет и другие) ✨ Трудоустраиваем выпускников в крупнейшие компании (Яндекс, ВТБ, Сбербанк, Роскосмос и другие) Будем рады видеть тебя в наших рядах! Узнать больше #реклама 16+ neural-university.ru О рекламодателе

🤔 Какая разница между статичным методом и методом экземпляра? - Статичный метод (static) принадлежит классу, а не объекту: - Вызывается без создания экземпляра. - Не имеет доступа к this, не может использовать нестатичные поля. - Метод экземпляра принадлежит конкретному объекту: - Требует создания экземпляра (new). - Имеет доступ к полям и методам объекта. Пример: Math.Abs() — статичный, myList.Add() — метод экземпляра. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое boxing и unboxing? boxing и unboxing — это два важных процесса, связанных с преобразованием типов между значимыми типами (value types) и ссылочными типами (reference types). Эти процессы играют ключевую роль в работе с обобщенными коллекциями и при взаимодействии между различными частями .NET Framework. 🚩Boxing Это процесс преобразования переменной значимого типа (например, int или struct) в тип object или в любой другой тип интерфейса, реализуемый этим значимым типом. При боксинге переменная значимого типа оборачивается в объект ссылочного типа, и её значение копируется в новый объект на управляемой куче. Это необходимо, потому что все элементы в .NET в конечном итоге должны быть объектами.
int num = 123;
object obj = num;  // Boxing
🚩Unboxing Это обратный процесс, при котором содержимое объекта ссылочного типа преобразуется обратно в значимый тип. Требует явного указания типа, к которому нужно преобразовать, и может вызывать исключение InvalidCastException, если объект не может быть преобразован в желаемый значимый тип.
object obj = 123;  // Boxing
int num = (int)obj;  // Unboxing
🟠Производительность Боксинг и анбоксинг могут негативно сказаться на производительности, поскольку они влекут за собой операции с памятью, включая выделение памяти и сборку мусора. Поэтому рекомендуется минимизировать их использование, особенно в критичных по производительности частях приложения. 🟠Нужда Несмотря на возможное негативное влияние на производительность, боксинг и анбоксинг необходимы для работы со значимыми типами в контекстах, где требуются объекты (например, при работе с коллекциями типа ArrayList). Ставь 👍 и забирай 📚 Базу знаний