fa
Feedback

فریب کلاهبرداران را نخورید! تل‌متریو این کانال‌ها را شناسایی و برچسب‌گذاری می‌کند 👉 برای مشاهده برچسب، اشتراک تهیه کنید

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

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

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

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

نمایش بیشتر
5 015
مشترکین
اطلاعاتی وجود ندارد24 ساعت
+47 روز
+2230 روز
آرشیو پست ها
🤔 Строки - значимый или ссылочный тип? В C# строки (string) являются ссылочным типом, но ведут себя как значимый тип из-за своей неизменяемости (immutability). 🚩`string` – это ссылочный тип В C# все классы (class) – ссылочные типы, и string не исключение. - Переменная string хранит ссылку на объект в памяти, а не сам текст. - Две переменные могут ссылаться на один и тот же объект.
string str1 = "Hello";
string str2 = str1; // str2 теперь указывает на тот же объект, что и str1
Console.WriteLine(object.ReferenceEquals(str1, str2)); // True
🚩`string` – неизменяемый тип (Immutable) Хотя string – ссылочный тип, каждое изменение строки создаёт новый объект в памяти, а не модифицирует существующий.
string str = "Hello";
str += " World"; // Создаётся новый объект в памяти
🚩Почему `string` ведёт себя как значимый тип? Неизменяемость (Immutability) – строка не меняется после создания. Операции со строками создают новые объекты (как копирование значимых типов). Сравнение строк по значению (==), а не по ссылке (как у ссылочных типов). 1210
string s1 = "hello";
string s2 = "hello";
Console.WriteLine(s1 == s2); // True (сравниваются значения, а не ссылки)
Ставь 👍 и забирай 📚 Базу знаний

Пишете на C#, но веб — пока набор задач? Соберите целостную картину на курсе «C# ASP.NET Core-разработчик». Backend, frontend
Пишете на C#, но веб — пока набор задач? Соберите целостную картину на курсе «C# ASP.NET Core-разработчик». Backend, frontend, БД, Docker, Kubernetes, CI/CD. Scrum, командная работа, практикующие преподаватели. Старт 30 сентября, успейте на курс! Узнать больше

🤔 Как можно использовать делегаты? Делегаты позволяют: - Передавать методы как параметры. - Создавать цепочки вызовов (мультикаст). - Реализовывать обратные вызовы (callback). - Использовать события и обработчики событий. - Организовывать стратегии поведения в шаблонах проектирования. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

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

🤔 Есть прямоугольник и квадрат, цель вычислить площадь, что нарушает принцип Барбары Лисков? Если класс "Квадрат" наследуется от "Прямоугольник" и переопределяет методы установки ширины и высоты так, что нарушает их независимость, это ломает принцип Лисков. Например, изменение ширины у квадрата изменяет и высоту, что не ожидается для прямоугольника. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

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

Что будет работать в рекламе завтра? Ответ ищем вместе на REKONFA 2026. 15 октября соберёмся в Москве и онлайн, чтобы обсудит
Что будет работать в рекламе завтра? Ответ ищем вместе на REKONFA 2026. 15 октября соберёмся в Москве и онлайн, чтобы обсудить новые технологии Яндекс Рекламы, продуктовые запуски, тренды рынка, исследования и реальные кейсы. В программе — выступления экспертов и возможность поговорить с продуктовыми командами Яндекс Рекламы о своих задачах. А вне сцены вас ждут коворкинг, фотозоны и форматы для новых знакомств. Участвовать можно в Москве на ВТБ Арене или онлайн. Регистрация бесплатная. Зарегистрироваться #реклама 18+ ya.rekonfa.ru О рекламодателе

🤔 Что такое CancellationToken в многопоточности? CancellationToken — это объект, который позволяет управлять отменой операций, особенно асинхронных. Используется для: - Прерывания задач Task, async-await - Передачи сигнала отмены в долгоживущие процессы (загрузки, ожидания) - Контроля над временем жизни операции С помощью CancellationTokenSource можно отправить команду отмены, и все обработчики, использующие связанный токен, корректно завершат выполнение. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В чем отличие dispose и finalize? Dispose и Finalize являются двумя механизмами для управления ресурсами, особенно теми, которые не управляются средой выполнения .NET, такими как файловые дескрипторы или соединения с базой данных. Они играют важную роль в освобождении ресурсов, но работают по-разному. 🚩Finalize Можно переопределить в классе для выполнения очистки ресурсов перед тем, как объект будет собран сборщиком мусора. Этот метод вызывается сборщиком мусора автоматически, если объект уничтожается и не имеет других живых ссылок. 🚩Dispose Является частью интерфейса IDisposable и предоставляет явный способ освобождения управляемых и неуправляемых ресурсов. Разработчики могут вызывать Dispose вручную или использовать конструкцию using, которая гарантирует вызов Dispose по завершении блока кода.
public class ResourceHolder : IDisposable
{
    private bool disposed = false;

    ~ResourceHolder() // Финализатор
    {
        Dispose(false);
    }

    public void Dispose() // Метод Dispose из IDisposable
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        if (!disposed)
        {
            if (disposing)
            {
                // Освобождение управляемых ресурсов
            }

            // Освобождение неуправляемых ресурсов
            disposed = true;
        }
    }
}
Ставь 👍 и забирай 📚 Базу знаний

Ищете облачную платформу? Есть Beget ✅ Аптайм 99,98% в дата-центрах Tier III ✅ Техподдержка 24/7 — живые люди, без ботов ✅ Пр
Ищете облачную платформу? Есть Beget ✅ Аптайм 99,98% в дата-центрах Tier III ✅ Техподдержка 24/7 — живые люди, без ботов ✅ Прозрачная оплата без скрытых платежей ✅ Более 200 000 клиентов доверяют Beget Узнать больше

🤔 Как происходит загрузка связанных сущностей? Entity Framework Core поддерживает три способа загрузки связанных данных: - Жадная загрузка (Eager Loading) – связанные сущности загружаются сразу вместе с основной, используя оператор Include. Это снижает количество запросов, но может привести к загрузке лишних данных. - Ленивая загрузка (Lazy Loading) – связанные данные загружаются только при первом обращении к ним. По умолчанию в EF Core отключена, но может быть включена с помощью прокси-объектов. - Явная загрузка (Explicit Loading) – связанные сущности загружаются вручную с помощью отдельного запроса при необходимости. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

YaC/e 2026: кто и как будет учить в 2030 году Обсудим будущее преподавания на онлайн-конференции Яндекса YaC/e 2026. 30 сентя
YaC/e 2026: кто и как будет учить в 2030 году Обсудим будущее преподавания на онлайн-конференции Яндекса YaC/e 2026. 30 сентября. Участие бесплатно, вышлем сертификат участника! Регистрируйтесь до 29 сентября. Узнать больше #реклама 16+ yace.yandex.ru О рекламодателе

🤔 Что такое builder паттерн? Это порождающий паттерн проектирования, который используется для пошагового создания сложных объектов. Он разделяет процесс конструирования объекта от его представления, позволяя создавать различные представления объекта, следуя одному и тому же процессу конструирования. 🚩Основные цели и задачи паттерна 🟠Разделение создания и представления Отделяет процесс конструирования объекта от его представления, чтобы один и тот же процесс мог использоваться для создания различных представлений объекта. 🟠Пошаговое создание объектов Позволяет создавать объекты поэтапно, контролируя процесс конструирования и предотвращая создание объекта в неконсистентном состоянии. 🟠Поддержка неизменяемых объектов Может использоваться для создания неизменяемых объектов с большим количеством опций и параметров. 🚩Структура паттерна 🟠Builder Определяет интерфейс для пошагового конструирования объекта. 🟠ConcreteBuilder Реализует интерфейс Builder и создает конкретный продукт. 🟠Director Управляет объектом Builder и задает алгоритм создания объекта. 🟠Product Класс, представляющий создаваемый сложный объект. 🚩Пример использования паттерна Строитель 1⃣Определение продукта
public class House
{
    public string Walls { get; set; }
    public string Roof { get; set; }
    public string Foundation { get; set; }

    public override string ToString()
    {
        return $"House with {Walls}, {Roof} and {Foundation}";
    }
}
2⃣Определение интерфейса Builder
public interface IHouseBuilder
{
    void BuildFoundation();
    void BuildWalls();
    void BuildRoof();
    House GetHouse();
}
3⃣Реализация конкретного Builder
public class ConcreteHouseBuilder : IHouseBuilder
{
    private House _house = new House();

    public void BuildFoundation()
    {
        _house.Foundation = "Concrete Foundation";
    }

    public void BuildWalls()
    {
        _house.Walls = "Concrete Walls";
    }

    public void BuildRoof()
    {
        _house.Roof = "Concrete Roof";
    }

    public House GetHouse()
    {
        return _house;
    }
}
4⃣Определение Director
public class ConstructionDirector
{
    private readonly IHouseBuilder _builder;

    public ConstructionDirector(IHouseBuilder builder)
    {
        _builder = builder;
    }

    public void ConstructHouse()
    {
        _builder.BuildFoundation();
        _builder.BuildWalls();
        _builder.BuildRoof();
    }
}
5⃣Использование паттерна Строитель
public class Program
{
    public static void Main()
    {
        IHouseBuilder builder = new ConcreteHouseBuilder();
        ConstructionDirector director = new ConstructionDirector(builder);

        director.ConstructHouse();
        House house = builder.GetHouse();

        Console.WriteLine(house); // Output: House with Concrete Walls, Concrete Roof and Concrete Foundation
    }
}
🚩Плюсы ➕Контроль процесса создания Позволяет контролировать процесс создания сложных объектов поэтапно. ➕Гибкость Разделение конструирования и представления позволяет использовать один и тот же процесс для создания различных объектов. ➕Читаемость кода Код становится более читаемым и поддерживаемым, так как процесс создания объекта инкапсулирован в отдельный класс. ➕Поддержка сложных объектов Упрощает создание объектов с множеством параметров и сложной иерархией. Ставь 👍 и забирай 📚 Базу знаний

Кто сказал, что начинать надо с малого? Тестировать цифровых двойников или настраивать проход по лицу в метро — неплохо для с
Кто сказал, что начинать надо с малого? Тестировать цифровых двойников или настраивать проход по лицу в метро — неплохо для старта карьеры, правда? А еще это отличный способ обнаружить у себя новую ИТ-суперспособность. Т1 — это бигтех для бизнеса и одна из крупнейших аккредитованных ИТ-компаний России. Здесь молодые специалисты получают реальные задачи: можно работать с большими данными, участвовать в разработке решений для ритейла, создавать инструменты для обучения и общения и многое другое. И все это: ✅ онлайн из любой точки страны; ✅ под руководством наставника; ✅ удобно совмещать с учебой. Для старта карьеры ИТ-холдинг выбрали уже более 4 000 студентов из 300+ вузов. ⚡ Присоединяйся и узнай, какая суперспособность в ИТ твоя. Перейти на сайт #реклама 16+ career.t1.ru О рекламодателе

🤔 В чём разница статических и нестатических классов? - Статический класс (static): - Нельзя создать экземпляр (new). - Все методы и поля внутри него тоже должны быть static. - Используется как утилитный контейнер. - Нестатический класс: - Можно создавать объекты. - Может содержать как обычные, так и статические члены. - Поддерживает наследование, интерфейсы, абстракции и т.д. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что делает new 'имя объекта'()? Оператор new в C# создаёт новый экземпляр объекта и выделяет для него память в куче (Heap) или стеке (Stack), в зависимости от типа. 🚩Как работает `new`? Для классов (class) – выделяет память в куче (Heap) и возвращает ссылку на объект. Для структур (struct) – если структура создаётся без new, её поля остаются неинициализированными, но если использовать new, она получает значения по умолчанию. Для массивов (T[]) – выделяет память в куче, даже если T – это struct. Для делегатов – создаёт экземпляр делегата. Пример: new с классом (class)
class Person
{
    public string Name;

    public Person(string name)
    {
        Name = name;
    }
}

class Program
{
    static void Main()
    {
        Person p1 = new Person("Alice"); // Создаём новый объект в куче
        Console.WriteLine(p1.Name); // Alice
    }
}
Пример: new со структурой (struct)
struct Point
{
    public int X;
    public int Y;

    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }
}

class Program
{
    static void Main()
    {
        Point p1 = new Point(5, 10); // Создаёт структуру в стеке
        Console.WriteLine(p1.X); // 5
    }
}
Пример: new с массивом
int[] numbers = new int[5]; // Создаёт массив в куче
numbers[0] = 10;
Console.WriteLine(numbers[0]); // 10
🚩Что делает `new` за кулисами? Выделение памяти в куче (для классов) или в стеке (для структур). Вызов конструктора класса или структуры. Возвращение ссылки на объект (для классов) или самого объекта (для структур). Ставь 👍 и забирай 📚 Базу знаний

Rust + Tauri: лёгкая альтернатива Electron для десктопа ⚡ Electron позволяет быстро делать кроссплатформенные приложения, но
Rust + Tauri: лёгкая альтернатива Electron для десктопа ⚡ Electron позволяет быстро делать кроссплатформенные приложения, но вместе с ним вы получаете большой runtime. Rust + Tauri позволяют использовать HTML/CSS/JS для интерфейса, а Rust — для производительной и безопасной серверной логики. 📅 23 сентября в 20:00 на открытом вебинаре разберём полный цикл разработки GUI на Rust с Tauri 2: структуру проекта, связь Rust и UI, работу с данными, permissions и capabilities, асинхронность, отладку и сборку. 💻 Вебинар для фронтенд-разработчиков, Rust-разработчиков и тех, кто хочет уйти от Electron. ✅ В результате сможете создавать кроссплатформенные приложения и безопасно связывать UI с логикой на Rust. Записаться #реклама 16+ otus.ru О рекламодателе

🤔 Что такое микросервис? Это автономный, малый сервис, отвечающий за конкретную бизнес-задачу и взаимодействующий с другими через API. Каждый микросервис может быть разработан, развёрнут и масштабирован независимо. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какова концепция сборки мусора в С#? Это автоматический процесс управления памятью, который освобождает память, занятую объектами, которые больше не используются приложением. Этот механизм помогает разработчикам избежать ошибок, связанных с управлением памятью вручную, таких как утечки памяти и неправильное использование освобожденных ресурсов. 🚩Основные концепции сборки мусора 🟠Управляемая куча (Managed Heap) Управляемая куча — это область памяти, в которой размещаются объекты, созданные в управляемой среде .NET. Когда создается новый объект, память для него выделяется в управляемой куче. 🟠Корни (Roots) Корни — это переменные и ссылки, которые являются начальными точками для сборки мусора. Они включают глобальные и статические переменные, локальные переменные в стеке, а также ссылки из регистров процессора. 🟠Алгоритм маркировки и сжатия (Mark-and-Compact) GC использует алгоритм маркировки и сжатия для определения объектов, которые больше не используются. Сначала он помечает все доступные объекты (те, до которых можно добраться из корней), а затем удаляет все непомеченные объекты, освобождая их память. 🟠Поколения (Generations) Память управляемой кучи разделена на три поколения: поколение 0, поколение 1 и поколение 2. Это позволяет оптимизировать процесс сборки мусора: Поколение 0: Содержит новые объекты. Сборка мусора здесь происходит чаще всего, так как большинство объектов живут недолго. Поколение 1: Содержит объекты, которые пережили одну сборку мусора. Поколение 2: Содержит объекты, которые пережили несколько сборок мусора. Сборка мусора здесь происходит реже всего, так как такие объекты считаются долгоживущими. 🚩Этапы сборки мусора 🟠Инициализация сборки мусора Когда выделяется новая память и управляемая куча достигает определенного порога, запускается процесс сборки мусора. 🟠Маркировка (Mark) GC проходит по всем корням и помечает все объекты, которые могут быть достигнуты. 🟠Удаление (Sweep) После маркировки все непомеченные объекты считаются недоступными и могут быть удалены. 🟠Сжатие (Compact) Для улучшения производительности и уменьшения фрагментации памяти, сборщик мусора может переместить оставшиеся объекты, чтобы освободить блоки памяти.
class Program
{
    static void Main()
    {
        for (int i = 0; i < 1000; i++)
        {
            CreateObject();
        }

        // Явный вызов сборщика мусора (не рекомендуется для обычного использования)
        GC.Collect();
    }

    static void CreateObject()
    {
        MyClass obj = new MyClass();
        // Объект obj будет собран сборщиком мусора, когда он больше не будет использоваться
    }
}

class MyClass
{
    // Поля и методы класса
}
Ставь 👍 и забирай 📚 Базу знаний

Аренда VPS/VDS-сервера. Виртуальные выделенные серверы в дата-центрах уровня Tier III — 7 готовых конфигураций от 200 ₽/мес.
Аренда VPS/VDS-сервера. Виртуальные выделенные серверы в дата-центрах уровня Tier III — 7 готовых конфигураций от 200 ₽/мес. Преимущества аренды: - Выделенные ресурсы без переплаты; - KVM-виртуализация; - Быстрые NVMe SSD; - Бесплатная защита от DDoS; - Управление через панель, API и Terraform; - Техподдержка 24/7. Запустите сервер за несколько минут! Попробовать #реклама 16+ selectel.ru О рекламодателе