C# | Вопросы собесов
Відкрити в Telegram
Cайт easyoffer.ru Реклама @easyoffer_adv ВП @easyoffer_vp Тесты t.me/+nebTPWgpeGs1OWFi Задачи t.me/+Xy-0H7xKlgo0NDVi Вакансии t.me/+BQFHXZQ0zrViNGIy
Показати більше5 042
Підписники
-624 години
-167 днів
-3030 день
Архів дописів
5 042
🤔 Что из себя представляет абстракция?
Это процесс выделения важных характеристик объекта и скрытия несущественных деталей. Она позволяет:
1. Создавать простые интерфейсы для сложных систем.
2. Сосредотачиваться на логике, а не на деталях реализации.
3. Обеспечивать полиморфизм и унифицированный подход к различным объектам.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 042
🤔 В чем суть 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 042
🤔 Что такое команда throw?
throw используется для генерации исключения вручную или повторной генерации перехваченного.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 042
Курс Аналитика в Business Intelligence в НИУ ВШЭ
Удостоверение о повышении квалификации. Подходит начинающим. Онлайн
Курс посвящен работе с BI-системами на примере Tableau, DataLens.
Вы узнаете, как с помощью Business Intelligence визуализировать и готовить данные для дальнейшей работы, а также как настроить дашборд так, чтобы он удовлетворил заказчика.
Узнать больше
#реклама 16+
hse.ru
О рекламодателе
5 042
🤔 Что такое 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 042
Кризис — это не слабость. Это точка, где рождается новое
Но когда рушится привычное, нужна поддержка, смысл и шаг за шагом — выход.
📅 24 мая в 11:00 МСК — бесплатная онлайн-конференция:
«Переживая кризис: как найти смысл и собрать себя заново»
Что тебя ждёт на конференции:
- Разбор ключевых кризисов: потерь, выгорания, одиночества
- Пошаговые техники эмоциональной самопомощи
- Инструменты психологов — чтобы восстановить опору внутри
- Диагностическую карту: «20 вопросов к себе в момент перемен»
- Понимание, как справляться с болью — и вытаскивать из неё ресурс
А еще:
✅ Подарки — iPad, AirPods, OZON, обучение
✅ Онлайн-курс «Верни себе себя»
✅ Доступ в закрытый Telegram-канал
🎓 Подходит и для психологов, и для тех, кто сам в кризисе.
Просто зарегистрируйся. Это бесплатно. Но может поменять твою жизнь.
Зарегистрироваться
#реклама 16+
psy.talentsy.ru
О рекламодателе
5 042
🤔 Что такое reflection и для чего используется?
Это механизм, позволяющий исследовать и взаимодействовать с метаданными типов в рантайме. Используется для динамического вызова методов, получения информации о классах, их свойствах, конструкторах и атрибутах, а также для создания объектов во время выполнения.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 042
🤔 Какие объекты живут в нулевом поколении?
В 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 042
🤔 Что такое Inversion of control и dependency injection?
Inversion of control (IoC) — это принцип, при котором управление созданием объектов передается внешним компонентам. Dependency injection (DI) — это один из способов реализации IoC, когда зависимости передаются объекту через конструктор, методы или свойства. Это позволяет улучшить тестируемость и модульность кода. DI делает систему более гибкой, позволяя изменять реализации зависимостей без изменения кода.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 042
Современная магистратура от Центрального университета
Хочешь развиваться в сфере ИТ и получить фундаментальные знания с практикой?
Поступай в магистратуру Центрального университета!
- 4 офлайн программы по востребованным направлениям ИТ
- Онлайн-программа по машинному обучению
- 300 мест с грантами до 1,2 млн руб.
- Вечерние занятия и учеба по выходным — удобно совмещать с работой
- Обучение по модели STEM-образования: на стыке науки, технологий и бизнеса
- Возможность стажировок и трудоустройства в ведущих компаниях
- Государственный диплом за 2 года
Магистратура в Центральном университете — это современный подход к образованию, сильный преподавательский состав и актуальные кейсы от индустрии.
Оставляй заявку на грант уже сейчас!
Подать заявку
#реклама 16+
apply.centraluniversity.ru
О рекламодателе
5 042
🤔 Возможно ли как-нибудь ограничить типы, которые пользователь будет передавать через шаблон?
Можно ограничить типы, которые передаются в шаблоны (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 042
Бесплатный курс по 3D-моделированию с нуля
Начни карьеру в дизайне и получи первую зарплату!
Вас ждет реальный рабочий процесс:
✅ разные задачи по 3D Blander
✅ опыт общения с клиентами
✅ оплата за проект
Освойте Blender и создайте работу для портфолио
Обучение полностью бесплатное для первых 70 участников.
Осталось 28 мест.
В конце курса мы откроем для вас доступ к звездной распродаже
Там вы сможете обменять звездочки на ценные бонусы:
1. Гайд по выходу на биржу UpWork
2. Курс «Заработок на дизайне»
3. Анимированный концепт Samsung True для портфолио
4. Бессрочный грант на обучение: 15 000 ₽
5. Гайд «Горячие клавиши в Blender»
Записывайтесь сейчас!
Узнать больше
#реклама 16+
yudaevschool24.online
О рекламодателе
5 042
🤔 Какие есть подходы формирования БД?
1. Code First — структура БД создается из кода (классов).
2. Database First — сначала создается БД, затем генерируются модели.
3. Model First — создается визуальная модель, из неё генерируются и БД, и код.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 042
Новая мощь от Virtus.pro
X-TURBO по суперцене. Успей прокачать реакцию, пока другие тормозят.
Купить
#реклама 18+
xturboenergy.ru
О рекламодателе
5 042
🤔 Какие есть подходы в рамках эфкора?
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 042
15 мая онлайн-презентация новинок Битрикс24
Расскажем о главных иземенениях Битрикс24 в мае 2025 года для работы с командой и продажами.
Регистрируйте бесплатно и станьте первыми, кто увидит в прямом эфире все новинки в CRM, AI и совместной работе!
Зарегистрироваться
#реклама 16+
release.bitrix24.tech
О рекламодателе
5 042
🤔 Какие есть минусы у boxing/unboxing?
Boxing — это преобразование значимого типа в объект (упаковка), unboxing — обратно.
Минусы:
- Снижение производительности — за счёт дополнительных операций.
- Создание мусора — каждый boxing создаёт новый объект в куче.
- Потеря типобезопасности — unboxing требует явного указания типа, возможны ошибки во время выполнения.
Лучше избегать, особенно в циклах или чувствительных к производительности местах.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 042
🤔 Интерполяция - это возможность использовать в строке переменные?
Да, интерполяция строк — это удобный способ вставки значений переменных в строку без использования конкатенации (
+) или 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 042
Почему выбирают PostgreSQL как сервис от РТК-ЦОД?
Сервис PostgreSQL от РТК-ЦОД позволяет быстро развернуть, эксплуатировать и масштабировать базу данных в облаке. Процесс установки и настройки полностью автоматизирован.
Почему выбирают нас?
— Личный кабинет
— Надежное хранение данных: дата-центры уровня Tier III в России, сертифицированные Uptime Institute
— Детальный SLA
— Оптимальная конфигурация: выделенный кластер только под вас
— Опция администрирования вашей базы данных
— Квалифицированная техподдержка в режиме 24х7
✅ 30 дней бесплатно: тестируйте наш сервис с полным доступом ко всем возможностям.
Оставьте заявку на www.cloud.rt.ru
Узнать больше
#реклама 16+
cloud.rt.ru
О рекламодателе
5 042
🤔 Какая разница работы асинхронности на C# и JavaScript?
В C#:
- Асинхронность основана на async/await, Task, ThreadPool.
- Может использоваться для как I/O (сетевые запросы), так и CPU-bound операций.
- Компилятор генерирует state-machine для управления переходами состояний задачи.
- Асинхронность может использовать потоки, но не всегда (например, при I/O — потоки не блокируются вовсе).
В JavaScript:
- Асинхронность основана на Promise, async/await.
- Однопоточная модель с event loop.
- Не используется многопоточность, даже если операции асинхронны.
- Все I/O происходят через неблокирующий механизм событий.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Вже доступно! Дослідження Telegram за 2025 — головні інсайти року 
