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
⚫️Блок 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
➡️ Пространство имен (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