ch
Feedback

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

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

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

前往频道在 Telegram

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

显示更多
5 009
订阅者
-124 小时
-27 天
+1730 天
帖子存档
🤔 Какие проблемы могут быть при многопоточности и как их избежать? Многопоточное программирование позволяет улучшить производительность программ за счет параллельной обработки данных, но это также влечет за собой ряд специфических проблем. Понимание этих проблем и способы их предотвращения или управления ими критически важны для создания надежных и эффективных многопоточных приложений. 🚩Основные проблемы 🟠Гонки данных (Race Conditions) Проблема: Два или более потоков пытаются одновременно изменить общие данные или один поток читает данные во время их изменения другим потоком, что приводит к непредсказуемым результатам. Решение: Использование механизмов синхронизации, таких как блокировки (locks), мьютексы (mutexes) и семафоры (semaphores), для контроля доступа к общим ресурсам. 🟠Взаимная блокировка (Deadlock) Проблема: Два или более потоков бесконечно ожидают ресурсы, заблокированные друг другом, в результате чего они не могут продолжить выполнение. Решение: Разработка программы таким образом, чтобы потоки запрашивали ресурсы всегда в одном и том же порядке, использование таймаутов для блокировок, чтобы потоки могли выйти из состояния ожидания. 🟠Голодание (Starvation) Проблема: Один или несколько потоков не могут получить доступ к необходимым ресурсам, потому что другие потоки постоянно занимают их. Решение: Применение справедливых блокировок (fair locks) или алгоритмов планирования, которые обеспечивают всем потокам равный доступ к ресурсам. 🟠Переключение контекста (Context Switching) Проблема: Частое переключение контекста между потоками может значительно снизить производительность системы, особенно если потоки часто блокируются и разблокируются. Решение: Оптимизация количества потоков, уменьшение зависимостей между потоками и уменьшение использования блокировок. 🟠Проблемы с проектированием Проблема: Неправильное проектирование многопоточной архитектуры может привести к сложностям в поддержке и расширении программного обеспечения. Решение: Использование абстракций высокого уровня для работы с потоками, таких как пулы потоков, параллельные библиотеки (например, TPL в .NET) и модели акторов.
private static readonly object _lock = new object();
private static int _sharedResource;

public static void UpdateResource()
{
    lock (_lock)
    {
        _sharedResource++;
        // Выполнение некоторой работы с общим ресурсом
    }
}
Избегание взаимной блокировки
private static readonly object _lock1

 = new object();
private static readonly object _lock2 = new object();

public static void Method1()
{
    lock (_lock1)
    {
        // Некоторые действия
        lock (_lock2)
        {
            // Дополнительные действия
        }
    }
}

public static void Method2()
{
    lock (_lock1)
    {
        // Аналогичные действия
        lock (_lock2)
        {
            // Дополнительные действия
        }
    }
}
Ставь 👍 и забирай 📚 Базу знаний

Бизнес образование в Moscow Business Academy (MBA) Получите современное бизнес образование от международных экспертов. ✅Более
Бизнес образование в Moscow Business Academy (MBA) Получите современное бизнес образование от международных экспертов. ✅Более 37 направлений обучения. ✅Международные дипломы. ✅Online и очные форматы обучения. ✅Разборы практических бизнес-кейсов. Скидка на все программы online до 10 декабря! Узнать больше #реклама 16+ moscow.mba О рекламодателе

🤔 Что такое builder паттерн? Это паттерн проектирования, позволяющий создавать сложные объекты пошагово, изолируя конструирование от представления. Это упрощает управление процессом создания объекта. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Квартиры от 20 600 руб/мес. Скидки до 4 млн ₽ Только в апреле! В ЖК «Сердце Сибири» от федерального застройщика «Страна Девел
Квартиры от 20 600 руб/мес. Скидки до 4 млн ₽ Только в апреле! В ЖК «Сердце Сибири» от федерального застройщика «Страна Девелопмент» весенняя оттепель: ✅ Квартиры от 20 600 руб/мес — по семейной ипотеке; ✅ Скидки до 4 млн ₽ — на квартиры в одном из новых домов. Воспользуйтесь предложением до 30.04 и переезжайте в ЖК комфорт-класса с бульваром, прудом, фонтаном и охраной. Получите подборку планировок по ссылке — Узнать больше Изучите все условия кредита (займа) на сайте в соответствующем разделе. Оценивайте свои финансовые возможности и рискиПроектная декларация на сайте https://наш.дом.рф/. Застройщик: ООО СЗ "СТРАНА.КОММУНИСТИЧЕСКАЯ". Финансовые услуги оказывает: ПАО «МОСКОВСКИЙ КРЕДИТНЫЙ БАНК». #реклама strana-development.ru О рекламодателе

🤔 Какие есть способы (протоколы) обмена данными между сервером и клиентом? При взаимодействии клиента и сервера используются различные*протоколы обмена данными, в зависимости от задачи, скорости, надежности и реального времени. 🚩HTTP(S) – стандартный протокол веба Клиент (браузер, мобильное приложение) делает запрос к серверу. Сервер отправляет ответ с данными (HTML, JSON, XML). Использует методы: GET, POST, PUT, DELETE и т. д.
fetch('https://api.example.com/data')
  .then(response => response.json())
  .then(data => console.log(data));
🚩WebSocket – двусторонняя связь в реальном времени Клиент устанавливает постоянное соединение с сервером. Сервер и клиент могут отправлять друг другу данные в любое время. Используется для чата, онлайн-игр, бирж, обновлений в реальном времени.
const socket = new WebSocket('wss://example.com/socket');

socket.onopen = () => socket.send('Привет, сервер!');
socket.onmessage = event => console.log('Сообщение от сервера:', event.data);
🚩SSE (Server-Sent Events) – поток данных от сервера Клиент делает HTTP-запрос, но соединение не закрывается. Сервер постепенно отправляет данные в виде событий (event-stream). Используется для новостей, биржевых данных, уведомлений.
const eventSource = new EventSource('/events');

eventSource.onmessage = event => console.log('Новое сообщение:', event.data);
🚩gRPC – быстрый RPC поверх HTTP/2 Клиент вызывает удаленные методы напрямую как обычные функции. Работает на HTTP/2, использует бинарный формат Protocol Buffers (быстрее, чем JSON). Используется для высокопроизводительных API, микросервисов.
import grpc
import my_service_pb2
import my_service_pb2_grpc

channel = grpc.insecure_channel('localhost:50051')
stub = my_service_pb2_grpc.MyServiceStub(channel)
response = stub.MyMethod(my_service_pb2.MyRequest(name="Alice"))
print(response.message)
🚩MQTT – лёгкий протокол для IoT Работает по модели издатель/подписчик. Клиент подписывается на тему (topic) и получает сообщения, когда кто-то публикует данные. Используется для умных устройств, датчиков, IoT.
const mqtt = require('mqtt');
const client = mqtt.connect('mqtt://broker.hivemq.com');

client.on('connect', () => {
    client.subscribe('myTopic');
    client.publish('myTopic', 'Привет, MQTT!');
});

client.on('message', (topic, message) => {
    console.log(`Сообщение из ${topic}: ${message.toString()}`);
});
Ставь 👍 и забирай 📚 Базу знаний

Бесплатное льготное обучение: 3 месяца Мы ищем людей, которые хотят работать в IT-сфере из дома 💰 Оплата от 150.000 рублей в
Бесплатное льготное обучение: 3 месяца Мы ищем людей, которые хотят работать в IT-сфере из дома 💰 Оплата от 150.000 рублей в месяц Образование, место жительства, трудовой стаж — не важны! Подходит, как для подработки / декретного отпуска, так и для полной занятости. Если заинтересовались, то для старта нужно: — пройти короткий тест — заполнить анкету На что можно рассчитывать: ✅ удаленная работа ✅ зп от 150.000 рублей (потолка нет) ✅ стабильная подработка, если не хотите уходить с основной работы ⚡ Количество бесплатных мест ограничено. Успейте пройти тест и оставить заявку: Узнать больше #реклама technolium.ru О рекламодателе

🤔 Что такое ORM? Это технология для работы с базами данных, преобразующая данные между объектами приложения и реляционной БД. 1. Упрощает выполнение CRUD-операций без написания SQL-запросов. 2. Примеры: Entity Framework, Hibernate, SQLAlchemy. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Зачем нужны поколения для сборщика мусора в JS? В JavaScript (как и в C#) сборщик мусора (Garbage Collector, GC) использует поколения (generational GC) для оптимизации работы с памятью. Это помогает быстрее и эффективнее очищать ненужные объекты, минимизируя задержки в работе программы. 🚩Зачем нужны поколения в GC? 🟠Большинство объектов "живут" недолго В среднем, переменные и объекты в JS создаются и быстро перестают использоваться. Например, временные объекты в функциях. 🟠Некоторые объекты "живут" долго Например, глобальные переменные, кэш данных или объекты в setInterval. 🟠Очистка памяти должна быть быстрой Проверять всю память каждый раз — дорого по времени. GC должен быстро убирать "мусор", не замедляя выполнение кода. 🚩Как работают поколения? JS-движки, например V8 (Chrome, Node.js), используют Generational Garbage Collection — деление объектов на молодые (new generation) и старые (old generation). 🟠Молодое поколение (Young Generation) Сюда попадают новые объекты. GC часто проверяет эту область и быстро очищает. Если объект "выжил" несколько проверок, он переносится в старшее поколение. 🟠Старое поколение (Old Generation) Здесь хранятся "долгоживущие" объекты. Проверяется реже, так как здесь объекты реже становятся мусором. Очистка более сложная и дорогая по времени. Пример работы GC в V8
function createObjects() {
    let obj1 = { name: "temp" }; // попадает в Young Generation
    let obj2 = { data: new Array(1000).fill(0) }; // тоже в Young Generation
}

// После выхода из функции obj1 и obj2 становятся мусором и очищаются GC.
Ставь 👍 и забирай 📚 Базу знаний

Дизайн в FIGMA с нуля. Бесплатный курс + портфолио ✅ Личный наставник ✅ Подойдет новичкам ✅ Разбор всех ваших Д/З ✅ 4+ работы
Дизайн в FIGMA с нуля. Бесплатный курс + портфолио ✅ Личный наставник ✅ Подойдет новичкам ✅ Разбор всех ваших Д/З ✅ 4+ работы себе в портфолио Попробуй себя в дизайне это бесплатно! Узнать больше #реклама 16+ yudaevschool.com О рекламодателе

🤔 Что такое SignalR? SignalR — это библиотека от Microsoft для обеспечения двусторонней связи в реальном времени между клиентом и сервером. Она использует протоколы, такие как WebSockets, для высокой производительности, а в случае их недоступности — другие технологии, например, long polling. SignalR упрощает разработку чатов, уведомлений и других динамичных приложений. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Сколько приложений нужно вашей команде для работы? Всего один сервис — Битрикс24! А внутри десятки инструментов для совместно
+7
Сколько приложений нужно вашей команде для работы? Всего один сервис — Битрикс24! А внутри десятки инструментов для совместной работы и бизнеса. Читайте подробнее в карточках. Регистрируйтесь сейчас, чтобы забрать их все себе бесплатно😊 Зарегистрироваться #реклама 16+ office-online.bitrix24.ru О рекламодателе

🤔 Что такое Dispose? Dispose метод является частью паттерна управления ресурсами, известного как "Dispose Pattern". Этот метод реализуется в классах через интерфейс IDisposable. Цель — явное освобождение неуправляемых ресурсов и, по желанию, управляемых ресурсов, прежде чем сборщик мусора освободит объект. Это важно для эффективного управления памятью и другими системными ресурсами. 🚩Неуправляемые и управляемые ресурсы 🟠Неуправляемые ресурсы включают в себя ресурсы, которые не управляются средой CLR (Common Language Runtime), например, файловые дескрипторы, сетевые соединения или указатели на память, выделенную вне .NET среды. 🟠Управляемые ресурсы это объекты .NET, которые занимают память и потенциально удерживают ссылки на неуправляемые ресурсы. 🚩Как он работает Должен освобождать все неуправляемые ресурсы, занимаемые объектом, а также должен иметь возможность освобождать управляемые ресурсы, если это необходимо. Как правило, управляемые ресурсы освобождаются сами сборщиком мусора, но если управляемый ресурс включает в себя неуправляемые ресурсы, тогда Dispose может быть вызван для их явного освобождения.
public class ResourceHolder : IDisposable
{
    private bool disposed = false;

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        if (!disposed)
        {
            if (disposing)
            {
                // Освобождение управляемых ресурсов
            }
            // Освобождение неуправляемых ресурсов
            disposed = true;
        }
    }

    ~ResourceHolder()
    {
        Dispose(false);
    }
}
Пример использования Dispose
using (var resource = new ResourceHolder())
{
    // Использование ресурса
}
// Метод Dispose автоматически вызывается при выходе из блока using
Ставь 👍 и забирай 📚 Базу знаний

Бесплатное льготное обучение: 3 месяца Ищем людей, которые хотят обучиться и работать в IT-сфере из дома В конце обучения вы
Бесплатное льготное обучение: 3 месяца Ищем людей, которые хотят обучиться и работать в IT-сфере из дома В конце обучения вы пройдете стажировку и устроитесь на работу с зп от 150.000 рублей Образование, место жительства, трудовой стаж — не важны! Для старта нужно: — пройти короткий тест — заполнить анкету На что можно рассчитывать, после обучения: ✅ удаленная работа ✅ зп от 150.000 рублей (потолка нет) ✅ стабильная подработка, если не хотите уходить с основной работы ⚡ Осталось всего 47 бесплатных мест. Успейте пройти тест и оставить заявку: Узнать больше #реклама 16+ technolium.ru О рекламодателе

🤔 Чем Action отличается от Func? Action<T> представляет метод, который ничего не возвращает (void), а Func<T, TResult> – метод, который возвращает значение. Func всегда имеет возвращаемый тип, а Action – нет. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Онлайн-магистратура «Управление IT-продуктами» от МФТИ День открытых дверей 2 апреля в 19:00 мск | Онлайн Эксперты Яндекса и МФТИ расскажут об очной онлайн-магистратуре для карьеры в IT. Всё о поступлении и обучении, выступления экспертов, ответы на вопросы. Записаться онлайн #реклама 16+ practicum.yandex.ru О рекламодателе

🤔 Какие бывают типы данных? В C# существует множество различных типов данных, которые можно разделить на две основные категории: значимые типы (value types) и ссылочные типы (reference types). Рассмотрим каждую из этих категорий и их подтипы. 🚩Значимые типы (Value Types) Значимые типы хранят данные непосредственно в своей памяти. Они обычно располагаются в стеке и имеют фиксированный размер. К значимым типам относятся: 🟠Простые типы (Simple Types) Числовые типы Целочисленные типы: byte (8 бит) sbyte (8 бит) short (16 бит) ushort (16 бит) int (32 бита) uint (32 бита) long (64 бита) ulong (64 бита) Вещественные типы: float (32 бита) double (64 бита) Десятичный тип: decimal (128 бит) Логический тип bool (1 бит, значения true или false) Символьный тип char (16 бит, символы в формате Unicode) 🟠Структуры (Structs) Пользовательские типы, которые могут содержать поля, свойства и методы. Пример: struct Point { public int X; public int Y; } 🟠Перечисления (Enums) Специальные типы, представляющие набор именованных констант. Пример: enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday } 🟠Nullable Types Типы, которые могут принимать значение null. Пример: int?, double? 🚩Ссылочные типы (Reference Types) 🟠Классы (Classes) Основные объекты в C#, могут содержать поля, свойства, методы и события. Пример: class Person { public string Name; public int Age; } 🟠Интерфейсы (Interfaces) Определяют контракт, который должны реализовать классы. Пример: interface IMovable { void Move(); } 🟠Массивы (Arrays) Коллекции однотипных элементов. Пример: int[] numbers = new int[5]; 🟠Делегаты (Delegates) Типы, которые представляют собой ссылки на методы. Пример: delegate void Process(int value); 🟠Строки (Strings) Непосредственно представляют собой последовательность символов. Пример: string message = "Hello, World!"; 🟠Записи (Records) Новый тип в C# 9.0, предназначенный для неизменяемых объектов. Пример: record Person(string Name, int Age); 🚩Примеры и использование Значимые типы
int a = 5;
float b = 3.14f;
bool isTrue = true;
char letter = 'A';
Ссылочные типы
string message = "Hello, World!";
Person person = new Person { Name = "Alice", Age = 30 };

int[] numbers = new int[] { 1, 2, 3, 4, 5 };
Ставь 👍 и забирай 📚 Базу знаний

Вебинар для бизнеса: как эффективно проводить пентесты Комплексный пентест — надежное решение для бизнеса, чтобы от и до прос
Вебинар для бизнеса: как эффективно проводить пентесты Комплексный пентест — надежное решение для бизнеса, чтобы от и до просканировать внутренний и внешний периметр ИТ-безопасности. На вебинаре 17 апреля расскажем о том, как эффективно использовать результаты пентестов, чтобы они работали на пользу бизнеса. Главные темы вебинара: - Как выявить реальные уязвимости и оценить их влияние. - Какие методы используют злоумышленники и как пробивают защиту. - Как на основе отчета о пентесте усилить кибербезопасность компании. Вас ждут разборы более 200 реальных проектов по пентесту в различных секторах бизнеса. Регистрируйтесь, чтобы обеспечить качественную защиту инфраструктуры своей компании. Зарегистрироваться #реклама 16+ rt-solar.ru О рекламодателе

🤔 Что такое АУС-2? Это автоматизированная управляющая система второго уровня (чаще встречается в контексте производств, ТЭК или крупных предприятий). Конкретная расшифровка зависит от контекста (например, у «Газпрома» или РЖД может быть своя трактовка). Обычно речь о высокоуровневом управлении технологическими процессами, над АСУ ТП. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Регистрация на Cloud Security Launch Day открыта 9 апреля пройдёт первый онлайн-запуск продуктов информационной безопасности
Регистрация на Cloud Security Launch Day открыта 9 апреля пройдёт первый онлайн-запуск продуктов информационной безопасности от Yandex Cloud — Cloud Security Launch Day. В программе сценарии эффективного решения задач информационной безопасности и запуски новых продуктов ИБ от Yandex Cloud. Мероприятие будет полезно CISO, менеджерам по информационной безопасности и руководителям SOC. Присоединяйтесь, чтобы увидеть реальные сценарии управления безопасностью в облаке и получить возможность стать одним из первых пользователей новых сервисов. Зарегистрироваться #реклама 16+ yandex.cloud О рекламодателе Реклама на Яндексе

🤔 Что такое 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); // Ожидание с проверкой отмены
        }
    }
}
Ставь 👍 и забирай 📚 Базу знаний