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

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

رفتن به کانال در Telegram
5 050
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-77 روز
-1530 روز
آرشیو پست ها
Бесплатный курс по 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 происходят через неблокирующий механизм событий. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какие методы есть в 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));
    });
}
Ставь 👍 и забирай 📚 Базу знаний

Обнулите все свои кредиты и долги! Долги от 200 000₽. Поможем бесплатно списать долг и расторгнуть все кредитные договоры! По
Обнулите все свои кредиты и долги! Долги от 200 000₽. Поможем бесплатно списать долг и расторгнуть все кредитные договоры! Получить консультацию #реклама нет-кредит.рф О рекламодателе

🤔 Что такое Scoped? Scoped — объект создаётся один раз на каждый HTTP-запрос. Все компоненты в рамках одного запроса получают один и тот же экземпляр, но при следующем запросе создаётся новый. Подходит для работы с данными и контекстом, например, DbContext. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Может ли абстрактный метод быть вне абстрактного класса? Нет, абстрактный метод не может существовать вне абстрактного класса. В C# это ограничение встроено в язык, чтобы поддерживать строгую логику наследования и полиморфизма. 🚩Почему абстрактный метод требует абстрактного класса? Абстрактный метод — это метод, который объявлен, но не имеет реализации. Он выступает как "контракт", который обязан быть реализован в производном классе.
public abstract class Shape
{
    public abstract double CalculateArea();
}
Абстрактные методы имеют следующие особенности: Они не могут содержать тело (реализацию). Их цель — заставить производные классы реализовать конкретную функциональность. Они всегда принадлежат абстрактным классам. 🚩Пример ошибки Если попытаться объявить абстрактный метод в обычном классе, компилятор выдаст ошибку
public class RegularClass
{
    public abstract void SomeMethod(); // Ошибка: абстрактный метод может быть только в абстрактном классе
}
🚩Логика дизайна C# требует, чтобы абстрактные методы находились только в абстрактных классах, потому что: Абстрактные классы могут содержать как абстрактные, так и обычные методы. Это позволяет определять базовое поведение в абстрактном классе и оставлять специфическую реализацию производным классам. Обычные классы не могут содержать абстрактные методы, так как они предназначены для создания объектов, а объект не может содержать "незавершённый" метод. Ставь 👍 и забирай 📚 Базу знаний

🤔 В чём суть extension-методов? Extension-методы позволяют добавлять методы к существующим типам, не изменяя их исходный код. Это: - Делается с помощью static-класса и ключевого слова this перед параметром. - Вызывается как обычный метод у объекта. Это делает код более читаемым и расширяемым. Особенно полезны в LINQ и утилитарных сценариях. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как по ключу получить значение? Для получения значения по ключу в словаре (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");
}
Ставь 👍 и забирай 📚 Базу знаний

Дарим подписку на Яндекс Музыку Ответьте на 1 вопрос и Яндекс Музыка ваша для вас и 3-х ваших близких. Кинопоиск и Яндекс Книги тоже в подписке. Попробуйте бесплатно❤️ Попробовать #реклама 18+ music.yandex.ru О рекламодателе Реклама на Яндексе

🤔 Для чего нужно разделение Large Object Heap и Small Object Heap? Разделение позволяет оптимизировать работу сборщика мусора, так как большие объекты редко перемещаются, а их обработка происходит отдельно, минимизируя накладные расходы. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что делать, если есть два интерфейса с одинаковым названием? Если в проекте присутствуют два интерфейса с одинаковым названием, это может привести к конфликту имен. Чтобы избежать этой проблемы, можно использовать несколько решений: 🟠Использование пространств имен (Namespaces) Наиболее очевидное и правильное решение — поместить интерфейсы в разные пространства имен и указывать их при использовании.
namespace FirstNamespace
{
    public interface ILogger
    {
        void Log(string message);
    }
}

namespace SecondNamespace
{
    public interface ILogger
    {
        void LogError(string message);
    }
}
Если в коде требуется использовать оба интерфейса, можно указать полное имя интерфейса
using FirstNamespace;
using SecondNamespace;

class Program
{
    static void Main()
    {
        FirstNamespace.ILogger logger1;
        SecondNamespace.ILogger logger2;
    }
}
🟠Использование псевдонимов для пространств имен Чтобы избежать длинных имен, можно задать псевдонимы:
using FirstLogger = FirstNamespace.ILogger;
using SecondLogger = SecondNamespace.ILogger;

class Program
{
    static void Main()
    {
        FirstLogger logger1;
        SecondLogger logger2;
    }
}
🟠Наследование интерфейсов Если оба интерфейса схожи по функциональности, можно создать общий интерфейс и наследовать его
public interface IBaseLogger
{
    void Log(string message);
}

public interface ILogger1 : IBaseLogger
{
}

public interface ILogger2 : IBaseLogger
{
}
🟠Явная реализация интерфейсов Если класс должен реализовывать оба интерфейса с одинаковыми методами, можно использовать явную реализацию интерфейсов:
using FirstNamespace;
using SecondNamespace;

class Logger : FirstNamespace.ILogger, SecondNamespace.ILogger
{
    void FirstNamespace.ILogger.Log(string message)
    {
        Console.WriteLine("First Logger: " + message);
    }

    void SecondNamespace.ILogger.LogError(string message)
    {
        Console.WriteLine("Second Logger Error: " + message);
    }
}

class Program
{
    static void Main()
    {
        Logger logger = new Logger();
        ((FirstNamespace.ILogger)logger).Log("Hello");
        ((SecondNamespace.ILogger)logger).LogError("Error");
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Интерполяция — это возможность использовать в строке переменные? Да, строковая интерполяция — это способ вставить значение переменной прямо внутрь строки. Это улучшает читаемость, заменяя конкатенацию. Используется как способ встроенного форматирования текста. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Почему вы не используете Битрикс24 CRM с AI? 1- не знал 2- забыл Рассказываем и напоминаем! ✅Битрикс24 CRM с AI помогает увел
+5
Почему вы не используете Битрикс24 CRM с AI? 1- не знал 2- забыл Рассказываем и напоминаем! ✅Битрикс24 CRM с AI помогает увеличивать продажи, работать с постоянными клиентами и сохранять все важные данные. AI-помощник CoPilot внутри сервиса расшифрует телефонные разговоры и автоматически заполнит карточки клиента в CRM. Битрикс24 можно использовать бесплатно для всех команд, независимо от их размера. ⚡Не тратьте время на рутину. Узнать больше #реклама 16+ bitrix24.ru О рекламодателе

C# | Вопросы собесов - آمار و تحلیل کانال تلگرام @easy_c_sharp