C# | Вопросы собесов
前往频道在 Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads
显示更多5 006
订阅者
-324 小时
-87 天
+430 天
帖子存档
5 006
🤔 Когда использовать классы, а когда структуры?
Выбор между классами и структурами в C# зависит от ряда факторов, связанных с их поведением, производительностью и особенностями использования. Вот несколько рекомендаций по выбору между ними:
🚩Когда использовать
🟠Наследование и полиморфизм
Используйте классы, когда требуется наследование (один класс наследуется от другого) или полиморфизм (переменная может принимать значения различных типов, связанных наследованием).
public class Animal
{
public virtual void MakeSound() { }
}
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Bark");
}
}
🟠Сложные объекты
Если объект имеет сложное состояние или ведет себя как сущность с богатым набором методов и свойств, лучше использовать класс.
🟠Изменяемые объекты
Классы подходят для объектов, которые должны изменяться после создания, так как они являются ссылочными типами и изменения будут видны всем, кто имеет ссылку на объект.
🟠Управление памятью
Классы размещаются в куче и управляются сборщиком мусора, что может быть предпочтительно для объектов, которые долго живут или часто изменяются.
🚩Когда использовать
🟠Небольшие, неизменяемые объект
Структуры лучше использовать для небольших объектов, которые не содержат большого количества полей. Они должны быть неизменяемыми после создания (immutable).
🟠Значимые типы
Если объект представляет собой значение, которое логически является единым целым (например, координаты точки, комплексное число), структура подходит лучше.
🟠Производительность
Структуры могут быть эффективнее классов в ситуациях, где часто создаются и уничтожаются небольшие объекты, поскольку они хранятся на стеке и не требуют сборки мусора.
🟠Отсутствие наследования
Если нет необходимости в наследовании, структуры могут быть удобнее и проще для использования.
🚩Примеры
Использование класса
public class Car
{
public string Make { get; set; }
public string Model { get; set; }
public int Year { get; set; }
public void StartEngine()
{
Console.WriteLine("Engine started");
}
}
Использование структуры
public struct Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y)
{
X = x;
Y = y;
}
}
Ставь 👍 и забирай 📚 Базу знаний5 006
🤔 В чём отличие thread от task?
Thread — это поток ОС, а Task — абстракция для работы с асинхронным кодом, которая легче и управляется планировщиком.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 006
Получите бесплатный гайд по методологии OKR
Как замотивировать команду на успех?
Ставьте и достигайте амбициозных целей с помощью методологии OKR (Objectives and Key Results), внедрите целеполагание в своей команде или компании, мотивируйте сотрудников на прорыв и достигайте выдающихся результатов!
Из нашего бесплатного гайда вы узнаете:
- Что такое Objectives & Key Results
- Принципы OKR
- Примеры OKR
- Зачем OKR бизнесу
- OKR VS KPI, в чем разница
- Типичные ошибки при внедрении OKR
Скачать
#реклама 16+
productlab.ru
О рекламодателе
5 006
🤔 В чем отличие классов и структур?
Классы и структуры обладают рядом различий, которые влияют на их использование и поведение в коде.
🟠Тип данных
Классы: являются ссылочными типами (reference types). Переменные класса хранят ссылки на объекты, которые размещены в куче (heap).
Структуры: являются значимыми типами (value types). Переменные структуры хранят сами данные, и эти данные размещаются на стеке (stack) или в куче, если структура является частью объекта класса.
🟠Передача данных
Классы: при передаче объекта класса по значению (например, в метод) передается ссылка на объект, а не сам объект.
Структуры: при передаче структуры по значению передается копия всех данных структуры.
🟠Инициализация
Классы: могут иметь конструкторы по умолчанию и деструкторы. Класс может иметь инициализатор (конструктор), который задает начальные значения полей.
Структуры: не могут иметь явных конструкторов по умолчанию (без параметров). Все поля структуры должны быть инициализированы перед использованием, инициализация происходит автоматически.
🟠Наследование
Классы: поддерживают наследование (можно наследоваться от другого класса и реализовывать интерфейсы).
Структуры: не поддерживают наследование от других структур или классов, но могут реализовывать интерфейсы.
🟠Размер и производительность
Классы: из-за размещения в куче и необходимости сборки мусора (garbage collection) могут быть медленнее при частом создании и удалении объектов.
Структуры: часто эффективнее по памяти и времени выполнения для небольших объектов, которые создаются и уничтожаются часто, благодаря размещению на стеке.
🟠Индивидуальные особенности
Классы: поддерживают полиморфизм, виртуальные методы, события и делегаты.
Структуры: обычно применяются для небольших, неизменяемых объектов. Не могут содержать деструкторы и не поддерживают наследование, кроме интерфейсов.
🚩Пример
Класса
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Person(string name, int age)
{
Name = name;
Age = age;
}
}
Структуры
public struct Point
{
public int X { get; set; }
public int Y { get; set; }
public Point(int x, int y)
{
X = x;
Y = y;
}
}
Ставь 👍 и забирай 📚 Базу знаний5 006
🤔 Чем отличается метод Equal от ==?
Equals проверяет логическое равенство объектов, а == сравнивает ссылки для объектов и значения для примитивов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 006
Как экономить с Low-code от СберТеха
5 декабря в 11:00 приглашаем на бесплатный вебинар «Полный цикл low-code разработки под ключ: от базы данных до бизнес-процессов» от СберТеха.
Поделимся реальным опытом low-code разработки. Разберем кейсы для банковского, финтех-сегментов и не только. Покажем в реальном времени возможности продуктов Platform V Flow и Platform V DataSpace для low-code разработки. Расскажем о лучших практиках использования low-code инструментов.
А еще вы узнаете:
✅ Как решения, созданные с использованием low-code инструментов, выдерживают highload-нагрузки
✅ Как сэкономить ресурсы senior-разработчиков
✅ Как быстро и дешево создать прототип готового решения / enterprise-grade бэкенда приложений
Регистрируйтесь и приходите!
Зарегистрироваться
#реклама 16+
platformv.sbertech.ru
О рекламодателе
5 006
🤔 Как сравнить содержимое классов?
Сравнение содержимого объектов классов в C# можно выполнить несколькими способами. Наиболее распространенные методы включают переопределение методов
Equals и GetHashCode, а также реализацию интерфейса IEquatable<T> и использование библиотек для глубокого сравнения.
🟠Переопределение методов Equals и GetHashCode
Для сравнения содержимого классов можно переопределить методы Equals и GetHashCode. Это позволяет определить логику сравнения объектов на основе их полей.
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public override bool Equals(object obj)
{
if (obj == null || GetType() != obj.GetType())
return false;
Person other = (Person)obj;
return Name == other.Name && Age == other.Age;
}
public override int GetHashCode()
{
return HashCode.Combine(Name, Age);
}
}
🟠Реализация интерфейса IEquatable<T>
Позволяет улучшить производительность сравнения и сделать код более читаемым.
public class Person : IEquatable<Person>
{
public string Name { get; set; }
public int Age { get; set; }
public bool Equals(Person other)
{
if (other == null)
return false;
return Name == other.Name && Age == other.Age;
}
public override bool Equals(object obj)
{
if (obj == null || GetType() != obj.GetType())
return false;
return Equals((Person)obj);
}
public override int GetHashCode()
{
return HashCode.Combine(Name, Age);
}
}
🟠Использование библиотек для глубокого сравнения
Существуют библиотеки, такие как DeepEqual или Json.NET, которые позволяют выполнять глубокое сравнение объектов, автоматически сравнивая все их поля и свойства.
using KellermanSoftware.CompareNetObjects;
public class Program
{
public static void Main()
{
Person person1 = new Person { Name = "Alice", Age = 30 };
Person person2 = new Person { Name = "Alice", Age = 30 };
var compareLogic = new CompareLogic();
ComparisonResult result = compareLogic.Compare(person1, person2);
Console.WriteLine(result.AreEqual); // True
}
}
🟠Сравнение через сериализацию
Ещё один способ сравнить содержимое объектов - это сериализовать их в JSON и затем сравнить полученные строки.
using Newtonsoft.Json;
public class Program
{
public static void Main()
{
Person person1 = new Person { Name = "Alice", Age = 30 };
Person person2 = new Person { Name = "Alice", Age = 30 };
string json1 = JsonConvert.SerializeObject(person1);
string json2 = JsonConvert.SerializeObject(person2);
bool areEqual = json1 == json2;
Console.WriteLine(areEqual); // True
}
}
Ставь 👍 и забирай 📚 Базу знаний5 006
🤔 Есть ref out и boxing unboxing в чем их разница?
ref передаёт переменные по ссылке, out требует их инициализации в методе, boxing/unboxing преобразуют тип значения в объект и обратно.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 006
Яндекс Директ
Только этой осенью Яндекс Директ добавит до 20 000 ₽ на рекламу для вашего бизнеса ⚡
Узнать больше
#реклама
yandex.ru
О рекламодателе
5 006
🤔 Чем String отличается от других типов?
🟠Ссылочный тип
string является ссылочным типом, хотя по поведению он похож на значимый тип. Это означает, что переменная типа string содержит ссылку на объект строки, хранящийся в памяти, а не непосредственно данные.
🟠Иммутабельность (неизменяемость)
Объекты типа string неизменяемы. Это означает, что после создания строки её содержимое нельзя изменить. Любые операции, которые кажутся изменяющими строку (например, Replace, Substring), на самом деле создают новую строку.
string original = "Hello";
string modified = original.Replace('H', 'J'); // Создаётся новая строка "Jello"
🟠Поддержка операторов и методов
string поддерживает различные операторы и методы для работы с текстом. Например, оператор + для конкатенации строк, метод Substring для извлечения подстрок, метод Split для разбиения строки и т.д.
string hello = "Hello";
string world = "World";
string concatenated = hello + " " + world; // "Hello World"
🟠Интернирование строк
Для оптимизации памяти строки могут интернироваться. Это означает, что строки с одинаковым содержимым могут храниться в единственном экземпляре в пуле строк.
string a = "test";
string b = "test";
bool areEqual = object.ReferenceEquals(a, b); // True, потому что строки интернированы
🟠Специальная поддержка в языке
string имеет специальную поддержку на уровне языка. Например, строковые литералы в коде автоматически рассматриваются как объекты типа string.
string greeting = "Hello, world!";
Ставь 👍 и забирай 📚 Базу знаний5 006
🤔 Что такое стек?
Стек — это структура данных LIFO, где последний добавленный элемент извлекается первым, используется для вызовов функций и хранения локальных данных.
Чем отличается метод Equal от ==? Equals проверяет логическое равенство объектов, а == сравнивает ссылки для объектов и значения для примитивов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 006
Цены на все Серверы онлайн! Удобный конфигуратор!
Серверы STSS Flagman✅
Огромный выбор решений 👍
Консультации лучших экспертов 👌
Непревзойденный сервис ❤️
Получить предложение
#реклама
stss.ru
О рекламодателе
5 006
🤔 Как хранить типы данных без unboxing`а?
Существует два способа избежать упаковки и распаковки (boxing и unboxing) значимых типов при их хранении в коллекциях или использовании в других ситуациях, где тип данных не должен быть упакован в объект.
🟠Использование обобщений (generics)
Обобщения позволяют создавать коллекции и методы, которые работают с любыми типами данных без необходимости упаковки.
// Пример использования обобщённого списка для значимого типа int
List<int> numbers = new List<int>();
numbers.Add(10); // Добавление без упаковки
int number = numbers[0]; // Чтение без распаковки
🟠Использование специальных структур
В некоторых случаях для избежания упаковки можно создать специальные структуры, которые содержат необходимые данные и методы.
// Обобщённый метод для работы с любыми типами данных без упаковки
public T FindMax<T>(T a, T b) where T : IComparable<T>
{
return a.CompareTo(b) > 0 ? a : b;
}
// Использование метода для значимого типа int
int max = FindMax(3, 5);
Console.WriteLine(max); // Выведет: 5
Ставь 👍 и забирай 📚 Базу знаний5 006
Пишешь на C#?
Стань частью трансформации на хакатоне ЕВРАЗа 3.0 и создай реальный инструмент для одной из крупнейшей металлургической компании!
🦾 Создай будущее Code Review с ИИ!
Участвуй в нашем уникальном хакатоне по созданию ИИ-чатбота, который станет незаменимым помощником для разработчиков ЕВРАЗа! Выбери одно из направлений — Python, TypeScript или C#, и разработай решение для анализа кода на соответствие нашим стандартам.
Дата: 29 ноября – 1 декабря 2024.
Формат: онлайн.
Призовой фонд: 500.000 рублей.
🧑💻 Почему стоит принять участие:
– Прокачаешь свои скиллы и получишь обратную связь от ведущих экспертов отрасли.
– Разработаешь прорывное решение для автоматического Code Review с помощью ИИ.
– Получишь возможность стать частью масштабной команды ЕВРАЗа.
Если нет команды — поможем ее собрать!
🔸 Подай заявку до 25 ноября 23:59 МСК по ссылке.
5 006
🤔 Что такое ООП?
ООП (Объектно-Ориентированное Программирование) — это парадигма программирования, основанная на концепции объектов, которые объединяют данные и методы для их обработки. Основные принципы ООП включают инкапсуляцию, наследование, полиморфизм и абстракцию. ООП позволяет моделировать реальный мир с помощью классов и объектов, улучшая структуру и повторное использование кода. В C# все программы строятся на основе классов, что делает его строго объектно-ориентированным языком.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 006
Yandex DataLens Festival, 2-18 декабря
Для аналитиков, тимлидов, разработчиков, продактов и маркетологов.
Эксперты Яндекса поделятся опытом.
Онлайн и бесплатно
Зарегистрироваться
#реклама 16+
yandex.cloud
О рекламодателе
5 006
🤔 Где могут храниться значимые типы?
🚩Стек
Значимые типы обычно хранятся на стеке, когда они объявлены внутри метода. Это происходит потому, что стек обеспечивает быстрый доступ и автоматическое управление памятью.
void MyMethod()
{
int localVar = 10; // localVar хранится на стеке
}
🚩Куча
Значимые типы могут храниться в куче, если они являются частью объекта ссылочного типа. Например, если структура или переменная типа int является полем класса, то она будет храниться в куче вместе с объектом класса.
class MyClass
{
public int Number; // Number хранится в куче, потому что MyClass - ссылочный тип
}
MyClass obj = new MyClass();
obj.Number = 42;
Ставь 👍 и забирай 📚 Базу знаний5 006
Погрузитесь в мир высокотехнологичных решений и узнайте, как создать интерактивные веб-приложения с помощью SignalR! Регистрируйтесь на бесплатный вебинар: https://clck.ru/3EidYt?erid=LjN8KLnQv
1. Зачем использовать SignalR: Узнайте, какие задачи решает эта мощная технология и почему она необходима для современных приложений.
2. Концепции и работа SignalR: Поймем, как работают хабы, соединения, клиенты и серверы, а также механизмы протоколов WebSocket и Long Polling.
3. Создание интерактивного чата: Построим структуру простого чата. Напишем код для отправки и получения сообщений в реальном времени. Обработаем события, такие как подключение/отключение пользователей и оповещения о новых сообщениях.
Кому будет полезно:
1️⃣ .NET разработчикам: Расширьте свои навыки работы с ASP NET Core и создавайте интерактивные приложения.
2️⃣ Веб-разработчикам: Узнайте, как создавать быстро реагирующие и интерактивные веб-приложения.
🔥Не упустите шанс! Зарегистрируйтесь сейчас и станьте мастером создания интерактивных веб-приложений с SignalR!
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
5 006
– Помощь с pet-проектом
– Составление roadmap
– Общая консультация
– Проведение код-ревью и mock-собеседования
– Помощь с трудоустройством
Все это и многое другое может Ментор. Он обеспечит вам необходимый boost, ускорит и упростит вход в IT.
🔥 Здесь размещен список менторов, и многие из них предлагают бесплатную первую консультацию
5 006
– Помощь с pet-проектом
– Составление roadmap
– Общая консультация
– Проведение код-ревью и mock-собеседования
– Помощь с трудоустройством
Все это и многое другое может Ментор. Он обеспечит вам необходимый boost, ускорит и упростит вход в IT.
🔥 Здесь размещен список менторов, и многие из них предлагают бесплатную первую консультацию
