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

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

Open in Telegram

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

Show more
5 036
Subscribers
-324 hours
-147 days
-3230 days
Posts Archive
🤔 Какой код корректно создает и инициализирует Dictionary?
Anonymous voting

Конференция для профессионалов мобильной разработки Конференция по мобильной разработке Mobius 2024 Autumn — 11 октября онлай
Конференция для профессионалов мобильной разработки Конференция по мобильной разработке Mobius 2024 Autumn — 11 октября онлайн и 19–20 октября в Санкт-Петербурге Живые дискуссии, доклады и практика мобильной разработки на всех платформах — на одной конференции. Обсуждаем новые фишки языков программирования, Android и iOS. Говорим о трендовых технологиях и подходах: BDUI, KMM, Jetpack Compose, SwiftUI, ML в мобильной разработке и других. У участников будет возможность задать вопросы спикерам и поучаствовать в неформальных обсуждениях. А в офлайне вас ждет афтерпати с единомышленниками. Узнать больше #реклама mobiusconf.com О рекламодателе

🤔 Какие есть положительные и отрицательные моменты у микросервиса? 🚩Положительные моменты микросервисов 🟠Масштабируемость Легко масштабировать только те части системы, которые требуют этого, без необходимости масштабировать всё приложение. Например, если у вас есть микросервис, обрабатывающий заказы, и он испытывает высокую нагрузку, вы можете масштабировать только его, не трогая другие части системы. 🟠Независимость развертывания Микросервисы можно развёртывать, обновлять и откатывать независимо друг от друга. Например вы можете обновить микросервис аутентификации без остановки микросервиса каталога продуктов. 🟠Устойчивость к сбоям Отказ одного микросервиса не приводит к отказу всего приложения. Например, если микросервис обработки платежей выходит из строя, пользователи всё равно могут просматривать продукты и добавлять их в корзину. 🟠Гибкость технологий Каждый микросервис может быть написан на своем языке программирования и использовать свои технологии, что позволяет выбирать наиболее подходящие инструменты для каждой задачи. Например, Вы можете использовать Python для микросервиса машинного обучения и .NET для микросервиса управления пользователями. 🟠Ускоренная разработка: Малые команды могут работать над разными микросервисами параллельно, что ускоряет процесс разработки. Например, одна команда может работать над микросервисом управления пользователями, в то время как другая команда работает над микросервисом заказа. 🚩Отрицательные моменты микросервисов 🟠Сложность управления Управление множеством микросервисов требует сложной инфраструктуры для оркестрации, мониторинга и логирования. Например, вам нужно внедрить систему оркестрации, такую как Kubernetes, чтобы управлять развертыванием и масштабированием микросервисов. 🟠 Сложность коммуникаций Необходимо наладить надежные межсервисные коммуникации, что может быть сложно и привести к повышенным накладным расходам. Например, вам нужно решить, использовать ли синхронные (HTTP/REST) или асинхронные (сообщения, очереди) методы связи между микросервисами. 🟠Трудности в тестировании Тестирование микросервисной архитектуры сложнее из-за необходимости интеграции и взаимодействия между множеством независимых компонентов. Например вам нужно создать среду для интеграционного тестирования, которая включает все необходимые микросервисы. 🟠Управление данными Согласованность данных и управление транзакциями становятся более сложными задачами в распределённой системе. Например, вам нужно внедрить сложные механизмы для обеспечения согласованности данных, такие как саги или распределённые транзакции. 🟠Затраты на инфраструктуру: Разделение на множество микросервисов может увеличить затраты на инфраструктуру, особенно если требуется множество ресурсов для управления этими микросервисами. Например, Вам может понадобиться больше серверов и инструментов для управления и мониторинга микросервисов. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое обобщения (generics) в C# и зачем они нужны?
Anonymous voting

Дизайн в FIGMA с нуля. Бесплатный курс + портфолио Онлайн-программа с наставником и чатом. Дизайн от профессионалов. Доступ 0 руб. Узнать больше #реклама 16+ yudaevschool24.online О рекламодателе

🤔 Что такое микросервис? 🚩Что такое микросервис Микросервис — это архитектурный стиль, который предполагает создание приложения в виде набора небольших, автономных сервисов, каждый из которых отвечает за выполнение конкретной бизнес-функции. Эти сервисы могут разрабатываться, развёртываться и масштабироваться независимо друг от друга. 🚩Основные характеристики микросервисов 🟠Автономность: Каждый микросервис работает независимо и может быть развёрнут отдельно. 🟠Малый размер: Микросервисы обычно небольшие и выполняют одну конкретную задачу. 🟠Чёткие границы: Микросервисы имеют чётко определённые границы и взаимодействуют друг с другом через хорошо определённые API. 🟠Независимость развертывания: Микросервисы можно развёртывать и обновлять независимо друг от друга. 🟠Разнообразие технологий: В каждом микросервисе можно использовать разные технологии, языки программирования и базы данных в зависимости от задачи. Преимущества микросервисов 🟠Масштабируемость: Легко масштабировать отдельные микросервисы по мере необходимости. 🟠Упрощенная разработка и развёртывание: Меньшие команды могут работать над отдельными микросервисами, что ускоряет разработку. 🟠Независимые обновления: Можно обновлять и развёртывать микросервисы без остановки всего приложения. 🟠Устойчивость к сбоям: Сбой в одном микросервисе не приводит к сбою всего приложения. Недостатки микросервисов 🟠Сложность управления: Требуется сложная инфраструктура для управления множеством микросервисов. 🟠Сложность коммуникаций: Требуется надежный механизм взаимодействия между микросервисами. 🟠Трудности в тестировании: Тестирование микросервисной архитектуры может быть сложнее по сравнению с монолитной. 🟠Управление данными: Могут возникнуть сложности с согласованностью данных и транзакциями. 🚩Рассмотрим пример интернет-магазина, разбитого на несколько микросервисов: 🟠User Service: Управляет пользователями и их учетными записями. 🟠Product Service: Управляет информацией о продуктах. 🟠Order Service: Обрабатывает заказы. 🟠Payment Service: Управляет платежами. Каждый из этих микросервисов имеет своё собственное API и базу данных.
// Пример простого контроллера для микросервиса пользователя
[ApiController]
[Route("api/[controller]")]
public class UserController : ControllerBase
{
    private readonly IUserService _userService;

    public UserController(IUserService userService)
    {
        _userService = userService;
    }

    [HttpGet("{id}")]
    public ActionResult<User> GetUser(int id)
    {
        var user = _userService.GetUserById(id);
        if (user == null)
        {
            return NotFound();
        }
        return Ok(user);
    }

    [HttpPost]
    public ActionResult<User> CreateUser([FromBody] User user)
    {
        var createdUser = _userService.CreateUser(user);
        return CreatedAtAction(nameof(GetUser), new { id = createdUser.Id }, createdUser);
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Какой модификатор доступа делает член класса доступным только в пределах своего класса и подклассов?
Anonymous voting

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

🤔 ВЧто такое паттерн CQRS? 🚩Что такое паттерн CQRS — паттерн, разделяющий операции чтения и записи данных. Основные концепции 🟠Команды (Commands): Операции записи, изменяющие состояние системы. 🟠Запросы (Queries): Операции чтения, не изменяющие состояние системы. Преимущества 🟠Оптимизация производительности: Раздельные модели для чтения и записи могут быть оптимизированы отдельно. 🟠Упрощение кода: Разделение логики упрощает код и его поддержку. 🟠Масштабируемость: Легче масштабировать чтение и запись независимо. Недостатки 🟠Сложность: Увеличение сложности системы. 🟠Синхронизация данных: Требуется механизм синхронизации между моделями чтения и записи. Команда (Command)
public class CreateUserCommand
{
    public string Name { get; }
    public CreateUserCommand(string name)
    {
        Name = name;
    }
}
Обработчик команды (Command Handler)
public class CreateUserCommandHandler
{
    private readonly UserDbContext _context;

    public CreateUserCommandHandler(UserDbContext context)
    {
        _context = context;
    }

    public void Handle(CreateUserCommand command)
    {
        var user = new User { Name = command.Name };
        _context.Users.Add(user);
        _context.SaveChanges();
    }
}
Запрос (Query)
public class GetUserQuery
{
    public int UserId { get; }
    public GetUserQuery(int userId)
    {
        UserId = userId;
    }
}
Обработчик запроса (Query Handler)
public class GetUserQueryHandler
{
    private readonly UserDbContext _context;

    public GetUserQueryHandler(UserDbContext context)
    {
        _context = context;
    }

    public User Handle(GetUserQuery query)
    {
        return _context.Users.Find(query.UserId);
    }
}
Ставь 👍 и забирай 📚 Базу знаний

😒 На одном кодинге уже давно не вывезешь, перспектива 2024 года - Информационная Безопасность Ловите два канала на тему ИБ и
😒 На одном кодинге уже давно не вывезешь, перспектива 2024 года - Информационная Безопасность Ловите два канала на тему ИБ и хакинга ZeroDay - Уроки по кибербезопасности и хакингу с нуля. Вирусы, взломы, OSINT, криптография и свежие новости Белый Хакер - программное обеспечение, утилиты, OSINT, инструменты, полезная литература и много другое. Совершенно новый формат непохожий на другие каналы.

🤔 Что такое readonly и как он используется в C#?
Anonymous voting

Яндекс Директ Только этой осенью Яндекс Директ добавит до 20 000 ₽ на рекламу для вашего бизнеса ⚡ Узнать больше #реклама yan
Яндекс Директ Только этой осенью Яндекс Директ добавит до 20 000 ₽ на рекламу для вашего бизнеса ⚡ Узнать больше #реклама yandex.ru О рекламодателе

🤔 Что такое паттерн Event Sourcing? Паттерн Event Sourcing (событийное моделирование) — это подход к управлению состоянием приложения, при котором все изменения состояния представляются в виде последовательности событий. Вместо хранения текущего состояния объекта в базе данных, сохраняются все изменения состояния (события), которые произошли с этим объектом. Текущее состояние может быть восстановлено путем последовательного применения этих событий. 🚩Основные концепции Event Sourcing: 🟠События (Events): События представляют собой неизменяемые записи фактов, которые произошли в системе. Каждое событие описывает изменение состояния. 🟠Источники событий (Event Stores): Специальные хранилища, которые сохраняют последовательности событий. Они обеспечивают устойчивость событий и возможность их повторного воспроизведения. 🟠Агрегаты (Aggregates): Логические группы объектов, которые обрабатывают команды и генерируют события. 🟠Команды (Commands): Запросы на выполнение изменений, которые обрабатываются агрегатами и приводят к генерации событий. 🟠Проекционные модели (Projections): Модели, создаваемые из последовательностей событий для представления данных в удобной для чтения форме. Преимущества Event Sourcing: 🟠Историчность: Все изменения состояния хранятся в виде событий, что позволяет восстановить любое прошлое состояние системы. 🟠Отладка и аудит: Полная история изменений облегчает отладку и проведение аудита. 🟠Производительность: Проекции позволяют оптимизировать запросы к данным. 🟠Гибкость: Возможность пересоздания проекций с новыми требованиями без изменения основного хранилища событий. Недостатки Event Sourcing: 🟠Сложность: Реализация Event Sourcing требует дополнительных усилий и знаний. 🟠Объем данных: Хранение всех событий может занимать много места.
public class AccountCreated
{
    public Guid AccountId { get; }
    public string Owner { get; }

    public AccountCreated(Guid accountId, string owner)
    {
        AccountId = accountId;
        Owner = owner;
    }
}

public class MoneyDeposited
{
    public Guid AccountId { get; }
    public decimal Amount { get; }

    public MoneyDeposited(Guid accountId, decimal amount)
    {
        AccountId = accountId;
        Amount = amount;
    }
}

public class MoneyWithdrawn
{
    public Guid AccountId { get; }
    public decimal Amount { get; }

    public MoneyWithdrawn(Guid accountId, decimal amount)
    {
        AccountId = accountId;
        Amount = amount;
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Каковы основные различия между Array и ArrayList в C#?
Anonymous voting

😮 Добавлена новая база слитых курсов на 800ГБ: Python: https://t.me/+QPSH2IcGu4w5ODky Frontend и Web: https://t.me/+MiJVQSyUlDNjODky Программирование: https://t.me/+opj2LZT23ddiZDli Графика и дизайн: https://t.me/+vrZ8dhdUEXM3YmQy

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

📌 Что такое паттерн DDD? 💬 Спрашивают в 11% собеседований Паттерн DDD (Domain-Driven Design, предметно-ориентированное проектирование) — это методология разработки программного обеспечения, которая фокусируется на сложных предметных областях и переводе их в код. Основная идея DDD заключается в том, чтобы создать программные модели, которые соответствуют бизнес-логике и терминологии, используемой экспертами в данной предметной области. 🤔 Основные концепции DDD 1️⃣ Domain (Предметная область): Основная бизнес-логика и правила, специфичные для конкретной области. 2️⃣ Entities (Сущности): Объекты с уникальной идентичностью, которые могут изменяться со временем. 3️⃣ Value Objects (Объекты-значения): Объекты, которые не имеют уникальной идентичности и полностью определяются их атрибутами. 4️⃣ Aggregates (Агрегаты): Группы связанных объектов (сущностей и объектов-значений), которые считаются единой единицей для изменений данных. 5️⃣ Repositories (Репозитории): Абстракции для доступа к коллекциям агрегатов, обеспечивающие методы для поиска и хранения объектов. 6️⃣ Services (Сервисы): Операции или бизнес-логика, которые не могут быть естественным образом включены в сущности или объекты-значения. 7️⃣ Bounded Context (Ограниченный контекст): Четко определенные границы, внутри которых определенные модели и термины имеют смысл. 8️⃣ Ubiquitous Language (Общепринятый язык): Язык, общий для разработчиков и бизнес-экспертов, который используется для описания модели. 🤔 Пример использования DDD 🤔 Сущности и объекты-значения
// Value Object
public class Money
{
    public decimal Amount { get; }
    public string Currency { get; }

    public Money(decimal amount, string currency)
    {
        Amount = amount;
        Currency = currency;
    }

    public override bool Equals(object obj)
    {
        if (obj is Money money)
        {
            return Amount == money.Amount && Currency == money.Currency;
        }
        return false;
    }

    public override int GetHashCode() => (Amount, Currency).GetHashCode();
}

// Entity
public class Product
{
    public Guid Id { get; }
    public string Name { get; private set; }
    public Money Price { get; private set; }

    public Product(Guid id, string name, Money price)
    {
        Id = id;
        Name = name;
        Price = price;
    }

    public void Rename(string newName)
    {
        Name = newName;
    }

    public void ChangePrice(Money newPrice)
    {
        Price = newPrice;
    }
}
🤔 Преимущества DDD 1️⃣ Соответствие бизнес-логике: Код, построенный на основе DDD, более точно отражает бизнес-логику и правила. 2️⃣ Улучшенная коммуникация: Общепринятый язык улучшает коммуникацию между разработчиками и бизнес-экспертами. 3️⃣ Четкие границы: Ограниченные контексты помогают управлять сложностью, разделяя систему на более управляемые части. 4️⃣ Гибкость и расширяемость: Модели легко адаптируются к изменениям в бизнес-логике. 🤔 Недостатки DDD 1️⃣ Сложность: Реализация DDD может быть сложной и требовать значительных усилий и времени. 2️⃣ Требования к знаниям: Необходимы глубокие знания предметной области и навыки проектирования. 3️⃣ Перегрузка для простых проектов: Для небольших и простых проектов использование DDD может быть излишним. 🤔 Краткий ответ DDD (Domain-Driven Design) — это методология разработки ПО, фокусирующаяся на моделировании сложных предметных областей в соответствии с бизнес-логикой. Основные концепции включают сущности, объекты-значения, агрегаты, репозитории, сервисы, ограниченные контексты и общепринятый язык. Преимущества DDD включают точное соответствие бизнес-логике и улучшенную коммуникацию, в то время как основные недостатки связаны со сложностью и требованиями к знаниям. 🔥 ТОП ВОПРОСОВ С СОБЕСОВ 🔒 База собесов | 🔒 База тестовых

Друзья, мы создали новый канал по изучению C# и разработке игр на Unity. 👉C#/Unity Learning👈 Заходите, если интересно
Друзья, мы создали новый канал по изучению C# и разработке игр на Unity. 👉C#/Unity Learning👈 Заходите, если интересно

🤔 Что такое finalizer в C# и как он объявляется?
Anonymous voting

📌 Как предложить избежать deadlock`а? 💬 Спрашивают в 11% собеседований Избежание deadlock'ов (взаимных блокировок) в многопоточном программировании — важная задача, требующая внимательного проектирования и разработки. Deadlock происходит, когда два или более потока не могут продолжать выполнение, потому что каждый из них ожидает освобождения ресурса, удерживаемого другим потоком. Вот несколько стратегий и методов для предотвращения deadlock'ов: 1️⃣ Избегайте вложенных блокировок Избегайте ситуаций, когда один поток удерживает один ресурс и пытается заблокировать другой, уже заблокированный другим потоком. Придерживайтесь простого правила: каждый поток должен блокировать ресурсы в одном и том же порядке. 🤔 Пример:
object lock1 = new object();
object lock2 = new object();

public void Method1()
{
    lock (lock1)
    {
        lock (lock2)
        {
            // Действия с lock1 и lock2
        }
    }
}

public void Method2()
{
    lock (lock1)
    {
        lock (lock2)
        {
            // Действия с lock1 и lock2
        }
    }
}
2️⃣ Используйте тайм-ауты при блокировках Используйте методы блокировки с тайм-аутами, такие как Monitor.TryEnter или Mutex.WaitOne, чтобы предотвратить бесконечное ожидание ресурсов. 🤔 Пример:
object lockObject = new object();

public void MethodWithTimeout()
{
    bool lockTaken = false;
    try
    {
        Monitor.TryEnter(lockObject, TimeSpan.FromSeconds(1), ref lockTaken);
        if (lockTaken)
        {
            // Работа с lockObject
        }
        else
        {
            // Обработка ситуации, когда блокировка не была взята
        }
    }
    finally
    {
        if (lockTaken)
        {
            Monitor.Exit(lockObject);
        }
    }
}
3️⃣ Используйте менее затратные примитивы синхронизации Вместо тяжеловесных блокировок (lock, Monitor, Mutex), используйте примитивы, которые уменьшают вероятность deadlock'ов, такие как SemaphoreSlim или ReaderWriterLockSlim. 🤔 Пример:
SemaphoreSlim semaphore = new SemaphoreSlim(1, 1);

public async Task MethodWithSemaphore()
{
    await semaphore.WaitAsync();
    try
    {
        // Действия, требующие синхронизации
    }
    finally
    {
        semaphore.Release();
    }
}
4️⃣ Избегайте блокировок на длительное время Делайте как можно меньше работы внутри критических секций (заблокированных блоков кода). Это уменьшает вероятность столкновения потоков за ресурсы. 🤔 Пример:
object lockObject = new object();

public void Method()
{
    // Выполняйте сложные операции вне блока lock
    var data = GetData();
    
    lock (lockObject)
    {
        // Выполняйте только необходимые действия внутри блока lock
        ProcessData(data);
    }
}

public object GetData()
{
    // Долговременная операция
}

public void ProcessData(object data)
{
    // Короткая операция
}
5️⃣ Используйте асинхронные методы Использование асинхронных методов и конструкций, таких как async и await, может помочь уменьшить блокировки потоков. 🤔 Пример:
public async Task MethodAsync()
{
    await Task.Run(() =>
    {
        // Выполнение асинхронной работы
    });
}
6️⃣ Анализ и проектирование Проектируйте систему таким образом, чтобы избежать потенциальных deadlock'ов. Используйте анализ и моделирование для выявления возможных взаимных блокировок. 🤔 Краткий ответ Избежать deadlock'ов можно, придерживаясь следующих практик: избегать вложенных блокировок, использовать тайм-ауты при блокировках, применять менее затратные примитивы синхронизации, минимизировать время блокировок, использовать асинхронные методы, а также тщательно анализировать и проектировать систему для выявления и устранения возможных взаимных блокировок. 🔥 ТОП ВОПРОСОВ С СОБЕСОВ 🔒 База собесов | 🔒 База тестовых