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
Абстрактный класс — это класс, который не может быть 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
➡️ Пространство имен (namespace) — это способ организации кода, который помогает избежать конфликтов имен. Оно группирует классы, интерфейсы и другие типы в логические контейнеры.


namespace MyApp {
class Program {
static void Main() {
System.Console.WriteLine("Hello, World!");
}
}
}


Для доступа к элементам из другого пространства имен используется ключевое слово using.


using System;
namespace MyApp {
class Program {
static void Main() {
Console.WriteLine("Hello, World!");
}
}
}


Пространства имен упрощают структурирование больших проектов и предотвращают дублирование имен.

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

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71
В C# популярными фреймворками для юнит-тестирования являются NUnit, xUnit и MSTest. Они предоставляют инструменты для написания и запуска тестов, а также поддерживают различные атрибуты и утверждения для проверки кода.

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41
👉 DbSet представляет коллекцию сущностей в контексте базы данных и используется для выполнения операций CRUD (Create, Read, Update, Delete). Каждый DbSet соответствует таблице в базе данных, а его элементы — строкам этой таблицы.


public class ApplicationContext : DbContext
{
public DbSet<User> Users { get; set; } // Представляет таблицу Users
}


DbSet предоставляет методы для добавления, удаления и поиска данных. Например, Add() добавляет новую сущность, а Find() ищет по первичному ключу.


var user = new User { Name = "John" };
context.Users.Add(user); // Добавление сущности
context.SaveChanges(); // Сохранение изменений в базе


Используется в Entity Framework для работы с данными в объектно-ориентированном стиле.

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

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍76
Для защиты от XSS необходимо экранировать или валидировать все пользовательские данные перед их отображением на веб-странице. Также рекомендуется использовать Content Security Policy (CSP) для ограничения выполнения потенциально опасных скриптов.

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


var numbers = new List<int> { 1, 2, 3, 4, 5 };
var evenNumbers = from num in numbers
where num % 2 == 0
select num;


В этом примере LINQ используется для фильтрации чётных чисел из списка. Также LINQ поддерживает методы расширения, такие как Where, Select, OrderBy, что делает запросы более гибкими и выразительными. LINQ упрощает обработку данных и повышает читаемость кода.

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

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

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


class Counter {
public static int Count = 0; // статическое поле

public static void Increment() { // статический метод
Count++;
}
}

Counter.Increment(); // вызов статического метода
Console.WriteLine(Counter.Count); // доступ к статическому полю


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

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

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

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3
Action, Func и Predicate — это встроенные делегаты в C#.

- Action используется для методов, которые не возвращают значение (void). Может принимать от 0 до 16 параметров.

Action<int> printNumber = (x) => Console.WriteLine(x);


- Func используется для методов, возвращающих значение. Последний тип в шаблоне указывает тип возвращаемого значения.

Func<int, int, int> sum = (a, b) => a + b;


- Predicate — это специализированный делегат, возвращающий bool. Обычно используется для проверки условий.

Predicate<int> isEven = (x) => x % 2 == 0;


Action и Func более универсальны, а Predicate предназначен для логических проверок.

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

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

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41
Логические операторы && (И) и || (ИЛИ) используются для выполнения операций над булевыми значениями.

- && (И)
Возвращает true, если оба операнда истинны. Если первый операнд ложный, второй не вычисляется (короткое замыкание).

- || (ИЛИ)
Возвращает true, если хотя бы один из операндов истинный. Если первый операнд истинный, второй не вычисляется (короткое замыкание).

Пример:

bool a = true, b = false;
bool result1 = a && b; // false, так как b ложное
bool result2 = a || b; // true, так как a истинное


Короткое замыкание позволяет оптимизировать вычисления и избежать ошибок, связанных с выполнением ненужных операций.

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

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
Для чтения всего текста из файла используется метод File.ReadAllText, который принимает путь к файлу и возвращает содержимое в виде строки. Этот метод автоматически закрывает файл после чтения, что упрощает работу с ресурсами.

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

Пример:

Func<int, int, int> sum = delegate(int a, int b) { return a + b; };
int result = sum(2, 3); // Результат: 5


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

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

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

✈️ С# собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71
🟠Для реализации IDisposable в классе используется шаблон Disposable, который включает финализатор и метод Dispose. Это позволяет корректно освобождать управляемые и неуправляемые ресурсы.

Пример:

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

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

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

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


Метод Dispose вызывается явно для освобождения ресурсов, а финализатор гарантирует очистку, если Dispose не был вызван.

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

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

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


try {
Task.WaitAll(task1, task2); // Может выбросить AggregateException
}
catch (AggregateException ex) {
foreach (var innerEx in ex.InnerExceptions) {
Console.WriteLine(innerEx.Message); // Обработка каждого внутреннего исключения
}
}


Этот тип исключения позволяет обработать все ошибки в одном месте.

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

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

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