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

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

Ir al canal en Telegram
5 051
Suscriptores
-324 horas
-167 días
-2830 días
Archivo de publicaciones
🤔 Что такое абстракция? Абстракция — это принцип ООП, который выделяет только важные характеристики объекта, скрывая сложные детали его реализации. Это помогает упростить взаимодействие с объектами и сконцентрироваться на их использовании, а не на внутренней структуре. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Помощь в трудоустройстве в IT-сфере! В России из-за дефицита айтишников запустили бесплатную программу по обучению IT-специал
+9
Помощь в трудоустройстве в IT-сфере! В России из-за дефицита айтишников запустили бесплатную программу по обучению IT-специалистов. Теперь любой желающий может попробовать себя в IT с полного нуля и начать обучение бесплатно! Узнайте про дальнейшее трудоустройство в ведущие IT-компании для восполнения кадрового дефицита. Для этого нужно: - Перейти по ссылке - Заполнить анкету и ответить на вопросы (занимает менее 3 минут) - На основании ваших ответов вы сразу узнаете, подходит ли вам сфера IT и сможете ли вы в ней работать Перейти на сайт #реклама 16+ urban-university.ru О рекламодателе

🤔 В чем разница между семафором и mutex? Это два механизма синхронизации, используемые для управления доступом к общим ресурсам в многопоточном программировании. Хотя они часто используются для схожих целей, между ними есть важные различия. 🚩Мьютекс 🟠Взаимоисключение Только один поток может владеть мьютексом в данный момент времени. 🟠Владелец Поток, который захватил мьютекс, становится его владельцем и может его освободить. 🟠Блокировка на уровне ядра Мьютексы обычно реализуются на уровне ядра операционной системы, что делает их более тяжелыми в плане ресурсов. 🟠Использование Обычно используется для синхронизации доступа к критическим секциям кода.
public class Example
{
    private static Mutex mutex = new Mutex();

    public void UseResource()
    {
        mutex.WaitOne(); // Захват мьютекса
        try
        {
            // Критическая секция
        }
        finally
        {
            mutex.ReleaseMutex(); // Освобождение мьютекса
        }
    }
}
🚩Семафор (Semaphore) 🟠Счетчик Семафор имеет счетчик, который отслеживает количество разрешений. Потоки уменьшают счетчик при входе и увеличивают при выходе. 🟠Многократный доступ В отличие от мьютекса, семафор позволяет нескольким потокам одновременно получать доступ к ресурсу, если счетчик больше нуля. 🟠Использование Используется для управления доступом к ограниченным ресурсам, таким как пул соединений, доступ к базе данных и т. д.
public class Example
{
    private static Semaphore semaphore = new Semaphore(3, 3); // Максимум 3 потока

    public void UseResource()
    {
        semaphore.WaitOne(); // Захват семафора
        try
        {
            // Критическая секция
        }
        finally
        {
            semaphore.Release(); // Освобождение семафора
        }
    }
}
🚩Ключевые различия: 🟠Владелец Мьютекс: Может быть освобожден только потоком, который его захватил. Семафор: Может быть освобожден любым потоком. 🟠Количество потоков Мьютекс: Разрешает доступ только одному потоку. Семафор: Разрешает доступ нескольким потокам, количество которых ограничено счетчиком. 🟠Использование Мьютекс: Используется для защиты критических секций, где необходим доступ только одного потока. Семафор: Используется для управления доступом к ресурсам, которые могут быть использованы одновременно несколькими потоками, но в ограниченном количестве. 🟠Реализация Мьютекс: Обычно реализуется на уровне ядра операционной системы, что делает его более тяжелым. Семафор: Может быть реализован как на уровне ядра, так и на уровне пользовательского кода. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое Action Executor и Action Executing? ActionExecutor — это компонент, который отвечает за выполнение действия, обычно связанного с бизнес-логикой приложения. ActionExecuting запускается перед выполнением действия и используется для проверки условий, логирования или предварительной настройки. Эти механизмы позволяют управлять процессом выполнения и обеспечивать гибкость. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Получи грант на обучение в Центральном университете Прояви себя, получи грант до 2,8 млн на обучение ИТ и бизнесу в вузе. Для
Получи грант на обучение в Центральном университете Прояви себя, получи грант до 2,8 млн на обучение ИТ и бизнесу в вузе. Для школьников 10-х и 11-х классов, СПО. Подать заявку #реклама apply.centraluniversity.ru О рекламодателе

🤔 Что такое Idisposable? Это интерфейс в .NET, который предоставляет механизм для высвобождения неуправляемых ресурсов. Он содержит один метод Dispose, который должен быть реализован классами, использующими неуправляемые ресурсы, такие как файловые дескрипторы, соединения с базами данных или ресурсы ОС. 🚩Основная цель Это освобождение ресурсов, которые не управляются средой CLR (Common Language Runtime). Такие ресурсы не могут быть автоматически освобождены сборщиком мусора, поэтому необходимо явно управлять их жизненным циклом. 🚩Метод `Dispose` Метод Dispose должен быть реализован для освобождения неуправляемых ресурсов. В классе, реализующем IDisposable, метод Dispose вызывается для выполнения любых необходимых очисток. 🚩Примеры использования Реализация IDisposable для класса с неуправляемыми ресурсами
public class ResourceHolder : IDisposable
{
    private bool _disposed = false; // Для отслеживания вызова Dispose

    // Метод для освобождения ресурсов
    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this); // Подавляет финализацию
    }

    // Защищенный метод для освобождения ресурсов
    protected virtual void Dispose(bool disposing)
    {
        if (!_disposed)
        {
            if (disposing)
            {
                // Освобождаем управляемые ресурсы
            }

            // Освобождаем неуправляемые ресурсы
            _disposed = true;
        }
    }

    ~ResourceHolder()
    {
        Dispose(false);
    }
}
Использование using для автоматического вызова Dispose
public void UseResource()
{
    using (var resourceHolder = new ResourceHolder())
    {
        // Работа с ресурсом
    } // Здесь автоматически вызовется Dispose
}
Ставь 👍 и забирай 📚 Базу знаний

📶 С 1 декабря для граждан РФ открыт доступ к платным материалам по программированию Вот отсортированные базы с тонной матери
📶 С 1 декабря для граждан РФ открыт доступ к платным материалам по программированию Вот отсортированные базы с тонной материала(книги, курсы, ресурсы и гайды). Выбирай своё направление: 👩‍💻 Frontend 👩‍💻 PHP ⚙️ Backend 👩‍💻 Моб. Dev 📱 GitHub 👩‍💻 GameDev 🤓 Всё айти 👩‍💻 DevOps 👩‍💻 Python 🖥 Data Science 👩‍💻 Java 🐞 Тестирование 👩‍💻 C# 🤔 Хакинг & ИБ 👩‍💻 С/С++ 📱 Маркетинг 🖥 SQL 🖥 Дизайн 👩‍💻 Golang 👣 Rust Скачивать ничего не нужно — все выложили в Telegram с доступом по ссылке

🤔 Какие механизмы позволяют не нарушать принцип dependency inversion? Для соблюдения принципа dependency inversion используются интерфейсы и абстракции, которые позволяют код зависеть от общего поведения, а не от конкретных реализаций. Также помогают фабрики (Factories) для создания объектов и DI-контейнеры (Dependency Injection), которые управляют зависимостями и их внедрением. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Попробуйте себя в мобильной разработке и аналитике Студенты, готовы прокачивать навыки программирования вместе с опытными пре
Попробуйте себя в мобильной разработке и аналитике Студенты, готовы прокачивать навыки программирования вместе с опытными преподавателями Т-Банка? Узнайте, как создавать приложения, анализировать данные и автоматизировать рутинные задачи, на одном из онлайн-курсов Т-Образования. Для учебы нужно 2—3 часа в неделю. Подайте заявку сейчас. Подать заявку #реклама 16+ education.tbank.ru О рекламодателе

🤔 Для чего нужен Dependency injection? Это паттерн проектирования, который используется для внедрения зависимостей объектов. Он помогает улучшить модульность, тестируемость и гибкость кода. Рассмотрим, зачем нужен Dependency Injection и какие преимущества он приносит. 🚩Основные цели и преимущества 🟠Снижение связанности кода DI позволяет классам не зависеть от конкретных реализаций своих зависимостей. Вместо этого зависимости передаются извне, обычно через конструкторы, методы или свойства. Это уменьшает связанность и делает код более модульным.
public class UserService
{
private readonly IUserRepository _userRepository;

public UserService(IUserRepository userRepository)
{
_userRepository = userRepository;
}

public void RegisterUser(string username, string password)
{
_userRepository.SaveUser(username, password);
}
}
🟠Улучшение тестируемости DI упрощает создание юнит-тестов, так как зависимости могут быть заменены на моки или стабы. Это позволяет изолировать тестируемый код и тестировать его без зависимости от реальных объектов.
[Test]
public void RegisterUser_ShouldCallSaveUser()
{
var mockRepository = new Mock<IUserRepository>();
var userService = new UserService(mockRepository.Object);

userService.RegisterUser("testuser", "password");

mockRepository.Verify(r => r.SaveUser("testuser", "password"), Times.Once);
}
🟠Повышение гибкости и расширяемости DI позволяет легко заменять реализации зависимостей, что упрощает изменение поведения приложения без необходимости модифицировать код, использующий эти зависимости.
var services = new ServiceCollection();
services.AddTransient<IUserRepository, SqlUserRepository>(); // или MemoryUserRepository
services.AddTransient<UserService>();

var serviceProvider = services.BuildServiceProvider();
var userService = serviceProvider.GetService<UserService>();   
🟠Управление жизненным циклом объектов DI-контейнеры управляют созданием, временем жизни и удалением объектов, что позволяет лучше контролировать ресурсы и повышает эффективность использования памяти.
services.AddSingleton<IConfiguration>(new Configuration());
services.AddScoped<IDatabaseContext, DatabaseContext>();
services.AddTransient<IUserRepository, UserRepository>();   
🚩Пример использования 1⃣Определение интерфейсов и реализаций
public interface IMessageService
{
    void SendMessage(string message);
}

public class EmailService : IMessageService
{
    public void SendMessage(string message)
    {
        Console.WriteLine($"Email sent: {message}");
    }
}

public class SmsService : IMessageService
{
    public void SendMessage(string message)
    {
        Console.WriteLine($"SMS sent: {message}");
    }
}
2⃣Внедрение зависимостей через конструктор
public class NotificationController
{
    private readonly IMessageService _messageService;

    public NotificationController(IMessageService messageService)
    {
        _messageService = messageService;
    }

    public void Notify(string message)
    {
        _messageService.SendMessage(message);
    }
}
3⃣Настройка DI-контейнера
var services = new ServiceCollection();
services.AddTransient<IMessageService, EmailService>(); // или SmsService
services.AddTransient<NotificationController>();

var serviceProvider = services.BuildServiceProvider();
var controller = serviceProvider.GetService<NotificationController>();

controller.Notify("Hello World!");
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое SignalR? SignalR — это библиотека от Microsoft для обеспечения двусторонней связи в реальном времени между клиентом и сервером. Она использует протоколы, такие как WebSockets, для высокой производительности, а в случае их недоступности — другие технологии, например, long polling. SignalR упрощает разработку чатов, уведомлений и других динамичных приложений. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

ТОП-10 Курсов по Программированию ⚡Tutortop — маркетплейс курсов №1 по количеству школ-партнеров, курсов и реальных отзывов с
ТОП-10 Курсов по Программированию ⚡Tutortop — маркетплейс курсов №1 по количеству школ-партнеров, курсов и реальных отзывов студентов. ✅Хотите стать программистом, но не знаете с какого языка начать? Помогаем разобраться в самых популярных и востребованных языках программирования. Подарок в конце подборки! Выбрать #реклама 16+ tutortop.ru О рекламодателе

🤔 Если не будем использовать абстракции, что может произойти? 🟠Сложность и запутанность кода Без абстракций код станет более сложным и трудным для понимания, так как все детали реализации будут видны пользователю. Это затруднит работу с кодом, особенно в больших проектах. 🟠Повышенная связанность Классы и модули будут сильно зависеть друг от друга, что приведет к высокой связанности. Это затруднит изменения и рефакторинг кода, так как любое изменение в одном месте потребует изменений в других местах. 🟠Низкая повторная использование Без абстракций код будет менее модульным и его будет трудно повторно использовать в других проектах или частях проекта. 🟠Сложность тестирования Код без абстракций труднее тестировать, так как сложно изолировать отдельные части системы для юнит-тестирования. Это может привести к большему количеству ошибок и дефектов в коде. 🟠Затрудненное сопровождение Код станет труднее поддерживать и сопровождать, так как его будет сложно изменять, исправлять ошибки или добавлять новые функции без риска сломать существующую функциональность. 🚩Примеры проблем Без абстракции
public class UserService
{
    public void RegisterUser(string username, string password)
    {
        // Логика регистрации пользователя
        var db = new Database();
        db.SaveUser(username, password);
    }
}

public class Database
{
    public void SaveUser(string username, string password)
    {
        // Сохранение пользователя в базу данных
    }
}
С использованием абстракции
public interface IUserRepository
{
    void SaveUser(string username, string password);
}

public class UserService
{
    private readonly IUserRepository _userRepository;

    public UserService(IUserRepository userRepository)
    {
        _userRepository = userRepository;
    }

    public void RegisterUser(string username, string password)
    {
        // Логика регистрации пользователя
        _userRepository.SaveUser(username, password);
    }
}

public class Database : IUserRepository
{
    public void SaveUser(string username, string password)
    {
        // Сохранение пользователя в базу данных
    }
}
Ставь 👍 и забирай 📚 Базу знаний

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

Аукцион выделенных серверов от Selectel! Популярные конфигурации выделенных серверов становятся дешевле в реальном времени. Успейте арендовать их, пока это не сделал кто-то другой!🏃‍♂️ Забронировать #реклама selectel.ru О рекламодателе

🤔 Что из себя представляет абстракция? Это один из ключевых принципов объектно-ориентированного программирования (ООП), который позволяет выделять важные характеристики объекта, игнорируя несущественные детали. Абстракция упрощает сложные системы, предоставляя только те аспекты, которые необходимы для выполнения конкретной задачи. 🚩Аспекты 🟠Скрытие деталей реализации Абстракция позволяет скрыть сложные детали реализации и предоставлять простой интерфейс для взаимодействия с объектом.
public abstract class Animal
{
    public abstract void MakeSound();
}

public class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Bark");
    }
}
🟠Определение интерфейсов и абстрактных классов Интерфейсы и абстрактные классы являются основными инструментами абстракции в C#. Интерфейсы определяют контракт, который должен быть реализован классами, а абстрактные классы могут содержать как реализацию, так и абстрактные методы.
public interface IShape
{
   double GetArea();
}

public class Circle : IShape
{
   public double Radius { get; set; }
   public double GetArea()
   {
       return Math.PI * Radius * Radius;
   }
}

public abstract class Vehicle
{
   public abstract void Move();
}

public class Car : Vehicle
{
    public override void Move()
    {
       Console.WriteLine("Car is moving");
    }
}   
🚩Сокрытие ненужных деталей Абстракция помогает пользователям взаимодействовать с объектом через его публичный интерфейс, не беспокоясь о внутренних деталях.
public class CoffeeMachine
{
    public void MakeCoffee()
    {
        HeatWater();
        BrewCoffee();
        PourCoffee();
    }

    private void HeatWater() { /* Подогрев воды */ }
    private void BrewCoffee() { /* Заваривание кофе */ }
    private void PourCoffee() { /* Наливание кофе */ }
}   
Ставь 👍 и забирай 📚 Базу знаний

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

Начните зарабатывать с искусственным интеллектом с нуля! 💻 Не знаешь, с чего начать? Мы научим, как зарабатывать с помощью И
Начните зарабатывать с искусственным интеллектом с нуля! 💻 Не знаешь, с чего начать? Мы научим, как зарабатывать с помощью ИИ. ✨ Без опыта? Не проблема! Ты научишься создавать с ИИ тексты, статьи, креативы, озвучку, презентации, сайты и многое другое — и начнешь зарабатывать уже на первом заказе. С нами ты всегда будешь в плюсе!Наши менеджеры помогут найти задания за 10% от их стоимости, чтобы ты начал зарабатывать уже сегодня. Мы с тобой на каждом этапе пути! ✅ Присоединяйся к нашему телеграм-каналу и меняй свою жизнь прямо сейчас! Подписаться #реклама О рекламодателе

🤔 Что такое тесные связи между объектами? Это ситуация, когда один объект сильно зависит от другого, что затрудняет их независимое изменение и тестирование. Например, если изменение в одном объекте требует изменений в другом объекте, то связь между ними считается тесной.
public class DataService
{
    public void SaveData(string data) { /* Сохранение данных */ }
}

public class Processor
{
    private DataService _dataService = new DataService();

    public void Process(string data)
    {
        _dataService.SaveData(data);
    }
}
Уменьшенная связность
public interface IDataService
{
    void SaveData(string data);
}

public class DataService : IDataService
{
    public void SaveData(string data) { /* Сохранение данных */ }
}

public class Processor
{
    private readonly IDataService _dataService;

    public Processor(IDataService dataService)
    {
        _dataService = dataService;
    }

    public void Process(string data)
    {
        _dataService.SaveData(data);
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое инкапсуляция? Инкапсуляция скрывает детали реализации объекта, предоставляя доступ через публичные методы для защиты данных. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний