C# | Вопросы собесов
Ir al canal en Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
Mostrar más5 007
Suscriptores
Sin datos24 horas
-17 días
+1130 días
Archivo de publicaciones
5 007
Регистрируйтесь на Yandex Scale 2026
Главная конференция Yandex Cloud.
Узнайте о сервисах, которые меняют ваш бизнес.
4 офлайн-трека (AI, Infra + DevTools, Data, Security), онлайн-трек Deep Tech, воркшопы по ИИ и интерактивы. Подробнее о программе читайте в карточках🗒
📅24 сентября
🚗Москва + 💻онлайн
Участие бесплатное!
Зарегистрироваться
#реклама 16+
scale.yandex.cloud
О рекламодателе
5 007
🤔 В каком случае использовать интерфейс, в каком абстрактный класс?
1. Интерфейс:
- Используйте, когда требуется задать общий контракт для классов без предоставления реализации.
- Подходит для ситуаций, где объекты могут принадлежать разным иерархиям.
2. Абстрактный класс:
- Используйте, когда нужно предоставить частичную реализацию вместе с контрактом.
- Подходит для классов в одной иерархии, где есть общая логика.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 007
Дачная дача в Т-Банк Шопе
Футболки с огурцами, тыквами, капустой и другие крутые штуки, да еще и с финансовыми пожеланиями. Надо брать.
Посмотреть каталог
#реклама
tbank.ru
О рекламодателе
5 007
🤔 Что такое куки и где оно хранится в запросе?
Это небольшие фрагменты данных, которые веб-сайты сохраняют на устройствах пользователей для хранения информации о сессии и отслеживания состояния. Куки используются для различных целей, таких как аутентификация пользователей, хранение настроек и предпочтений, а также отслеживание активности пользователей на сайте.
🚩Основные свойства
🟠Имя (Name)
Уникальный идентификатор для каждого куки.
🟠Значение (Value)
Данные, которые хранит куки.
🟠Домен (Domain)
Домен, для которого куки действителен.
🟠Путь (Path)
Путь на сервере, для которого куки действителен.
🟠Время истечения (Expiration/Max-Age)
Дата или время, когда куки должен быть удален.
🟠Безопасность (Secure)
Указывает, что куки должны передаваться только через HTTPS.
🟠HTTPOnly
Указывает, что куки недоступен через JavaScript, только через HTTP(S) запросы.
🚩Где хранятся
🟠Установка куки с сервера (Set-Cookie)
Сервер отправляет куки в ответе на запрос клиента с использованием заголовка
Set-Cookie.
HTTP/1.1 200 OK
Set-Cookie: sessionId=abc123; Path=/; Expires=Wed, 09 Jun 2023 10:18:14 GMT
Content-Type: text/html
🟠Отправка куки клиентом (Cookie)
Браузер автоматически добавляет соответствующие куки в заголовок Cookie при каждом последующем запросе к серверу, для которого эти куки действительны.
GET /dashboard HTTP/1.1
Host: example.com
Cookie: sessionId=abc123
🚩Пример использования
Установка куки на сервере (пример на Node.js с использованием Express)
const express = require('express');
const app = express();
app.get('/', (req, res) => {
// Устанавливаем куки
res.cookie('sessionId', 'abc123', {
maxAge: 900000,
httpOnly: true
});
res.send('Куки установлены');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
Доступ к куки на клиенте (пример на JavaScript)
// Установка куки
document.cookie = "username=JohnDoe; expires=Thu, 18 Dec 2023 12:00:00 UTC; path=/";
// Получение всех куки
let cookies = document.cookie;
console.log(cookies);
🚩Важные моменты
🟠Безопасность
Куки с флагом Secure передаются только по HTTPS-соединениям. Куки с флагом HttpOnly недоступны через JavaScript, что помогает защитить их от XSS-атак.
🟠Размер и количество
Обычно один куки не должен превышать 4KB, и на одном домене может быть установлено не более 20-30 куки.
🟠Конфиденциальность
Куки могут содержать чувствительные данные, поэтому важно защищать их и использовать шифрование, если необходимо.
Ставь 👍 и забирай 📚 Базу знаний5 007
Patroni + Kubernetes: HA кластер PostgreSQL на проде
Строите платформу на Kubernetes и хотите запустить высокодоступный PostgreSQL?
📅 23 сентября в 20:00 разберем Patroni в контексте K8s. Operator, автоматический failover, интеграция с мониторингом (Prometheus). Узнаете, как управлять кластерами PostgreSQL в облачной среде. Для DevOps, SRE и инженеров платформ.
Узнать больше
#реклама 16+
otus.ru
О рекламодателе
5 007
Пожизненный PRO доступ на easyoffer — по цене одного года!
До 2 сентября вы можете купить PRO навсегда.
Покупаешь один раз — пользуешься всю жизнь.
– База вопросов и задач из собеседований
– Примеры видео-ответов на вопросы
– Записи реальных собеседований
– Тренажеры "Проработка вопросов" и "Реальное собеседование"
– Аналитика требований из вакансий
– Автоотклики на вакансии
– Агрегатор вакансий (скоро)
👉 Купить PRO со скидкой 70%: https://easyoffer.ru/pro
5 007
🤔 Что такое boxing и unboxing?
Boxing — это процесс преобразования значимого типа (например, int) в объект, чтобы хранить его в виде ссылочного типа. Unboxing— это обратный процесс преобразования объекта обратно в значимый тип. Эти операции создают накладные расходы на память и процессор, так как требуют размещения объектов в куче. Boxing и unboxing следует минимизировать для повышения производительности, особенно в критически важных местах программы.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 007
Квартиры Петербург Колпино Семейная Ипотека 3,5%
Жилой комплекс "Квартал Заречье"
Санкт-Петербург. Колпино.
4 девятиэтажных жилых корпуса
8-этажный крытый гараж на 496 парковочных мест
В живописном месте у реки Ижора.
На первых этажах будут размещены магазины, кофейни, поликлиника и зона коворкинга.
Перейти на сайт
Изучите все условия кредита (займа) на сайте в соответствующем разделе. Оценивайте свои финансовые возможности и риски. Финансовые услуги оказывает: ПАО «Сбербанк». Проектная декларация на сайте https://наш.дом.рф/. Застройщик: ООО «СЗ «ЗАГОРОДНАЯ, 71».
#реклама
квартал-заречье.рф
О рекламодателе
5 007
🤔 Есть ли разница в какой последовательности писать catch-и?
Да, порядок
catch имеет значение!
Исключения проверяются сверху вниз, и первый подходящий catch будет выполнен.
🚩Как работает `catch`?
1. Исключение проверяется по порядку catch-блоков.
2. Если catch подходит → он выполняется, остальные игнорируются.
3. Специфичные исключения (DivideByZeroException) нужно ставить выше общих (Exception).
🚩Ошибка: общий `catch` выше специфичных
Так делать нельзя!
try
{
int x = 5 / 0; // Ошибка
}
catch (Exception ex) // Ловит все исключения
{
Console.WriteLine("Общая ошибка");
}
catch (DivideByZeroException ex) // Никогда не выполнится!
{
Console.WriteLine("Деление на ноль!");
}
Правильный порядок catch
try
{
int x = 5 / 0;
}
catch (DivideByZeroException ex) // Специфичный `catch` первым
{
Console.WriteLine("Ошибка: деление на ноль!");
}
catch (Exception ex) // Общий `catch` внизу
{
Console.WriteLine("Произошла ошибка!");
}
Ставь 👍 и забирай 📚 Базу знаний5 007
Хочешь карьеру в ИТ? Начни с программы «Мини-СЕО»
⚡Попади в команду топ-менеджера Т-Банка и работай над стратегическими проектами компании.
В зависимости от трека ты сможешь:
— разрабатывать эффективные методологии для оценки влияния продукта на экосистему с Владимиром Любимовым;
— исследовать экосистемы и находить наиболее перспективные точки роста с Максимом Безруковым;
— развивать сегмент автолюбителей и заниматься региональной экспансией Т-Банка с Жорой Сукасяном;
— вести стратегический план развития 3P, развивать AI-продукты и искать, где AI может упростить работу команды, c Денисом Коротовым;
— участвовать в создании B2B-маркетплейса c Владимиром Абазовым.
Программа подойдет студентам и джуниор-специалистам, которые сильны в математике, аналитике и программировании. Успей подать заявку до 25 сентября!
Зарегистрироваться
#реклама 16+
t-miniceo.ru
О рекламодателе
5 007
🤔 Что такое Rest?
REST (Representational State Transfer) — это архитектурный стиль разработки веб-сервисов, который стал основным методом создания веб-API. Этот стиль был введён Роем Филдингом в его докторской диссертации в 2000 году и основывается на принципах, используемых в протоколе HTTP.
🚩Основные принципы
🟠Client-Server
Архитектура строится на разделении клиента и сервера. Это разделение позволяет разрабатывать клиентскую и серверную части независимо друг от друга, что упрощает разработку и тестирование.
🟠Stateless
Каждый запрос от клиента к серверу должен содержать всю информацию, необходимую серверу для его понимания и выполнения. Сервер не должен хранить информацию о состоянии клиента между запросами. Если это необходимо, состояние следует хранить на клиенте.
🟠Cacheable
Ответы сервера должны быть явно помечены как кэшируемые или некэшируемые, чтобы клиенты могли кэшировать данные и повышать производительность, уменьшая количество запросов к серверу.
🟠Uniform Interface
Важнейший из принципов REST — единый интерфейс, который упрощает и обобщает взаимодействие между клиентом и сервером. Этот интерфейс определяет стандартные методы и форматы обмена информацией, которые должны быть одинаковыми для всех ресурсов. Типичными методами являются GET, POST, PUT, DELETE.
🟠Layered System
Клиент не должен предполагать, что он напрямую соединён с сервером. Между ними может находиться несколько слоёв, таких как балансировщики нагрузки или кэширующие прокси.
🟠Code on Demand (optional)
Серверы могут временно расширять или настраивать функционал на клиентах, передавая им исполняемый код (например, JavaScript).
Ставь 👍 и забирай 📚 Базу знаний
5 007
🤔 Какие минусы есть у индексов с точки зрения оптимизации?
Индексы в базах данных, таких как SQL Server, MySQL или PostgreSQL, существенно улучшают производительность запросов, особенно для операций поиска, сортировки и фильтрации. Однако у индексов есть и минусы, которые могут негативно сказаться на производительности и других аспектах работы базы данных.
🟠Увеличение времени записи
Индексы замедляют операции вставки (
INSERT), обновления (UPDATE) и удаления (DELETE), так как при каждом изменении данных необходимо также обновлять индексы.
Вставка: При вставке новой записи нужно обновить все соответствующие индексы.
Обновление: При обновлении записи могут изменяться индексируемые колонки, что требует обновления индексов.
Удаление: При удалении записи нужно удалить соответствующие записи из индексов.
🟠Дополнительное использование памяти и дискового пространства
Индексы занимают дополнительное пространство на диске и в оперативной памяти. Чем больше индексов на таблице, тем больше требуется места для их хранения.
Дисковое пространство: Каждому индексу требуется место на диске для хранения его данных.
Память: Индексы занимают память при их использовании, особенно в случае часто запрашиваемых индексов, которые кэшируются в оперативной памяти.
🟠Замедление операций массовой загрузки данных
При массовой загрузке данных, например, при использовании операций LOAD DATA или BULK INSERT, наличие индексов замедляет процесс, так как индексы должны обновляться по мере добавления каждой записи.
🟠Проблемы с фрагментацией
Индексы могут фрагментироваться, особенно если в таблице часто выполняются операции вставки, обновления и удаления. Фрагментация индексов приводит к ухудшению производительности запросов.
Фрагментация: При частых изменениях данных индексы могут становиться фрагментированными, что увеличивает время доступа к данным.
Реорганизация: Периодически индексы нужно реорганизовывать или перестраивать, что требует дополнительных ресурсов и времени.
🟠Сложность управления
Управление индексами требует дополнительного администрирования и мониторинга. Нужно следить за эффективностью индексов, удалять неиспользуемые индексы и создавать новые по мере изменения запросов и структуры данных.
🟠Перекрестные индексы
Наличие нескольких индексов на одной таблице может привести к конфликтам при планировании запросов. Оптимизатор запросов может выбирать менее эффективные индексы, что ухудшает производительность.
🟠Влияние на производительность при ошибках в проектировании
Плохо спроектированные индексы могут негативно повлиять на производительность запросов. Например, индексы на часто изменяемых колонках или слишком большое количество индексов могут привести к значительным издержкам при обновлении данных.
🚩Пример ситуации
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
DepartmentID INT,
Salary DECIMAL(10, 2)
);
CREATE INDEX idx_firstname ON Employees(FirstName);
CREATE INDEX idx_lastname ON Employees(LastName);
CREATE INDEX idx_department ON Employees(DepartmentID);
🚩Минусы
➖Вставка данных
INSERT INTO Employees (EmployeeID, FirstName, LastName, DepartmentID, Salary)
VALUES (1, 'John', 'Doe', 10, 60000.00);
➖Обновление данных
UPDATE Employees
SET Salary = Salary * 1.05
WHERE DepartmentID = 10;
Ставь 👍 и забирай 📚 Базу знаний5 007
Быстрый офер в Яндекс
Если вы ML- или DL-инженер с опытом в доменных областях NLP, CV, RecSys и Classic ML от 2 лет, участвуйте в Weekend Offer ML*. Это один из наймовых ивентов Яндекса: вы проходите все секции онлайн в ускоренном режиме и сразу получаете обратную связь.
Как всё устроено:
✅ до 4 сентября — регистрация;
✅ 12 сентября — всего две технические секции;
✅ 13 сентября — финальные интервью с командами.
Если хотите работать в одной из команд Яндекса — R&D, Алиса и Умные устройства, Поиск с Алисой AI, Независимый Ecom, Рекламные технологии Яндекса — регистрируйтесь!
⚡ Подробности и полезные ссылки — на сайте. После регистрации с вами свяжется рекрутер и расскажет все детали.
Зарегистрироваться
#реклама 16+
yandex.ru
О рекламодателе
5 007
🤔 Что такое Redis?
Это система управления базами данных с открытым исходным кодом, работающая в памяти и поддерживающая множество типов данных, таких как строки, списки, множества, хеши и другие. Redis часто используется как кэш, брокер сообщений и база данных. Он известен своей высокой производительностью, низкой задержкой и простотой в использовании.
🚩Особенности
🟠Работа в памяти
Redis хранит все данные в памяти, что обеспечивает очень быструю скорость чтения и записи. Данные также могут периодически сохраняться на диск для обеспечения долговечности.
🟠Поддержка различных типов данных
Строки (Strings): Самый простой тип данных в Redis, который может содержать текст или двоичные данные.
Списки (Lists): Упорядоченные коллекции строк, которые можно использовать как очереди или стеки.
Множества (Sets): Неупорядоченные коллекции уникальных строк.
Упорядоченные множества (Sorted Sets): Коллекции уникальных строк, каждая из которых связана с числовым значением (score), определяющим порядок.
Хеши (Hashes): Коллекции пар "ключ-значение", где каждый хеш связан с ключом.
Bitmaps и HyperLogLogs: Для эффективного хранения и обработки больших объемов данных.
🟠Высокая производительность
Благодаря хранению данных в памяти и простому протоколу клиент-сервер, Redis обеспечивает очень высокую скорость операций.
🟠Поддержка репликации
Redis поддерживает мастер-слейв репликацию, что позволяет создать резервные копии данных и обеспечить отказоустойчивость.
🟠Кластеризация
Redis Cluster позволяет распределить данные по нескольким узлам, обеспечивая горизонтальную масштабируемость.
🟠Поддержка Lua-скриптов
Redis позволяет выполнять атомарные операции с помощью Lua-скриптов.
🟠Транзакции
Redis поддерживает транзакции, позволяя выполнить несколько команд атомарно.
🚩Примеры использования
🟠Кэширование
Redis часто используется для кэширования данных, что позволяет значительно уменьшить задержку доступа и снизить нагрузку на базу данных.
using StackExchange.Redis;
using System;
class Program
{
static void Main()
{
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
IDatabase db = redis.GetDatabase();
db.StringSet("key", "value");
string value = db.StringGet("key");
Console.WriteLine(value);
}
}
🟠Сессии
Хранение сессий пользователя для веб-приложений, что обеспечивает быстрое и эффективное управление состоянием.
🟠Очереди сообщений
Использование списков или упорядоченных множеств для организации очередей сообщений.
using StackExchange.Redis;
using System;
class Program
{
static void Main()
{
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
IDatabase db = redis.GetDatabase();
db.ListLeftPush("queue", "task1");
db.ListLeftPush("queue", "task2");
string task = db.ListRightPop("queue");
Console.WriteLine(task);
}
}
🟠Счетчики и рейтинги
Использование упорядоченных множеств для реализации счетчиков, рейтингов или систем рекомендаций.
using StackExchange.Redis;
using System;
class Program
{
static void Main()
{
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
IDatabase db = redis.GetDatabase();
// Add scores for users
db.SortedSetAdd("scores", "user1", 100);
db.SortedSetAdd("scores", "user2", 200);
// Retrieve scores with scores included
var scores = db.SortedSetRangeByRankWithScores("scores", 0, -1);
foreach (var score in scores)
{
Console.WriteLine($"{score.Element}: {score.Score}");
}
}
}
Ставь 👍 и забирай 📚 Базу знаний5 007
🤔 Что такое В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;
🚩Плюсы
➕Быстрый доступ
Обеспечивает быстрый доступ к данным благодаря сбалансированной структуре дерева.
➕Эффективная работа с большими объемами данных
Поддерживает операции вставки, удаления и поиска с логарифмической сложностью.
➕Поддержка диапазонных запросов
Эффективно обрабатывает диапазонные запросы благодаря упорядоченной структуре.
➕Автоматическая балансировка
Динамическая балансировка дерева обеспечивает равномерное время доступа и вставки/удаления.
🚩Минусы
➖Использование ресурсов
Требует дополнительного пространства для хранения структуры дерева и ключей.
➖Затраты на поддержание
Вставка и удаление могут требовать перестроения узлов, что влечет за собой дополнительные вычислительные затраты.
➖Фрагментация
При частых операциях вставки и удаления может возникнуть фрагментация, что может потребовать периодического обслуживания (например, реорганизации индекса).
Ставь 👍 и забирай 📚 Базу знаний5 007
🤔 Какие есть структуры данных?
- Линейные: массивы, списки, стеки, очереди.
- Связные: односвязные, двусвязные списки.
- Хеш-таблицы: Dictionary, HashMap.
- Деревья: бинарные, AVL, красно-чёрные.
- Графы: ориентированные, неориентированные.
- Кучи, матрицы, множества, деки, очереди с приоритетом.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 007
🤔 Что такое builder паттерн?
Это порождающий паттерн проектирования, который используется для пошагового создания сложных объектов. Он разделяет процесс конструирования объекта от его представления, позволяя создавать различные представления объекта, следуя одному и тому же процессу конструирования.
🚩Основные цели и задачи паттерна
🟠Разделение создания и представления
Отделяет процесс конструирования объекта от его представления, чтобы один и тот же процесс мог использоваться для создания различных представлений объекта.
🟠Пошаговое создание объектов
Позволяет создавать объекты поэтапно, контролируя процесс конструирования и предотвращая создание объекта в неконсистентном состоянии.
🟠Поддержка неизменяемых объектов
Может использоваться для создания неизменяемых объектов с большим количеством опций и параметров.
🚩Структура паттерна
🟠Builder
Определяет интерфейс для пошагового конструирования объекта.
🟠ConcreteBuilder
Реализует интерфейс Builder и создает конкретный продукт.
🟠Director
Управляет объектом Builder и задает алгоритм создания объекта.
🟠Product
Класс, представляющий создаваемый сложный объект.
🚩Пример использования паттерна Строитель
1⃣Определение продукта
public class House
{
public string Walls { get; set; }
public string Roof { get; set; }
public string Foundation { get; set; }
public override string ToString()
{
return $"House with {Walls}, {Roof} and {Foundation}";
}
}
2⃣Определение интерфейса Builder
public interface IHouseBuilder
{
void BuildFoundation();
void BuildWalls();
void BuildRoof();
House GetHouse();
}
3⃣Реализация конкретного Builder
public class ConcreteHouseBuilder : IHouseBuilder
{
private House _house = new House();
public void BuildFoundation()
{
_house.Foundation = "Concrete Foundation";
}
public void BuildWalls()
{
_house.Walls = "Concrete Walls";
}
public void BuildRoof()
{
_house.Roof = "Concrete Roof";
}
public House GetHouse()
{
return _house;
}
}
4⃣Определение Director
public class ConstructionDirector
{
private readonly IHouseBuilder _builder;
public ConstructionDirector(IHouseBuilder builder)
{
_builder = builder;
}
public void ConstructHouse()
{
_builder.BuildFoundation();
_builder.BuildWalls();
_builder.BuildRoof();
}
}
5⃣Использование паттерна Строитель
public class Program
{
public static void Main()
{
IHouseBuilder builder = new ConcreteHouseBuilder();
ConstructionDirector director = new ConstructionDirector(builder);
director.ConstructHouse();
House house = builder.GetHouse();
Console.WriteLine(house); // Output: House with Concrete Walls, Concrete Roof and Concrete Foundation
}
}
🚩Плюсы
➕Контроль процесса создания
Позволяет контролировать процесс создания сложных объектов поэтапно.
➕Гибкость
Разделение конструирования и представления позволяет использовать один и тот же процесс для создания различных объектов.
➕Читаемость кода
Код становится более читаемым и поддерживаемым, так как процесс создания объекта инкапсулирован в отдельный класс.
➕Поддержка сложных объектов
Упрощает создание объектов с множеством параметров и сложной иерархией.
Ставь 👍 и забирай 📚 Базу знаний5 007
🤔 В чём разница между отложенным и немедленным выполнением?
- Отложенное выполнение (deferred execution) — данные не вычисляются до тех пор, пока к ним не обратятся, как в IEnumerable, yield, LINQ.
- Немедленное выполнение (immediate execution) — результат вычисляется сразу при вызове метода (например, ToList(), Count()).
Отложенное выполнение экономит ресурсы, но требует внимательности к источнику данных.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 007
🤔 Что такое 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); // Ожидание с проверкой отмены
}
}
}
Ставь 👍 и забирай 📚 Базу знаний5 007
Gurufy
📚 Gurufy — ИИ-сервис, который собирает персональный курс под вашу задачу: план из глав, статьи с иллюстрациями и интерактивными виджетами, задания и ИИ-ассистент прямо в главе.
✨ Простой вопрос быстрее задать ChatGPT. Но когда на тему нужен день и больше, одним чатом её не закрыть: нет плана, нет визуализаций, нет заданий — всё тонет в одной переписке.
🎓 Готовый курс — десятки тысяч рублей против 500–1000 ₽.
⚡ Попробуйте сами. Старт бесплатный.
Узнать больше
#реклама 16+
gurufy.ru
О рекламодателе
