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

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

الذهاب إلى القناة على Telegram
5 059
المشتركون
-524 ساعات
-77 أيام
-1730 أيام
أرشيف المشاركات
🤔 Как понять, что в коде будет использоваться IQueryable, а не IEnumerable? Если запрос выполняется на уровне базы данных или другого внешнего источника данных, используется IQueryable. Если данные уже загружены в память, используется IEnumerable. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое паттерн MVVM? MVVM (Model-View-ViewModel) — это паттерн проектирования, который разделяет логику программы и интерфейс пользователя. Он широко используется в WPF, Xamarin, MAUI и Blazor. 🚩Как они взаимодействуют? ViewModel обновляет Model (через Command и INotifyPropertyChanged). Model уведомляет ViewModel об изменениях. View автоматически обновляется (через Data Binding). 🚩Пример MVVM в WPF Model (Модель)
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
ViewModel (Логика)
using System.ComponentModel;
using System.Runtime.CompilerServices;

public class PersonViewModel : INotifyPropertyChanged
{
    private string _name;
    public string Name
    {
        get => _name;
        set { _name = value; OnPropertyChanged(); }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
        => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
View (XAML)
<TextBox Text="{Binding Name, Mode=TwoWay}" />
<TextBlock Text="{Binding Name}" />
Ставь 👍 и забирай 📚 Базу знаний

🤔 В чём отличие методов и функций? В .NET (и большинстве ООП-языков): - Функция — подпрограмма, которая возвращает результат. В C# это — любой static или instance метод с возвращаемым типом. - Метод — функция, привязанная к классу или объекту. То есть, в ООП всё называется методами, даже если это технически функция. Таким образом, всё, что мы называем "функцией" в C#, — это метод. Разница скорее терминологическая. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как браузер отправляет запрос и получает ответ от API? Когда браузер отправляет запрос и получает ответ от API, это включает несколько шагов, которые следуют HTTP-протоколу. Этот процесс включает в себя создание и отправку HTTP-запроса, обработку на сервере и получение HTTP-ответа. 🚩Отправка запроса 🟠Инициация запроса Обычно запрос инициируется через JavaScript с использованием встроенных функций, таких как XMLHttpRequest, fetch или сторонние библиотеки, такие как Axios.
   fetch('https://api.example.com/data', {
       method: 'GET',
       headers: {
           'Content-Type': 'application/json',
           'Authorization': 'Bearer token'
       }
   })
   .then(response => response.json())
   .then(data => console.log(data))
   .catch(error => console.error('Error:', error));
   
🟠Формирование HTTP-запроса Метод: Указывает тип запроса (например, GET, POST, PUT, DELETE). URL: Указывает на какой URL отправляется запрос. Заголовки (Headers): Включают информацию о типе содержимого, авторизации и других метаданных. Тело (Body): Содержит данные, которые отправляются с запросом (для методов POST, PUT и PATCH). 🟠Отправка запроса Браузер использует сетевые протоколы для отправки сформированного HTTP-запроса на указанный сервер через интернет. 🚩Обработка запроса на сервере 1⃣Получение запроса Сервер получает HTTP-запрос. 2⃣Обработка запроса Сервер обрабатывает запрос, выполняя соответствующие действия, такие как чтение данных из базы данных, выполнение логики приложения или взаимодействие с другими сервисами. 3⃣Формирование ответа Статус код (Status Code): Указывает результат обработки запроса (например, 200 OK, 404 Not Found, 500 Internal Server Error). Заголовки (Headers): Могут включать метаданные о содержимом ответа, кэшировании и других параметрах. Тело (Body): Содержит данные, которые отправляются обратно клиенту, часто в формате JSON или XML.
   HTTP/1.1 200 OK
   Content-Type: application/json
   Content-Length: 85

   {
       "id": 1,
       "name": "Example",
       "description": "This is an example response"
   }
   
🚩Получение ответа 1⃣Получение ответа Браузер получает HTTP-ответ от сервера. 2⃣Обработка ответа Статус код: Браузер или JavaScript-код проверяет статус код, чтобы определить, был ли запрос успешным. Заголовки: Заголовки могут быть использованы для получения дополнительной информации о ответе. Тело: Браузер разбирает тело ответа, если это необходимо, например, преобразует JSON-данные в объект JavaScript. 3⃣Использование данных Полученные данные могут быть использованы в приложении для обновления интерфейса пользователя, хранения в локальном хранилище или выполнения других действий. 🚩Пример полного цикла запроса и ответа Отправка запроса
fetch('https://api.example.com/data', {
    method: 'GET',
    headers: {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer token'
    }
})
.then(response => {
    if (!response.ok) {
        throw new Error('Network response was not ok ' + response.statusText);
    }
    return response.json();
})
.then(data => {
    console.log('Data received:', data);
    // Используем данные для обновления UI или других целей
})
.catch(error => {
    console.error('There has been a problem with your fetch operation:', error);
});
Ставь 👍 и забирай 📚 Базу знаний

🤔 Если в качестве параметра передаю число и объект — есть ли какая-нибудь разница в их поведении? Да, разница есть. Число (например, int) — это значимый тип. При передаче копируется значение. Изменения внутри метода не влияют на оригинальную переменную. Объект (например, экземпляр класса) — это ссылочный тип. Передаётся ссылка, и метод работает с тем же объектом, изменения будут видны снаружи. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Где вести задачи и проекты? В Битрикс24 ✅ Бесплатный онлайн-сервис для бизнеса и совместной работы. — Удобный планировщик зад
Где вести задачи и проекты? В Битрикс24 ✅ Бесплатный онлайн-сервис для бизнеса и совместной работы. — Удобный планировщик задач для всей команды с чек-листами и комментариями. — Популярные проектные методики: канбан, скрам, диаграмма ганта. — Видеозвонки в один клик из чата. — Календарь и слоты для совместного планирования. — Умный ИИ-помощник для постановки четких тз. Полный комплект для эффективности вашей команды. Ставьте первую задачу прямо сейчас⚡ Начать #реклама 16+ task-24.bitrix24.ru О рекламодателе

🤔 Какой слой rest и swap с точки зрения трехслойной архитектуры? В трехслойной архитектуре (трехуровневая архитектура), также известной как многоуровневая архитектура, приложения разделяются на три логических слоя: 🟠Презентационный слой (Presentation Layer) Отвечает за взаимодействие с пользователем. Веб-интерфейсы, мобильные приложения, десктопные приложения. Примеры: HTML/CSS/JavaScript для веб-приложений, UI-компоненты в мобильных и десктопных приложениях. 🟠Логический слой (Business Logic Layer) Содержит бизнес-логику и правила приложения. Обрабатывает данные, выполняет вычисления, применяет бизнес-правила. Примеры: классы и методы, реализующие бизнес-логику, сервисы, обработчики данных. 🟠Слой данных (Data Access Layer): Отвечает за взаимодействие с источниками данных. Операции с базами данных, файловыми системами, внешними сервисами. Примеры: репозитории, Data Access Objects (DAO), API-клиенты для доступа к внешним системам. 🚩REST REST — это архитектурный стиль для разработки веб-сервисов. RESTful сервисы используют стандартные HTTP методы (GET, POST, PUT, DELETE и т.д.) для работы с ресурсами. С точки зрения трехслойной архитектуры: Презентационный слой: Вызовы REST API могут происходить с клиентской стороны (например, AJAX запросы из веб-интерфейса) или через клиентские приложения. Пример: фронтенд веб-приложения, который взаимодействует с REST API. Логический слой: REST API реализует бизнес-логику и выступает посредником между презентационным слоем и слоем данных. Пример: контроллеры и сервисы, обрабатывающие REST запросы и выполняющие соответствующую бизнес-логику. Слой данных: REST API может взаимодействовать с базой данных или другими источниками данных для получения и сохранения информации. Пример: методы в API, которые выполняют запросы к базе данных через репозитории или DAO. 🚩SWAP SWAP — это гипотетический или менее распространенный термин, часто интерпретируемый как упрощенный API для веб-приложений. Презентационный слой Клиентские приложения или пользовательские интерфейсы могут вызывать методы SWAP для получения или отправки данных.Пример: веб-страницы или мобильные приложения, обращающиеся к SWAP для выполнения операций. Логический слой: SWAP обрабатывает бизнес-логику аналогично REST API, предоставляя упрощенные конечные точки для взаимодействия с данными. Пример: сервисы, которые реализуют простые операции (CRUD) без сложной бизнес-логики. Слой данных: SWAP взаимодействует с базой данных или другими источниками данных для выполнения операций чтения/записи. Пример: методы SWAP, которые обращаются к базе данных через абстрактные уровни доступа к данным. Ставь 👍 и забирай 📚 Базу знаний

Запустите рекламу в телеграм-каналах с Яндекс Директом Перфоманс-реклама теперь в телеграм-каналах ⚡ Яндекс Директ знает, как привлечь целевую аудиторию 💰👌 Попробовать #реклама yandex.ru О рекламодателе

🤔 Что должен возвращать GetHashCode? Метод GetHashCode должен возвращать целое число, которое уникально идентифицирует объект в контексте его текущего состояния. Объекты, равные по Equals, должны иметь одинаковые hash-коды, но разные объекты могут иметь одинаковый hash-код. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое Dispose? Dispose метод является частью паттерна управления ресурсами, известного как "Dispose Pattern". Этот метод реализуется в классах через интерфейс IDisposable. Цель — явное освобождение неуправляемых ресурсов и, по желанию, управляемых ресурсов, прежде чем сборщик мусора освободит объект. Это важно для эффективного управления памятью и другими системными ресурсами. 🚩Неуправляемые и управляемые ресурсы 🟠Неуправляемые ресурсы включают в себя ресурсы, которые не управляются средой CLR (Common Language Runtime), например, файловые дескрипторы, сетевые соединения или указатели на память, выделенную вне .NET среды. 🟠Управляемые ресурсы это объекты .NET, которые занимают память и потенциально удерживают ссылки на неуправляемые ресурсы. 🚩Как он работает Должен освобождать все неуправляемые ресурсы, занимаемые объектом, а также должен иметь возможность освобождать управляемые ресурсы, если это необходимо. Как правило, управляемые ресурсы освобождаются сами сборщиком мусора, но если управляемый ресурс включает в себя неуправляемые ресурсы, тогда Dispose может быть вызван для их явного освобождения.
public class ResourceHolder : IDisposable
{
    private bool disposed = false;

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        if (!disposed)
        {
            if (disposing)
            {
                // Освобождение управляемых ресурсов
            }
            // Освобождение неуправляемых ресурсов
            disposed = true;
        }
    }

    ~ResourceHolder()
    {
        Dispose(false);
    }
}
Пример использования Dispose
using (var resource = new ResourceHolder())
{
    // Использование ресурса
}
// Метод Dispose автоматически вызывается при выходе из блока using
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что ORM генерирует на выходе с точки зрения оптимизации исполненного SQL? ORM (например, Entity Framework) генерирует SQL-запросы на основе LINQ-выражений или методов API. С точки зрения оптимизации: - ORM может не всегда создавать эффективные запросы — возможны избыточные JOIN'ы, SELECT * и т.п. - Хорошие ORM (например, EF Core) стараются оптимизировать SQL, но всё равно могут уступать вручную написанному. - Можно использовать профайлеры и логирование SQL для контроля и отладки. - ORM поддерживает отложенное выполнение (IQueryable) и предзагрузку зависимостей (Include), что позволяет управлять оптимизацией вручную. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В чём отличие ArrayList и List? В C# есть две похожие коллекции: ArrayList(старый подход) и List<T> (современный вариант). Основные отличия: 🚩Пример кода
ArrayList arrayList = new ArrayList();
arrayList.Add(1);      
arrayList.Add("Hello"); // Ошибки возможны при приведении типов

List<int> list = new List<int>();
list.Add(1);  // Только int, безопаснее
Ставь 👍 и забирай 📚 Базу знаний

Виртуальный сервер в аренду в Турции или России. Отказоустойчивый виртуальный облачный сервер на базе виртуализации VMWARE по
Виртуальный сервер в аренду в Турции или России. Отказоустойчивый виртуальный облачный сервер на базе виртуализации VMWARE по модели подписки. - Бесплатная миграция инфраструктуры в Турцию - Размещайте ресурсы в Турции или России и оплачивайте в рублях, турицких лирах или евро. - Храните резервные копии данных за рубежом для минимизации рисков - Продолжайте использовать импортное ПО, скачивайте обновления и патчи, общайтесь с техподдержкой - Доступность сервиса — от 99,982% SLA - Дата центры Tier III в России и Турции - Почасовой биллинг и постоплата Подключите услугу сегодня со скидкой 50% на инфраструктуру. Подать заявку #реклама cloud4y.ru О рекламодателе

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

🤔 Как сделать связь один к одному? В реляционных базах данных связь "один к одному" (one-to-one) подразумевает, что каждая запись в одной таблице соответствует ровно одной записи в другой таблице. Для реализации связи "один к одному" в SQL можно использовать несколько подходов, в зависимости от требований и архитектуры базы данных. 🚩Основные подходы 🟠Уникальные внешние ключи Используйте внешний ключ в одной таблице, который ссылается на первичный ключ другой таблицы, и сделайте этот внешний ключ уникальным. 🟠Одинаковые первичные ключи Используйте один и тот же первичный ключ в обеих таблицах, где одна таблица содержит внешний ключ, который является также первичным ключом. 🚩Уникальные внешние ключи Таблицы Users (пользователи) UserId (Primary Key) UserName Profiles (профили) ProfileId (Primary Key) UserId (Foreign Key, Unique) ProfileData Создание таблиц
CREATE TABLE Users (
    UserId INT PRIMARY KEY,
    UserName VARCHAR(100)
);

CREATE TABLE Profiles (
    ProfileId INT PRIMARY KEY,
    UserId INT UNIQUE,
    ProfileData VARCHAR(255),
    FOREIGN KEY (UserId) REFERENCES Users(UserId)
);
Вставка данных
INSERT INTO Users (UserId, UserName) VALUES (1, 'John Doe');
INSERT INTO Profiles (ProfileId, UserId, ProfileData) VALUES (1, 1, 'Profile data for John Doe');
Запрос данных
SELECT Users.UserName, Profiles.ProfileData
FROM Users
JOIN Profiles ON Users.UserId = Profiles.UserId;
🚩Одинаковые первичные ключи Таблицы Users (пользователи) UserId (Primary Key) UserName Profiles (профили) UserId (Primary Key, Foreign Key) ProfileData Создание таблиц
CREATE TABLE Users (
    UserId INT PRIMARY KEY,
    UserName VARCHAR(100)
);

CREATE TABLE Profiles (
    UserId INT PRIMARY KEY,
    ProfileData VARCHAR(255),
    FOREIGN KEY (UserId) REFERENCES Users(UserId)
);
Вставка данных
INSERT INTO Users (UserId, UserName) VALUES (1, 'John Doe');
INSERT INTO Profiles (UserId, ProfileData) VALUES (1, 'Profile data for John Doe');
Запрос данных
SELECT Users.UserName, Profiles.ProfileData
FROM Users
JOIN Profiles ON Users.UserId = Profiles.UserId;
🚩Плюсы и минусы 🟠Уникальные внешние ключи ➕Четкая семантика внешнего ключа. ➕Легкость добавления дополнительных данных в связанную таблицу. ➖Необходимо следить за уникальностью внешнего ключа. 🟠Одинаковые первичные ключи ➕Единый идентификатор для связанных данных. ➕Простота конструкции при обеспечении связи. ➖Необходимость синхронизации идентификаторов в обеих таблицах. Ставь 👍 и забирай 📚 Базу знаний

🤔 Зачем используется библиотека Moq? Это библиотека для создания имитаций (mock) объектов в тестах. 1. Она позволяет подменять зависимости тестируемого кода фейковыми реализациями. 2. Используется для тестирования изолированных частей приложения без вызова реальных ресурсов. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Пример выполнения кода, когда возвращается объект интерфейса Iqueryable? IQueryable<T> — это интерфейс, который используется для отложенного выполнения запросов (deferred execution). Он позволяет строить SQL-запросы к базе данных или манипулировать данными в памяти, но сам запрос выполняется только в момент его итерации (ToList(), FirstOrDefault(), Count(), и т. д.). 🚩Пример работы с `IQueryable<T>` на Entity Framework Core Предположим, у нас есть сущность Product и контекст базы данных AppDbContext
public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

public class AppDbContext : DbContext
{
    public DbSet<Product> Products { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("YourConnectionString");
    }
}
Теперь создадим репозиторий, который возвращает IQueryable<Product>
public class ProductRepository
{
    private readonly AppDbContext _context;

    public ProductRepository(AppDbContext context)
    {
        _context = context;
    }

    public IQueryable<Product> GetProducts()
    {
        return _context.Products.Where(p => p.Price > 100); 
        // Запрос не выполняется здесь! Только формируется
    }
}
🚩Вызов метода и выполнение запроса Запрос к базе данных выполнится только при материализации (ToList(), FirstOrDefault(), Count(), и т. д.).
var repository = new ProductRepository(new AppDbContext());

// Создаём IQueryable-запрос
IQueryable<Product> query = repository.GetProducts();

// Добавляем дополнительное условие (запрос еще НЕ выполнен)
query = query.OrderBy(p => p.Name);

// Теперь выполняем запрос к БД
List<Product> products = query.ToList(); // SQL-запрос отправляется в базу
Ставь 👍 и забирай 📚 Базу знаний

🤔 Каковы преимущества при использовании внедрения зависимостей (DI) в код? - Слабая связность — классы не создают зависимости напрямую. - Тестируемость — можно легко подменить зависимости моками. - Гибкость — можно менять реализацию без изменения потребителя. - Расширяемость — можно добавлять новые реализации интерфейсов без изменения старых классов. - Повторное использование — одно и то же внедрение можно использовать в разных частях системы. Внедрение зависимостей упрощает архитектуру и повышает удобство поддержки кода. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какой сейчас последний C#? 🚩Нововведения 🟠Primary Constructors для классов и структур Позволяют определять конструкторы прямо в объявлении класса или структуры, что упрощает код и улучшает его читаемость.
public class Person(string name, int age)
{
    public string Name { get; } = name;
    public int Age { get; } = age;
}
🟠Collection Literals Обеспечивает более удобный синтаксис для создания коллекций.
var numbers = [1, 2, 3, 4, 5];
🟠Default Values для auto-properties Теперь можно задавать значения по умолчанию для auto-properties, что делает код более лаконичным.
public string Name { get; set; } = "Unknown";
🟠Using aliases Позволяет использовать алиасы для пространств имен, улучшая читаемость кода.
using Text = System.Text;
🟠Improved Lambda Expressions: Улучшены возможности для работы с лямбда-выражениями, делая их более гибкими и мощными. 🚩Зачем нужны эти изменения? Эти нововведения направлены на упрощение синтаксиса языка, улучшение читаемости и поддерживаемости кода, а также на повышение производительности и удобства разработки.
public class Program
{
    public static void Main()
    {
        var person = new Person("John", 30);
        Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");

        var numbers = [1, 2, 3, 4, 5];
        numbers.ForEach(n => Console.WriteLine(n));

        var name = new Name { Value = "Unknown" };
        Console.WriteLine(name.Value);
    }
}

public class Person(string name, int age)
{
    public string Name { get; } = name;
    public int Age { get; } = age;
}

public class Name
{
    public string Value { get; set; } = "Default Name";
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Если есть класс, а в нем значимый тип данных, где он будет храниться? Если значимый тип (например, int или struct) — это поле класса, то: - Сам класс хранится в куче (heap). - Значимый тип как поле будет внутри объекта класса, то есть в той же области памяти (в куче). Он не уходит в стек отдельно — размещается вместе с объектом, который его содержит. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний