ch
Feedback

不要被骗子欺骗!Telemetrio 会找到并标记这些频道 👉 如果想查看标记,请订阅

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

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

前往频道在 Telegram

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

显示更多
5 013
订阅者
-224 小时
-17 天
+2130 天
吸引订阅者
10月 '26
十月 '26
+52
在0个频道中
九月 '26
+61
在0个频道中
Get PRO
八月 '26
+70
在0个频道中
Get PRO
七月 '26
+49
在0个频道中
Get PRO
六月 '26
+36
在1个频道中
Get PRO
五月 '26
+37
在0个频道中
Get PRO
四月 '26
+34
在0个频道中
Get PRO
三月 '26
+65
在0个频道中
Get PRO
二月 '26
+78
在0个频道中
Get PRO
一月 '26
+90
在0个频道中
Get PRO
十二月 '25
+46
在0个频道中
Get PRO
十一月 '25
+101
在0个频道中
Get PRO
十月 '25
+90
在0个频道中
Get PRO
九月 '25
+45
在0个频道中
Get PRO
八月 '25
+68
在0个频道中
Get PRO
七月 '25
+60
在0个频道中
Get PRO
六月 '25
+79
在0个频道中
Get PRO
五月 '25
+76
在0个频道中
Get PRO
四月 '25
+123
在0个频道中
Get PRO
三月 '25
+234
在2个频道中
Get PRO
二月 '25
+394
在4个频道中
Get PRO
一月 '25
+225
在53个频道中
Get PRO
十二月 '24
+114
在2个频道中
Get PRO
十一月 '24
+141
在0个频道中
Get PRO
十月 '24
+399
在42个频道中
Get PRO
九月 '24
+658
在250个频道中
Get PRO
八月 '24
+192
在0个频道中
Get PRO
七月 '24
+297
在54个频道中
Get PRO
六月 '24
+1 033
在246个频道中
Get PRO
五月 '24
+1 473
在190个频道中
Get PRO
四月 '24
+919
在23个频道中
日期
订阅者增长
提及
频道
26 十月0
25 十月+1
24 十月0
23 十月+5
22 十月+3
21 十月+3
20 十月+2
19 十月+1
18 十月+2
17 十月+2
16 十月+2
15 十月+2
14 十月+2
13 十月0
12 十月+2
11 十月+1
10 十月+3
09 十月0
08 十月+3
07 十月+3
06 十月+1
05 十月0
04 十月+2
03 十月+3
02 十月+3
01 十月+6
频道帖子
🤔 В чём отличие slim-версий от обычных семафоров? Slim-версии легче и работают быстрее, но только внутри одного процесса. Они экономичнее по ресурсам и поддерживают асинхронное ожидание. Обычные семафоры — более универсальны, но тяжелее и применимы для взаимодействия между разными процессами. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

2
🤔 Что такое В3 индекс? Это структура данных, используемая в системах управления базами данных (СУБД) для организации и ускорения доступа к данным. B-tree индекс является сбалансированным деревом, обеспечивающим эффективное выполнение операций поиска, вставки, удаления и диапазонного поиска. B-tree индекс используется большинством реляционных СУБД, таких как SQL Server, MySQL, PostgreSQL и Oracle. 🚩Основные характеристики B-tree индекса 🟠Сбалансированное дерево B-tree индекс является сбалансированным деревом, где все листья находятся на одном уровне. Это обеспечивает равномерное время доступа к данным. 🟠Ключи и значения В узлах B-tree хранятся ключи, которые могут ссылаться на строки в таблице или на другие узлы дерева. 🟠Упорядоченность Ключи в каждом узле упорядочены, что позволяет эффективно выполнять бинарный поиск внутри узла. 🟠Диапазонные запросы B-tree индекс эффективно поддерживает диапазонные запросы (например, поиск всех записей с ключами между заданными значениями). 🟠Динамическое поддержание B-tree автоматически сбалансирован, что позволяет эффективно выполнять операции вставки, удаления и обновления. 🚩Пример использования CREATE TABLE Employees ( EmployeeID INT PRIMARY KEY, FirstName VARCHAR(50), LastName VARCHAR(50), DepartmentID INT, Salary DECIMAL(10, 2) ); CREATE INDEX idx_lastname ON Employees(LastName); 🚩Операции 🟠Поиск Операция поиска в B-tree выполняется за логарифмическое время O(log n), где n — количество узлов. SELECT * FROM Employees WHERE LastName = 'Smith'; 🟠Диапазонный поиск Диапазонные запросы, такие как поиск всех сотрудников с фамилией от 'A' до 'M', выполняются эффективно. SELECT * FROM Employees WHERE LastName BETWEEN 'A' AND 'M'; 🟠Вставка При вставке новой записи в таблицу с индексом B-tree, запись добавляется в соответствующее место, поддерживая балансировку дерева. INSERT INTO Employees (EmployeeID, FirstName, LastName, DepartmentID, Salary) VALUES (1, 'John', 'Doe', 10, 60000.00); 🟠Удаление При удалении записи соответствующий ключ удаляется из B-tree, и дерево автоматически перестраивается, чтобы сохранить балансировку. DELETE FROM Employees WHERE EmployeeID = 1; 🚩Плюсы ➕Быстрый доступ Обеспечивает быстрый доступ к данным благодаря сбалансированной структуре дерева. ➕Эффективная работа с большими объемами данных Поддерживает операции вставки, удаления и поиска с логарифмической сложностью. ➕Поддержка диапазонных запросов Эффективно обрабатывает диапазонные запросы благодаря упорядоченной структуре. ➕Автоматическая балансировка Динамическая балансировка дерева обеспечивает равномерное время доступа и вставки/удаления. 🚩Минусы ➖Использование ресурсов Требует дополнительного пространства для хранения структуры дерева и ключей. ➖Затраты на поддержание Вставка и удаление могут требовать перестроения узлов, что влечет за собой дополнительные вычислительные затраты. ➖Фрагментация При частых операциях вставки и удаления может возникнуть фрагментация, что может потребовать периодического обслуживания (например, реорганизации индекса). Ставь 👍 и забирай 📚 Базу знаний
237
3
Solar JSOC - Флагманский SOC с гарантией Гарантии крупнейшего коммерческого SOCа России теперь доступны вам. Узнать больше #р
Solar JSOC - Флагманский SOC с гарантией Гарантии крупнейшего коммерческого SOCа России теперь доступны вам. Узнать больше #реклама 16+ rt-solar.ru О рекламодателе
375
4
🤔 Во что разворачивается using? using — это удобная конструкция, которая автоматически вызывает Dispose, когда объект больше не нужен. Под капотом она разворачивается в блок с вызовом Dispose в конце, даже если произошла ошибка. Это защищает от утечек ресурсов. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
412
5
🤔 Что такое cancellation token в многопоточности? CancellationToken в C# используется для координации отмены между потоками. Это механизм, позволяющий запрашивать отмену операции (например, задачи Task или асинхронного метода), не прерывая поток принудительно. 🚩Зачем нужен `CancellationToken`? В многопоточных или асинхронных операциях бывает необходимо отменить выполнение кода, например: Пользователь отменил загрузку файла. Истек тайм-аут выполнения операции. Нужно прервать выполнение нескольких связанных задач. 🚩Как работает `CancellationToken`? 🟠Создание `CancellationTokenSource` Источник токена (CancellationTokenSource) управляет токеном (CancellationToken), который передаётся в задачи. 🟠Передача токена в выполняемую операцию Код регулярно проверяет cancellationToken.IsCancellationRequested, чтобы определить, нужно ли остановиться. 🟠Запрос на отмену Если вызывается cts.Cancel(), все методы, использующие этот токен, получают сигнал об отмене. 🚩Пример использования using System; using System.Threading; using System.Threading.Tasks; class Program { static async Task Main() { using var cts = new CancellationTokenSource(); // Отменяем операцию через 3 секунды cts.CancelAfter(3000); try { await DoWorkAsync(cts.Token); } catch (OperationCanceledException) { Console.WriteLine("Операция отменена!"); } } static async Task DoWorkAsync(CancellationToken cancellationToken) { for (int i = 0; i < 10; i++) { cancellationToken.ThrowIfCancellationRequested(); // Проверка отмены Console.WriteLine($"Работаем... {i}"); await Task.Delay(1000, cancellationToken); // Ожидание с проверкой отмены } } } Ставь 👍 и забирай 📚 Базу знаний
432
6
🤔 Как происходит запрос интерфейса? Когда компоненту нужен другой класс (зависимость), он объявляет интерфейс в своём конструкторе, а контейнер DI: - Ищет зарегистрированную реализацию этого интерфейса. - Создаёт экземпляр и передаёт его в зависимый класс. Такой механизм называется инъекция через конструктор, и он наиболее распространён. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
429
7
🤔 Приведи пример паттерна строитель в С# Паттерн "Строитель" (Builder) используется для пошагового создания сложных объектов. Он удобен, когда объект имеет много параметров и возможных конфигураций. 🚩Проблема без паттерна "Строитель" Допустим, у нас есть класс Car, и мы хотим создавать машины с разными конфигурациями: public class Car { public string Engine { get; set; } public int Wheels { get; set; } public bool HasSunroof { get; set; } public override string ToString() { return $"Car: Engine={Engine}, Wheels={Wheels}, Sunroof={HasSunroof}"; } } Создавать объект через конструкторы или инициализаторы становится неудобно, если у нас много параметров: var car1 = new Car { Engine = "V8", Wheels = 4, HasSunroof = true }; var car2 = new Car { Engine = "V6", Wheels = 4, HasSunroof = false }; 🚩Решение с использованием паттерна "Строитель" Сделаем пошаговый процесс сборки объекта с помощью паттерна "Строитель". Шаг 1: Создаём интерфейс строителя public interface ICarBuilder { ICarBuilder SetEngine(string engine); ICarBuilder SetWheels(int wheels); ICarBuilder SetSunroof(bool hasSunroof); Car Build(); } Шаг 2: Реализуем конкретного строителя public class CarBuilder : ICarBuilder { private Car _car = new Car(); // Временный объект public ICarBuilder SetEngine(string engine) { _car.Engine = engine; return this; // Возвращаем самого себя для цепочки вызовов } public ICarBuilder SetWheels(int wheels) { _car.Wheels = wheels; return this; } public ICarBuilder SetSunroof(bool hasSunroof) { _car.HasSunroof = hasSunroof; return this; } public Car Build() { return _car; // Возвращаем готовый объект } } Шаг 3: Используем строителя class Program { static void Main() { ICarBuilder builder = new CarBuilder(); Car sportsCar = builder .SetEngine("V8") .SetWheels(4) .SetSunroof(true) .Build(); Car economyCar = builder .SetEngine("V4") .SetWheels(4) .SetSunroof(false) .Build(); Console.WriteLine(sportsCar); Console.WriteLine(economyCar); } } Вывод в консоли Car: Engine=V8, Wheels=4, Sunroof=True Car: Engine=V4, Wheels=4, Sunroof=False Ставь 👍 и забирай 📚 Базу знаний
413
8
🤔 Что такое паттерн Event Sourcing? Это подход, при котором состояние системы сохраняется как последовательность событий. Вместо хранения текущего состояния, каждое событие, изменяющее состояние, записывается, что позволяет восстанавливать любое прошлое состояние. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
445
9
🤔 Что такое примитив синхронзиации semaphore? Это механизм синхронизации, который используется для управления доступом к ограниченному ресурсу. Он позволяет ограниченному количеству потоков одновременно использовать общий ресурс. 🚩Как работает семафор? Семафор использует счётчик для отслеживания доступных "разрешений": Когда поток запрашивает доступ к ресурсу, семафор уменьшает счётчик. Если счётчик больше нуля, поток получает доступ. Если счётчик равен нулю, поток блокируется, пока другой поток не освободит ресурс (увеличив счётчик). 🚩Пример использования `SemaphoreSlim` В .NET часто используется SemaphoreSlim, так как он более лёгкий и эффективный, чем Semaphore. using System; using System.Threading; using System.Threading.Tasks; class Program { static SemaphoreSlim semaphore = new SemaphoreSlim(2); // Разрешаем максимум 2 потока одновременно static async Task AccessResource(int id) { Console.WriteLine($"Поток {id} ждёт доступа..."); await semaphore.WaitAsync(); // Захватываем семафор try { Console.WriteLine($"Поток {id} получил доступ!"); await Task.Delay(2000); // Имитация работы с ресурсом } finally { Console.WriteLine($"Поток {id} освобождает ресурс."); semaphore.Release(); // Освобождаем семафор } } static async Task Main() { Task[] tasks = new Task[5]; for (int i = 0; i < 5; i++) { tasks[i] = AccessResource(i); } await Task.WhenAll(tasks); } } 🚩Обычный `Semaphore` Если нужна синхронизация между разными процессами, можно использовать Semaphore Semaphore semaphore = new Semaphore(2, 2, "MyGlobalSemaphore"); Ставь 👍 и забирай 📚 Базу знаний
495
10
Монолит vs микросервисы: битва за ваши нервы 💻 Монолит или микросервисы? Кажется, что ответ очевиден, но почему-то одни прое
Монолит vs микросервисы: битва за ваши нервы 💻 Монолит или микросервисы? Кажется, что ответ очевиден, но почему-то одни проекты летают, а другие тонут в хаосе? Присоединяйтесь к открытому уроку Сергея Прощаева и получите пошаговое руководство по выбору архитектуры. 📅 9 ноября в 20:00. Разберём: - Как не попасть в ловушку «модных» микросервисов. - Признаки, что пора выходить из монолита. - Архитектурные паттерны перехода: Strangler Fig, BFF, Self-contained systems. - Организационные и технические риски — что пойдёт не так. - Роль DevOps, CI/CD и мониторинга. Вы научитесь оценивать реальные риски и стоимость микросервисов, внедрять изменения без сбоев и хаоса и принимать взвешенные решения, сохраняя технический контроль и производительность команды. ✅ Запишитесь сейчас! Узнать больше #реклама 16+ otus.ru О рекламодателе
439
11
🤔 Что такое builder паттерн? Это паттерн проектирования, позволяющий создавать сложные объекты пошагово, изолируя конструирование от представления. Это упрощает управление процессом создания объекта. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
491
12
🤔 Какие есть методы запросов жизненного цикла в asp.net Core? В ASP.NET Core жизненный цикл запроса проходит несколько этапов — от получения HTTP-запроса до отправки ответа. В этом процессе участвуют Middleware, контроллеры, фильтры и обработчики событий. 🚩Основные этапы жизненного цикла запроса Получение запроса (HttpContext создаётся) Обработка через Middleware (передача запроса вниз) Маршрутизация (Routing) — определение контроллера Фильтры (например, аутентификация) Вызов контроллера и метода (Action) Обратный проход через Middleware (формирование ответа) Отправка ответа клиенту 🚩Методы Middleware (Промежуточное ПО) Middleware — это основной механизм обработки запросов. Где регистрируются? → В Program.cs (в app.Use...) Методы Middleware app.Use(async (context, next) => { Console.WriteLine("Перед обработкой запроса"); await next(); // Передаём запрос дальше Console.WriteLine("После обработки запроса"); }); 🚩Методы в контроллерах (`Controller`) Контроллер обрабатывает запросы после маршрутизации. Основные методы public class HomeController : Controller { // Метод вызывается при GET-запросе public IActionResult Index() { return View(); } // Метод вызывается при POST-запросе [HttpPost] public IActionResult SubmitForm(FormModel model) { return RedirectToAction("Index"); } } 🚩Фильтры (`Filters`) Фильтры выполняются до и после вызова контроллера. Методы фильтров public class MyActionFilter : IActionFilter { public void OnActionExecuting(ActionExecutingContext context) { Console.WriteLine("Перед вызовом метода контроллера"); } public void OnActionExecuted(ActionExecutedContext context) { Console.WriteLine("После вызова метода контроллера"); } } 🚩Методы жизненного цикла в `Program.cs` В ASP.NET Core 6+ вся конфигурация находится в Program.cs. Методы инициализации var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllersWithViews(); // Подключаем MVC var app = builder.Build(); app.UseRouting(); // Включаем маршрутизацию app.UseAuthorization(); // Проверка прав app.UseEndpoints(endpoints => { endpoints.MapControllers(); // Подключаем контроллеры }); app.Run(); Ставь 👍 и забирай 📚 Базу знаний
503
13
🤔 Что такое SOAP? SOAP (Simple Object Access Protocol) — это протокол обмена структурированными сообщениями между приложениями по сети. Он использует XML для описания сообщений и имеет строгое форматирование. Часто применяется с HTTP или SMTP, но не ограничивается ими. SOAP предоставляет высокую надёжность, безопасность и расширяемость, особенно в распределённых системах и корпоративных средах. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
557
14
🤔 Что такое 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}"); } } Ставь 👍 и забирай 📚 Базу знаний
593
15
🔥 Скрытые вакансии с удаленной работой для C# разработчика, которые нигде больше не публикуются. Напрямую от компаний, с кон
🔥 Скрытые вакансии с удаленной работой для C# разработчика, которые нигде больше не публикуются. Напрямую от компаний, с контактами рекрутеров. 🔹 C# .NET Jobs | Вакансии 🔹 Unity Jobs | Вакансии 🔸 Все каналы с вакансиями
568
16
🤔 Что такое контекст синхронизации? "контекст синхронизации" (SynchronizationContext) — это класс, который предоставляет возможность управлять способом, которым операции переключаются обратно в основной поток или контекст для продолжения выполнения после асинхронной операции. Это важно для приложений с графическим пользовательским интерфейсом, таких как Windows Forms и WPF, где доступ к элементам пользовательского интерфейса разрешён только из основного потока. 🚩Как он работает Абстрагирует модель синхронизации для различных сред выполнения. Например, в приложениях Windows Forms и WPF управление элементами UI должно происходить в главном потоке. SynchronizationContext предоставляет методы для отправки (Send) и постановки (Post) задач, которые должны выполняться в правильном контексте. 🟠Send синхронно отправляет делегат на выполнение в контекст синхронизации. 🟠Post асинхронно отправляет делегат на выполнение в контекст синхронизации. 🚩Применение SynchronizationContext Используется для того, чтобы после асинхронной операции вернуться в правильный поток и безопасно обновить UI или выполнить код, который требует выполнения в определённом потоке. public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); LoadDataAsync(); } private async void LoadDataAsync() { string data = await GetDataAsync(); // Асинхронно получаем данные и обновляем UI Dispatcher.Invoke(() => DisplayData(data)); } private Task<string> GetDataAsync() { return Task.Run(() => { // Имитация долгой операции Thread.Sleep(5000); return "Data loaded"; }); } private void DisplayData(string data) { MyTextBox.Text = data; } } 🚩Зачем он нужен 🟠Безопасность потоков Позволяет безопасно обращаться к элементам UI из асинхронных или вторичных потоков. 🟠Правильное управление потоками Обеспечивает выполнение кода в контексте, для которого он предназначен, что особенно важно в многопоточных и сетевых приложениях. Ставь 👍 и забирай 📚 Базу знаний
614
17
Бесплатный практикум: вайбкодинг, АИ-агенты, Коворк Что из своей работы вы бы с радостью перестали делать вручную? На онлайн-
Бесплатный практикум: вайбкодинг, АИ-агенты, Коворк Что из своей работы вы бы с радостью перестали делать вручную? На онлайн-практикуме «Вайбкодим» покажем, как ИИ берет рутину на себя. Без сложной теории, с реальными примерами. Разберём реальные кейсы компаний с цифрами и поговорим о главных трендах ИИ. 22 октября. Регистрируйтесь бесплатно. Зарегистрироваться #реклама 16+ ai-practicum.bitrix24.works О рекламодателе
426
18
🤔 Как добавить стороннюю библиотеку в проект? В .NET добавление сторонней библиотеки может происходить несколькими способами: - Через NuGet-пакет: - Используя команду: dotnet add package <PackageName> - Или через Visual Studio — «Manage NuGet Packages». - Через ссылку на DLL: - Скопировать .dll файл и добавить его через «Add Reference». - Через проектную ссылку: - Если у тебя есть другой .csproj, его можно подключить как зависимость. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
588
19
🔥 Middle C# на собеседовании у Senior из европейского highload | 20 октября, 19:00 МСК Можно знать технологию и всё равно за
🔥 Middle C# на собеседовании у Senior из европейского highload | 20 октября, 19:00 МСК Можно знать технологию и всё равно завалить техническое интервью. Часто дело не в знаниях, а в том, как ты отвечаешь и какие детали упускаешь ☝🏻 Александр Моргунов, Senior C# разработчик с 7+ годами опыта в европейском highload, проведёт мок-собеседование в прямом эфире! Отвечает разработчик-доброволец, вопросов он заранее не знает. После каждого ответа Александр разберёт, что было хорошо, где кандидат потерял баллы и как стоило ответить. Проверяй себя вместе с кандидатом и узнай, к чему подготовиться до своего собеса. 🚀 Это бесплатно Эфир проходит в рамках менторской программы ШОРТКАТ для C# разработчиков Ссылка на эфир в боте 👉 @shortcut_csharp_bot Реклама. О рекламодателе.
416
20
🤔 Возможно ли как-нибудь ограничить типы, которые пользователь будет передавать через шаблон? Можно ограничить типы, которые передаются в шаблоны (generics), с помощью ключевого слова where. Это позволяет указать, какие типы подходят для использования, обеспечивая безопасность и предсказуемость кода. Вот основные виды ограничений: 🟠Класс или структура where T : class — только классы. where T : struct — только структуры. 🟠Интерфейс Указание интерфейса, который должен реализовать тип: public class MyClass<T> where T : IDisposable { } 🟠Базовый класс Указание, что тип должен быть наследником определённого класса: public class MyClass<T> where T : Exception { } 🟠Конструктор Ограничение на наличие конструктора без параметров: public class MyClass<T> where T : new() { } 🟠Комбинированные ограничения Можно объединять несколько условий: public class MyClass<T> where T : class, IDisposable, new() { } Ставь 👍 и забирай 📚 Базу знаний
600