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

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

Backend собеседования - @frontview_backend
C# работа - @frontview_csharp_vacancies
Все IT вакансии - @frontview_all_vacancies
Download Telegram
Метод Dispose() реализует интерфейс IDisposable и используется для освобождения неуправляемых ресурсов, таких как файлы, сетевые соединения или память, выделенная вне CLR. Его вызов вручную или с помощью конструкции using гарантирует своевременное освобождение ресурсов, улучшая производительность и предотвращая утечки памяти.

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


using System;
using System.Threading.Tasks;

class Program {
static void Main() {
Task<int> task = Task.Run(() => {
// Выполняемая задача
return 42;
});

task.ContinueWith(t => {
// Продолжение после завершения задачи
Console.WriteLine($"Result: {t.Result}");
});

Console.ReadLine();
}
}


ContinueWith() позволяет организовать асинхронное выполнение, улучшая читаемость и управление потоками.

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

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

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71
👉 == и Equals — операторы сравнения, но работают по-разному. == проверяет равенство ссылок для ссылочных типов и значение для примитивных типов. Его поведение можно переопределить.


string a = "hello";
string b = "hello";
bool result = (a == b); // true, сравнивает значения строк


👉 Equals — метод, который сравнивает содержимое объектов. По умолчанию, для ссылочных типов проверяет равенство ссылок, но может быть переопределён для сравнения содержимого.


object obj1 = new object();
object obj2 = new object();
bool isEqual = obj1.Equals(obj2); // false, разные объекты


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

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍74
ASP.NET Core — это кроссплатформенный, высокопроизводительный фреймворк для создания современных облачных и веб-приложений, который является переработанной версией ASP.NET. Основные отличия включают модульную архитектуру, поддержку контейнеров и возможность работы на различных операционных системах, таких как Windows, macOS и Linux.

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍5
Queue и Stack — это структуры данных, которые управляют коллекциями элементов с разными принципами доступа.

Queue (очередь) работает по принципу FIFO (First In, First Out), где первый добавленный элемент будет первым извлечён. Это полезно для задач, где порядок обработки важен, например, в очередях задач.

Stack (стек) работает по принципу LIFO (Last In, First Out), где последний добавленный элемент будет первым извлечён. Это удобно для задач, связанных с отменой операций или рекурсией.


using System;
using System.Collections.Generic;

class Program {
static void Main() {
// Создание и использование очереди
Queue<int> queue = new Queue<int>();
queue.Enqueue(1);
queue.Enqueue(2);
Console.WriteLine(queue.Dequeue()); // Выводит 1

// Создание и использование стека
Stack<int> stack = new Stack<int>();
stack.Push(1);
stack.Push(2);
Console.WriteLine(stack.Pop()); // Выводит 2
}
}


Queue и Stack обеспечивают эффективное управление элементами в различных сценариях.

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

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

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2
▶️ В C# конструкция обработки исключений состоит из трех основных блоков: try, catch и finally.

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

Блок catch перехватывает исключение и позволяет выполнить код для обработки ошибки. Можно указать специфичный тип исключения для обработки или использовать базовый класс Exception.

Блок finally выполняется в любом случае, независимо от того, произошло исключение или нет. Этот блок обычно используется для освобождения ресурсов.


try
{
// Ошибочный код
int result = 10 / int.Parse("0");
}
catch (DivideByZeroException ex)
{
// Обработка деления на ноль
Console.WriteLine("Ошибка: деление на ноль.");
}
catch (FormatException ex)
{
// Обработка неверного формата
Console.WriteLine("Ошибка: неверный формат числа.");
}
finally
{
// Код, выполняющийся всегда
Console.WriteLine("Завершение блока try-catch-finally.");
}


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

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72
LINQ (Language Integrated Query) позволяет выполнять запросы к коллекциям, базам данных и другим источникам данных напрямую в коде с использованием синтаксиса, похожего на SQL. Он упрощает работу с данными, предоставляя единый подход для фильтрации, сортировки и преобразования данных.

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

В C# инкапсуляция достигается с помощью модификаторов доступа:
- private: Доступ только внутри класса.
- protected: Доступ внутри класса и производных классов.
- public: Доступ из любого места.
- internal: Доступ в пределах сборки.


class Account {
private decimal balance; // Скрытое поле

public void Deposit(decimal amount) {
if (amount > 0) balance += amount; // Контролируемое изменение
}

public decimal GetBalance() {
return balance; // Контролируемый доступ
}
}


В этом примере поле balance скрыто, а методы Deposit и GetBalance предоставляют контролируемый доступ к нему. Инкапсуляция повышает безопасность и упрощает поддержку кода.

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

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍111
CLR управляет памятью для объектов с помощью автоматической сборки мусора (Garbage Collection), которая освобождает память, когда объекты больше не используются. Память выделяется в управляемой куче, а сборщик мусора отслеживает ссылки на объекты и удаляет те, которые недостижимы.|

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2
🛑 Деструкторы — это специальные методы, которые автоматически вызываются сборщиком мусора (GC) перед удалением объекта из памяти. Они используются для освобождения неуправляемых ресурсов, таких как файловые дескрипторы или сетевое подключение.

Деструктор объявляется с использованием синтаксиса ~ClassName и не может иметь параметров или модификаторов доступа. Он вызывается не сразу, а в момент, когда GC решит освободить память.


class ResourceHolder
{
~ResourceHolder()
{
// Освобождение неуправляемых ресурсов
}
}


Деструкторы не гарантируют моментального вызова, поэтому для управления ресурсами рекомендуется использовать интерфейс IDisposable и паттерн Dispose. Это позволяет явно освобождать ресурсы, не дожидаясь сборки мусора.

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

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

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥3
🖇Ключевые слова ref и out используются для передачи аргументов по ссылке, но имеют важные различия.

- ref: требует, чтобы переменная была инициализирована перед передачей в метод. Метод может как читать, так и изменять значение переданной переменной.

- out: не требует инициализации переменной перед передачей. Метод обязан присвоить значение переменной перед завершением, так как она предназначена только для вывода данных.

Пример:

void ModifyWithRef(ref int x) {
x += 10; // Может читать и изменять значение
}

void ModifyWithOut(out int y) {
y = 20; // Обязан присвоить значение
}


ref используется, когда нужно изменить существующее значение, а out — когда метод должен вернуть новое значение.

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

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1022
LINQ to XML — это компонент, который позволяет работать с XML-документами с использованием синтаксиса LINQ. Он предоставляет удобные методы для создания, чтения, модификации и запросов к XML-данным, упрощая работу с ними.

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥3
Enum (перечисление) — это тип данных, который позволяет задать набор именованных констант. Используется для улучшения читаемости кода и предотвращения ошибок, связанных с использованием "магических чисел".


enum DayOfWeek
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}


В этом примере создается перечисление DayOfWeek, представляющее дни недели. Каждый элемент имеет числовое значение, начиная с 0 (Monday = 0, Tuesday = 1 и т.д.).


DayOfWeek today = DayOfWeek.Friday;
if (today == DayOfWeek.Friday)
{
Console.WriteLine("Сегодня пятница!");
}


Здесь переменной today присваивается значение Friday, и выполняется проверка на соответствие этому значению. Использование enum делает код более понятным и безопасным.

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

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍111
Task и Task<T> представляют асинхронные операции. Task используется для операций, которые не возвращают результат, а Task<T> — для операций, возвращающих результат типа T.


Task.Run(() =>
{
Console.WriteLine("Асинхронная операция без возврата значения");
});


Здесь создается задача, которая выполняется асинхронно и не возвращает результат.


Task<int> task = Task.Run(() =>
{
return 42;
});
int result = await task;
Console.WriteLine(result);


В этом примере Task<int> используется для асинхронной операции, возвращающей число. Результат можно получить с помощью await.

Task и Task<T> упрощают работу с асинхронным кодом, позволяя эффективно управлять потоками и ресурсами.

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

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83👀1
DbContext представляет сеанс работы с базой данных в Entity Framework, позволяя выполнять запросы и сохранять изменения. Он управляет подключением к БД, отслеживает изменения объектов и обеспечивает их синхронизацию с базой данных.

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


try
{
int result = 10 / int.Parse("0");
}
catch
{
Console.WriteLine("Произошла ошибка");
}


В этом примере, если возникает исключение (например, деление на ноль или ошибка парсинга), выполнение переходит в блок catch, где выводится сообщение об ошибке.

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

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

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91
Dependency Injection (DI) — это паттерн проектирования, который позволяет внедрять зависимости в классы, вместо того чтобы создавать их внутри, что повышает гибкость и тестируемость кода. В ASP.NET Core DI реализован на уровне фреймворка через встроенный контейнер, который регистрирует сервисы в методе ConfigureServices и автоматически внедряет их в контроллеры, middleware и другие компоненты.

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