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


int Factorial(int n) {
if (n == 0) // Базовый случай
return 1;
return n * Factorial(n - 1); // Рекурсивный случай
}


Базовый случай предотвращает бесконечную рекурсию, а рекурсивный случай разбивает задачу на более простые подзадачи. Рекурсия часто используется для работы с деревьями, графами и алгоритмами, где задача естественно делится на подзадачи.

Важно учитывать глубину рекурсии, чтобы избежать переполнения стека.

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

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


async IAsyncEnumerable<int> FetchDataAsync() {
for (int i = 0; i < 10; i++) {
await Task.Delay(100); // Асинхронная задержка
yield return i; // Возврат элемента последовательности
}
}


Для потребления данных используется await foreach:


await foreach (var item in FetchDataAsync()) {
Console.WriteLine(item);
}


IAsyncEnumerable<T> полезен при работе с асинхронными источниками данных, такими как базы данных, сетевые запросы или файловые потоки, где данные поступают постепенно.

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

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