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

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

Ir al canal en Telegram
5 049
Suscriptores
+324 horas
-147 días
-2630 días
Archivo de publicaciones
🤔 Какие есть методы оптимизации LINQ запросов? Для оптимизации LINQ запросов в C# используйте компилируемые запросы, минимизируйте запросы в циклах, выбирайте только нужные поля, применяйте отложенное выполнение и метод .AsNoTracking() для чтения данных. 🟠Отложенное выполнение (Deferred Execution) LINQ-запросы не выполняются до тех пор, пока не начнётся итерация по ним. Это позволяет объединить несколько операций в один запрос к базе данных.
var query = dbContext.Users.Where(u => u.IsActive); // Запрос ещё не выполнен
var activeUsers = query.ToList(); // Запрос выполнен здесь
🟠Использование `ToList` и `ToArray` только при необходимости Избегайте ненужных вызовов ToList и ToArray, так как они приводят к немедленному выполнению запроса и загрузке всех данных в память.
var users = dbContext.Users.Where(u => u.IsActive).ToList(); // Не вызывайте ToList() до тех пор, пока не нужно
🟠Проекционная выборка (`Select`) Выбирайте только необходимые поля, чтобы уменьшить объем данных, передаваемых по сети и загружаемых в память.
var userNames = dbContext.Users
    .Where(u => u.IsActive)
    .Select(u => new { u.FirstName, u.LastName })
    .ToList();
🟠Фильтрация на уровне базы данных (`Where`) Фильтруйте данные на уровне базы данных, а не в памяти, чтобы уменьшить количество передаваемых данных.
var activeUsers = dbContext.Users.Where(u => u.IsActive).ToList(); // Фильтрация на уровне базы данных
🟠Пагинация (`Skip` и `Take`) Используйте пагинацию для работы с большими наборами данных, чтобы загружать и обрабатывать только нужные страницы.
var pageNumber = 2;
var pageSize = 10;
var paginatedUsers = dbContext.Users
    .Where(u => u.IsActive)
    .Skip((pageNumber - 1) * pageSize)
    .Take(pageSize)
    .ToList();
🟠Избегайте сложных выражений в циклах Сложные LINQ-запросы в циклах могут привести к многочисленным запросам к базе данных. Постарайтесь минимизировать их или объединить в один запрос.
// Плохо
foreach (var userId in userIds)
{
    var user = dbContext.Users.FirstOrDefault(u => u.Id == userId);
}

// Хорошо
var users = dbContext.Users.Where(u => userIds.Contains(u.Id)).ToList();
🟠Использование асинхронных методов Асинхронные методы, такие как ToListAsync, FirstOrDefaultAsync и SingleOrDefaultAsync, помогают избежать блокировки потоков и улучшить производительность.
var activeUsers = await dbContext.Users.Where(u => u.IsActive).ToListAsync();
🟠Компилированные запросы Для часто выполняемых запросов используйте EF.CompileQuery в Entity Framework, чтобы уменьшить накладные расходы на компиляцию запросов.
private static readonly Func<MyDbContext, bool, IQueryable<User>> GetActiveUsersQuery =
    EF.CompileQuery((MyDbContext context, bool isActive) =>
        context.Users.Where(u => u.IsActive == isActive));

var activeUsers = GetActiveUsersQuery(dbContext, true).ToList();
🟠Анализ генерируемого SQL Используйте инструменты профилирования и логирования для анализа генерируемых SQL-запросов, чтобы найти потенциальные узкие места и неэффективные запросы.
var sql = dbContext.Users.Where(u => u.IsActive).ToQueryString();
Console.WriteLine(sql);
🟠Правильное использование индексов Убедитесь, что индексы в базе данных настроены правильно для часто выполняемых запросов, чтобы улучшить производительность поиска. Ставь 👍 и забирай 📚 Базу знаний

🤔 Какой код правильно реализует async метод?
Anonymous voting

🤔 Какие есть новые полезные функции в C#? 🚩C# 9.0 Records: Предназначены для создания неизменяемых типов данных с минимальным шаблонным кодом
public record Person(string FirstName, string LastName);
Init-only Properties: Позволяют устанавливать значения свойств только при инициализации объекта.
public class Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }
}
With-expressions: Используются для создания копий неизменяемых объектов с изменёнными значениями.
var person1 = new Person("John", "Doe");
var person2 = person1 with { LastName = "Smith" };
Top-level Statements: Позволяют писать код без явного класса или метода Main.
using System;
Console.WriteLine("Hello, World!");     
Pattern Matching Enhancements: Улучшения в сопоставлении с образцом, включая логические шаблоны (and, or, not) и шаблоны типа is.
if (person is Person { FirstName: "John", LastName: "Doe" })
{
    Console.WriteLine("It's John Doe!");
}  
🚩C# 10.0 Global using directives: Позволяют объявлять using директивы, применимые ко всему проекту.
// В globalusing.cs
global using System;
global using System.Collections.Generic;    
File-scoped Namespace: Упрощённый синтаксис для объявления пространства имён для всего файла.
namespace MyNamespace;
class MyClass { }     
Record Structs: Записи, которые могут быть значимыми типами.
public record struct Point(int X, int Y); 
Improved `lambda` expressions: Улучшения в синтаксисе и типизации лямбда-выражений.
Func<int, int> square = x => x * x;     
🚩C# 11.0 Required Members: Обязательные члены, которые должны быть установлены при создании объекта.
public class Person
{
    public required string FirstName { get; init; }
    public required string LastName { get; init; }
}    
Raw String Literals: Упрощённый синтаксис для создания многострочных строковых литералов без экранирования.
var json = """
{
    "name": "John Doe",
    "age": 30
}
""";
Generic Attributes: Позволяют создавать атрибуты с обобщёнными параметрами.
[AttributeUsage(AttributeTargets.Class)]
public class MyGenericAttribute<T> : Attribute { }

[MyGenericAttribute<int>]
public class MyClass { }
List Pattern Matching: Сопоставление с образцом для списков.
if (numbers is [1, 2, .., 10])
{
    Console.WriteLine("The list starts with 1, 2 and ends with 10.");
}    
Ставь 👍 и забирай 📚 Базу знаний

🤔 Какой код корректно использует оператор ?.?
Anonymous voting

🤔 Как бы паттерн использовал для паттерна разделяй и властвуй? 🚩Что такое "Разделяй и властвуй" Паттерн "Разделяй и властвуй" (Divide and Conquer) разделяет задачи на более мелкие подзадачи для упрощения кода и повышения эффективности. 🚩Примеры 🟠Микросервисы: Разделяют приложение на независимые сервисы, которые можно развёртывать и масштабировать отдельно. Например, Микросервисы для пользователей, продуктов, заказов и платежей. 🟠Компонентная архитектура: Делит систему на независимые компонент. Например, Веб-страница с отдельными компонентами для заголовка, контента и футера. 🚩Преимущества 🟠Упрощение кода: Легче понимать и поддерживать. 🟠Масштабируемость: Легче масштабировать отдельные части. 🟠Независимость разработки: Различные команды могут работать параллельно. 🚩Недостатки 🟠Сложность координации: Требует управления взаимодействием между частями. 🟠Интеграционные накладные расходы: Требует дополнительных усилий для интеграции. Ставь 👍 и забирай 📚 Базу знаний

🤔 Какой код корректно создает и инициализирует 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