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

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

Open in Telegram
5 058
Subscribers
-524 hours
-77 days
-1730 days
Posts Archive
За границу за наш счет Представьте: отдыхаете в отеле за рубежом, а вам потом стоимость проживания возвращают. Такое провернули в Яндекс Путешествиях. Для отдохнувших с 22 августа по 31 октября устраивают розыгрыш. Раз в месяц 10 счастливчикам возвращают до 100 000 рублей каждому. А промокод SECRET5 скинет 5000 рублей от стоимости отеля при бронировании от 60 000 рублей. Забронировать #реклама special.travel.yandex.ru О рекламодателе

🤔 Что такое IQueryable? Это интерфейс, который наследуется от IEnumerable и предоставляет функциональность для оценки запросов к источнику данных. Основное отличие IQueryable от IEnumerable заключается в том, что IQueryable позволяет запросы быть построенными и выполненными отложенно на стороне источника данных, такого как база данных. Это обеспечивает большую эффективность, поскольку именно необходимые данные извлекаются и передаются, вместо извлечения всего объема данных и их фильтрации на стороне клиента. 🚩Как работает IQueryable Использует LINQ-провайдеры, которые транслируют выражения LINQ в запросы, специфичные для источника данных (например, SQL для баз данных). Это позволяет делать запросы более оптимальными, так как они обрабатываются средствами самого источника данных. 🟠Отложенное выполнение (Deferred Execution) Запросы IQueryable не выполняются, пока не будут перечислены. Это позволяет системе строить более сложные запросы перед их выполнением. 🟠Составление запросов Вы можете построить запрос по частям, добавляя условия на каждом шаге. Финальный запрос выполняется только при перечислении результатов, что позволяет избежать ненужной нагрузки на источник данных. 🟠Преобразование запросов LINQ-провайдеры могут преобразовать выражения запросов IQueryable в оптимизированные запросы к базе данных или другим источникам, что позволяет выполнять сложные операции на стороне сервера, такие как сортировка, группировка и агрегирование.
using (var context = new MyDbContext()) // MyDbContext — это контекст Entity Framework
{
    IQueryable<Product> query = context.Products.Where(p => p.Price > 100);

    // Запрос еще не выполнен, можно добавить другие условия
    query = query.OrderBy(p => p.Name);

    // Запрос выполняется только при перечислении
    foreach (var product in query)
    {
        Console.WriteLine($"{product.Name}: {product.Price}");
    }
}
Ставь 👍 и забирай 📚 Базу знаний

👩‍💻 Ищем C# разработчиков. Релокейт, удалёнка, платим много! Специально для Вас, собираем лучшие вакансии, только с прямыми контактами в Telegram! 👩‍💻 C# 👩‍💻 Java 👩‍💻 DevOps 👩‍💻 Python 👣 Go 👩‍💻 Node.js 🖼️ PHP 🤖 ML & DS 🖥 SQL 🔎 QA 👩‍💻 UX/UI 👩‍💻 Frontend 👩‍💻 Mobile 📋 Analyst 💼 1C 👩‍💻 IT HR Подпишись чтобы не упустить свой шанс получить лучший оффер!

Внимание ученики 1-9 класса и их родители! Стартует бесплатная 3-х месячная программа по углубленному изучению школьных предм
Внимание ученики 1-9 класса и их родители! Стартует бесплатная 3-х месячная программа по углубленному изучению школьных предметов с 1 по 4 класс, с 5 по 8 класс и с 9 по 11 класс от резидента Сколково. Программа предлагает подтянуть знания по основным предметам: — Математика: 83% учеников повышают оценку до 4 или 5 за 2 месяца — Подготовиться к контрольным и ВПР — Подготовка к ОГЭ и ЕГЭ без стресса — Русский язык: средний балл ВПР 87 при общешкольном показателе 65 — Английский: 72% учащихся переходят на уровень выше за 4 месяца Для участия достаточно заполнить заявку. Жмите "Записаться" Записаться #реклама 16+ mrqz.me О рекламодателе

🤔 Что такое абстракция? Абстракция — это принцип ООП, который выделяет только важные характеристики объекта, скрывая сложные детали его реализации. Это помогает упростить взаимодействие с объектами и сконцентрироваться на их использовании, а не на внутренней структуре. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Гайд для РОПов по проведению эффективных вебинаров Как руководителям отделов продаж увеличить количество успешных сделок при
Гайд для РОПов по проведению эффективных вебинаров Как руководителям отделов продаж увеличить количество успешных сделок при том же объеме лидов с помощью вебинаров? Гайд от МТС Линк по обучающим вебинарам для отделов продаж. ✅ В гайде: - Как эффективнее прокачивать скиллы менеджеров и закрывать больше сделок за меньшие сроки; - Как организовать тренинг так, чтобы участники действительно подключились и дошли до финального модуля; - Как выявить слабого менеджера и улучшить его показатели; - Как сэкономить время на организации вебинара и пригласить всех участников в 2 клика. Бонус внутри: 5 прикладных советов по контролю внимания участников во время вебинара ✨ Скачайте гайд бесплатно по ссылке Скачать #реклама 16+ mts-link.ru О рекламодателе

🤔 Про абстрактные классы, интерфейсы и в чем их разница и особенности? В C# абстрактные классы и интерфейсы используются для проектирования системы через наследование и полиморфизм, позволяя описывать общую функциональность, которую будут реализовывать конкретные классы. Однако у них есть свои особенности, ограничения и сферы применения. 🚩Абстрактный класс Абстрактный класс — это класс, который не может быть создан напрямую (нельзя создать объект этого класса). Он может содержать как абстрактные методы (без реализации), так и методы с реализацией.
public abstract class Animal
{
    public abstract void MakeSound(); // Абстрактный метод
    public void Sleep() // Метод с реализацией
    {
        Console.WriteLine("Sleeping...");
    }
}
Пример
public class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Bark!");
    }
}
Использование
Animal myDog = new Dog();
myDog.MakeSound(); // Вывод: Bark!
myDog.Sleep();     // Вывод: Sleeping...
🚩Интерфейс Интерфейс — это контракт, который определяет только сигнатуры методов, свойств, событий и индексаторов. Реализацию этих членов должен предоставить класс, который реализует интерфейс.
public interface IMovable
{
    void Move();
    int Speed { get; set; }
}
Пример
public class Car : IMovable
{
    public int Speed { get; set; }

    public void Move()
    {
        Console.WriteLine($"Moving at speed: {Speed}");
    }
}
Использование
IMovable myCar = new Car { Speed = 60 };
myCar.Move(); // Вывод: Moving at speed: 60
Ставь 👍 и забирай 📚 Базу знаний

Едете в другой город? Мы знаем, как это отметить Путешествуйте с Межгородом в Яндекс Go —и участвуйте в розыгрыше крутых призов для дороги. Узнать больше #реклама 16+ play.google.com О рекламодателе Реклама на Яндексе

🤔 Что такое 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()` вызовется автоматически
Ставь 👍 и забирай 📚 Базу знаний