C# | Вопросы собесов
Ir al canal en Telegram
Cайт easyoffer.ru Реклама @easyoffer_adv ВП @easyoffer_vp Тесты t.me/+nebTPWgpeGs1OWFi Задачи t.me/+Xy-0H7xKlgo0NDVi Вакансии t.me/+BQFHXZQ0zrViNGIy
Mostrar más5 050
Suscriptores
+324 horas
-147 días
-2630 días
Archivo de publicaciones
5 049
🤔 Что такое reflection и для чего используется?
Это механизм, позволяющий исследовать и взаимодействовать с метаданными типов в рантайме. Используется для динамического вызова методов, получения информации о классах, их свойствах, конструкторах и атрибутах, а также для создания объектов во время выполнения.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 049
🤔 Какие объекты живут в нулевом поколении?
В C# и .NET память управляется сборщиком мусора (Garbage Collector, GC), который делит объекты на три поколения
🟠Generation 0 (Gen 0, нулевое поколение)
самые "молодые" объекты.
🟠Generation 1 (Gen 1, первое поколение)
промежуточные объекты.
🟠Generation 2 (Gen 2, второе поколение)
"долгоживущие" объекты.
🚩Какие объекты попадают в Generation 0?
В Gen 0 живут "короткоживущие" объекты которые создаются и быстро уничтожаются.
Это новые объекты, которые только что были выделены в управляемой куче (Heap).
Обычно это локальные переменные внутри методов, если они не выходят за их пределы.
Пример объектов в Gen 0
class Program
{
static void Main()
{
for (int i = 0; i < 5; i++)
{
var obj = new object(); // Этот объект создаётся в Gen 0
}
GC.Collect(); // Принудительный запуск GC для проверки
}
}
🚩Когда объекты остаются в Gen 0, а когда переходят в следующее поколение?
Если объект быстро умирает → удаляется из Gen 0 при первой же очистке.
Если объект выжил после первой очистки GC → переходит в Gen 1.
Если объект живёт долго → может попасть в Gen 2.
Ставь 👍 и забирай 📚 Базу знаний5 049
🤔 Что такое Inversion of control и dependency injection?
Inversion of control (IoC) — это принцип, при котором управление созданием объектов передается внешним компонентам. Dependency injection (DI) — это один из способов реализации IoC, когда зависимости передаются объекту через конструктор, методы или свойства. Это позволяет улучшить тестируемость и модульность кода. DI делает систему более гибкой, позволяя изменять реализации зависимостей без изменения кода.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 049
Современная магистратура от Центрального университета
Хочешь развиваться в сфере ИТ и получить фундаментальные знания с практикой?
Поступай в магистратуру Центрального университета!
- 4 офлайн программы по востребованным направлениям ИТ
- Онлайн-программа по машинному обучению
- 300 мест с грантами до 1,2 млн руб.
- Вечерние занятия и учеба по выходным — удобно совмещать с работой
- Обучение по модели STEM-образования: на стыке науки, технологий и бизнеса
- Возможность стажировок и трудоустройства в ведущих компаниях
- Государственный диплом за 2 года
Магистратура в Центральном университете — это современный подход к образованию, сильный преподавательский состав и актуальные кейсы от индустрии.
Оставляй заявку на грант уже сейчас!
Подать заявку
#реклама 16+
apply.centraluniversity.ru
О рекламодателе
5 049
🤔 Возможно ли как-нибудь ограничить типы, которые пользователь будет передавать через шаблон?
Можно ограничить типы, которые передаются в шаблоны (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 049
Бесплатный курс по 3D-моделированию с нуля
Начни карьеру в дизайне и получи первую зарплату!
Вас ждет реальный рабочий процесс:
✅ разные задачи по 3D Blander
✅ опыт общения с клиентами
✅ оплата за проект
Освойте Blender и создайте работу для портфолио
Обучение полностью бесплатное для первых 70 участников.
Осталось 28 мест.
В конце курса мы откроем для вас доступ к звездной распродаже
Там вы сможете обменять звездочки на ценные бонусы:
1. Гайд по выходу на биржу UpWork
2. Курс «Заработок на дизайне»
3. Анимированный концепт Samsung True для портфолио
4. Бессрочный грант на обучение: 15 000 ₽
5. Гайд «Горячие клавиши в Blender»
Записывайтесь сейчас!
Узнать больше
#реклама 16+
yudaevschool24.online
О рекламодателе
5 049
🤔 Какие есть подходы формирования БД?
1. Code First — структура БД создается из кода (классов).
2. Database First — сначала создается БД, затем генерируются модели.
3. Model First — создается визуальная модель, из неё генерируются и БД, и код.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 049
Новая мощь от Virtus.pro
X-TURBO по суперцене. Успей прокачать реакцию, пока другие тормозят.
Купить
#реклама 18+
xturboenergy.ru
О рекламодателе
5 049
🤔 Какие есть подходы в рамках эфкора?
Entity Framework Core (EF Core) — это ORM (Object-Relational Mapping), которая упрощает работу с базой данных в C#.
Основные подходы работы с EF Core:
Code First (Код → База)
Database First (База → Код)
Model First (Модель → База → Код)
🚩Code First (Сначала код)
Сначала создаётся код (C# классы), а база данных создаётся автоматически.
Если у нас нет готовой базы данных
Когда разрабатываем с нуля
Легче вносить изменения через миграции
1⃣Создаём модель
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}
2⃣Создаём контекст (DbContext)
public class AppDbContext : DbContext
{
public DbSet<User> Users { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlServer("Server=.;Database=TestDb;Trusted_Connection=True;");
}
3⃣Применяем миграции
dotnet ef migrations add InitialCreate
dotnet ef database update
🚩Database First (Сначала база)
База данных уже есть → EF Core генерирует код (модели, DbContext).
Когда уже существует база
Когда работаете с наследуемой системой
Как сгенерировать модели из базы?
dotnet ef dbcontext scaffold "Server=.;Database=TestDb;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models
🚩Model First (Сначала модель)
Создаём модель (визуально), потом генерируем базу и код.
Не поддерживается в EF Core! (была в EF 6)
В старых проектах (EF 6) с визуальным проектированием
Когда нужна автогенерация схемы БД
Используйте Code First с миграциями вместо Model First.
Ставь 👍 и забирай 📚 Базу знаний5 049
15 мая онлайн-презентация новинок Битрикс24
Расскажем о главных иземенениях Битрикс24 в мае 2025 года для работы с командой и продажами.
Регистрируйте бесплатно и станьте первыми, кто увидит в прямом эфире все новинки в CRM, AI и совместной работе!
Зарегистрироваться
#реклама 16+
release.bitrix24.tech
О рекламодателе
5 049
🤔 Какие есть минусы у boxing/unboxing?
Boxing — это преобразование значимого типа в объект (упаковка), unboxing — обратно.
Минусы:
- Снижение производительности — за счёт дополнительных операций.
- Создание мусора — каждый boxing создаёт новый объект в куче.
- Потеря типобезопасности — unboxing требует явного указания типа, возможны ошибки во время выполнения.
Лучше избегать, особенно в циклах или чувствительных к производительности местах.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 049
🤔 Интерполяция - это возможность использовать в строке переменные?
Да, интерполяция строк — это удобный способ вставки значений переменных в строку без использования конкатенации (
+) или String.Format().
Простой пример интерполяции строк
string name = "Иван";
int age = 25;
string message = $"Привет, меня зовут {name}, и мне {age} лет.";
Console.WriteLine(message);
Вывод
Привет, меня зовут Иван, и мне 25 лет.🚩Дополнительные возможности интерполяции 🟠Форматирование значений Можно форматировать числа и даты прямо в строке:
double price = 99.99;
DateTime today = DateTime.Now;
string formatted = $"Цена: {price:C}, Дата: {today:dd.MM.yyyy}";
Console.WriteLine(formatted);
Вывод
Цена: 99,99 ₽, Дата: 01.03.2025🟠Выполнение выражений Можно вставлять даже арифметические операции и вызовы методов:
int a = 10, b = 5;
string mathResult = $"Сумма: {a + b}, Разница: {a - b}";
Console.WriteLine(mathResult);
Вывод
Сумма: 15, Разница: 5🟠Экранирование фигурных скобок Если нужно вывести
{} в тексте, их надо удваивать:
Console.WriteLine($"JSON: {{ \"name\": \"Иван\" }}");
Вывод
JSON: { "name": "Иван" }
Ставь 👍 и забирай 📚 Базу знаний5 049
Почему выбирают PostgreSQL как сервис от РТК-ЦОД?
Сервис PostgreSQL от РТК-ЦОД позволяет быстро развернуть, эксплуатировать и масштабировать базу данных в облаке. Процесс установки и настройки полностью автоматизирован.
Почему выбирают нас?
— Личный кабинет
— Надежное хранение данных: дата-центры уровня Tier III в России, сертифицированные Uptime Institute
— Детальный SLA
— Оптимальная конфигурация: выделенный кластер только под вас
— Опция администрирования вашей базы данных
— Квалифицированная техподдержка в режиме 24х7
✅ 30 дней бесплатно: тестируйте наш сервис с полным доступом ко всем возможностям.
Оставьте заявку на www.cloud.rt.ru
Узнать больше
#реклама 16+
cloud.rt.ru
О рекламодателе
5 049
🤔 Какая разница работы асинхронности на C# и JavaScript?
В C#:
- Асинхронность основана на async/await, Task, ThreadPool.
- Может использоваться для как I/O (сетевые запросы), так и CPU-bound операций.
- Компилятор генерирует state-machine для управления переходами состояний задачи.
- Асинхронность может использовать потоки, но не всегда (например, при I/O — потоки не блокируются вовсе).
В JavaScript:
- Асинхронность основана на Promise, async/await.
- Однопоточная модель с event loop.
- Не используется многопоточность, даже если операции асинхронны.
- Все I/O происходят через неблокирующий механизм событий.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 049
🤔 Какие методы есть в Action фильтре?
Используются для выполнения логики до и после выполнения метода действия контроллера. Они предоставляют механизм для выполнения кросс-секционных задач, таких как логирование, обработка исключений, валидация и т.д. Action фильтры реализуют интерфейс
IActionFilter или IAsyncActionFilter.
🚩Методы в Action фильтре
🟠OnActionExecuting
Этот метод вызывается перед выполнением метода действия. Здесь можно добавить логику, которая будет выполняться до вызова действия, например, логирование или проверка условий.
public void OnActionExecuting(ActionExecutingContext context)
{
// Логика до выполнения действия
}
🟠OnActionExecuted
Этот метод вызывается после выполнения метода действия. Здесь можно добавить логику, которая будет выполняться после вызова действия, например, логирование результатов или модификация ответа.
public void OnActionExecuted(ActionExecutedContext context)
{
// Логика после выполнения действия
}
🟠OnActionExecutionAsync
Этот метод объединяет функциональность OnActionExecuting и OnActionExecuted в одном асинхронном методе. Здесь можно определить логику, которая будет выполняться как до, так и после выполнения метода действия.
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
// Логика до выполнения действия
var resultContext = await next();
// Логика после выполнения действия
}
🚩Реализации Action фильтра
Синхронный Action фильтр:
public class SampleActionFilter : IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
// Логика до выполнения действия
Console.WriteLine("Before executing action");
}
public void OnActionExecuted(ActionExecutedContext context)
{
// Логика после выполнения действия
Console.WriteLine("After executing action");
}
}
Асинхронный Action фильтр:
public class SampleAsyncActionFilter : IAsyncActionFilter
{
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
// Логика до выполнения действия
Console.WriteLine("Before executing action");
var resultContext = await next();
// Логика после выполнения действия
Console.WriteLine("After executing action");
}
}
🚩Применение Action фильтра
Action фильтр можно применять к контроллерам или действиям контроллера с помощью атрибута [ServiceFilter] или [TypeFilter]. Также его можно зарегистрировать глобально в Startup.cs.
Применение к контроллеру или действию:
[ServiceFilter(typeof(SampleActionFilter))]
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
}
Глобальная регистрация:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers(config =>
{
config.Filters.Add(typeof(SampleActionFilter));
});
}
Ставь 👍 и забирай 📚 Базу знаний5 049
Обнулите все свои кредиты и долги!
Долги от 200 000₽. Поможем бесплатно списать долг и расторгнуть все кредитные договоры!
Получить консультацию
#реклама
нет-кредит.рф
О рекламодателе
5 049
🤔 Что такое Scoped?
Scoped — объект создаётся один раз на каждый HTTP-запрос.
Все компоненты в рамках одного запроса получают один и тот же экземпляр, но при следующем запросе создаётся новый.
Подходит для работы с данными и контекстом, например, DbContext.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 049
🤔 Может ли абстрактный метод быть вне абстрактного класса?
Нет, абстрактный метод не может существовать вне абстрактного класса. В C# это ограничение встроено в язык, чтобы поддерживать строгую логику наследования и полиморфизма.
🚩Почему абстрактный метод требует абстрактного класса?
Абстрактный метод — это метод, который объявлен, но не имеет реализации. Он выступает как "контракт", который обязан быть реализован в производном классе.
public abstract class Shape
{
public abstract double CalculateArea();
}
Абстрактные методы имеют следующие особенности:
Они не могут содержать тело (реализацию).
Их цель — заставить производные классы реализовать конкретную функциональность.
Они всегда принадлежат абстрактным классам.
🚩Пример ошибки
Если попытаться объявить абстрактный метод в обычном классе, компилятор выдаст ошибку
public class RegularClass
{
public abstract void SomeMethod(); // Ошибка: абстрактный метод может быть только в абстрактном классе
}
🚩Логика дизайна
C# требует, чтобы абстрактные методы находились только в абстрактных классах, потому что:
Абстрактные классы могут содержать как абстрактные, так и обычные методы. Это позволяет определять базовое поведение в абстрактном классе и оставлять специфическую реализацию производным классам.
Обычные классы не могут содержать абстрактные методы, так как они предназначены для создания объектов, а объект не может содержать "незавершённый" метод.
Ставь 👍 и забирай 📚 Базу знаний5 049
🤔 В чём суть extension-методов?
Extension-методы позволяют добавлять методы к существующим типам, не изменяя их исходный код. Это:
- Делается с помощью static-класса и ключевого слова this перед параметром.
- Вызывается как обычный метод у объекта.
Это делает код более читаемым и расширяемым. Особенно полезны в LINQ и утилитарных сценариях.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 049
🤔 Как по ключу получить значение?
Для получения значения по ключу в словаре (
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");
}
Ставь 👍 и забирай 📚 Базу знаний
¡Ya disponible! Investigación de Telegram 2025 — los principales insights del año 
