C# собеседования
754 subscribers
104 photos
222 links
Подготовка к собеседованиям на позицию C#-разработчик

Еще больше на сайте https://frontview-it.ru

Backend собеседования - @frontview_backend
C# работа - @frontview_csharp_vacancies
Все IT вакансии - @frontview_all_vacancies
Download Telegram
Композиция и агрегация — это два типа отношений между объектами в объектно-ориентированном программировании.

➡️ Композиция — это сильная связь, при которой один объект владеет другим и отвечает за его жизненный цикл. Если контейнерный объект уничтожается, то и содержащийся объект тоже уничтожается. Пример: класс "Автомобиль" и класс "Двигатель".

➡️ Агрегация — это более слабая связь, где объект может существовать независимо от контейнера. Пример: класс "Университет" и класс "Студент". Студент может существовать вне университета.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2
async и await — ключевые слова, которые упрощают работу с асинхронным программированием.

1️⃣ async используется для обозначения метода как асинхронного, что позволяет выполнять операции без блокировки основного потока. Такой метод возвращает Task или Task<T>.

2️⃣ await применяется внутри асинхронного метода для приостановки выполнения до завершения асинхронной операции. Это позволяет писать асинхронный код, который выглядит как синхронный, улучшая читаемость и поддерживаемость.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51🤔1
✏️ Модификатор required используется для указания обязательных свойств в типах с инициализаторами. Он гарантирует, что определенные свойства будут инициализированы при создании объекта, предотвращая ошибки, связанные с отсутствием значений.

public class Person
{
public required string Name { get; init; }
public int Age { get; init; }
}

// Использование
var person = new Person { Name = "Alice", Age = 30 }; // Корректно
var personWithoutName = new Person { Age = 25 }; // Ошибка: Name обязателен


Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥4
Для сериализации и десериализации объектов в C# используется пространство имен System.Runtime.Serialization. Один из популярных способов — использование DataContractSerializer.

🔘Сериализация: создается объект DataContractSerializer, которому передается тип объекта. Затем вызывается метод WriteObject, который записывает объект в поток.

🔘Десериализация: используется метод ReadObject, который считывает объект из потока.

using System.Runtime.Serialization;
using System.IO;

[DataContract]
class Person
{
[DataMember]
public string Name { get; set; }
}

var person = new Person { Name = "John" };
var serializer = new DataContractSerializer(typeof(Person));

using (var stream = new FileStream("person.xml", FileMode.Create))
{
serializer.WriteObject(stream, person);
}

using (var stream = new FileStream("person.xml", FileMode.Open))
{
var deserializedPerson = (Person)serializer.ReadObject(stream);
}


Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍63
🔘 Наследование от базового класса Object является фундаментальной концепцией, поскольку все классы неявно наследуются от Object, даже если это не указано явно. Это означает, что каждый класс автоматически получает набор методов, определённых в Object, таких как ToString(), Equals(), GetHashCode() и GetType().

😊 Метод ToString() возвращает строковое представление объекта, что полезно для отладки и логирования. Equals() позволяет сравнивать объекты на равенство, а GetHashCode() возвращает числовое значение, используемое в хеш-таблицах. GetType() предоставляет информацию о типе объекта во время выполнения.

🔘 Наследование от Object обеспечивает базовую функциональность и полиморфизм, позволяя использовать объекты разных типов в унифицированной манере. Это также упрощает работу с коллекциями, такими как ArrayList, которые могут хранить объекты любого типа.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1
😎 Ключевое слово static используется для объявления членов класса, которые принадлежат самому классу, а не его экземплярам. Такие методы и свойства можно вызывать без создания объекта класса. Например:

public static class MathUtilities
{
public static int Add(int a, int b)
{
return a + b;
}
}


😎 Слово readonly применяется для полей, значения которых могут быть установлены только один раз — либо при объявлении, либо в конструкторе класса. Это обеспечивает неизменяемость данных после инициализации. Пример:

public class Configuration
{
public readonly string ConnectionString;

public Configuration(string connectionString)
{
ConnectionString = connectionString;
}
}


Использование static и readonly помогает создавать более предсказуемый и безопасный код, улучшая его читаемость и поддержку.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍101
Слабые ссылки (Weak References) позволяют ссылаться на объекты, не препятствуя их сборке мусора. Это полезно, когда необходимо отслеживать объект, но не удерживать его в памяти, если он больше не используется.

🟢Слабая ссылка создается с помощью класса WeakReference. Например:

WeakReference weakRef = new WeakReference(someObject);


🟢Чтобы получить объект, нужно проверить его доступность:

if (weakRef.IsAlive)
{
var obj = weakRef.Target;
}


Если объект был собран, weakRef.Target вернет null. Слабые ссылки помогают управлять памятью, избегая утечек.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥1
🟠 Анонимные методы позволяют создавать методы без явного объявления. Они используются для создания делегатов и упрощают код, когда метод нужен только в одном месте. Анонимные методы могут захватывать переменные из окружающего контекста, что делает их мощным инструментом для работы с событиями и обратными вызовами.

// Создание делегата с анонимным методом
Action<int> printSquare = delegate(int x)
{
// Вывод квадрата числа
Console.WriteLine(x * x);
};

// Вызов анонимного метода
printSquare(5); // Вывод: 25


🟡 Анонимные методы часто заменяются лямбда-выражениями, которые более лаконичны и читаемы.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
📌Слабые события — это механизм, позволяющий избежать утечек памяти, связанных с событиями. В стандартной реализации событий подписчики удерживаются сильными ссылками, что может препятствовать сборке мусора для объектов, которые больше не используются.

🟡 Слабые события используют слабые ссылки на обработчики, позволяя сборщику мусора освобождать объекты, даже если они подписаны на события.

public class WeakEventSource<TEventArgs> where TEventArgs : EventArgs {
private readonly List<WeakReference<EventHandler<TEventArgs>>> handlers = new();

public void Subscribe(EventHandler<TEventArgs> handler) {
handlers.Add(new WeakReference<EventHandler<TEventArgs>>(handler));
}

public void Raise(object sender, TEventArgs e) {
handlers.RemoveAll(h => !h.TryGetTarget(out _));
foreach (var weakHandler in handlers) {
if (weakHandler.TryGetTarget(out var handler)) {
handler(sender, e);
}
}
}
}


Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2
C# собеседования pinned «ℹ️Подписывайся на наши новые каналы! 🖥 JS собеседования 🖥 Backend собеседования»
Сборщик мусора можно вызвать вручную с помощью метода GC.Collect(), однако это редко оправдано, так как сборщик мусора оптимизирован для автоматического управления памятью. Ручной вызов может быть полезен в ситуациях, когда необходимо освободить значительное количество памяти перед выполнением ресурсоемкой операции, но следует использовать его с осторожностью, чтобы избежать снижения производительности.

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍3
Интерфейс IDisposable используется для освобождения неуправляемых ресурсов, таких как файлы, сетевые соединения и другие ресурсы, которые требуют явного освобождения. Реализация IDisposable включает метод Dispose, который освобождает ресурсы.

public class ResourceHolder : IDisposable
{
private bool disposed = false;

public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}

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

~ResourceHolder()
{
Dispose(false);
}
}


IDisposable позволяет управлять ресурсами, предотвращая утечки памяти.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82
Класс Parallel из пространства имен System.Threading.Tasks упрощает многопоточность, позволяя выполнять циклы и вызовы методов параллельно.

1⃣ Parallel.For используется для параллельного выполнения цикла for. Он автоматически распределяет итерации между потоками.

Parallel.For(0, 10, i => {
Console.WriteLine($"Processing {i}");
});


2⃣ Parallel.ForEach аналогичен, но применяется к коллекциям.

var items = new List<int> { 1, 2, 3, 4, 5 };
Parallel.ForEach(items, item => {
Console.WriteLine($"Processing {item}");
});


3⃣ Parallel.Invoke позволяет выполнять несколько действий одновременно.

Parallel.Invoke(
() => Console.WriteLine("Task 1"),
() => Console.WriteLine("Task 2")
);


Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥1
➡️ Полиморфизм позволяет объектам обрабатывать вызовы методов по-разному в зависимости от их конкретного типа. Это достигается через наследование и интерфейсы.

➡️ Ключевой механизм полиморфизма — виртуальные методы. Базовый класс объявляет метод как virtual, а производные классы могут переопределять его с помощью override.

public class Animal
{
public virtual void Speak()
{
// Базовая реализация
Console.WriteLine("Animal speaks");
}
}

public class Dog : Animal
{
public override void Speak()
{
// Переопределение метода
Console.WriteLine("Dog barks");
}
}


➡️ Полиморфизм позволяет использовать объекты производных классов через ссылки на базовые классы, сохраняя их уникальное поведение.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14💯1
Array имеет фиксированный размер, определяемый при создании, и не может быть изменен, что делает его более эффективным по памяти, но менее гибким. List — это динамическая коллекция, которая автоматически изменяет свой размер при добавлении или удалении элементов, предоставляя больше гибкости и удобства в использовании.

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥3🤔1
CLR (Common Language Runtime) — это виртуальная машина, являющаяся частью .NET Framework, которая управляет выполнением программ, написанных на языках, поддерживающих .NET, таких как C#. Основные функции CLR включают:

1️⃣ Управление памятью: автоматическое управление памятью через сборку мусора.
2️⃣ Обеспечение безопасности: проверка типов и защита кода.
3️⃣ Обработка исключений: централизованная обработка ошибок.
4️⃣ Поддержка многопоточности: управление потоками выполнения.

CLR позволяет разрабатывать приложения с высокой производительностью и безопасностью, абстрагируя детали низкоуровневого управления ресурсами.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1
Сборка мусора в .NET автоматически управляет памятью, освобождая её от объектов, которые больше не используются приложением, тем самым предотвращая утечки памяти. Этот процесс включает в себя три поколения объектов, где объекты, которые переживают сборку мусора, перемещаются в более высокое поколение, что оптимизирует производительность за счёт реже проводимой очистки для долгоживущих объектов.

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥1
🖇 Делегат — это тип, который представляет ссылки на методы с определенной сигнатурой. Делегаты позволяют инкапсулировать метод в объект и передавать его как параметр другим методам. Это особенно полезно для реализации событий и обратных вызовов.


// Объявление делегата, который принимает два целых числа и возвращает целое число
public delegate int Operation(int x, int y);

// Метод, соответствующий делегату
public int Add(int a, int b)
{
return a + b;
}

// Использование делегата
Operation op = Add;
int result = op(3, 4); // Вызов метода через делегат


✔️ Делегаты обеспечивают гибкость и расширяемость кода, позволяя динамически изменять поведение программы.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥1
⚡️ Паттерн Singleton гарантирует, что класс имеет только один экземпляр, и предоставляет глобальную точку доступа к нему. Это полезно для управления ресурсами или состоянием, которые должны быть уникальными в приложении.


using System;

// Класс Singleton
public class Singleton {
private static Singleton instance;

// Приватный конструктор
private Singleton() {}

// Метод для получения единственного экземпляра
public static Singleton Instance {
get {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}

public void ShowMessage() {
Console.WriteLine("Singleton instance");
}
}

class Program {
static void Main() {
Singleton singleton = Singleton.Instance;
singleton.ShowMessage(); // Вывод: Singleton instance
}
}


🟢 Конструктор Singleton закрыт, чтобы предотвратить создание новых экземпляров. Метод Instance обеспечивает доступ к единственному экземпляру.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🤔2🤩1
CTS (Common Type System) в .NET определяет, как типы данных должны быть объявлены, использованы и управляемы в среде выполнения, обеспечивая совместимость между языками. CLS (Common Language Specification) представляет собой набор правил и ограничений, которые обеспечивают совместимость между различными языками .NET, позволяя им взаимодействовать друг с другом.

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2