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

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

Backend собеседования - @frontview_backend
C# работа - @frontview_csharp_vacancies
Все IT вакансии - @frontview_all_vacancies
Download Telegram
👉 == и 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
😎Свойства в C# представляют собой механизм для инкапсуляции доступа к полям класса. Они позволяют управлять чтением и записью значений, добавляя логику при необходимости. Свойства могут быть автоматическими (автосвойства) или с пользовательской логикой.

Автосвойства:

public string Name { get; set; }


В этом случае компилятор автоматически создает скрытое поле для хранения значения и методы доступа.

Свойства с пользовательской логикой:

private int _age;
public int Age
{
get { return _age; }
set { _age = value > 0 ? value : 0; }
}


Здесь можно добавить проверки или преобразования при установке или получении значения.

Свойства могут быть только для чтения (только get) или только для записи (только set). Также можно использовать модификаторы доступа для get или set, чтобы ограничить доступ:


public string Password { get; private set; }


Это позволяет устанавливать значение только внутри класса.

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

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

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
✔️ Boxing и unboxing — это процессы преобразования между типами-значениями и ссылочными типами.

Boxing происходит, когда тип-значение (например, `int`) преобразуется в объект ссылочного типа (`object`). При этом значение копируется в управляемую кучу, и создаётся ссылка на него.


int num = 42;
object boxed = num; // Boxing


Unboxing — это обратный процесс, когда значение из ссылочного типа извлекается обратно в тип-значение. При этом выполняется проверка типа, и значение копируется из кучи в стек.


int unboxed = (int)boxed; // Unboxing


Эти операции могут влиять на производительность, так как связаны с выделением памяти и копированием данных.

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

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🤔21
Exception — это базовый класс для всех исключений в C#, представляющий общие ошибки. SystemException — это производный класс от Exception, используемый для исключений, которые выбрасываются самой средой выполнения (CLR), например, NullReferenceException или OutOfMemoryException.

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