C# | Вопросы собесов
الذهاب إلى القناة على Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads
إظهار المزيد5 005
المشتركون
-324 ساعات
-87 أيام
+430 أيام
أرشيف المشاركات
5 006
🤔 Что такое unsafe?
Используется для объявления небезопасного контекста кода, который позволяет выполнять низкоуровневые операции, такие как манипуляции с указателями. Эти операции обычно не разрешены в безопасном управляемом коде, но могут быть необходимы для взаимодействия с неуправляемым кодом, оптимизации производительности или доступа к определенным системным ресурсам.
🚩Характеристики
🟠Объявление небезопасного контекста
Чтобы использовать указатели и выполнять небезопасные операции, нужно объявить метод, блок кода или тип как
unsafe.
unsafe void UnsafeMethod()
{
int a = 10;
int* p = &a; // Использование указателя
Console.WriteLine(*p); // Разыменование указателя
}
🟠Компиляция с поддержкой `unsafe`
Для компиляции кода с unsafe необходимо включить поддержку небезопасного кода в настройках проекта. В Visual Studio это делается через свойства проекта:
1⃣Откройте свойства проекта.
2⃣Перейдите на вкладку "Сборка".
3⃣Установите флажок "Разрешить небезопасный код".
🟠Использование указателей
Указатели позволяют напрямую работать с адресами памяти, что может быть полезно для некоторых оптимизаций или взаимодействия с низкоуровневым кодом, написанным на C или C++.
unsafe void PointerExample()
{
int a = 5;
int* p = &a; // p указывает на адрес переменной a
Console.WriteLine((int)p); // Вывод адреса переменной a
Console.WriteLine(*p); // Вывод значения переменной a через указатель
}
🟠Небезопасные структуры
Вы можете объявлять структуры с указателями и использовать их в небезопасном контексте.
unsafe struct UnsafeStruct
{
public int* Pointer;
}
🟠Стековые указатели (stackalloc)
stackalloc позволяет выделять память в стеке для массива в небезопасном контексте. Это может быть быстрее, чем выделение памяти в куче.
unsafe void StackAllocExample()
{
int* array = stackalloc int[10]; // Выделение массива из 10 целых чисел в стеке
for (int i = 0; i < 10; i++)
{
array[i] = i;
}
}
🟠Взаимодействие с неуправляемым кодом
Небезопасный код часто используется для взаимодействия с API, написанными на других языках, такими как C или C++.
[DllImport("user32.dll")]
extern static unsafe int MessageBox(IntPtr hWnd, char* text, char* caption, int options);
unsafe void CallUnmanagedCode()
{
char* text = "Hello, World!";
char* caption = "My Message Box";
MessageBox(IntPtr.Zero, text, caption, 0);
}
🚩Плюсы
➕Производительность
Позволяет выполнять высокоэффективные операции с памятью.
➕Взаимодействие с неуправляемым кодом
Необходим для вызова функций из библиотек, написанных на других языках.
➕Низкоуровневый контроль
Предоставляет возможность прямого управления памятью и аппаратными ресурсами.
Ставь 👍 и забирай 📚 Базу знаний5 006
Кризис — это не слабость. Это точка, где рождается новое
Но когда рушится привычное, нужна поддержка, смысл и шаг за шагом — выход.
📅 24 мая в 11:00 МСК — бесплатная онлайн-конференция:
«Переживая кризис: как найти смысл и собрать себя заново»
Что тебя ждёт на конференции:
- Разбор ключевых кризисов: потерь, выгорания, одиночества
- Пошаговые техники эмоциональной самопомощи
- Инструменты психологов — чтобы восстановить опору внутри
- Диагностическую карту: «20 вопросов к себе в момент перемен»
- Понимание, как справляться с болью — и вытаскивать из неё ресурс
А еще:
✅ Подарки — iPad, AirPods, OZON, обучение
✅ Онлайн-курс «Верни себе себя»
✅ Доступ в закрытый Telegram-канал
🎓 Подходит и для психологов, и для тех, кто сам в кризисе.
Просто зарегистрируйся. Это бесплатно. Но может поменять твою жизнь.
Зарегистрироваться
#реклама 16+
psy.talentsy.ru
О рекламодателе
5 006
🤔 Что такое reflection и для чего используется?
Это механизм, позволяющий исследовать и взаимодействовать с метаданными типов в рантайме. Используется для динамического вызова методов, получения информации о классах, их свойствах, конструкторах и атрибутах, а также для создания объектов во время выполнения.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 006
🤔 Какие объекты живут в нулевом поколении?
В 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 006
🤔 Что такое Inversion of control и dependency injection?
Inversion of control (IoC) — это принцип, при котором управление созданием объектов передается внешним компонентам. Dependency injection (DI) — это один из способов реализации IoC, когда зависимости передаются объекту через конструктор, методы или свойства. Это позволяет улучшить тестируемость и модульность кода. DI делает систему более гибкой, позволяя изменять реализации зависимостей без изменения кода.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 006
Современная магистратура от Центрального университета
Хочешь развиваться в сфере ИТ и получить фундаментальные знания с практикой?
Поступай в магистратуру Центрального университета!
- 4 офлайн программы по востребованным направлениям ИТ
- Онлайн-программа по машинному обучению
- 300 мест с грантами до 1,2 млн руб.
- Вечерние занятия и учеба по выходным — удобно совмещать с работой
- Обучение по модели STEM-образования: на стыке науки, технологий и бизнеса
- Возможность стажировок и трудоустройства в ведущих компаниях
- Государственный диплом за 2 года
Магистратура в Центральном университете — это современный подход к образованию, сильный преподавательский состав и актуальные кейсы от индустрии.
Оставляй заявку на грант уже сейчас!
Подать заявку
#реклама 16+
apply.centraluniversity.ru
О рекламодателе
5 006
🤔 Возможно ли как-нибудь ограничить типы, которые пользователь будет передавать через шаблон?
Можно ограничить типы, которые передаются в шаблоны (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 006
Бесплатный курс по 3D-моделированию с нуля
Начни карьеру в дизайне и получи первую зарплату!
Вас ждет реальный рабочий процесс:
✅ разные задачи по 3D Blander
✅ опыт общения с клиентами
✅ оплата за проект
Освойте Blender и создайте работу для портфолио
Обучение полностью бесплатное для первых 70 участников.
Осталось 28 мест.
В конце курса мы откроем для вас доступ к звездной распродаже
Там вы сможете обменять звездочки на ценные бонусы:
1. Гайд по выходу на биржу UpWork
2. Курс «Заработок на дизайне»
3. Анимированный концепт Samsung True для портфолио
4. Бессрочный грант на обучение: 15 000 ₽
5. Гайд «Горячие клавиши в Blender»
Записывайтесь сейчас!
Узнать больше
#реклама 16+
yudaevschool24.online
О рекламодателе
5 006
🤔 Какие есть подходы формирования БД?
1. Code First — структура БД создается из кода (классов).
2. Database First — сначала создается БД, затем генерируются модели.
3. Model First — создается визуальная модель, из неё генерируются и БД, и код.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 006
Новая мощь от Virtus.pro
X-TURBO по суперцене. Успей прокачать реакцию, пока другие тормозят.
Купить
#реклама 18+
xturboenergy.ru
О рекламодателе
5 006
🤔 Какие есть подходы в рамках эфкора?
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 006
15 мая онлайн-презентация новинок Битрикс24
Расскажем о главных иземенениях Битрикс24 в мае 2025 года для работы с командой и продажами.
Регистрируйте бесплатно и станьте первыми, кто увидит в прямом эфире все новинки в CRM, AI и совместной работе!
Зарегистрироваться
#реклама 16+
release.bitrix24.tech
О рекламодателе
5 006
🤔 Какие есть минусы у boxing/unboxing?
Boxing — это преобразование значимого типа в объект (упаковка), unboxing — обратно.
Минусы:
- Снижение производительности — за счёт дополнительных операций.
- Создание мусора — каждый boxing создаёт новый объект в куче.
- Потеря типобезопасности — unboxing требует явного указания типа, возможны ошибки во время выполнения.
Лучше избегать, особенно в циклах или чувствительных к производительности местах.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 006
🤔 Интерполяция - это возможность использовать в строке переменные?
Да, интерполяция строк — это удобный способ вставки значений переменных в строку без использования конкатенации (
+) или 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 006
Почему выбирают PostgreSQL как сервис от РТК-ЦОД?
Сервис PostgreSQL от РТК-ЦОД позволяет быстро развернуть, эксплуатировать и масштабировать базу данных в облаке. Процесс установки и настройки полностью автоматизирован.
Почему выбирают нас?
— Личный кабинет
— Надежное хранение данных: дата-центры уровня Tier III в России, сертифицированные Uptime Institute
— Детальный SLA
— Оптимальная конфигурация: выделенный кластер только под вас
— Опция администрирования вашей базы данных
— Квалифицированная техподдержка в режиме 24х7
✅ 30 дней бесплатно: тестируйте наш сервис с полным доступом ко всем возможностям.
Оставьте заявку на www.cloud.rt.ru
Узнать больше
#реклама 16+
cloud.rt.ru
О рекламодателе
5 006
🤔 Какая разница работы асинхронности на C# и JavaScript?
В C#:
- Асинхронность основана на async/await, Task, ThreadPool.
- Может использоваться для как I/O (сетевые запросы), так и CPU-bound операций.
- Компилятор генерирует state-machine для управления переходами состояний задачи.
- Асинхронность может использовать потоки, но не всегда (например, при I/O — потоки не блокируются вовсе).
В JavaScript:
- Асинхронность основана на Promise, async/await.
- Однопоточная модель с event loop.
- Не используется многопоточность, даже если операции асинхронны.
- Все I/O происходят через неблокирующий механизм событий.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 006
🤔 Какие методы есть в 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 006
Обнулите все свои кредиты и долги!
Долги от 200 000₽. Поможем бесплатно списать долг и расторгнуть все кредитные договоры!
Получить консультацию
#реклама
нет-кредит.рф
О рекламодателе
5 006
🤔 Что такое Scoped?
Scoped — объект создаётся один раз на каждый HTTP-запрос.
Все компоненты в рамках одного запроса получают один и тот же экземпляр, но при следующем запросе создаётся новый.
Подходит для работы с данными и контекстом, например, DbContext.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 006
🤔 Может ли абстрактный метод быть вне абстрактного класса?
Нет, абстрактный метод не может существовать вне абстрактного класса. В C# это ограничение встроено в язык, чтобы поддерживать строгую логику наследования и полиморфизма.
🚩Почему абстрактный метод требует абстрактного класса?
Абстрактный метод — это метод, который объявлен, но не имеет реализации. Он выступает как "контракт", который обязан быть реализован в производном классе.
public abstract class Shape
{
public abstract double CalculateArea();
}
Абстрактные методы имеют следующие особенности:
Они не могут содержать тело (реализацию).
Их цель — заставить производные классы реализовать конкретную функциональность.
Они всегда принадлежат абстрактным классам.
🚩Пример ошибки
Если попытаться объявить абстрактный метод в обычном классе, компилятор выдаст ошибку
public class RegularClass
{
public abstract void SomeMethod(); // Ошибка: абстрактный метод может быть только в абстрактном классе
}
🚩Логика дизайна
C# требует, чтобы абстрактные методы находились только в абстрактных классах, потому что:
Абстрактные классы могут содержать как абстрактные, так и обычные методы. Это позволяет определять базовое поведение в абстрактном классе и оставлять специфическую реализацию производным классам.
Обычные классы не могут содержать абстрактные методы, так как они предназначены для создания объектов, а объект не может содержать "незавершённый" метод.
Ставь 👍 и забирай 📚 Базу знаний