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
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
Boxing — это процесс преобразования значимого типа (например, int) в ссылочный тип object, что позволяет хранить значимые типы в структурах данных, предназначенных для объектов. Unboxing — это обратный процесс, когда объектный тип преобразуется обратно в значимый тип.


int number = 42; // Значимый тип
object boxed = number; // Boxing: преобразование в object
int unboxed = (int)boxed; // Unboxing: преобразование обратно в int


💡 Boxing и unboxing могут влиять на производительность, так как требуют дополнительных операций в памяти.

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

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51
Entity Framework — это объектно-реляционный маппер (ORM) для .NET, который упрощает взаимодействие с базами данных, позволяя работать с данными в виде объектов C#. Он автоматизирует задачи, связанные с доступом к данным, такие как создание SQL-запросов и управление соединениями, что ускоряет разработку и снижает количество ошибок.

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥5
Array и List<T> — это коллекции, но они имеют ключевые различия.

1️⃣ Array — это фиксированная по размеру коллекция, которая хранит элементы одного типа. Размер массива задается при создании и не может быть изменен. Это делает массивы быстрыми и эффективными по памяти, но менее гибкими.

int[] numbers = new int[5]; // Массив фиксированного размера


2️⃣ List<T> — это динамическая коллекция, которая может изменять размер. Она предоставляет методы для добавления, удаления и управления элементами, что делает ее более гибкой, но с небольшими накладными расходами по сравнению с массивами.

List<int> numbers = new List<int>(); // Динамический список
numbers.Add(1); // Добавление элемента


Array подходит для сценариев, где известен размер данных, а List<T> — для работы с изменяющимися данными.

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

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82
Синхронное программирование выполняет задачи последовательно, блокируя выполнение до завершения каждой операции, что может приводить к задержкам при ожидании ресурсов. Асинхронное программирование позволяет выполнять задачи параллельно, не блокируя поток, что улучшает отзывчивость приложений, особенно при работе с вводом-выводом или сетевыми запросами.

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1
using выполняет две основные функции: импорт пространств имен и управление ресурсами.

1️⃣ Первая функция — импорт пространств имен, что позволяет использовать классы и методы без полного указания их путей. Например:


using System; // Импорт пространства имен System

Console.WriteLine("Hello, World!"); // Использование метода из System


2️⃣ Вторая функция — управление ресурсами. using создает блок, который автоматически освобождает ресурсы, реализующие интерфейс IDisposable, по завершении блока. Это полезно для работы с файлами, потоками и соединениями с базой данных:


using (var file = new StreamWriter("file.txt")) {
// Запись в файл
file.WriteLine("Hello, World!");
} // Автоматическое закрытие файла


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

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

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

Thread thread = new Thread(() => Console.WriteLine("Running in a thread"));
thread.Start();


2⃣ Task — это более высокоуровневый абстрактный класс для асинхронных операций. Он использует пул потоков для выполнения задач и упрощает управление асинхронностью.

Task task = Task.Run(() => Console.WriteLine("Running in a task"));
task.Wait();


✔️ Task предпочтительнее для асинхронных операций, так как он предоставляет более удобные средства управления и синхронизации.

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

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥21
FileStream представляет собой поток, который используется для чтения и записи данных в файлы, обеспечивая доступ к файловой системе на уровне байтов. Он позволяет выполнять операции ввода-вывода с файлами, поддерживая асинхронные операции и управление буферизацией для повышения производительности.

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥21
Механизм обработки исключений позволяет управлять ошибками, возникающими во время выполнения программы, с помощью блоков try, catch и finally.

Блок try содержит код, который может вызвать исключение. Если исключение возникает, управление передаётся в соответствующий блок catch, где можно обработать ошибку.

try {
int result = 10 / 0; // Это вызовет исключение DivideByZeroException
} catch (DivideByZeroException ex) {
Console.WriteLine("Деление на ноль: " + ex.Message);
} finally {
Console.WriteLine("Этот блок выполняется всегда.");
}


Блок finally выполняется независимо от того, было ли исключение.

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

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