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

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

رفتن به کانال در Telegram

Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv

نمایش بیشتر
5 004
مشترکین
-324 ساعت
-37 روز
+830 روز
آرشیو پست ها
🤔 Что такое сборщик мусора? Сборщик мусора (Garbage Collector, GC) — это форма автоматического управления памятью. Он отслеживает каждый объект, выделенный в куче, и определяет, какие объекты более не доступны для приложения, а затем освобождает память, занимаемую этими объектами. Это ключевой компонент во многих современных языках программирования и средах выполнения, облегчая задачу управления памятью. 🚩Основные этапы работы 🟠Маркировка (Marking) Сборщик мусора периодически проходит через все объекты в куче, начиная с "корней" (объектов, непосредственно доступных в программе, например, через переменные в стеке вызовов и глобальные переменные). Он отмечает все объекты, до которых можно добраться напрямую или косвенно. 🟠Очистка (Sweeping) После маркировки доступных объектов, сборщик мусора удаляет все непомеченные объекты, освобождая ресурсы, которые они занимали. 🟠Компактификация (Compacting) Некоторые сборщики мусора перемещают оставшиеся объекты, чтобы уменьшить фрагментацию памяти и улучшить производительность работы с памятью. 🚩Ограничения 🟠Производительность Процесс сборки мусора может быть ресурсоёмким и может привести к заметным паузам в выполнении программы, особенно если куча большая. 🟠Непредсказуемость Точное время сборки мусора может быть непредсказуемым, что может создавать проблемы в приложениях с реальным временем. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое исключения? Исключения в программировании — это механизмы обработки ошибок и необычных ситуаций, которые возникают во время выполнения программы. В C# и других языках программирования исключения позволяют отделить код обработки ошибок от основного кода программы, что упрощает его чтение и поддержку. 🚩Основные понятия 🟠Исключение (Exception) Событие, которое прерывает нормальный поток выполнения программы. 🟠Блок try Содержит код, который может вызвать исключение. 🟠Блок catch Содержит код, который выполняется, если возникает исключение. В catch блок можно передать параметр — экземпляр исключения, которое произошло. 🟠Блок finally Содержит код, который выполняется в любом случае, независимо от того, произошло исключение или нет. Обычно используется для освобождения ресурсов. 🟠Бросание исключения (throw) Механизм для явного вызова исключения. 🚩Пример использования Основные блоки
try
{
    // Код, который может вызвать исключение
    int divisor = 0;
    int result = 10 / divisor;
}
catch (DivideByZeroException ex)
{
    // Обработка исключения
    Console.WriteLine("Деление на ноль невозможно.");
}
finally
{
    // Код, который выполнится в любом случае
    Console.WriteLine("Блок finally выполнен.");
}
Создание и бросание собственного исключения
public class InvalidAgeException : Exception
{
    public InvalidAgeException(string message) : base(message) { }
}

public void SetAge(int age)
{
    if (age < 0)
    {
        throw new InvalidAgeException("Возраст не может быть отрицательным.");
    }
    // Логика установки возраста
}
Ставь 👍 и забирай 📚 Базу знаний

Профессор Gurufy 🎓 Gurufy — ИИ-сервис, который собирает полноценный курс по любой теме под вас. 📚 ChatGPT хорош для простых
Профессор Gurufy 🎓 Gurufy — ИИ-сервис, который собирает полноценный курс по любой теме под вас. 📚 ChatGPT хорош для простых вопросов. Но там, где нужен настоящий курс, работает Gurufy: он учитывает ваш уровень и цель. ⚡ План, статьи с иллюстрациями и интерактивными виджетами, задания — и ИИ-ассистент, которому можно задать вопрос, если что-то не даётся. ✨ Не платите десятки тысяч за курс «для всех» и не собирайте тему по крупицам из статей: персональный курс выходит в 500–1000 ₽, а старт — бесплатный. Узнать больше #реклама 16+ gurufy.ru О рекламодателе

🤔 Какая есть классификация у кучи? В информатике и программировании куча (heap) может классифицироваться по нескольким критериям. Рассмотрим основные виды: 🟠По назначению: Куча памяти (Memory Heap) Используется для динамического выделения памяти в приложениях. В C# это управляется сборщиком мусора (GC - Garbage Collector). Примеры: объекты, созданные с помощью new, выделяются в управляемой куче. 🟠Структура данных «Куча» (Heap Data Structure) Это специальная бинарная структура данных, используемая в алгоритмах, например, в сортировке (Heap Sort) или в приоритетных очередях. Бывает максимальная куча (max-heap) и минимальная куча (min-heap). 🚩По типу управления памятью (для кучи памяти в языках программирования): 🟠Управляемая куча (Managed Heap) В C# и .NET память выделяется и освобождается автоматически с помощью GC. Разделяется на поколения (Generation 0, 1, 2), что оптимизирует работу сборщика мусора. 🟠Неуправляемая куча (Unmanaged Heap) Применяется в C/C++ и низкоуровневом коде, где управление памятью выполняется вручную (malloc/free, new/delete). В C# тоже можно работать с ней через Marshal или Unsafe код. 🟠По структуре данных (Heap Data Structure): 🟠Максимальная куча (Max Heap) Корневой узел содержит наибольшее значение, а дочерние узлы – меньшее. Используется в алгоритмах приоритетных очередей. 🟠Минимальная куча (Min Heap) Корневой узел содержит наименьшее значение, а дочерние узлы – большее. Применяется в алгоритме Дейкстры и других задачах.
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        PriorityQueue<int, int> minHeap = new PriorityQueue<int, int>();

        minHeap.Enqueue(5, 5);
        minHeap.Enqueue(3, 3);
        minHeap.Enqueue(8, 8);
        minHeap.Enqueue(1, 1);

        while (minHeap.Count > 0)
        {
            Console.WriteLine(minHeap.Dequeue()); // Выведет: 1, 3, 5, 8
        }
    }
}
Ставь 👍 и забирай 📚 Базу знаний

Онлайн-магистратура для IT: ИТМО, МИФИ + Яндекс Программы онлайн-магистратуры ИТМО и МИФИ в партнёрстве с Яндексом. Актуальны
Онлайн-магистратура для IT: ИТМО, МИФИ + Яндекс Программы онлайн-магистратуры ИТМО и МИФИ в партнёрстве с Яндексом. Актуальные знания, практическое обучение и гибкий график. Учитесь, совмещая с работой. Доступна господдержка оплаты, отсрочка от армии Перейти на сайт #реклама 16+ practicum.yandex.ru О рекламодателе

🤔 Что такое I/O bound и CPU bound? При выполнении программных задач можно выделить два типа нагрузок: I/O-bound (ограничение ввода-вывода) CPU-bound (ограничение процессора) 🚩I/O-bound (ограничение ввода-вывода) Основная проблема: программа ждет завершения операций ввода-вывода (диска, сети, базы данных, файловой системы и т. д.), а не загружает процессор. Примеры: - Чтение и запись файлов на диск - Запросы к базе данных - HTTP-запросы к API - Чтение данных из сети Решение: Использование асинхронного программирования (async/await), чтобы не блокировать поток.
public async Task<string> FetchDataAsync()
{
    using HttpClient client = new HttpClient();
    return await client.GetStringAsync("https://example.com");
}
🚩CPU-bound (ограничение процессора) Основная проблема: процессор сильно загружен вычислениями, и узким местом становится скорость обработки данных, а не ввод-вывод. Примеры: - Генерация больших отчетов - Кодирование/декодирование видео - Комплексные математические вычисления - Сортировка больших массивов
public static long CalculateFactorial(int number)
{
    return Enumerable.Range(1, number).Aggregate(1, (a, b) => a * b);
}

public async Task<long> ComputeAsync(int number)
{
    return await Task.Run(() => CalculateFactorial(number));
}
Ставь 👍 и забирай 📚 Базу знаний

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

🤔 Какие есть методы запросов жизненного цикла в asp.net Core? В ASP.NET Core жизненный цикл запроса проходит несколько этапов — от получения HTTP-запроса до отправки ответа. В этом процессе участвуют Middleware, контроллеры, фильтры и обработчики событий. 🚩Основные этапы жизненного цикла запроса Получение запроса (HttpContext создаётся) Обработка через Middleware (передача запроса вниз) Маршрутизация (Routing) — определение контроллера Фильтры (например, аутентификация) Вызов контроллера и метода (Action) Обратный проход через Middleware (формирование ответа) Отправка ответа клиенту 🚩Методы Middleware (Промежуточное ПО) Middleware — это основной механизм обработки запросов. Где регистрируются? → В Program.csapp.Use...) Методы Middleware
app.Use(async (context, next) =>
{
    Console.WriteLine("Перед обработкой запроса");
    await next(); // Передаём запрос дальше
    Console.WriteLine("После обработки запроса");
});
🚩Методы в контроллерах (`Controller`) Контроллер обрабатывает запросы после маршрутизации. Основные методы
public class HomeController : Controller
{
    // Метод вызывается при GET-запросе
    public IActionResult Index()
    {
        return View();
    }

    // Метод вызывается при POST-запросе
    [HttpPost]
    public IActionResult SubmitForm(FormModel model)
    {
        return RedirectToAction("Index");
    }
}
🚩Фильтры (`Filters`) Фильтры выполняются до и после вызова контроллера. Методы фильтров
public class MyActionFilter : IActionFilter
{
    public void OnActionExecuting(ActionExecutingContext context)
    {
        Console.WriteLine("Перед вызовом метода контроллера");
    }

    public void OnActionExecuted(ActionExecutedContext context)
    {
        Console.WriteLine("После вызова метода контроллера");
    }
}
🚩Методы жизненного цикла в `Program.cs` В ASP.NET Core 6+ вся конфигурация находится в Program.cs. Методы инициализации
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllersWithViews(); // Подключаем MVC

var app = builder.Build();

app.UseRouting(); // Включаем маршрутизацию
app.UseAuthorization(); // Проверка прав
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers(); // Подключаем контроллеры
});

app.Run();
Ставь 👍 и забирай 📚 Базу знаний

Бесплатно проверим, готово ли ваше ПО к реестру Минцифры Разрабатываете ПО и хотите НДС 0%, ИТ-аккредитацию и доступ к госзак
Бесплатно проверим, готово ли ваше ПО к реестру Минцифры Разрабатываете ПО и хотите НДС 0%, ИТ-аккредитацию и доступ к госзакупкам? Всё это даёт включение в реестр российского ПО Минцифры. Но самостоятельная подача часто заканчивается отказом из-за прав, документов или несоответствия сайта требованиям. ✅Проверим ПО и права ✅ Подготовим и подадим документы ✅ Сопроводим до внесения в реестр ✅ Все за 60 дней. Пройдите бесплатную проверку готовности вашего ПО и за пару минут поймёте, реально ли попасть в реестр уже этим летом. Получить консультацию #реклама registration.group О рекламодателе

🤔 Что такое аутентификация? Когда человек вводит логин и пароль, система аутентифицирует его, проверяя, действительно ли это тот, за кого он себя выдаёт. 🚩Как работает аутентификация? Пользователь вводит данные (например, логин и пароль). Система проверяет их в базе данных. Если данные верны → доступ разрешён. Если данные неверны → отказ в доступе.
public async Task<IActionResult> Login(string username, string password)
{
    var user = await _userManager.FindByNameAsync(username);
    if (user != null && await _userManager.CheckPasswordAsync(user, password))
    {
        await _signInManager.SignInAsync(user, isPersistent: false);
        return RedirectToAction("Index", "Home");
    }
    ModelState.AddModelError("", "Неверный логин или пароль");
    return View();
}
🚩Виды аутентификации 🟠По паролю Самый распространённый вариант. Минус: если пароль украден – доступ открыт. 🟠Двухфакторная (2FA) Например, SMS-код + пароль. Усложняет взлом аккаунта. 🟠Биометрическая Отпечаток пальца, Face ID. Удобно, но требует спецоборудования. 🟠OAuth (Google, Facebook, GitHub) Вход через соцсети. Удобно, не нужно запоминать пароль. 🟠Аутентификация по токену (JWT) Используется в API и микросервисах. Позволяет работать без сохранения сессий. Ставь 👍 и забирай 📚 Базу знаний

Услуги дата-центра в Москве Размещение и аренда серверного оборудования в дата-центре. 👍 4 современных дата-центра в Москве.
Услуги дата-центра в Москве Размещение и аренда серверного оборудования в дата-центре. 👍 4 современных дата-центра в Москве. 👍 Лицензированный оператор связи. 👍 Индивидуальные конфигурации выделенных серверов под задачи клиента. 👍 Круглосуточная техническая поддержка в Телеграм, без ботов. Узнать цену #реклама 16+ itsoft.ru О рекламодателе

🤔 Как работает threadpool? ThreadPool (пул потоков) — это механизм управления потоками в .NET, который позволяет повторно использовать созданные потоки для выполнения задач, уменьшая накладные расходы на их создание и уничтожение. 🚩Зачем нужен ThreadPool? 🟠Создание потоков — дорогостоящая операция Каждый раз создавать новый поток — медленно и неэффективно. 🟠Пул потоков позволяет повторно использовать уже созданные потоки вместо их постоянного создания и удаления. 🟠Автоматическое управление количеством потоков в зависимости от нагрузки. 🟠Идеально подходит для небольших, кратковременных задач Обработки HTTP-запросов Выполнения задач в фоне Асинхронного выполнения операций 🚩Как работает ThreadPool? 🟠Когда вы отправляете задачу в ThreadPool он берет поток из пула и выполняет задачу. 🟠Если в пуле нет свободных потоков создается новый (но их количество ограничено). 🟠Когда задача выполнена, поток не уничтожается а возвращается в пул и может быть использован снова. 🟠ThreadPool сам регулирует количество потоков в зависимости от загрузки системы. 🚩Пример использования ThreadPool
using System;
using System.Threading;

class Program
{
    static void Main()
    {
        for (int i = 0; i < 5; i++)
        {
            ThreadPool.QueueUserWorkItem(DoWork, i);
        }

        Console.ReadLine(); // Ждём завершения потоков
    }

    static void DoWork(object? state)
    {
        Console.WriteLine($"Задача {state} выполняется в потоке {Thread.CurrentThread.ManagedThreadId}");
        Thread.Sleep(1000); // Симуляция работы
        Console.WriteLine($"Задача {state} завершена");
    }
}
🚩Максимальное и минимальное количество потоков ThreadPool управляет количеством потоков сам, но их можно настраивать
int minWorker, minIOC;
ThreadPool.GetMinThreads(out minWorker, out minIOC);
Console.WriteLine($"Мин. количество потоков: {minWorker}");

ThreadPool.SetMinThreads(4, 4); // Устанавливаем минимум потоков

int maxWorker, maxIOC;
ThreadPool.GetMaxThreads(out maxWorker, out maxIOC);
Console.WriteLine($"Макс. количество потоков: {maxWorker}");
Ставь 👍 и забирай 📚 Базу знаний

Оценка проекта: от догадок к системному подходу Оценка проекта часто начинается с цифры, которую назвали на пресейле до полно
Оценка проекта: от догадок к системному подходу Оценка проекта часто начинается с цифры, которую назвали на пресейле до полноценного анализа задачи. Затем команда пытается уложить в неё реальные трудозатраты, сроки и риски. Эффект привязки, излишний оптимизм и ошибки памяти создают ложную уверенность в расчётах, а первоначальный бюджет в процессе работы может вырасти в несколько раз. На открытом уроке 5 августа в 20:00 в OTUS разберём, как перейти от интуитивных предположений к системной оценке проекта. Поговорим о том, как выстроить Presale, связать продажи с командой разработки и проверить решение до принятия обязательств перед заказчиком. Рассмотрим реальные причины перерасхода бюджета и способы выявлять риски ещё до старта проекта. Узнать больше #реклама 16+ otus.ru О рекламодателе

🤔 Может ли в абстрактном классе не быть ни одного абстрактного метода? Да, может. Абстрактный класс не обязан содержать абстрактные методы. Он может использоваться как нельзя инстанцируемая базовая структура с частичной или полной реализацией, предназначенной для наследования. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Бесплатный курс: веб-дизайн, графика, интерфейсы Научись создавать дизайн сайтов и приложений, инфографику для карточек на маркетплейсах и работать в Figma! Студенты курса в среднем зарабатывают от 68 000 ₽ уже во время обучения💰 Этот курс для тебя, если ты: ✅ мечтаешь о новой профессии, но не знаешь, с чего начать; ✅ чувствуешь, что хочешь большего — свободы, самореализации, творчества; ✅ полный новичок и хочешь систему, а не хаос; ✅ хочешь начать зарабатывать удалённо. Зарегистрироваться #реклама 16+ ydaev.ru О рекламодателе

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

Kafka на практике: продюсеры, консьюмеры, Docker Хотите увидеть, как реально работает Kafka? 3 августа в 20:00 — вебинар с жи
Kafka на практике: продюсеры, консьюмеры, Docker Хотите увидеть, как реально работает Kafka? 3 августа в 20:00 — вебинар с живыми примерами кода. Поднимем кластер в Docker, создадим топики, напишем продюсеров на Python/Java, настроим консьюмеров с consumer groups. Разберем партиционирование, оффсеты и гарантии доставки. Для backend-разработчиков, DevOps и всех, кто любит практику. Узнать больше #реклама 16+ otus.ru О рекламодателе

🤔 Что такое метод Finalize? Метод Finalize() представляет собой специальный метод, который предназначен для выполнения финальной очистки ресурсов перед тем, как объект будет уничтожен сборщиком мусора. Это метод, который может быть определен в классе для очистки неуправляемых ресурсов, если класс не реализует интерфейс IDisposable. 🚩Особенности метода 🟠Автоматический вызов Сборщик мусора автоматически вызывает Finalize() на объекте, который не имеет других активных ссылок и который определяет финализатор. Это происходит непосредственно перед тем, как сборщик мусора освобождает память, занимаемую объектом. 🟠Определение в базовом классе `Object` Все объекты наследуют от базового класса Object, который предоставляет реализацию Finalize(). Однако в большинстве случаев Finalize() не имеет реализации и не делает ничего, пока не будет переопределен в производном классе. 🟠Замедление сборки мусора Наличие объектов с финализаторами может замедлить процесс сборки мусора, так как объекты, требующие финализации, должны быть обработаны дважды: сначала они помещаются в очередь финализации, а затем их память освобождается после выполнения Finalize().
class ResourceWrapper
{
    // Конструктор
    public ResourceWrapper() {
        // Инициализация ресурсов
    }

    // Финализатор
    ~ResourceWrapper() {
        // Код очистки ресурсов
    }
}
Ставь 👍 и забирай 📚 Базу знаний

Автоматизация бизнеса аренды серверов DCImanager. Скачай и попробуй бесплатно 30 дней. Для хостинга и сервис-провайдеров! ✅ В
Автоматизация бизнеса аренды серверов DCImanager. Скачай и попробуй бесплатно 30 дней. Для хостинга и сервис-провайдеров! ✅ Выдача сервера за 10 мин Автоматическая подготовка серверов к выдаче ✅ Мультифункциональность Платформа имеет встроенные дополнительные инструменты ✅ IPAM Управление IPv4/IPv6 и учет адресного пространства ✅ Поддержка 24/7 Техподдержка - сетевые инженеры, системные администраторы ✅ Получить доступ к демостенду Тестовый демостенд, на котором установлена платформа Узнать больше #реклама 16+ ispsystem.ru О рекламодателе

🤔 Что такое hashset? HashSet<T> — это коллекция уникальных элементов, которая обеспечивает быстрый поиск, добавление и удаление. В основе HashSet<T> лежит хеш-таблица, что делает операции очень быстрыми (почти за O(1) в среднем случае). 🚩Создание и использование `HashSet<T>` Простой пример
HashSet<int> numbers = new HashSet<int> { 1, 2, 3, 4, 5 };

// Добавление элементов (дубликаты не добавляются)
numbers.Add(3);  // Уже есть в HashSet, не добавится
numbers.Add(6);  // Добавится

// Вывод всех элементов
foreach (int num in numbers)
{
    Console.Write(num + " ");
}
Вывод
1 2 3 4 5 6
🚩Основные операции Пример работы с Contains и Remove
if (numbers.Contains(3))
{
    numbers.Remove(3);
}

Console.WriteLine(string.Join(", ", numbers));
Вывод
1, 2, 4, 5, 6
🚩Операции над множествами HashSet<T> поддерживает математические операции над множествами, такие как пересечение, объединение и разность. Пересечение (IntersectWith)
HashSet<int> set1 = new HashSet<int> { 1, 2, 3, 4 };
HashSet<int> set2 = new HashSet<int> { 3, 4, 5, 6 };

set1.IntersectWith(set2); // Оставит только {3, 4}
Console.WriteLine(string.Join(", ", set1));
Вывод
3, 4
Объединение (UnionWith)
set1 = new HashSet<int> { 1, 2, 3 };
set2 = new HashSet<int> { 3, 4, 5 };

set1.UnionWith(set2); // set1 = {1, 2, 3, 4, 5}
Console.WriteLine(string.Join(", ", set1));
Вывод
1, 2, 3, 4, 5
Разность (ExceptWith)
set1 = new HashSet<int> { 1, 2, 3, 4, 5 };
set2 = new HashSet<int> { 3, 4 };

set1.ExceptWith(set2); // Удалит {3, 4}, останется {1, 2, 5}
Console.WriteLine(string.Join(", ", set1));
Вывод
1, 2, 5
Ставь 👍 и забирай 📚 Базу знаний