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

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

رفتن به کانال در Telegram
5 058
مشترکین
-524 ساعت
-77 روز
-1730 روز
آرشیو پست ها
🤔 Что такое паттерн DDD? Это подход к разработке, фокусирующийся на модели домена и бизнес-логике. Основная идея — построение программного обеспечения вокруг доменных сущностей, агрегаций и их контекстов для решения бизнес-задач. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Возможно ли как-нибудь ограничить типы, которые пользователь будет передавать через шаблон? Можно ограничить типы, которые передаются в шаблоны (generics), с помощью ключевого слова where. Это позволяет указать, какие типы подходят для использования, обеспечивая безопасность и предсказуемость кода. Вот основные виды ограничений: 🟠Класс или структура where T : class — только классы. where T : struct — только структуры. 🟠Интерфейс Указание интерфейса, который должен реализовать тип:
   public class MyClass<T> where T : IDisposable { }
   
🟠Базовый класс Указание, что тип должен быть наследником определённого класса:
   public class MyClass<T> where T : Exception { }
   
🟠Конструктор Ограничение на наличие конструктора без параметров:
   public class MyClass<T> where T : new() { }
   
🟠Комбинированные ограничения Можно объединять несколько условий:
   public class MyClass<T> where T : class, IDisposable, new() { }
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое IQueryable? `IQueryable` — это интерфейс, который позволяет строить и выполнять запросы к данным с отложенным выполнением (lazy loading). Он часто используется для создания запросов в LINQ к базам данных, поскольку позволяет серверу базы данных выполнить запрос, минимизируя нагрузку на память и процессор. `IQueryable` также поддерживает сложные запросы, такие как фильтрация, сортировка и агрегация, до фактического получения данных. Это делает его эффективным инструментом для работы с большими наборами данных. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как по ключу получить значение? Для получения значения по ключу в словаре (Dictionary<TKey, TValue>) используются методы и свойства, такие как индексатор [], метод TryGetValue, и метод ContainsKey. 🟠Индексатор `[]` Индексатор позволяет получить значение по ключу напрямую. Если ключ отсутствует в словаре, будет выброшено исключение KeyNotFoundException.
var dictionary = new Dictionary<int, string>
{
    { 1, "One" },
    { 2, "Two" },
    { 3, "Three" }
};

try
{
    string value = dictionary[2]; // Получение значения по ключу 2
    Console.WriteLine(value); // Выведет "Two"
}
catch (KeyNotFoundException)
{
    Console.WriteLine("Key not found");
}
🟠Метод `TryGetValue` Метод TryGetValue позволяет безопасно получить значение по ключу. Он возвращает true, если ключ найден, и false, если ключ отсутствует. При этом значение записывается в выходной параметр.
var dictionary = new Dictionary<int, string>
{
    { 1, "One" },
    { 2, "Two" },
    { 3, "Three" }
};

if (dictionary.TryGetValue(2, out string value))
{
    Console.WriteLine(value); // Выведет "Two"
}
else
{
    Console.WriteLine("Key not found");
}
🟠Метод `ContainsKey` Метод ContainsKey проверяет наличие ключа в словаре. Его можно использовать в сочетании с индексатором для получения значения.
var dictionary = new Dictionary<int, string>
{
    { 1, "One" },
    { 2, "Two" },
    { 3, "Three" }
};

if (dictionary.ContainsKey(2))
{
    string value = dictionary[2];
    Console.WriteLine(value); // Выведет "Two"
}
else
{
    Console.WriteLine("Key not found");
}
Ставь 👍 и забирай 📚 Базу знаний

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

🤔 В чем суть extension методов? Extension-методы (методы расширения) — это способ добавить новые методы к существующим классам, не изменяя их код и не создавая наследников. Они позволяют расширять классы и интерфейсы, даже если у нас нет доступа к их исходному коду. 🚩Как работают extension-методы? Это обычные статические методы, но объявленные внутри статического класса. Первый параметр метода должен принимать тот тип, который мы хотим расширить, и перед ним ставится ключевое слово this. После этого метод становится доступен как "встроенный" у этого типа. 🟠Добавляем метод к `string` Допустим, у нас есть строка, и мы хотим добавить метод ToSnakeCase, который заменяет пробелы на нижние подчеркивания.
using System;

public static class StringExtensions
{
    public static string ToSnakeCase(this string str)
    {
        return str.Replace(" ", "_").ToLower();
    }
}

class Program
{
    static void Main()
    {
        string text = "Hello World";
        Console.WriteLine(text.ToSnakeCase()); // hello_world
    }
}
🟠Расширяем `List<int>` Добавим метод `SumEvenNumbers()`, который суммирует только четные числа в List<int>.
using System;
using System.Collections.Generic;
using System.Linq;

public static class ListExtensions
{
    public static int SumEvenNumbers(this List<int> numbers)
    {
        return numbers.Where(n => n % 2 == 0).Sum();
    }
}

class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6 };
        Console.WriteLine(numbers.SumEvenNumbers()); // 12 (2 + 4 + 6)
    }
}
🚩Когда использовать extension-методы? Когда нужно добавить новый метод к существующему классу, но нельзя изменить его код (например, string, List<T>, DateTime). Когда хочется сделать код более читаемым: numbers.SumEvenNumbers() лучше, чем MyExtensions.SumEvenNumbers(numbers). Когда нужно улучшить API без наследования и изменения структуры классов. Ставь 👍 и забирай 📚 Базу знаний

Чего хотят ваши сотрудники ⚡Мы перепробовали всё: — KPI — не работает. — Премии — ждут как зарплату, эффекта ноль. — Тимбилди
Чего хотят ваши сотрудники ⚡Мы перепробовали всё: — KPI — не работает. — Премии — ждут как зарплату, эффекта ноль. — Тимбилдинг — стало только хуже. В итоге мотивация у всех держится на одном: "не бесить начальство". Это не потому что "люди не те" — просто вы ещё не знаете, чтО на самом деле мотивирует команду. Сегодня открыт бесплатный доступ к курсу "Ежедневная мотивация" от Школы Генерального директора. Он о том, как работает мотивация в реальности: — Почему большинство систем мотивации не просто бесполезны, а вредны — Как узнать, чего на самом деле хотят ваши люди и почему они сами не могут это сформулировать — Как создать условия, при которых сотрудник работает не из страха и не за надбавку, а потому что сам этого хочет Оставьте заявку, куратор перезвонит и откроет полный доступ на 2 дня. Подать заявку #реклама 16+ gd.ru О рекламодателе

🤔 Принципы ООП? Основные принципы ООП включают инкапсуляцию, которая скрывает внутреннюю реализацию объекта и предоставляет доступ к данным через методы; наследование, которое позволяет создавать новые классы на основе существующих; полиморфизм, обеспечивающий возможность работы с объектами разных типов через общий интерфейс; и абстракцию, которая упрощает сложные системы, выделяя только ключевые характеристики объектов. Эти принципы делают код более структурированным и легко поддерживаемым. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое cancellation token в многопоточности? CancellationToken в C# используется для координации отмены между потоками. Это механизм, позволяющий запрашивать отмену операции (например, задачи Task или асинхронного метода), не прерывая поток принудительно. 🚩Зачем нужен `CancellationToken`? В многопоточных или асинхронных операциях бывает необходимо отменить выполнение кода, например: Пользователь отменил загрузку файла. Истек тайм-аут выполнения операции. Нужно прервать выполнение нескольких связанных задач. 🚩Как работает `CancellationToken`? 🟠Создание `CancellationTokenSource` Источник токена (CancellationTokenSource) управляет токеном (CancellationToken), который передаётся в задачи. 🟠Передача токена в выполняемую операцию Код регулярно проверяет cancellationToken.IsCancellationRequested, чтобы определить, нужно ли остановиться. 🟠Запрос на отмену Если вызывается cts.Cancel(), все методы, использующие этот токен, получают сигнал об отмене. 🚩Пример использования
using System;
using System.Threading;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using var cts = new CancellationTokenSource();

        // Отменяем операцию через 3 секунды
        cts.CancelAfter(3000);

        try
        {
            await DoWorkAsync(cts.Token);
        }
        catch (OperationCanceledException)
        {
            Console.WriteLine("Операция отменена!");
        }
    }

    static async Task DoWorkAsync(CancellationToken cancellationToken)
    {
        for (int i = 0; i < 10; i++)
        {
            cancellationToken.ThrowIfCancellationRequested(); // Проверка отмены

            Console.WriteLine($"Работаем... {i}");
            await Task.Delay(1000, cancellationToken); // Ожидание с проверкой отмены
        }
    }
}
Ставь 👍 и забирай 📚 Базу знаний

Тариф, с которым хватит на всё 50 ГБ и безлимитные минуты за 390 ₽ в месяц, если перенесете номер в Т-Мобайл до 31 августа Узнать больше #реклама tbank.ru О рекламодателе

🤔 В чём разница между отложенным и немедленным выполнением? - Отложенное выполнение (deferred execution) — данные не вычисляются до тех пор, пока к ним не обратятся, как в IEnumerable, yield, LINQ. - Немедленное выполнение (immediate execution) — результат вычисляется сразу при вызове метода (например, ToList(), Count()). Отложенное выполнение экономит ресурсы, но требует внимательности к источнику данных. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Строки - значимый или ссылочный тип? В C# строки (string) являются ссылочным типом, но ведут себя как значимый тип из-за своей неизменяемости (immutability). 🚩`string` – это ссылочный тип В C# все классы (class) – ссылочные типы, и string не исключение. - Переменная string хранит ссылку на объект в памяти, а не сам текст. - Две переменные могут ссылаться на один и тот же объект.
string str1 = "Hello";
string str2 = str1; // str2 теперь указывает на тот же объект, что и str1
Console.WriteLine(object.ReferenceEquals(str1, str2)); // True
🚩`string` – неизменяемый тип (Immutable) Хотя string – ссылочный тип, каждое изменение строки создаёт новый объект в памяти, а не модифицирует существующий.
string str = "Hello";
str += " World"; // Создаётся новый объект в памяти
🚩Почему `string` ведёт себя как значимый тип? Неизменяемость (Immutability) – строка не меняется после создания. Операции со строками создают новые объекты (как копирование значимых типов). Сравнение строк по значению (==), а не по ссылке (как у ссылочных типов). 1210
string s1 = "hello";
string s2 = "hello";
Console.WriteLine(s1 == s2); // True (сравниваются значения, а не ссылки)
Ставь 👍 и забирай 📚 Базу знаний

🤔 Какая разница между методом clone и CopyTo массивов? - clone() — создает новый массив с копиями элементов. Возвращает Object, требует приведения. - CopyTo() — копирует элементы в существующий массив с заданного индекса. Таким образом, clone возвращает новый объект, а CopyTo работает с уже существующим массивом. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

REKONFA Live 6 ноября приглашаем рекламодателей, агентства и рекламные площадки обсудить технологии, маркетинговые инструмент
REKONFA Live 6 ноября приглашаем рекламодателей, агентства и рекламные площадки обсудить технологии, маркетинговые инструменты и актуальные новинки. Ключевые участники рынка поделятся опытом и расскажут: — О ситуации на рынке рекламы — Как продвигать и продавать в интернете в 2025 году — Как бизнесу адаптироваться к меняющимся условиям Вас ждут доклады на актуальные темы, классный нетворкинг, вдохновляющая атмосфера для творчества и креатива. Встречаемся 6 ноября в Москве. Для тех, кто не сможет приехать, организуем интерактивное digital-шоу. Мероприятие бесплатное, нужно только зарегистрироваться. Зарегистрироваться #реклама 16+ ya.rekonfa.ru О рекламодателе

🤔 Зачем сделали ref & out для ссылочных типов? В C# ключевые слова ref и out используются для передачи аргументов по ссылке, что позволяет методам изменять значения этих аргументов. Эти механизмы полезны как для значимых типов (структур), так и для ссылочных типов (объектов). Давайте рассмотрим более детально, зачем и как их используют для ссылочных типов. 🚩`ref` С помощью ref можно передавать ссылочные типы таким образом, чтобы метод мог изменять саму ссылку, то есть ссылаться на другой объект. 🚩`out` Ключевое слово out позволяет передавать аргумент, который не обязательно должен быть инициализирован до вызова метода. Метод, принимающий out аргумент, обязан присвоить ему значение до завершения работы. 🚩Как используются `ref` и `out`? Пример использования ref
class Program
{
    static void ChangeReference(ref MyClass obj)
    {
        obj = new MyClass { Value = 20 };
    }

    static void Main()
    {
        MyClass myObj = new MyClass { Value = 10 };
        ChangeReference(ref myObj);
        Console.WriteLine(myObj.Value); // Output: 20
    }
}

class MyClass
{
    public int Value { get; set; }
}
Пример использования out
class Program
{
    static void InitializeObject(out MyClass obj)
    {
        obj = new MyClass { Value = 30 };
    }

    static void Main()
    {
        MyClass myObj;
        InitializeObject(out myObj);
        Console.WriteLine(myObj.Value); // Output: 30
    }
}

class MyClass
{
    public int Value { get; set; }
}
🚩Почему это нужно? 🟠Гибкость ref и out добавляют гибкости при работе с методами, позволяя им изменять ссылки на объекты или создавать и возвращать новые объекты. 🟠Оптимизация Эти механизмы могут быть полезны для оптимизации, когда необходимо избежать лишнего копирования данных, особенно при работе с большими объектами. 🟠Логика инициализации out полезен для методов, которые должны вернуть несколько значений или инициализировать объекты, которые не могут быть инициализированы заранее. Ставь 👍 и забирай 📚 Базу знаний

Дарим подписку на Яндекс Музыку Ответьте на 1 вопрос и Яндекс Музыка ваша для вас и 3-х ваших близких. Кинопоиск и Яндекс Книги тоже в подписке. Попробуйте бесплатно❤️ Попробовать #реклама 18+ music.yandex.ru О рекламодателе Реклама на Яндексе

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

🤔 Если в двух переменных хранится одинаковое значение, то будут ли они равны? Сравнение значений переменных может зависеть от типа данных, хранящихся в этих переменных, и от способа их сравнения. 🟠Примитивные типы (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
Ставь 👍 и забирай 📚 Базу знаний

Ищу желающих заполнять карточки товаров на ВБ! Работа полностью на удаленке с зп до150 000 рублей в месяц. Без опыта, нужен т
Ищу желающих заполнять карточки товаров на ВБ! Работа полностью на удаленке с зп до150 000 рублей в месяц. Без опыта, нужен только телефон, занятость 3-6 часов в день. Всему обучат на бесплатном курсе и после возьму на работу: ✅ 3 дня уроков по 30 минут ✅ Домашки с проверкой и оплатой бонусами ✅ Плачу 10 тыс за каждую выполненную домашку Все кто пройдет курс, получат сертификат от школы с образовательной лицензией. ⚡ Набор заканчивается завтра. 👍 Для регистрации жмите кнопку "Зарегистрироваться" Зарегистрироваться #реклама 16+ course.wildmanager.ru О рекламодателе

🤔 Какие есть типы LINQ? LINQ делится на несколько типов по источнику данных: - LINQ to Objects — для коллекций в памяти. - LINQ to XML — для работы с XML-структурами. - LINQ to Entities — для доступа к базам данных через Entity Framework. - LINQ to SQL — устаревший способ работы с SQL. - LINQ to DataSet — для ADO.NET DataSet. - Также возможны кастомные реализации (IQueryable, провайдеры LINQ). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний