uk
Feedback

Не попадись на ботовода! Telemetrio знаходить і позначає такі канали мітками 👉 Хочеш бачити мітку, оформляй підписку

C# | Вопросы собесов

C# | Вопросы собесов

Відкрити в Telegram

Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads

Показати більше
5 013
Підписники
Немає даних24 години
+27 днів
+2230 днів
Архів дописів
🤔 Что такое EF? Entity Framework (EF) — это ORM (Object-Relational Mapping) фреймворк от Microsoft, который позволяет разработчикам работать с данными как с объектами, не беспокоясь о базовых SQL запросах. Это упрощает работу с базами данных, автоматически обрабатывая запросы, обновления и связи данных. EF поддерживает широкий спектр функциональности баз данных и облегчает интеграцию данных в .NET-приложения. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Получите информацию об экспортных рыночных нишах от РЭЦ! Только начинаете экспортную деятельность или выходите на новые рынки
Получите информацию об экспортных рыночных нишах от РЭЦ! Только начинаете экспортную деятельность или выходите на новые рынки? Воспользуйтесь услугой Российского экспортного центра: получите аналитическую информацию о потенциальных рыночних нишах за рубежом. В услугу входит: - Определение наиболее перспективных стран для развития экспорта отраслей/товарных групп; - Выбор товара для развития поставок в страну; - Определение потенциальных объемов поставок в интересующие страны в ближайшие 2-3 года. Услуга предоставляется мгновенно и бесплатно. Оставьте свою заявку уже сегодня! Получить предложение #реклама myexport.exportcenter.ru О рекламодателе

🤔 В чем разница между асинхронностью и многопоточностью? Это два различных, но часто связанных понятия, которые используются для управления выполнением задач таким образом, чтобы повысить эффективность и отзывчивость приложений. Хотя они оба направлены на оптимизацию выполнения программ, между ними есть ключевые различия в подходах и использовании. 🟠Асинхронность Это подход, при котором задача может выполняться независимо от основного потока программы, и не блокирует его выполнение в ожидании завершения. Это позволяет программе продолжать работу, пока выполняется асинхронная операция, например, доступ к файлу или сетевой запрос. Ключевая особенность асинхронности заключается в том, что она позволяет обрабатывать задачи без блокировки, улучшая отзывчивость и производительность приложения, особенно в средах с графическим интерфейсом пользователя или в серверных приложениях. 🟠Многопоточность Это подход, при котором несколько потоков исполнения работают параллельно, что позволяет выполнять несколько операций одновременно. Это может быть реализовано как на одном процессоре с использованием временной мультиплексированной многозадачности, так и на многоядерных процессорах, где каждый поток может выполняться фактически одновременно на своем ядре. Многопоточность идеально подходит для задач, требующих тяжелых вычислений, и может значительно ускорить выполнение программы за счет распараллеливания работы. 🚩Ключевые различия 🟠Цели использования Асинхронность обычно используется для улучшения отзывчивости приложений и эффективного использования ожидания (например, I/O операции), тогда как многопоточность применяется для ускорения выполнения вычислительно сложных задач за счет параллелизма. 🟠Управление ресурсами Асинхронные операции часто управляются операционной системой и могут использовать меньше ресурсов, поскольку не требуют постоянного выделения отдельного потока. Многопоточность требует более активного управления потоками, что может привести к большему потреблению памяти и процессорного времени. 🟠Сложность разработки Работа с многопоточностью часто более сложна из-за необходимости синхронизации доступа к общим ресурсам и управления состоянием, что может привести к ошибкам, таким как взаимные блокировки и состояния гонки. Асинхронное программирование также требует понимания, но оно более структурировано и часто управляется с помощью высокоуровневых паттернов и библиотек. Ставь 👍 и забирай 📚 Базу знаний

Работайте в Т-Банке из любого города России Работайте в Т-Банке из любого города России. ⚡Если нет опыта — всему научим. ⚡Подберем удобный график. Смотрите вакансии на сайте! Выбрать #реклама tbank.ru О рекламодателе

🤔 Что такое INNER JOIN? INNER JOIN — это SQL-операция, возвращающая только те строки, которые совпадают по ключевому условию в обеих таблицах. Если нет совпадения — строка не включается в результат. Это основной способ объединения связанных таблиц (например, пользователи и заказы по user_id). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое post? post чаще всего ассоциируется с HTTP POST-запросами, которые используются для отправки данных на сервер. Это один из основных методов HTTP-протокола наряду с GET, PUT, DELETE и другими. 🚩Основные понятия 🟠HTTP POST-запрос Метод HTTP, используемый для отправки данных на сервер. Обычно применяется для создания новых ресурсов или передачи данных, которые могут изменять состояние сервера. 🟠Отправка данных Данные могут быть отправлены в теле запроса в различных форматах, таких как JSON, XML или обычный текст. 🟠Использование в веб-приложениях POST-запросы широко используются в веб-приложениях для передачи данных от клиента к серверу, например, при отправке формы, загрузке файлов или выполнении AJAX-запросов. 🚩Пример использования HTTP POST-запроса Для выполнения HTTP POST-запроса в C# часто используется класс HttpClient, который предоставляет удобные методы для взаимодействия с веб-сервисами. 🚩Пример отправки JSON-данных 1⃣Настройка проекта Убедитесь, что в вашем проекте установлен пакет System.Net.Http (обычно он включен по умолчанию в .NET Core проектах). 2⃣Отправка POST-запроса
   using System;
   using System.Net.Http;
   using System.Text;
   using System.Threading.Tasks;

   class Program
   {
       static async Task Main(string[] args)
       {
           // Создаем HttpClient
           using (HttpClient client = new HttpClient())
           {
               // URL-адрес, на который отправляется запрос
               string url = "https://example.com/api/resource";

               // Данные для отправки
               var data = new
               {
                   Name = "John Doe",
                   Age = 30
               };

               // Сериализуем данные в JSON
               string jsonData = Newtonsoft.Json.JsonConvert.SerializeObject(data);

               // Создаем содержимое запроса
               StringContent content = new StringContent(jsonData, Encoding.UTF8, "application/json");

               // Отправляем POST-запрос
               HttpResponseMessage response = await client.PostAsync(url, content);

               // Проверяем успешность ответа
               if (response.IsSuccessStatusCode)
               {
                   Console.WriteLine("Запрос выполнен успешно.");
               }
               else
               {
                   Console.WriteLine($"Ошибка: {response.StatusCode}");
               }
           }
       }
   }
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое куки и где оно хранится в запросе? Это небольшие файлы данных, хранящиеся на стороне клиента и отправляемые серверу с каждым запросом. 1. Они содержатся в заголовке HTTP-запроса (Cookie). 2. Используются для хранения сессий, предпочтений пользователя и другой информации. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какие тесты бывают? 🚩Виды 🟠Юнит-тесты Предназначены для проверки отдельных компонентов или модулей приложения в изоляции. Они помогают убедиться, что отдельные функции или методы работают правильно. Цель: Проверка логики отдельных методов или классов. Инструменты: xUnit, NUnit, MSTest.
using Xunit;

public class CalculatorTests
{
    [Fact]
    public void Add_SimpleValues_ReturnsSum()
    {
        var calculator = new Calculator();
        var result = calculator.Add(2, 3);
        Assert.Equal(5, result);
    }
}

public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }
}
🟠Интеграционные тесты Проверяют взаимодействие между различными компонентами системы, убеждаясь, что они корректно работают вместе. Цель: Проверка взаимодействия между модулями. Инструменты: xUnit, NUnit, MSTest, плюс дополнительные библиотеки для тестирования баз данных или HTTP-запросов.
using System.Net.Http;
using System.Threading.Tasks;
using Xunit;

public class IntegrationTests
{
    private readonly HttpClient _client;

    public IntegrationTests()
    {
        var appFactory = new CustomWebApplicationFactory<Startup>();
        _client = appFactory.CreateClient();
    }

    [Fact]
    public async Task Get_EndpointReturnsSuccessAndCorrectContentType()
    {
        var response = await _client.GetAsync("/api/values");
        response.EnsureSuccessStatusCode();
        Assert.Equal("application/json; charset=utf-8", response.Content.Headers.ContentType.ToString());
    }
}
🟠Функциональные тесты Проверяют, что приложение выполняет свои функции в соответствии с требованиями. Эти тесты проверяют конкретные сценарии использования. Цель: Проверка функциональности приложения на уровне пользователя. Инструменты: Selenium, Playwright, Cypress.
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using Xunit;

public class UiTests
{
    [Fact]
    public void LoadPage_CheckTitle()
    {
        using (IWebDriver driver = new ChromeDriver())
        {
            driver.Navigate().GoToUrl("https://example.com");
            Assert.Equal("Example Domain", driver.Title);
        }
    }
}
🟠Системные тесты Проверяют приложение в целом, включая взаимодействие с внешними системами и проверку всех требований. Цель: Проверка всей системы в интегрированном виде. Инструменты: JUnit, TestNG для Java, или те же инструменты, что и для функциональных тестов. 🟠Приемочные тесты Проводятся для проверки, что приложение соответствует требованиям и готово к использованию клиентом или конечным пользователем. Цель: Подтверждение соответствия приложения требованиям. Инструменты: Cucumber, SpecFlow (для BDD). 🟠Регрессионные тесты Проверяют, что недавние изменения в коде не нарушили существующую функциональность. Цель: Убедиться, что новые изменения не привели к новым багам. Инструменты: Все инструменты для юнит-тестирования и функционального тестирования. 🟠Нагрузочные тесты Проверяют, как приложение ведет себя под нагрузкой, например, при большом количестве одновременных пользователей или операций. Цель: Оценка производительности и устойчивости приложения под нагрузкой. Инструменты: JMeter, Gatling, Apache Bench. Ставь 👍 и забирай 📚 Базу знаний

🤔 Какие есть типы данных в .NET? В .NET типы делятся на две большие категории: - Значимые (Value types): хранят данные непосредственно. - Примитивы: int, double, bool, char - Структуры: DateTime, Guid, пользовательские struct - enum — перечисления - Ссылочные (Reference types): содержат ссылку на данные, которые лежат в куче. - Классы (class) - Интерфейсы (interface) - Делегаты - Массивы - string (особенность: неизменяем, но ссылочный) Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое interceptor? Interceptor (перехватчик) — это паттерн программирования, используемый для перехвата и обработки вызовов методов, запросов или событий перед их исполнением или после. В контексте C# и .NET, интерцепторы чаще всего применяются в: ASP.NET Core Middleware — для перехвата HTTP-запросов. Entity Framework Core Interceptors — для перехвата SQL-запросов и изменений данных. Aspect-Oriented Programming (AOP) — для добавления кода перед или после выполнения метода. 🚩Зачем нужен Interceptor? 🟠Логирование можно записывать запросы, исключения, время выполнения. 🟠Безопасность проверка прав доступа перед выполнением запроса. 🟠Транзакции автоматическое управление транзакциями в базе данных. 🟠Изменение поведения методов например, автоматическая подмена аргументов. 🟠Кэширование можно сохранять результаты выполнения метода. 🚩Пример использования Interceptor в Entity Framework Core Entity Framework Core позволяет использовать интерцепторы для перехвата SQL-запросов. Это может быть полезно, например, для логирования всех SQL-запросов.
using Microsoft.EntityFrameworkCore.Diagnostics;
using System;
using System.Data.Common;
using System.Threading;
using System.Threading.Tasks;

public class SqlInterceptor : DbCommandInterceptor
{
    public override InterceptionResult<DbDataReader> ReaderExecuting(
        DbCommand command, CommandEventData eventData, InterceptionResult<DbDataReader> result)
    {
        Console.WriteLine($"SQL Query: {command.CommandText}");
        return base.ReaderExecuting(command, eventData, result);
    }
}
Теперь подключим этот интерцептор в DbContext
using Microsoft.EntityFrameworkCore;

public class MyDbContext : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.AddInterceptors(new SqlInterceptor());
        base.OnConfiguring(optionsBuilder);
    }
}
🚩Пример использования Interceptor в ASP.NET Core (Middleware) В ASP.NET Core интерцепторы можно реализовать через Middleware. Например, перехватим все HTTP-запросы и добавим в лог
public class RequestInterceptor
{
    private readonly RequestDelegate _next;

    public RequestInterceptor(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        Console.WriteLine($"HTTP Request: {context.Request.Method} {context.Request.Path}");
        await _next(context);
    }
}
Добавляем middleware в Program.cs
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.UseMiddleware<RequestInterceptor>();

app.Run(async (context) =>
{
    await context.Response.WriteAsync("Hello World!");
});

app.Run();
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что делает new имяОбъекта()? Оператор new: - создаёт экземпляр класса или структуры; - выделяет память в куче или стеке (в зависимости от типа); - вызывает конструктор — по умолчанию или переданный; - возвращает ссылку на объект (для reference-type) или сам объект (для value-type). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Каким образом запускается сборка мусора? Сборщик мусора (Garbage Collector, GC) в .NET автоматически управляет памятью, освобождая неиспользуемые объекты. 🚩Как запускается GC? 🟠Автоматически (по мере необходимости) GC сам решает, когда запуститься, исходя из: Заполнения памяти (Heap почти полный) Недостатка ресурсов (мало RAM) Давления на систему
class Program
{
    static void Main()
    {
        for (int i = 0; i < 100000; i++)
        {
            var obj = new object(); // Создаётся много объектов
        } // После выхода из цикла ненужные объекты освобождаются GC
    }
}
🟠Вручную (`GC.Collect()`) Можно форсировать сборку мусора, но это редко рекомендуется**, так как GC сам лучше решает, когда запускаться.
GC.Collect(); // Принудительный запуск сборщика мусора
GC.WaitForPendingFinalizers(); // Дождаться завершения финализаторов
🟠Через `using` и `Dispose()` (IDisposable) GC не сразу удаляет объекты с ресурсами (файлы, сокеты). Такие объекты лучше очищать вручную через Dispose() или using.
using (StreamWriter writer = new StreamWriter("file.txt"))
{
    writer.WriteLine("Привет, мир!");
} // `Dispose()` вызовется автоматически
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое interceptor? Interceptor — это механизм, позволяющий вмешиваться в выполнение операций (например, запросов, логики работы, логирования) до или после их исполнения. В .NET и EF Core interceptors применяются для: - Логирования SQL-запросов - Модификации поведения БД - Аудита действий Это своего рода «прослойка» между системой и реальным выполнением. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Если мы используем Ref & out, то становится ли эта структура ссылочным типом? Нет, структура (struct) не становится ссылочным типом, даже если мы передаём её через ref или out. Однако, когда структура передаётся с ref или out, передаётся сама структура (по ссылке), а не её копия. Это позволяет изменять исходный объект напрямую, избегая копирования. 🚩Разница между обычной передачей и передачей через `ref` Передача структуры без ref (по значению, копируется)
struct Point
{
    public int X;
    public int Y;
}

void ChangePoint(Point p)
{
    p.X = 100;
}

Point myPoint = new Point { X = 10, Y = 20 };
ChangePoint(myPoint);

Console.WriteLine(myPoint.X); // 10 (НЕ изменилось, потому что была копия)
Передача структуры с ref (по ссылке, изменения сохраняются)
void ChangePointRef(ref Point p)
{
    p.X = 100;
}

ChangePointRef(ref myPoint);

Console.WriteLine(myPoint.X); // 100 (значение изменилось)
🚩Что насчёт `out`? out работает так же, как ref, но требует обязательной инициализации внутри метода.
void InitPoint(out Point p)
{
    p = new Point { X = 50, Y = 50 }; // Обязательно присвоить значение
}

Point newPoint;
InitPoint(out newPoint);

Console.WriteLine(newPoint.X); // 50
Ставь 👍 и забирай 📚 Базу знаний

🤔 Действительно ли при вызове метода Add уже генерируется SQL-код? Нет, при вызове метода Add SQL-код еще не генерируется. На этом этапе сущность просто добавляется в контекст, и ее состояние помечается как "добавленное". SQL-код формируется и выполняется только при вызове метода SaveChanges(), который анализирует все изменения и генерирует соответствующие SQL-запросы. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Чем отличается ссылочный и значимый тип? В C# все типы делятся на значимые (value types) и ссылочные (reference types). Основное различие заключается в том, как данные хранятся в памяти и как передаются в методы. 🚩Значимые типы (Value Types) Хранятся в стеке (Stack). Передаются по значению (копируются). Каждый объект имеет свою копию данных. Не могут быть null (если не использовать Nullable<T>). 🚩Примеры значимых типов: - int, double, bool, char - struct, enum, DateTime
int a = 10;
int b = a; // Копия значения
b = 20;

Console.WriteLine(a); // 10 (не изменился)
Console.WriteLine(b); // 20
🚩Ссылочные типы (Reference Types) Хранятся в куче (Heap), а в стеке лежит ссылка на объект. Передаются по ссылке (не копируются, а передаётся адрес). Несколько переменных могут указывать на один и тот же объект. Могут быть null (если не инициализированы).
class Person
{
    public string Name;
}

Person p1 = new Person { Name = "Alice" };
Person p2 = p1; // p2 и p1 указывают на один объект

p2.Name = "Bob";

Console.WriteLine(p1.Name); // Bob (изменилось!)
Console.WriteLine(p2.Name); // Bob
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое групповые делегаты? Групповые делегаты позволяют объединить несколько методов в один вызов. 1. Все методы, входящие в делегат, вызываются последовательно. 2. Применяются для выполнения нескольких операций по одному событию. 3. Это полезно для подписки на события и выполнения цепочки связанных действий. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В чём разница статических и нестатических классов? В C# классы могут быть статическими (static) и нестатическими (обычными). Разница в том, как они используются и хранят данные. 🚩Статические классы (`static`) Не могут создавать объекты (экземпляры) Содержат только статические (static) методы и поля Не могут наследоваться и не могут быть унаследованы Используются для утилитарных методов, глобальных констант и вспомогательных функций
public static class MathHelper
{
    public static int Square(int x) => x * x;
}
Использование
int result = MathHelper.Square(5); // 25
🚩Нестатические (обычные) классы Можно создавать экземпляры (new) Могут содержать как статические, так и нестатические члены Можно наследовать от других классов Используются для работы с данными
public class Car
{
    public string Model { get; set; }

    public void Drive()
    {
        Console.WriteLine($"{Model} едет!");
    }
}
Использование
Car myCar = new Car { Model = "Tesla" };
myCar.Drive(); // Tesla едет!
Ставь 👍 и забирай 📚 Базу знаний

⚙️ Микросервисы начинают тормозить под нагрузкой? 💡 Узнайте, как масштабировать и оптимизировать систему с помощью CQRS и Ev
⚙️ Микросервисы начинают тормозить под нагрузкой? 💡 Узнайте, как масштабировать и оптимизировать систему с помощью CQRS и Event Sourcing на .NET Aspire. На открытом вебинаре «Оптимизация микросервисов с CQRS и Event Sourcing на .NET Aspire» 19 августа в 20:00 МСК разберем: ◽️ Ограничения классических микросервисов при высокой нагрузке. ◽️ Принципы разделения команд и запросов (CQRS) и хранения истории через Event Sourcing. ◽️ Практическую реализацию: сервис заказов с «команда-обработчик» и хранением событий в MongoDB. ◽️ Конфигурацию проекций для чтения данных. ❗️ Вы освоите оркестрацию через .NET Aspire (API Gateway, Order Service, база событий), внедрите логирование и трейсинг через OpenTelemetry, а также протестируете создание заказа, обновление статуса и визуализацию потока событий. ➡️ Посетите открытый урок и получите скидку на большое обучение «C# ASP.NET Core разработчик»: https://otus.pw/qBjR/ Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

🤔 Какие преимущества у LINQ? 1. Универсальность: позволяет работать с разными источниками данных (массивы, базы данных, XML). 2. Читаемость: код становится компактным и интуитивно понятным. 3. Сильная типизация: ошибки обнаруживаются на этапе компиляции. 4. Оптимизация запросов: для баз данных LINQ к Entity Framework может преобразовывать запросы в SQL. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний