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

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

Відкрити в Telegram
5 042
Підписники
-624 години
-167 днів
-3030 день
Архів дописів
🤔 Что из себя представляет абстракция? Это процесс выделения важных характеристик объекта и скрытия несущественных деталей. Она позволяет: 1. Создавать простые интерфейсы для сложных систем. 2. Сосредотачиваться на логике, а не на деталях реализации. 3. Обеспечивать полиморфизм и унифицированный подход к различным объектам. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В чем суть 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 без наследования и изменения структуры классов. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое команда throw? throw используется для генерации исключения вручную или повторной генерации перехваченного. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Курс Аналитика в Business Intelligence в НИУ ВШЭ Удостоверение о повышении квалификации. Подходит начинающим. Онлайн Курс пос
Курс Аналитика в Business Intelligence в НИУ ВШЭ Удостоверение о повышении квалификации. Подходит начинающим. Онлайн Курс посвящен работе с BI-системами на примере Tableau, DataLens. Вы узнаете, как с помощью Business Intelligence визуализировать и готовить данные для дальнейшей работы, а также как настроить дашборд так, чтобы он удовлетворил заказчика. Узнать больше #реклама 16+ hse.ru О рекламодателе

🤔 Что такое 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);
}
🚩Плюсы Производительность Позволяет выполнять высокоэффективные операции с памятью. ➕Взаимодействие с неуправляемым кодом Необходим для вызова функций из библиотек, написанных на других языках. ➕Низкоуровневый контроль Предоставляет возможность прямого управления памятью и аппаратными ресурсами. Ставь 👍 и забирай 📚 Базу знаний

Кризис — это не слабость. Это точка, где рождается новое Но когда рушится привычное, нужна поддержка, смысл и шаг за шагом — выход. 📅 24 мая в 11:00 МСК — бесплатная онлайн-конференция: «Переживая кризис: как найти смысл и собрать себя заново» Что тебя ждёт на конференции: - Разбор ключевых кризисов: потерь, выгорания, одиночества - Пошаговые техники эмоциональной самопомощи - Инструменты психологов — чтобы восстановить опору внутри - Диагностическую карту: «20 вопросов к себе в момент перемен» - Понимание, как справляться с болью — и вытаскивать из неё ресурс А еще: ✅ Подарки — iPad, AirPods, OZON, обучение ✅ Онлайн-курс «Верни себе себя» ✅ Доступ в закрытый Telegram-канал 🎓 Подходит и для психологов, и для тех, кто сам в кризисе. Просто зарегистрируйся. Это бесплатно. Но может поменять твою жизнь. Зарегистрироваться #реклама 16+ psy.talentsy.ru О рекламодателе

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

🤔 Какие объекты живут в нулевом поколении? В 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. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое Inversion of control и dependency injection? Inversion of control (IoC) — это принцип, при котором управление созданием объектов передается внешним компонентам. Dependency injection (DI) — это один из способов реализации IoC, когда зависимости передаются объекту через конструктор, методы или свойства. Это позволяет улучшить тестируемость и модульность кода. DI делает систему более гибкой, позволяя изменять реализации зависимостей без изменения кода. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Современная магистратура от Центрального университета Хочешь развиваться в сфере ИТ и получить фундаментальные знания с практ
Современная магистратура от Центрального университета Хочешь развиваться в сфере ИТ и получить фундаментальные знания с практикой? Поступай в магистратуру Центрального университета! - 4 офлайн программы по востребованным направлениям ИТ - Онлайн-программа по машинному обучению - 300 мест с грантами до 1,2 млн руб. - Вечерние занятия и учеба по выходным — удобно совмещать с работой - Обучение по модели STEM-образования: на стыке науки, технологий и бизнеса - Возможность стажировок и трудоустройства в ведущих компаниях - Государственный диплом за 2 года Магистратура в Центральном университете — это современный подход к образованию, сильный преподавательский состав и актуальные кейсы от индустрии. Оставляй заявку на грант уже сейчас! Подать заявку #реклама 16+ apply.centraluniversity.ru О рекламодателе

🤔 Возможно ли как-нибудь ограничить типы, которые пользователь будет передавать через шаблон? Можно ограничить типы, которые передаются в шаблоны (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() { }
Ставь 👍 и забирай 📚 Базу знаний

Бесплатный курс по 3D-моделированию с нуля Начни карьеру в дизайне и получи первую зарплату! Вас ждет реальный рабочий процес
Бесплатный курс по 3D-моделированию с нуля Начни карьеру в дизайне и получи первую зарплату! Вас ждет реальный рабочий процесс: ✅ разные задачи по 3D Blander ✅ опыт общения с клиентами ✅ оплата за проект Освойте Blender и создайте работу для портфолио Обучение полностью бесплатное для первых 70 участников. Осталось 28 мест. В конце курса мы откроем для вас доступ к звездной распродаже Там вы сможете обменять звездочки на ценные бонусы: 1. Гайд по выходу на биржу UpWork 2. Курс «Заработок на дизайне» 3. Анимированный концепт Samsung True для портфолио 4. Бессрочный грант на обучение: 15 000 ₽ 5. Гайд «Горячие клавиши в Blender» Записывайтесь сейчас! Узнать больше #реклама 16+ yudaevschool24.online О рекламодателе

🤔 Какие есть подходы формирования БД? 1. Code First — структура БД создается из кода (классов). 2. Database First — сначала создается БД, затем генерируются модели. 3. Model First — создается визуальная модель, из неё генерируются и БД, и код. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Новая мощь от Virtus.pro X-TURBO по суперцене. Успей прокачать реакцию, пока другие тормозят. Купить #реклама 18+ xturboenerg
Новая мощь от Virtus.pro X-TURBO по суперцене. Успей прокачать реакцию, пока другие тормозят. Купить #реклама 18+ xturboenergy.ru О рекламодателе

🤔 Какие есть подходы в рамках эфкора? 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. Ставь 👍 и забирай 📚 Базу знаний

15 мая онлайн-презентация новинок Битрикс24 Расскажем о главных иземенениях Битрикс24 в мае 2025 года для работы с командой и продажами. Регистрируйте бесплатно и станьте первыми, кто увидит в прямом эфире все новинки в CRM, AI и совместной работе! Зарегистрироваться #реклама 16+ release.bitrix24.tech О рекламодателе

🤔 Какие есть минусы у boxing/unboxing? Boxing — это преобразование значимого типа в объект (упаковка), unboxing — обратно. Минусы: - Снижение производительности — за счёт дополнительных операций. - Создание мусора — каждый boxing создаёт новый объект в куче. - Потеря типобезопасности — unboxing требует явного указания типа, возможны ошибки во время выполнения. Лучше избегать, особенно в циклах или чувствительных к производительности местах. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Интерполяция - это возможность использовать в строке переменные? Да, интерполяция строк — это удобный способ вставки значений переменных в строку без использования конкатенации (+) или 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": "Иван" }
Ставь 👍 и забирай 📚 Базу знаний

Почему выбирают PostgreSQL как сервис от РТК-ЦОД? Сервис PostgreSQL от РТК-ЦОД позволяет быстро развернуть, эксплуатировать и
Почему выбирают PostgreSQL как сервис от РТК-ЦОД? Сервис PostgreSQL от РТК-ЦОД позволяет быстро развернуть, эксплуатировать и масштабировать базу данных в облаке. Процесс установки и настройки полностью автоматизирован. Почему выбирают нас? — Личный кабинет — Надежное хранение данных: дата-центры уровня Tier III в России, сертифицированные Uptime Institute — Детальный SLA — Оптимальная конфигурация: выделенный кластер только под вас — Опция администрирования вашей базы данных — Квалифицированная техподдержка в режиме 24х7 ✅ 30 дней бесплатно: тестируйте наш сервис с полным доступом ко всем возможностям. Оставьте заявку на www.cloud.rt.ru Узнать больше #реклама 16+ cloud.rt.ru О рекламодателе

🤔 Какая разница работы асинхронности на C# и JavaScript? В C#: - Асинхронность основана на async/await, Task, ThreadPool. - Может использоваться для как I/O (сетевые запросы), так и CPU-bound операций. - Компилятор генерирует state-machine для управления переходами состояний задачи. - Асинхронность может использовать потоки, но не всегда (например, при I/O — потоки не блокируются вовсе). В JavaScript: - Асинхронность основана на Promise, async/await. - Однопоточная модель с event loop. - Не используется многопоточность, даже если операции асинхронны. - Все I/O происходят через неблокирующий механизм событий. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний