C# | Вопросы собесов
رفتن به کانال در Telegram
Cайт easyoffer.ru Реклама @easyoffer_adv ВП @easyoffer_vp Тесты t.me/+nebTPWgpeGs1OWFi Задачи t.me/+Xy-0H7xKlgo0NDVi Вакансии t.me/+BQFHXZQ0zrViNGIy
نمایش بیشتر5 047
مشترکین
-824 ساعت
-137 روز
-2330 روز
آرشیو پست ها
5 047
Научим подростков 13-18 лет создавать телеграм-ботов!
Бесплатный мастер-класс от ведущего ИТ-ВУЗа страны - Университета Иннополис.
Предоставьте ребёнку шанс получить практические навыки программирования от лучших педагогов!
⚡За 1.5 часа научим ребёнка с нуля создавать чат-бота, который умеет выдавать сведения о погоде в указанном городе и сопровождать данные изображением!
Дети получат практические навыки работы на языке Python, которые смогут самостоятельно использовать для реализации своих идей в дальнейшем.
Не упустите возможность предложить ребёнку новое интересное и полезное хобби, которое, возможно, станет основой востребованной професии в будущем!
Регистрируйтесь на бесплатный мастер-класс.
Количество мест ограничено.
Узнать больше
#реклама 16+
progmatica.innopolis.university
О рекламодателе
5 047
🤔 Когда при вызове exception не зовутся деструкторы?
Деструкторы не вызываются, если исключение выбрасывается из конструктора, и объект не успел быть полностью созданным.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚Базу знаний
5 047
Системный администратор Linux с нуля
Бесплатный курс от Selectel
Старт — 1 марта
Освойте администрирование Linux на SelectOS.
После курса вы сможете:
- управлять инфраструктурой на базе Linux;
- работать с командной строкой и основными утилитами;
- управлять пользователями, файлами и правами доступа;
- настраивать сети, SSH-соединения и мониторинг системы;
- управлять пакетами и обновлениями программного обеспечения;
- анализировать логи и устранять инциденты.
Смотреть
#реклама 16+
promo.selectel.ru
О рекламодателе
5 047
🤔 В чём разница абстрактного класса и интерфейса?
Абстрактный класс и интерфейс - это два механизма, которые обеспечивают наследование и полиморфизм, но они используются по-разному и для разных целей.
Представляет собой класс, от которого нельзя создать экземпляр напрямую. Он предназначен для описания общего поведения и состояния своих подклассов. Абстрактные классы могут содержать реализацию некоторых методов и свойств. Это означает, что абстрактный класс может содержать как абстрактные методы (без реализации), так и методы с реализацией. Подклассы абстрактного класса обязаны реализовать все абстрактные методы, но они также наследуют реализованные методы и свойства.
public abstract class Животное
{
public abstract void Есть(); // Абстрактный метод, должен быть реализован в наследнике.
public void Дышать() // Метод с реализацией, наследуется всеми наследниками.
{
Console.WriteLine("Дыхание");
}
}
Интерфейс определяет контракт, который классы или структуры могут реализовывать. Интерфейсы могут содержать объявления методов, свойств, событий, но не их реализации. Класс или структура, реализующие интерфейс, должны предоставить реализацию для всех его членов. Важно отметить, что класс может реализовывать несколько интерфейсов, что обеспечивает форму множественного наследования.
public interface IЖивотное
{
void Есть(); // Метод, который должен быть реализован в классе.
}
🚩Основные различия
🟠Наследование
Класс может наследовать только от одного абстрактного класса (из-за ограничения одиночного наследования в C#), но может реализовывать множество интерфейсов.
🟠Члены
Абстрактные классы могут содержать реализацию методов и поля данных, в то время как интерфейсы могут содержать только объявления методов и свойств (без полей и реализации).
🟠Конструкторы и деструкторы
Абстрактные классы могут иметь конструкторы и деструкторы, в то время как интерфейсы - нет.
🟠Модификаторы доступа
В интерфейсах все члены по умолчанию являются public, и вы не можете указать другой модификатор доступа. В абстрактных классах вы можете использовать различные модификаторы доступа.
Ставь 👍 и забирай 📚 Базу знаний5 047
Курс "Дизайн карточек для WB и Ozon". Бесплатно и с нуля
Дизайнер карточек для маркетплейсов — востребованная и доходная профессия 💰
Научись ей бесплатно!
- Бесплатный доступ к курсу
- Разбор ДЗ от наставника
- Мощные кейсы в портфолио
Узнать больше
#реклама 16+
yudaevschool24.online
О рекламодателе
5 047
🤔 Чем отличается выброс исключения от аборта?
Исключение позволяет обработать ошибку и продолжить выполнение программы. Абортивное завершение (abort) немедленно завершает процесс без возможности восстановления.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚Базу знаний
5 047
🤔 Чем отличается ссылочный и значимый тип?
В C# все типы делятся на значимые (value types) и ссылочные (reference types). Основное различие заключается в том, как данные хранятся в памяти и как передаются в методы.
🚩Значимые типы (Value Types)
Хранятся в стеке (Stack).
Передаются по значению (копируются).
Каждый объект имеет свою копию данных.
Не могут быть
null (если не использовать Nullable<T>).
🚩Примеры значимых типов:
- int, double, bool, char
- struct, enum, DateTime
int a = 10;
int b = a; // Копия значения
b = 20;
Console.WriteLine(a); // 10 (не изменился)
Console.WriteLine(b); // 20
🚩Ссылочные типы (Reference Types)
Хранятся в куче (Heap), а в стеке лежит ссылка на объект.
Передаются по ссылке (не копируются, а передаётся адрес).
Несколько переменных могут указывать на один и тот же объект.
Могут быть null (если не инициализированы).
class Person
{
public string Name;
}
Person p1 = new Person { Name = "Alice" };
Person p2 = p1; // p2 и p1 указывают на один объект
p2.Name = "Bob";
Console.WriteLine(p1.Name); // Bob (изменилось!)
Console.WriteLine(p2.Name); // Bob
Ставь 👍 и забирай 📚 Базу знаний5 047
🤔 Что происходит с памятью процесса, когда мы его fork-аем в Linux?
При fork() происходит копирование таблицы страниц (Copy-on-Write), но физическая память копируется только при изменении страниц.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚Базу знаний
5 047
🤔 В чём отличие ArrayList и List?
В C# есть две похожие коллекции:
ArrayList(старый подход) и List<T> (современный вариант). Основные отличия:
🚩Пример кода
ArrayList arrayList = new ArrayList();
arrayList.Add(1);
arrayList.Add("Hello"); // Ошибки возможны при приведении типов
List<int> list = new List<int>();
list.Add(1); // Только int, безопаснее
Ставь 👍 и забирай 📚 Базу знаний5 047
Застрял на месте и не знаешь, как расти дальше? Тебе знакомо это ощущение?
Ты уже не джун и таски щёлкаешь как орешки. Ты выполняешь свою работу на совесть, а в конце года — всё то же: "спасибо", максимум небольшая индексация, которая уходит в минус на фоне инфляции.
"Почему меня не растят?" — задаёшь себе этот вопрос? Всё просто: ты дорос до точки, где одних технических навыков недостаточно. Карьера разработчика не растёт сама по себе, если ты не качаешь другие, критически важные навыки.
Тот самый "левел-ап" начинается с:
◈ Грамотной самопрезентации
◈ Умения собрать сильное резюме
◈ Понимания, как проходить собеседования так, чтобы брать офферы с x2 к текущей зп
Если хочешь получить конкретные ответы на вопрос "Как?" и увидеть реальный чек-лист для роста своей доходности, подписывайся на мой канал.
Я — Роман Смолейчук, CTO в финтехе. На своем канале делюсь проверенными методами и лайфхаками для роста, которые я накопил за 11+ лет в IT. То, чему я учу подписчиков и своих учеников, приносит результаты за 2-3 месяца.
Хочешь перейти в категорию разработчиков, которые растут не раз в 5 лет, а буквально за квартал? Тогда тебе сюда 🔥
В закрепе канала уже ждёт пошаговый план, чтобы ты сэкономил время и не тратил месяцы в пустую. Всё по делу: взял, внедрил, вырос.
Подписывайся. Это твой старт к новым доходам 🚀
5 047
🤔 Чем отличается «один к одному» от «многие ко многим»?
Связь «один к одному» подразумевает, что у каждой записи есть только одна связанная запись в другой таблице. Связь «многие ко многим» позволяет одной записи соответствовать множеству записей в другой таблице, требуя дополнительного слоя связи через промежуточную сущность.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 047
🤔 Что из себя представляет библиотека dependency injectuion?
Dependency Injection (DI) — это паттерн проектирования, который помогает управлять зависимостями в приложении, делая код более гибким, тестируемым и поддерживаемым. Библиотека DI предоставляет механизмы для внедрения зависимостей автоматически, без явного создания экземпляров объектов в коде.
🚩Зачем нужна библиотека DI?
Без DI мы часто создаем объекты внутри классов вручную, что приводит к жесткой связности (tight coupling). Это делает код менее гибким и сложным в тестировании. DI помогает:
Разделить зависимости: объекты получают зависимости извне, а не создают их самостоятельно.
Облегчить тестирование: можно подставлять мок-объекты вместо реальных зависимостей.
Сделать код более гибким: легко подменять реализации зависимостей.
🚩Как работает DI?
В .NET Core и .NET 5+ встроена своя Microsoft.Extensions.DependencyInjection, но можно использовать сторонние библиотеки, такие как Autofac, Ninject, Unity.
Регистрация зависимостей
Внедрение зависимостей
Жизненный цикл зависимостей
🚩Пример DI в C# (.NET Core)
Создадим интерфейс и его реализацию
public interface IMessageService
{
void SendMessage(string message);
}
public class EmailService : IMessageService
{
public void SendMessage(string message)
{
Console.WriteLine($"Отправка Email: {message}");
}
}
Зарегистрируем зависимость в DI-контейнере
var serviceProvider = new ServiceCollection()
.AddSingleton<IMessageService, EmailService>()
.BuildServiceProvider();
Получим зависимость через DI
var messageService = serviceProvider.GetService<IMessageService>();
messageService.SendMessage("Привет, DI!");
Ставь 👍 и забирай 📚 Базу знаний5 047
🤔 Как реализовать «многие ко многим»?
Связь «многие ко многим» требует создания промежуточной таблицы, которая содержит пары идентификаторов связанных объектов. В объектно-ориентированном программировании используются коллекции объектов, хранящие ссылки друг на друга, что обеспечивает гибкость взаимодействия.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 047
🤔 Что делает 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` за кулисами?
Выделение памяти в куче (для классов) или в стеке (для структур).
Вызов конструктора класса или структуры.
Возвращение ссылки на объект (для классов) или самого объекта (для структур).
Ставь 👍 и забирай 📚 Базу знаний5 047
🤔 Как реализовать «один ко многим»?
Связь «один ко многим» реализуется через внешний ключ в таблице, хранящей несколько записей, относящихся к одной сущности. В объектно-ориентированном программировании один объект может содержать список связанных объектов, что отражает логическую связь между ними.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 047
🤔 Что такое value-type?
Value Type (тип значения) – это тип данных, который хранит своё значение непосредственно в памяти (обычно в стеке), а не ссылку на объект в куче (heap), как это делает ссылочный тип (Reference Type).
🚩Какие типы данных являются Value Type?
Простые типы (
int, double, bool, char, byte, float, decimal, etc.)
Структуры (struct)
Перечисления (enum)
Nullable-значения (int?, double?)
🚩Пример Value Type
int a = 10;
int b = a; // Значение копируется
b = 20;
Console.WriteLine(a); // 10 (остался неизменным)
Console.WriteLine(b); // 20
🚩Где хранятся Value Type?
Value Type обычно хранятся в стеке (stack) – это быстрая область памяти.
Если структура (struct) является частью объекта (который хранится в куче), то её значение хранится внутри объекта в куче.
struct Point
{
public int X;
public int Y;
}
class Program
{
static void Main()
{
Point p1 = new Point { X = 5, Y = 10 };
Point p2 = p1; // Копирование структуры (создаётся новый экземпляр)
p2.X = 20;
Console.WriteLine(p1.X); // 5 (остался неизменным)
Console.WriteLine(p2.X); // 20
}
}
🚩Когда использовать Value Type?
Если данные небольшие и часто изменяются – struct
Если объект недолговечный и не требует сложного поведения
Если производительность важна – Value Type быстрее из-за работы в стеке
Ставь 👍 и забирай 📚 Базу знаний5 047
🤔 Как по ключу получить значение?
Для получения значения по ключу в коллекциях, таких как Dictionary, используется индексатор, например, dictionary[key]. Чтобы избежать исключений при отсутствии ключа, можно использовать метод TryGetValue.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 047
🤔 Какие объекты живут в нулевом поколении?
В 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 047
🤔 Что нужно сделать, чтобы передать класс в качестве ключа?
Класс должен переопределять методы Equals и GetHashCode, чтобы гарантировать уникальность ключей в коллекциях, таких как Dictionary или HashSet.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 047
🤔 Какие минусы есть у индексов с точки зрения оптимизации?
Индексы в базах данных, таких как SQL Server, MySQL или PostgreSQL, существенно улучшают производительность запросов, особенно для операций поиска, сортировки и фильтрации. Однако у индексов есть и минусы, которые могут негативно сказаться на производительности и других аспектах работы базы данных.
🟠Увеличение времени записи
Индексы замедляют операции вставки (
INSERT), обновления (UPDATE) и удаления (DELETE), так как при каждом изменении данных необходимо также обновлять индексы.
Вставка: При вставке новой записи нужно обновить все соответствующие индексы.
Обновление: При обновлении записи могут изменяться индексируемые колонки, что требует обновления индексов.
Удаление: При удалении записи нужно удалить соответствующие записи из индексов.
🟠Дополнительное использование памяти и дискового пространства
Индексы занимают дополнительное пространство на диске и в оперативной памяти. Чем больше индексов на таблице, тем больше требуется места для их хранения.
Дисковое пространство: Каждому индексу требуется место на диске для хранения его данных.
Память: Индексы занимают память при их использовании, особенно в случае часто запрашиваемых индексов, которые кэшируются в оперативной памяти.
🟠Замедление операций массовой загрузки данных
При массовой загрузке данных, например, при использовании операций LOAD DATA или BULK INSERT, наличие индексов замедляет процесс, так как индексы должны обновляться по мере добавления каждой записи.
🟠Проблемы с фрагментацией
Индексы могут фрагментироваться, особенно если в таблице часто выполняются операции вставки, обновления и удаления. Фрагментация индексов приводит к ухудшению производительности запросов.
Фрагментация: При частых изменениях данных индексы могут становиться фрагментированными, что увеличивает время доступа к данным.
Реорганизация: Периодически индексы нужно реорганизовывать или перестраивать, что требует дополнительных ресурсов и времени.
🟠Сложность управления
Управление индексами требует дополнительного администрирования и мониторинга. Нужно следить за эффективностью индексов, удалять неиспользуемые индексы и создавать новые по мере изменения запросов и структуры данных.
🟠Перекрестные индексы
Наличие нескольких индексов на одной таблице может привести к конфликтам при планировании запросов. Оптимизатор запросов может выбирать менее эффективные индексы, что ухудшает производительность.
🟠Влияние на производительность при ошибках в проектировании
Плохо спроектированные индексы могут негативно повлиять на производительность запросов. Например, индексы на часто изменяемых колонках или слишком большое количество индексов могут привести к значительным издержкам при обновлении данных.
🚩Пример ситуации
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
DepartmentID INT,
Salary DECIMAL(10, 2)
);
CREATE INDEX idx_firstname ON Employees(FirstName);
CREATE INDEX idx_lastname ON Employees(LastName);
CREATE INDEX idx_department ON Employees(DepartmentID);
🚩Минусы
➖Вставка данных
INSERT INTO Employees (EmployeeID, FirstName, LastName, DepartmentID, Salary)
VALUES (1, 'John', 'Doe', 10, 60000.00);
➖Обновление данных
UPDATE Employees
SET Salary = Salary * 1.05
WHERE DepartmentID = 10;
Ставь 👍 и забирай 📚 Базу знаний
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
