C# | Вопросы собесов
الذهاب إلى القناة على Telegram
Cайт easyoffer.ru Реклама @easyoffer_adv ВП @easyoffer_vp Тесты t.me/+nebTPWgpeGs1OWFi Задачи t.me/+Xy-0H7xKlgo0NDVi Вакансии t.me/+BQFHXZQ0zrViNGIy
إظهار المزيد5 058
المشتركون
-524 ساعات
-77 أيام
-1730 أيام
أرشيف المشاركات
5 057
🤔 Что такое паттерн DDD?
Это подход к разработке, фокусирующийся на модели домена и бизнес-логике. Основная идея — построение программного обеспечения вокруг доменных сущностей, агрегаций и их контекстов для решения бизнес-задач.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 057
🤔 Возможно ли как-нибудь ограничить типы, которые пользователь будет передавать через шаблон?
Можно ограничить типы, которые передаются в шаблоны (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() { }
Ставь 👍 и забирай 📚 Базу знаний5 057
🤔 Что такое IQueryable?
`IQueryable` — это интерфейс, который позволяет строить и выполнять запросы к данным с отложенным выполнением (lazy loading). Он часто используется для создания запросов в LINQ к базам данных, поскольку позволяет серверу базы данных выполнить запрос, минимизируя нагрузку на память и процессор. `IQueryable` также поддерживает сложные запросы, такие как фильтрация, сортировка и агрегация, до фактического получения данных. Это делает его эффективным инструментом для работы с большими наборами данных.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 057
🤔 Как по ключу получить значение?
Для получения значения по ключу в словаре (
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");
}
Ставь 👍 и забирай 📚 Базу знаний5 057
🤔 Что такое Singleton?
Singleton — это жизненный цикл зависимости, при котором:
- Экземпляр создаётся один раз за всё время жизни приложения.
- Все зависимости получают один и тот же объект.
Хорошо подходит для кэшей, конфигураций, логирования, и всего, что должно быть единым.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 057
🤔 В чем суть 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 без наследования и изменения структуры классов.
Ставь 👍 и забирай 📚 Базу знаний5 057
Чего хотят ваши сотрудники
⚡Мы перепробовали всё:
— KPI — не работает.
— Премии — ждут как зарплату, эффекта ноль.
— Тимбилдинг — стало только хуже.
В итоге мотивация у всех держится на одном: "не бесить начальство".
Это не потому что "люди не те" — просто вы ещё не знаете, чтО на самом деле мотивирует команду.
Сегодня открыт бесплатный доступ к курсу "Ежедневная мотивация" от Школы Генерального директора.
Он о том, как работает мотивация в реальности:
— Почему большинство систем мотивации не просто бесполезны, а вредны
— Как узнать, чего на самом деле хотят ваши люди и почему они сами не могут это сформулировать
— Как создать условия, при которых сотрудник работает не из страха и не за надбавку, а потому что сам этого хочет
Оставьте заявку, куратор перезвонит и откроет полный доступ на 2 дня.
Подать заявку
#реклама 16+
gd.ru
О рекламодателе
5 057
🤔 Принципы ООП?
Основные принципы ООП включают инкапсуляцию, которая скрывает внутреннюю реализацию объекта и предоставляет доступ к данным через методы; наследование, которое позволяет создавать новые классы на основе существующих; полиморфизм, обеспечивающий возможность работы с объектами разных типов через общий интерфейс; и абстракцию, которая упрощает сложные системы, выделяя только ключевые характеристики объектов. Эти принципы делают код более структурированным и легко поддерживаемым.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 057
🤔 Что такое 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); // Ожидание с проверкой отмены
}
}
}
Ставь 👍 и забирай 📚 Базу знаний5 057
Тариф, с которым хватит на всё
50 ГБ и безлимитные минуты за 390 ₽ в месяц, если перенесете номер в Т-Мобайл до 31 августа
Узнать больше
#реклама
tbank.ru
О рекламодателе
5 057
🤔 В чём разница между отложенным и немедленным выполнением?
- Отложенное выполнение (deferred execution) — данные не вычисляются до тех пор, пока к ним не обратятся, как в IEnumerable, yield, LINQ.
- Немедленное выполнение (immediate execution) — результат вычисляется сразу при вызове метода (например, ToList(), Count()).
Отложенное выполнение экономит ресурсы, но требует внимательности к источнику данных.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 057
🤔 Строки - значимый или ссылочный тип?
В 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 (сравниваются значения, а не ссылки)
Ставь 👍 и забирай 📚 Базу знаний5 057
🤔 Какая разница между методом clone и CopyTo массивов?
- clone() — создает новый массив с копиями элементов. Возвращает Object, требует приведения.
- CopyTo() — копирует элементы в существующий массив с заданного индекса.
Таким образом, clone возвращает новый объект, а CopyTo работает с уже существующим массивом.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 057
REKONFA Live
6 ноября приглашаем рекламодателей, агентства и рекламные площадки обсудить технологии, маркетинговые инструменты и актуальные новинки. Ключевые участники рынка поделятся опытом и расскажут:
— О ситуации на рынке рекламы
— Как продвигать и продавать в интернете в 2025 году
— Как бизнесу адаптироваться к меняющимся условиям
Вас ждут доклады на актуальные темы, классный нетворкинг, вдохновляющая атмосфера для творчества и креатива.
Встречаемся 6 ноября в Москве. Для тех, кто не сможет приехать, организуем интерактивное digital-шоу. Мероприятие бесплатное, нужно только зарегистрироваться.
Зарегистрироваться
#реклама 16+
ya.rekonfa.ru
О рекламодателе
5 057
🤔 Зачем сделали 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 полезен для методов, которые должны вернуть несколько значений или инициализировать объекты, которые не могут быть инициализированы заранее.
Ставь 👍 и забирай 📚 Базу знаний5 057
Дарим подписку на Яндекс Музыку
Ответьте на 1 вопрос и Яндекс Музыка ваша для вас и 3-х ваших близких.
Кинопоиск и Яндекс Книги тоже в подписке.
Попробуйте бесплатно❤️
Попробовать
#реклама 18+
music.yandex.ru
О рекламодателе
Реклама на Яндексе
5 057
🤔 Какую проблему решает ThreadPool?
ThreadPool (пул потоков) решает проблему частого создания и уничтожения потоков, которое дорого по ресурсам.
Проблемы, которые он решает:
- Производительность (не тратится время на создание потока)
- Утилизация ресурсов
- Масштабируемость при высокой нагрузке
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 057
🤔 Если в двух переменных хранится одинаковое значение, то будут ли они равны?
Сравнение значений переменных может зависеть от типа данных, хранящихся в этих переменных, и от способа их сравнения.
🟠Примитивные типы (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
Ставь 👍 и забирай 📚 Базу знаний5 057
Ищу желающих заполнять карточки товаров на ВБ!
Работа полностью на удаленке с зп до150 000 рублей в месяц.
Без опыта, нужен только телефон, занятость 3-6 часов в день.
Всему обучат на бесплатном курсе и после возьму на работу:
✅ 3 дня уроков по 30 минут
✅ Домашки с проверкой и оплатой бонусами
✅ Плачу 10 тыс за каждую выполненную домашку
Все кто пройдет курс, получат сертификат от школы с образовательной лицензией.
⚡ Набор заканчивается завтра.
👍 Для регистрации жмите кнопку "Зарегистрироваться"
Зарегистрироваться
#реклама 16+
course.wildmanager.ru
О рекламодателе
5 057
🤔 Какие есть типы 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).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
متاح الآن! بحث تيليغرام 2025 — أهم رؤى العام 
