C# | Вопросы собесов
رفتن به کانال در Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads
نمایش بیشتر5 013
مشترکین
اطلاعاتی وجود ندارد24 ساعت
+27 روز
+2230 روز
آرشیو پست ها
5 013
🤔 Что такое EF?
Entity Framework (EF) — это ORM (Object-Relational Mapping) фреймворк от Microsoft, который позволяет разработчикам работать с данными как с объектами, не беспокоясь о базовых SQL запросах. Это упрощает работу с базами данных, автоматически обрабатывая запросы, обновления и связи данных. EF поддерживает широкий спектр функциональности баз данных и облегчает интеграцию данных в .NET-приложения.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 013
Получите информацию об экспортных рыночных нишах от РЭЦ!
Только начинаете экспортную деятельность или выходите на новые рынки? Воспользуйтесь услугой Российского экспортного центра: получите аналитическую информацию о потенциальных рыночних нишах за рубежом.
В услугу входит:
- Определение наиболее перспективных стран для развития экспорта отраслей/товарных групп;
- Выбор товара для развития поставок в страну;
- Определение потенциальных объемов поставок в интересующие страны в ближайшие 2-3 года.
Услуга предоставляется мгновенно и бесплатно.
Оставьте свою заявку уже сегодня!
Получить предложение
#реклама
myexport.exportcenter.ru
О рекламодателе
5 013
🤔 В чем разница между асинхронностью и многопоточностью?
Это два различных, но часто связанных понятия, которые используются для управления выполнением задач таким образом, чтобы повысить эффективность и отзывчивость приложений. Хотя они оба направлены на оптимизацию выполнения программ, между ними есть ключевые различия в подходах и использовании.
🟠Асинхронность
Это подход, при котором задача может выполняться независимо от основного потока программы, и не блокирует его выполнение в ожидании завершения. Это позволяет программе продолжать работу, пока выполняется асинхронная операция, например, доступ к файлу или сетевой запрос. Ключевая особенность асинхронности заключается в том, что она позволяет обрабатывать задачи без блокировки, улучшая отзывчивость и производительность приложения, особенно в средах с графическим интерфейсом пользователя или в серверных приложениях.
🟠Многопоточность
Это подход, при котором несколько потоков исполнения работают параллельно, что позволяет выполнять несколько операций одновременно. Это может быть реализовано как на одном процессоре с использованием временной мультиплексированной многозадачности, так и на многоядерных процессорах, где каждый поток может выполняться фактически одновременно на своем ядре. Многопоточность идеально подходит для задач, требующих тяжелых вычислений, и может значительно ускорить выполнение программы за счет распараллеливания работы.
🚩Ключевые различия
🟠Цели использования
Асинхронность обычно используется для улучшения отзывчивости приложений и эффективного использования ожидания (например, I/O операции), тогда как многопоточность применяется для ускорения выполнения вычислительно сложных задач за счет параллелизма.
🟠Управление ресурсами
Асинхронные операции часто управляются операционной системой и могут использовать меньше ресурсов, поскольку не требуют постоянного выделения отдельного потока. Многопоточность требует более активного управления потоками, что может привести к большему потреблению памяти и процессорного времени.
🟠Сложность разработки
Работа с многопоточностью часто более сложна из-за необходимости синхронизации доступа к общим ресурсам и управления состоянием, что может привести к ошибкам, таким как взаимные блокировки и состояния гонки. Асинхронное программирование также требует понимания, но оно более структурировано и часто управляется с помощью высокоуровневых паттернов и библиотек.
Ставь 👍 и забирай 📚 Базу знаний
5 013
Работайте в Т-Банке из любого города России
Работайте в Т-Банке из любого города России.
⚡Если нет опыта — всему научим.
⚡Подберем удобный график.
Смотрите вакансии на сайте!
Выбрать
#реклама
tbank.ru
О рекламодателе
5 013
🤔 Что такое INNER JOIN?
INNER JOIN — это SQL-операция, возвращающая только те строки, которые совпадают по ключевому условию в обеих таблицах.
Если нет совпадения — строка не включается в результат. Это основной способ объединения связанных таблиц (например, пользователи и заказы по user_id).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 013
🤔 Что такое 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}");
}
}
}
}
Ставь 👍 и забирай 📚 Базу знаний5 013
🤔 Что такое куки и где оно хранится в запросе?
Это небольшие файлы данных, хранящиеся на стороне клиента и отправляемые серверу с каждым запросом.
1. Они содержатся в заголовке HTTP-запроса (Cookie).
2. Используются для хранения сессий, предпочтений пользователя и другой информации.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 013
🤔 Какие тесты бывают?
🚩Виды
🟠Юнит-тесты
Предназначены для проверки отдельных компонентов или модулей приложения в изоляции. Они помогают убедиться, что отдельные функции или методы работают правильно.
Цель: Проверка логики отдельных методов или классов.
Инструменты: 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.
Ставь 👍 и забирай 📚 Базу знаний5 013
🤔 Какие есть типы данных в .NET?
В .NET типы делятся на две большие категории:
- Значимые (Value types): хранят данные непосредственно.
- Примитивы: int, double, bool, char
- Структуры: DateTime, Guid, пользовательские struct
- enum — перечисления
- Ссылочные (Reference types): содержат ссылку на данные, которые лежат в куче.
- Классы (class)
- Интерфейсы (interface)
- Делегаты
- Массивы
- string (особенность: неизменяем, но ссылочный)
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 013
🤔 Что такое 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();
Ставь 👍 и забирай 📚 Базу знаний5 013
🤔 Что делает new имяОбъекта()?
Оператор new:
- создаёт экземпляр класса или структуры;
- выделяет память в куче или стеке (в зависимости от типа);
- вызывает конструктор — по умолчанию или переданный;
- возвращает ссылку на объект (для reference-type) или сам объект (для value-type).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 013
🤔 Каким образом запускается сборка мусора?
Сборщик мусора (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()` вызовется автоматически
Ставь 👍 и забирай 📚 Базу знаний5 013
🤔 Что такое interceptor?
Interceptor — это механизм, позволяющий вмешиваться в выполнение операций (например, запросов, логики работы, логирования) до или после их исполнения.
В .NET и EF Core interceptors применяются для:
- Логирования SQL-запросов
- Модификации поведения БД
- Аудита действий
Это своего рода «прослойка» между системой и реальным выполнением.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 013
🤔 Если мы используем 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
Ставь 👍 и забирай 📚 Базу знаний5 013
🤔 Действительно ли при вызове метода Add уже генерируется SQL-код?
Нет, при вызове метода Add SQL-код еще не генерируется. На этом этапе сущность просто добавляется в контекст, и ее состояние помечается как "добавленное". SQL-код формируется и выполняется только при вызове метода SaveChanges(), который анализирует все изменения и генерирует соответствующие SQL-запросы.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 013
🤔 Чем отличается ссылочный и значимый тип?
В 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
Ставь 👍 и забирай 📚 Базу знаний5 013
🤔 Что такое групповые делегаты?
Групповые делегаты позволяют объединить несколько методов в один вызов.
1. Все методы, входящие в делегат, вызываются последовательно.
2. Применяются для выполнения нескольких операций по одному событию.
3. Это полезно для подписки на события и выполнения цепочки связанных действий.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 013
🤔 В чём разница статических и нестатических классов?
В 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 едет!
Ставь 👍 и забирай 📚 Базу знаний5 013
⚙️ Микросервисы начинают тормозить под нагрузкой?
💡 Узнайте, как масштабировать и оптимизировать систему с помощью 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
5 013
🤔 Какие преимущества у LINQ?
1. Универсальность: позволяет работать с разными источниками данных (массивы, базы данных, XML).
2. Читаемость: код становится компактным и интуитивно понятным.
3. Сильная типизация: ошибки обнаруживаются на этапе компиляции.
4. Оптимизация запросов: для баз данных LINQ к Entity Framework может преобразовывать запросы в SQL.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
