uk
Feedback

Не попадись на ботовода! Telemetrio знаходить і позначає такі канали мітками 👉 Хочеш бачити мітку, оформляй підписку

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

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

Відкрити в Telegram

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

Показати більше
5 015
Підписники
+224 години
+37 днів
+2330 днів
Архів дописів
🤔 Что 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). - Значимый тип как поле будет внутри объекта класса, то есть в той же области памяти (в куче). Он не уходит в стек отдельно — размещается вместе с объектом, который его содержит. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как в кучах разделяются объекты? В .NET среде управления памятью, объекты размещаются в куче (heap), и управление памятью осуществляется сборщиком мусора (Garbage Collector, GC). Куча разделена на несколько поколений для оптимизации производительности управления памятью. 🚩Поколения кучи Куча в .NET разделена на три поколения: Generation 0, Generation 1 и Generation 2. Это разделение позволяет эффективно управлять памятью, минимизируя частоту сборок мусора и оптимизируя их выполнение. 🟠Generation 0 Содержит новосозданные объекты. Сборка мусора для этого поколения происходит чаще, так как большинство объектов "умирает" быстро. Наименьший размер среди всех поколений. 🟠Generation 1 Промежуточное поколение, используемое для объектов, которые пережили хотя бы одну сборку мусора Generation 0. Содержит объекты с более длительным временем жизни, чем объекты в Generation 0. 🟠Generation 2 Содержит объекты с самым длительным временем жизни. Наибольший размер среди всех поколений. Сборка мусора для этого поколения происходит реже всего. 🚩Large Object Heap (LOH) LOH используется для размещения крупных объектов (размером 85,000 байт и более). Объекты в LOH не перемещаются при сборке мусора, что уменьшает фрагментацию памяти. Сборка мусора для LOH происходит одновременно со сборкой Generation 2. 🚩Как разделяются объекты 🟠Размещение объектов При создании объекта он сначала размещается в Generation 0. Если объект переживает сборку мусора в Generation 0, он перемещается в Generation 1. Если объект переживает сборку мусора в Generation 1, он перемещается в Generation 2. 🟠Сборка мусора Generation 0: Быстрая и частая сборка. Цель - освободить память от краткоживущих объектов. Generation 1: Реже, чем Generation 0. Служит промежуточной зоной. Generation 2: Самая редкая и длительная сборка. Обрабатывает долгоживущие объекты. Large Object Heap (LOH): Сборка мусора проводится вместе с Generation 2.
public class Program
{
    public static void Main()
    {
        // Создание объектов в Generation 0
        for (int i = 0; i < 1000; i++)
        {
            var obj = new object();
        }

        // Создание большого объекта (размещается в LOH)
        byte[] largeArray = new byte[100000];
        
        // Принудительный вызов сборщика мусора
        GC.Collect();

        // Проверка поколения объекта
        Console.WriteLine(GC.GetGeneration(largeArray)); // Скорее всего, 2
    }
}
Ставь 👍 и забирай 📚 Базу знаний

Repost from easyoffer
Новая фича на easyoffer – Автоотлики Вы автоматически откликаетесь на подходящие вам вакансии. Попробуйте её бесплатно и начн
Новая фича на easyoffer – Автоотлики Вы автоматически откликаетесь на подходящие вам вакансии. Попробуйте её бесплатно и начните получать больше предложений о работе. 🚀 Запуск занимаем всего 3 минуты, а экономит очень много времени 🛡 Это безопасно: easyoffer официально одобрен HeadHunter и прошел его модерацию. 🥷🏻 Автоотклик незаметен для рекртера. Автоотклик ничем не отличается от обычного отклика, который вы делаете вручную Рекрутеры давно используют автоматизацию для поиска кандидатов. Так почему вы должны откликаться вручную? 💡Совет – Добавьте шаблон сопроводительного письма, чтобы откликаться на большее количество вакансий (на некоторые вакансии нельзя откликнуться без сопроводительного) Попробовать бесплатно → https://easyoffer.ru/autoapply

🤔 Примеры паттерна абстрактной фабрики? Абстрактная фабрика — это паттерн, который позволяет создавать семейства взаимосвязанных объектов, не привязываясь к конкретным классам. Пример: В графической системе можно иметь: - Button и Checkbox для Windows, - Button и Checkbox для macOS. Абстрактная фабрика позволяет создавать соответствующие элементы без знания, для какой платформы они реализованы. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Получите консультацию по Китаю Надежные поставщики из Китая. Аудит фабрик и доставка образцов для вашего бизнеса! Хотите наладить сотрудничество с производителями в Китае? Мы поможем найти надежного поставщика, проведем аудит фабрик и организуем доставку образцов. Получить консультацию #реклама ecomax-group.ru О рекламодателе

🤔 Что такое куки и где оно хранится в запросе? Это небольшие фрагменты данных, которые веб-сайты сохраняют на устройствах пользователей для хранения информации о сессии и отслеживания состояния. Куки используются для различных целей, таких как аутентификация пользователей, хранение настроек и предпочтений, а также отслеживание активности пользователей на сайте. 🚩Основные свойства 🟠Имя (Name) Уникальный идентификатор для каждого куки. 🟠Значение (Value) Данные, которые хранит куки. 🟠Домен (Domain) Домен, для которого куки действителен. 🟠Путь (Path) Путь на сервере, для которого куки действителен. 🟠Время истечения (Expiration/Max-Age) Дата или время, когда куки должен быть удален. 🟠Безопасность (Secure) Указывает, что куки должны передаваться только через HTTPS. 🟠HTTPOnly Указывает, что куки недоступен через JavaScript, только через HTTP(S) запросы. 🚩Где хранятся 🟠Установка куки с сервера (Set-Cookie) Сервер отправляет куки в ответе на запрос клиента с использованием заголовка Set-Cookie.
   HTTP/1.1 200 OK
   Set-Cookie: sessionId=abc123; Path=/; Expires=Wed, 09 Jun 2023 10:18:14 GMT
   Content-Type: text/html
   
🟠Отправка куки клиентом (Cookie) Браузер автоматически добавляет соответствующие куки в заголовок Cookie при каждом последующем запросе к серверу, для которого эти куки действительны.
   GET /dashboard HTTP/1.1
   Host: example.com
   Cookie: sessionId=abc123
   
🚩Пример использования Установка куки на сервере (пример на Node.js с использованием Express)
const express = require('express');
const app = express();

app.get('/', (req, res) => {
    // Устанавливаем куки
    res.cookie('sessionId', 'abc123', { 
        maxAge: 900000, 
        httpOnly: true 
    });
    res.send('Куки установлены');
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});
Доступ к куки на клиенте (пример на JavaScript)
// Установка куки
document.cookie = "username=JohnDoe; expires=Thu, 18 Dec 2023 12:00:00 UTC; path=/";

// Получение всех куки
let cookies = document.cookie;
console.log(cookies);
🚩Важные моменты 🟠Безопасность Куки с флагом Secure передаются только по HTTPS-соединениям. Куки с флагом HttpOnly недоступны через JavaScript, что помогает защитить их от XSS-атак. 🟠Размер и количество Обычно один куки не должен превышать 4KB, и на одном домене может быть установлено не более 20-30 куки. 🟠Конфиденциальность Куки могут содержать чувствительные данные, поэтому важно защищать их и использовать шифрование, если необходимо. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое транзакция? Транзакция — это единица работы с базой данных, которая выполняется полностью или не выполняется вовсе. Основные свойства транзакции — ACID: - Atomicity (атомарность) — всё или ничего. - Consistency (согласованность) — данные переходят из одного допустимого состояния в другое. - Isolation (изолированность) — параллельные транзакции не мешают друг другу. - Durability (надёжность) — после коммита изменения сохраняются. В .NET можно управлять транзакциями вручную или через TransactionScope. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Если в двух переменных хранится одинаковое значение, то будут ли они равны? Сравнение значений переменных может зависеть от типа данных, хранящихся в этих переменных, и от способа их сравнения. 🟠Примитивные типы (Value Types) Для примитивных типов (например, int, float, char, bool) значение хранятся непосредственно в переменных, и их сравнение выполняется по значению.
int a = 5;
int b = 5;

bool areEqual = (a == b); // True
🟠Ссылочные типы (Reference Types) Для ссылочных типов (например, классы, строки) переменные содержат ссылки на объекты в куче. Сравнение ссылочных типов по умолчанию выполняется по ссылке, а не по значению.
class Person
{
    public string Name { get; set; }
}

Person person1 = new Person { Name = "Alice" };
Person person2 = new Person { Name = "Alice" };

bool areEqual = (person1 == person2); // False, потому что сравниваются ссылки
🟠Строки (Strings) Строки являются ссылочными типами, но переопределяют операторы сравнения == и Equals для сравнения по значению.
string str1 = "Hello";
string str2 = "Hello";

bool areEqual = (str1 == str2); // True, строки сравниваются по значению
🟠Кастомные классы Для кастомных классов можно переопределить методы Equals и GetHashCode, чтобы сравнивать объекты по значению.
class Person
{
    public string Name { get; set; }

    public override bool Equals(object obj)
    {
        if (obj == null || GetType() != obj.GetType())
            return false;

        Person other = (Person)obj;
        return Name == other.Name;
    }

    public override int GetHashCode()
    {
        return Name.GetHashCode();
    }
}

Person person1 = new Person { Name = "Alice" };
Person person2 = new Person { Name = "Alice" };

bool areEqual = person1.Equals(person2); // True
Ставь 👍 и забирай 📚 Базу знаний

Простая CRM в Битрикс24 Битрикс24 не грузит менеджеров лишними действиями. Всё автоматизировано: задачи ставятся сами, отчёты
Простая CRM в Битрикс24 Битрикс24 не грузит менеджеров лишними действиями. Всё автоматизировано: задачи ставятся сами, отчёты собираются в один клик, продажи растут. CRM, которая экономит нервы и деньги. ✅ Начните бесплатно Зарегистрироваться #реклама 16+ bitrix24.ru О рекламодателе

🤔 Для чего используют GVT? Концепт из распределённых систем, чаще используется в симуляциях и распределённых вычислениях (например, в алгоритмах параллельной дискретной симуляции). Применение: - Определение момента времени, до которого все события в системе завершены. - Управление откатами, удалением стейтов, сборкой мусора в системах с отложенным выполнением событий. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Изиоффер переходит в публичное бета-тестирование! 🎉 Что нового: 🟢Анализ IT собеседований на основе 4500+ реальных интервью
Изиоффер переходит в публичное бета-тестирование! 🎉 Что нового: 🟢Анализ IT собеседований на основе 4500+ реальных интервью 🟢Вопросы из собеседований с вероятностью встречи 🟢Видео-примеры ответов на вопросы от Senior, Middle, Junior грейдов 🟢Пример лучшего ответа 🟢Задачи из собеседований 🟢Тестовые задания 🟢Примеры собеседований 🟢Фильтрация всего контента по грейдам, компаниям 🟢Тренажер подготовки к собеседованию на основе интервальных повторений и флеш карточек 🟢Тренажер "Реальное собеседование" с сценарием вопросов из реальных собеседований (скоро) 🟢Автоотклики на HeadHunter 🟢Закрытое сообщество easyoffer 💎 Акция в честь открытия для первых 500 покупателей: 🚀 Скидка 50% на PRO тариф на 1 год 🔥 Акция уже стартовала! 👉 https://easyoffer.ru/pro