cookie

نحن نستخدم ملفات تعريف الارتباط لتحسين تجربة التصفح الخاصة بك. بالنقر على "قبول الكل"، أنت توافق على استخدام ملفات تعريف الارتباط.

avatar

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

Разбираем вопросы с собеседований на С# разработчика. Сайт: easyoffer.ru Реклама: @easyoffer_adv

إظهار المزيد
مشاركات الإعلانات
3 648
المشتركون
-224 ساعات
+107 أيام
+4930 أيام

جاري تحميل البيانات...

معدل نمو المشترك

جاري تحميل البيانات...

📌 Способы расширить поведение классов в C# на практике? 💬 Спрашивают в 11% собеседований 🤔 Способы расширения поведения классов в C# 1️⃣ Наследование: Создание подклассов, которые наследуют и переопределяют методы базового класса.
   public class BaseClass
   {
       public virtual void DoWork() { /* базовое поведение */ }
   }

   public class DerivedClass : BaseClass
   {
       public override void DoWork() { /* расширенное поведение */ }
   }
   
2️⃣ Интерфейсы: Определение интерфейсов и их реализация в классах.
   public interface IWork
   {
       void DoWork();
   }

   public class MyClass : IWork
   {
       public void DoWork() { /* реализация интерфейса */ }
   }
   
3️⃣ Декоратор: Оборачивание класса в другой класс для добавления поведения.
   public class BaseClass
   {
       public virtual void DoWork() { /* базовое поведение */ }
   }

   public class Decorator : BaseClass
   {
       private BaseClass _base;
       public Decorator(BaseClass baseClass) { _base = baseClass; }
       public override void DoWork()
       {
           _base.DoWork();
           // Добавленное поведение
       }
   }
   
4️⃣ Адаптер: Преобразование интерфейса одного класса в интерфейс другого.
   public interface ITarget
   {
       void Request();
   }

   public class Adaptee
   {
       public void SpecificRequest() { /* специальное поведение */ }
   }

   public class Adapter : ITarget
   {
       private Adaptee _adaptee = new Adaptee();
       public void Request() { _adaptee.SpecificRequest(); }
   }
   
5️⃣ Расширяющие методы: Добавление методов к существующим типам без изменения их кода.
   public static class Extensions
   {
       public static void NewMethod(this ExistingClass obj)
       {
           // Добавленное поведение
       }
   }
   
🤔 Краткий ответ Поведение классов в C# можно расширить через наследование, интерфейсы, паттерн декоратор, адаптер и расширяющие методы. 🔥 ТОП ВОПРОСОВ С СОБЕСОВ 🔒 База собесов | 🔒 База тестовых
إظهار الكل...
👍 1
🤔 Что такое исключения (exceptions) и как они обрабатываются в C#?Anonymous voting
  • Блоками try, catch, finally.
  • Методами include, require.
  • Операторами check, uncheck.
  • Командами start, end.
0 votes
📌 Как сейчас делается Singleton? 💬 Спрашивают в 11% собеседований В современном C# паттерн Singleton можно реализовать несколькими способами, каждый из которых имеет свои преимущества и предназначен для различных сценариев использования. Рассмотрим несколько распространенных подходов к реализации Singleton. 1️⃣ Ленивый Singleton (Lazy Initialization) Ленивый Singleton инициализируется при первом обращении. Это обеспечивает отложенную инициализацию объекта и гарантирует потокобезопасность. Пример:
public class Singleton
{
    private static readonly Lazy<Singleton> lazyInstance = new Lazy<Singleton>(() => new Singleton());

    public static Singleton Instance => lazyInstance.Value;

    private Singleton()
    {
        // Приватный конструктор
    }
}
Lazy<T>: Использование класса Lazy<T> позволяет легко и безопасно реализовать отложенную инициализацию. 2️⃣ Потокобезопасный Singleton (Thread-safe) Этот подход использует lock для обеспечения потокобезопасности при создании экземпляра. Пример:
public class Singleton
{
    private static Singleton instance;
    private static readonly object lockObj = new object();

    private Singleton()
    {
        // Приватный конструктор
    }

    public static Singleton Instance
    {
        get
        {
            if (instance == null)
            {
                lock (lockObj)
                {
                    if (instance == null)
                    {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }
}
Double-checked locking: Этот метод минимизирует накладные расходы, связанные с использованием lock, проверяя instance дважды. 3️⃣ Eager Initialization (Инициализация при загрузке) Экземпляр Singleton создается при загрузке класса. Это гарантирует потокобезопасность за счет особенностей инициализации статических переменных в .NET. Пример:
public class Singleton
{
    private static readonly Singleton instance = new Singleton();

    public static Singleton Instance => instance;

    private Singleton()
    {
        // Приватный конструктор
    }
}
Простота: Этот метод прост и эффективен, но не поддерживает отложенную инициализацию. 4️⃣ Static Constructor (Статический конструктор) Использование статического конструктора для инициализации Singleton. Пример:
public class Singleton
{
    private static readonly Singleton instance;

    static Singleton()
    {
        instance = new Singleton();
    }

    public static Singleton Instance => instance;

    private Singleton()
    {
        // Приватный конструктор
    }
}
Статический конструктор: Гарантирует инициализацию перед первым использованием любого члена класса. 5️⃣ Singleton с внедрением зависимостей (Dependency Injection) В современных приложениях, особенно с использованием ASP.NET Core, Singleton часто регистрируется в контейнере внедрения зависимостей. Пример:
public class SingletonService
{
    public void DoWork()
    {
        // Выполнение работы
    }
}

// Регистрация в контейнере служб
public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<SingletonService>();
}

// Использование в контроллере
public class MyController : ControllerBase
{
    private readonly SingletonService _singletonService;

    public MyController(SingletonService singletonService)
    {
        _singletonService = singletonService;
    }

    public IActionResult Index()
    {
        _singletonService.DoWork();
        return Ok();
    }
}
🤔 Краткий ответ В C# паттерн Singleton реализуется с использованием различных подходов: ленивой инициализации (с Lazy<T>), потокобезопасного двойного блокирования, инициализации при загрузке класса и статического конструктора. В современных приложениях также используется внедрение зависимостей (DI), особенно в ASP.NET Core, для обеспечения единственного экземпляра. 🔥 ТОП ВОПРОСОВ С СОБЕСОВ 🔒 База собесов | 🔒 База тестовых
إظهار الكل...
🔥 2
🤔 Что такое сериализация и десериализация в C#?Anonymous voting
  • Преобразование объектов в поток байтов и обратно.
  • Сжатие данных и их восстановление.
  • Шифрование и дешифрование данных.
  • Конвертация строк в числа и обратно.
0 votes
📌 Что делает паттерн проектирования Factory? 💬 Спрашивают в 11% собеседований Паттерн проектирования Factory (Фабрика) — это порождающий паттерн, который предоставляет интерфейс для создания объектов в суперклассе, но позволяет подклассам изменять тип создаваемых объектов. Основная идея заключается в том, чтобы вынести создание объектов из кода, который их использует, в отдельный компонент или метод. Это помогает уменьшить зависимость кода от конкретных классов и улучшить его гибкость и расширяемость. 🤔 Основные аспекты паттерна Factory 1️⃣ Абстрагирование процесса создания объектов: ➕ Паттерн Factory позволяет отделить логику создания объектов от логики их использования. ➕ Это помогает избежать жесткой привязки к конкретным классам и облегчает изменение или расширение типов создаваемых объектов. 2️⃣ Гибкость и расширяемость: ➕ Использование фабрики позволяет легко добавлять новые типы объектов, не изменяя существующий код, что улучшает поддержку и расширяемость системы. 3️⃣ Снижение сложности кода: ➕ Фабрика централизует создание объектов, что помогает упростить код клиентов, делая его более читабельным и управляемым. 🤔 Виды паттерна Factory 1️⃣ Простая фабрика (Simple Factory): ➕ Не является отдельным паттерном, а скорее идиомой или шаблоном. Фабричный метод находится в одном классе, который создает объекты различных типов. ➕ Пример:
     public class SimpleFactory
     {
         public IProduct CreateProduct(string type)
         {
             if (type == "A")
                 return new ProductA();
             else if (type == "B")
                 return new ProductB();
             else
                 throw new ArgumentException("Unknown product type.");
         }
     }
     
2️⃣ Фабричный метод (Factory Method): ➕ Определяет интерфейс для создания объекта, но позволяет подклассам изменять тип создаваемого объекта. ➕ Пример:
     public abstract class Creator
     {
         public abstract IProduct FactoryMethod();
     }

     public class ConcreteCreatorA : Creator
     {
         public override IProduct FactoryMethod()
         {
             return new ProductA();
         }
     }

     public class ConcreteCreatorB : Creator
     {
         public override IProduct FactoryMethod()
         {
             return new ProductB();
         }
     }
     
🤔 Краткий ответ Паттерн Factory позволяет абстрагировать процесс создания объектов, уменьшая зависимость от конкретных классов и улучшая гибкость и расширяемость кода. Он включает такие разновидности, как простая фабрика, фабричный метод и абстрактная фабрика, каждая из которых решает свои специфические задачи по созданию объектов. 🔥 ТОП ВОПРОСОВ С СОБЕСОВ 🔒 База собесов | 🔒 База тестовых
إظهار الكل...

🤔 Какие типы данных используются для работы с датами и временем в C#?Anonymous voting
  • DateTime, TimeSpan.
  • Calendar, Clock.
  • Timestamp, Stopwatch.
  • Period, Interval.
0 votes
🤔 1
📌 Сравни паттерны Adapter и Decorator? 💬 Спрашивают в 11% собеседований Паттерны Adapter и Decorator оба являются структурными паттернами, которые помогают управлять взаимодействием между объектами. Однако, они решают разные задачи и применяются в различных контекстах. Рассмотрим каждый из этих паттернов подробнее и сравним их. 🤔 Adapter (Адаптер) Описание: ➕ Паттерн Adapter используется для приведения интерфейса одного класса к интерфейсу, ожидаемому клиентом. Он позволяет объектам с несовместимыми интерфейсами работать вместе. Цель: ➕ Преобразование интерфейса класса в другой интерфейс, который ожидает клиент. Применение: ➕ Когда нужно использовать существующий класс, но его интерфейс не соответствует потребностям клиента. ➕ Когда необходимо интегрировать класс с внешней библиотекой, имеющей несовместимый интерфейс. Пример:
// Существующий класс с несовместимым интерфейсом
public class LegacyPrinter
{
    public void PrintLegacy(string text)
    {
        Console.WriteLine("Legacy print: " + text);
    }
}

// Целевой интерфейс, который ожидает клиент
public interface IPrinter
{
    void Print(string text);
}

// Адаптер, который приводит интерфейс LegacyPrinter к интерфейсу IPrinter
public class PrinterAdapter : IPrinter
{
    private readonly LegacyPrinter _legacyPrinter;

    public PrinterAdapter(LegacyPrinter legacyPrinter)
    {
        _legacyPrinter = legacyPrinter;
    }

    public void Print(string text)
    {
        _legacyPrinter.PrintLegacy(text);
    }
}

// Использование адаптера
public class Client
{
    public void ClientCode(IPrinter printer)
    {
        printer.Print("Hello, World!");
    }
}

var legacyPrinter = new LegacyPrinter();
var adapter = new PrinterAdapter(legacyPrinter);
var client = new Client();
client.ClientCode(adapter);
🤔 Decorator (Декоратор) Описание: ➕ Паттерн Decorator используется для динамического добавления новых функциональных возможностей объекту. Он предоставляет гибкую альтернативу наследованию для расширения функциональности. Цель: ➕ Добавление новых обязанностей объекту динамически. Пример:
// Базовый интерфейс
public interface INotifier
{
    void Send(string message);
}

// Конкретный компонент
public class EmailNotifier : INotifier
{
    public void Send(string message)
    {
        Console.WriteLine("Sending Email: " + message);
    }
}

// Базовый декоратор
public class NotifierDecorator : INotifier
{
    private readonly INotifier _wrappee;

    public NotifierDecorator(INotifier notifier)
    {
        _wrappee = notifier;
    }

    public virtual void Send(string message)
    {
        _wrappee.Send(message);
    }
}

// Конкретный декоратор
public class SMSNotifier : NotifierDecorator
{
    public SMSNotifier(INotifier notifier) : base(notifier) { }

    public override void Send(string message)
    {
        base.Send(message);
        Console.WriteLine("Sending SMS: " + message);
    }
}

// Использование декоратора
var emailNotifier = new EmailNotifier();
var smsNotifier = new SMSNotifier(emailNotifier);
smsNotifier.Send("Hello, World!");
🤔 Краткий ответ Паттерн Adapter преобразует интерфейс одного класса к интерфейсу, ожидаемому клиентом, что позволяет несовместимым объектам работать вместе. Паттерн Decorator динамически добавляет новые обязанности объекту, оборачивая его, и предоставляет гибкую альтернативу наследованию для расширения функциональности. Adapter используется для приведения интерфейсов в соответствие, а Decorator — для расширения возможностей объектов. 🔥 ТОП ВОПРОСОВ С СОБЕСОВ 🔒 База собесов | 🔒 База тестовых
إظهار الكل...

👍 1
🤔 Какие ключевые слова используются в C# для реализации асинхронного программирования?Anonymous voting
  • async, await.
  • parallel, concurrent.
  • thread, lock.
  • task, event.
0 votes
🤯 4
Photo unavailableShow in Telegram
Большая конференция Яндекс Рекламы на ВТБ Арене 22 октября приглашаем маркетологов и специалистов по рекламе обсудить новые технологии и рекламные тренды. Ключевые участники рынка поделятся опытом и расскажут: ✅ Как развиваться специалистам в сфере рекламы ✅ Как продвигаться и продавать в интернете ✅ Какие тренды в маркетинге появляются сейчас Вас ждут доклады на актуальные темы, конкурсы и возможности для нетворкинга. Встречаемся 22 октября на ВТБ Арене. Будем вести прямую трансляцию — вы сможете посмотреть выступления, даже если не планируете приехать лично. Конференция бесплатная, нужно только зарегистрироваться. Зарегистрироваться #реклама 16+ ya.rekonfa.ru О рекламодателе
إظهار الكل...
📌 Какой слой rest и swap с точки зрения трехслойной архитектуры? 💬 Спрашивают в 11% собеседований В трехслойной архитектуре (трехуровневая архитектура), также известной как многоуровневая архитектура, приложения разделяются на три логических слоя: 1️⃣ Презентационный слой (Presentation Layer): ➕ Отвечает за взаимодействие с пользователем. ➕ Веб-интерфейсы, мобильные приложения, десктопные приложения. ➕ Примеры: HTML/CSS/JavaScript для веб-приложений, UI-компоненты в мобильных и десктопных приложениях. 2️⃣ Логический слой (Business Logic Layer): ➕ Содержит бизнес-логику и правила приложения. ➕ Обрабатывает данные, выполняет вычисления, применяет бизнес-правила. ➕ Примеры: классы и методы, реализующие бизнес-логику, сервисы, обработчики данных. 3️⃣ Слой данных (Data Access Layer): ➕ Отвечает за взаимодействие с источниками данных. ➕ Операции с базами данных, файловыми системами, внешними сервисами. ➕ Примеры: репозитории, Data Access Objects (DAO), API-клиенты для доступа к внешним системам. 🤔 REST и SWAP в контексте трехслойной архитектуры 🤔 REST REST (Representational State Transfer): ➕ REST — это архитектурный стиль для разработки веб-сервисов. RESTful сервисы используют стандартные HTTP методы (GET, POST, PUT, DELETE и т.д.) для работы с ресурсами. С точки зрения трехслойной архитектуры:Презентационный слой: ➕ Вызовы REST API могут происходить с клиентской стороны (например, AJAX запросы из веб-интерфейса) или через клиентские приложения. ➕ Пример: фронтенд веб-приложения, который взаимодействует с REST API. ➕ Логический слой: ➕ REST API реализует бизнес-логику и выступает посредником между презентационным слоем и слоем данных. ➕ Пример: контроллеры и сервисы, обрабатывающие REST запросы и выполняющие соответствующую бизнес-логику. ➕ Слой данных: ➕ REST API может взаимодействовать с базой данных или другими источниками данных для получения и сохранения информации. ➕ Пример: методы в API, которые выполняют запросы к базе данных через репозитории или DAO. 🤔 SWAP SWAP (Simple Web API): ➕ SWAP — это гипотетический или менее распространенный термин, часто интерпретируемый как упрощенный API для веб-приложений. С точки зрения трехслойной архитектуры:Презентационный слой: ➕ Клиентские приложения или пользовательские интерфейсы могут вызывать методы SWAP для получения или отправки данных. ➕ Пример: веб-страницы или мобильные приложения, обращающиеся к SWAP для выполнения операций. ➕ Логический слой: ➕ SWAP обрабатывает бизнес-логику аналогично REST API, предоставляя упрощенные конечные точки для взаимодействия с данными. ➕ Пример: сервисы, которые реализуют простые операции (CRUD) без сложной бизнес-логики. ➕ Слой данных: ➕ SWAP взаимодействует с базой данных или другими источниками данных для выполнения операций чтения/записи. ➕ Пример: методы SWAP, которые обращаются к базе данных через абстрактные уровни доступа к данным. 🤔 Заключение В трехслойной архитектуре REST и SWAP выступают как интерфейсы, обеспечивающие взаимодействие между слоями, при этом они сами чаще всего принадлежат к логическому слою, поскольку реализуют бизнес-логику и правила приложения, обеспечивая доступ к данным через слой данных и предоставляя функционал презентационному слою. 🤔 Краткий ответREST и SWAP чаще всего относятся к логическому слою в трехслойной архитектуре, так как они реализуют бизнес-логику и обеспечивают взаимодействие между презентационным слоем и слоем данных. 🔥 ТОП ВОПРОСОВ С СОБЕСОВ 🔒 База собесов | 🔒 База тестовых
إظهار الكل...
اختر خطة مختلفة

تسمح خطتك الحالية بتحليلات لما لا يزيد عن 5 قنوات. للحصول على المزيد، يُرجى اختيار خطة مختلفة.