C# | Вопросы собесов
Ir al canal en Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
Mostrar más5 033
Suscriptores
Sin datos24 horas
-167 días
-3530 días
Archivo de publicaciones
5 033
🤔 Что произойдет, если попытаться изменить значение элемента в структуре, переданной в метод как параметр ref в C#?
5 033
Реклама для бизнеса любого уровня в Яндекс Директе
Создайте эффективную рекламную кампанию с алгоритмами Яндекс Директа 👌
Начните прямо сейчас ⚡
Зарегистрироваться
#реклама
direct.yandex.ru
О рекламодателе
5 033
Что такое Signalr ?
Спросят с вероятностью 22%
SignalR — это библиотека, разработанная для облегчения добавления функциональности "реального времени" в веб-приложения. Она позволяет серверу автоматически отправлять обновления клиентам в режиме реального времени, не требуя от клиентов периодически опрашивать сервер на предмет изменений.
Ключевые особенности:
1️⃣Двусторонняя связь: В отличие от традиционного HTTP, который является односторонним (клиент отправляет запрос, сервер отправляет ответ), SignalR позволяет обоюдный обмен данными между клиентом и сервером в реальном времени.
2️⃣Абстракция транспорта: Автоматически выбирает наилучший доступный способ транспорта данных между клиентом и сервером в зависимости от возможностей клиентского устройства и сервера. Он поддерживает различные технологии, включая WebSockets, Server-Sent Events и Long Polling.
3️⃣Масштабируемость: Поддерживает масштабируемость веб-приложений через использование внешних компонентов, таких как Redis или Azure Service Bus, для управления подключениями через несколько серверов.
4️⃣Управление подключениями: Автоматически управляет подключениями, обработкой переподключений и обеспечивает групповую отправку сообщений, позволяя сообщениям быть отправленными к выбранным пользователям или группам.
SignalR широко используется в приложениях, где требуется мгновенное взаимодействие с пользователем. Например:
✅Чаты и коллаборативные платформы: Для обмена сообщениями в реальном времени.
✅Игры: Для обновления состояния игры у всех участников сессии.
✅Финансовые платформы: Для обновления финансовой информации, такой как котировки акций, в реальном времени.
✅Мониторинг и уведомления: Для отправки уведомлений или предупреждений пользователям.
На сервере (C#):
public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
На клиенте (JavaScript):
const connection = new signalR.HubConnectionBuilder()
.withUrl("/chatHub")
.build();
connection.on("ReceiveMessage", function(user, message) {
const msg = message.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
const encodedMsg = user + " says " + msg;
const li = document.createElement("li");
li.textContent = encodedMsg;
document.getElementById("messagesList").appendChild(li);
});
connection.start().catch(function(err) {
return console.error(err.toString());
});
document.getElementById("sendButton").addEventListener("click", function(event) {
const user = document.getElementById("userInput").value;
const message = document.getElementById("messageInput").value;
connection.invoke("SendMessage", user, message).catch(function(err) {
return console.error(err.toString());
});
event.preventDefault();
});
Этот пример создает базовый чат, где сообщения отправляются в реальном времени всем подключенным клиентам через веб-сокеты, используя SignalR.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых5 033
Jobski - твой помощник при поиске работы в IT
Сервис индивидуально подбирает вакансии, учитывая ваш опыт, навыки и стек технологий.
Узнать больше
#реклама
jobski.ru
О рекламодателе
5 033
🤔 Какой интерфейс следует реализовать, чтобы объект мог быть упакован в Task в C#?
5 033
Как сделать миграцию методов ?
Спросят с вероятностью 22%
"миграция методов" обычно относится к процессу переноса функционала из одной части системы в другую, часто связанного с изменением технологического стека, обновлением архитектуры или улучшением дизайна программного обеспечения. Рассмотрим несколько ключевых аспектов и шагов, которые помогут организовать эффективную миграцию методов в вашем программном проекте.
1️⃣Планирование
✅Определение целей миграции: Четко определите, что вы хотите достичь с помощью миграции. Это может быть улучшение производительности, упрощение поддержки, интеграция новых функций или переход на новую технологическую платформу.
✅Аудит существующего кода: Оцените текущую реализацию методов, которые нужно мигрировать. Понимание зависимостей, сложности и использования поможет в планировании и предотвращении потенциальных проблем.
2️⃣Разработка стратегии миграции
✅Инкрементный подход: Рассмотрите возможность инкрементной миграции, когда вы постепенно переносите методы, что позволяет минимизировать риски и упростить отладку.
✅Прототипирование: Разработка прототипа для ключевых компонентов может помочь выявить основные проблемы на раннем этапе.
✅Рефакторинг: Миграция часто сопровождается рефакторингом существующего кода для улучшения его структуры и поддерживаемости.
3️⃣Выбор инструментов и технологий
✅Выбор языка программирования и платформы: В зависимости от целей миграции, выберите наиболее подходящие инструменты и технологии. Например, если вы мигрируете веб-сервисы, возможно, вы захотите перейти с PHP на Node.js или с .NET Framework на .NET Core.
✅Использование библиотек и фреймворков: Использование сторонних библиотек может значительно ускорить процесс миграции и упростить реализацию сложных функций.
4️⃣Реализация миграции
✅Тестирование: На каждом этапе миграции важно проводить тщательное тестирование, чтобы убедиться, что мигрированные методы работают как ожидается. Автоматизированные тесты могут значительно упростить этот процесс.
✅Документирование: Поддерживайте актуальной документацию на протяжении всего процесса миграции. Это важно для понимания изменений в коде и облегчения будущей поддержки и разработки.
5️⃣Деплоймент и мониторинг
✅Постепенный деплоймент: Если это возможно, используйте стратегии постепенного внедрения, такие как canary releases или blue-green deployments, чтобы минимизировать риски.
✅Мониторинг: После внедрения изменений активно мониторьте приложение для выявления любых проблем в работе, производительности или других неожиданных поведений.
Синхронный метод:
public string GetDataFromDb()
{
// Предположим, что это вызов к базе данных
Thread.Sleep(1000); // Имитация задержки
return "Data";
}
Асинхронный метод:
public async Task<string> GetDataFromDbAsync()
{
await Task.Delay(1000); // Имитация асинхронной задержки
return "Data";
}
Миграция с синхронного на асинхронный стиль улучшит производительность и отзывчивость приложений, особенно в среде веб-сервера.
Миграция методов — это сложный процесс, который требует тщательного планирования и внимания к деталям, но с правильным подходом и инструментами он может значительно улучшить архитектуру ПО и его общую производительность.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых5 033
Аренда облачного сервера с аттестатами УЗ-1, К-1.
Размещение и защита персональных данных в специальном сегменте облака, аттестованном в
соответствии со стандартами защиты персональных данных (ФЗ-152) УЗ 1-4 и
требованиями к ГИС (17 приказ ФСТЭК) класса К1.
- Хранение персональных данных УЗ 1-4
- Хранение ГИС по стандарту К-1
- Аудит защищенности ИСПДн
- Подключение к СМЭВ, RSNET, ЕГИСЗ
- Средства защиты сертифицированные ФСТЭК (VPN, NextGen FW, WAF, AntiVirus, DLP и др)
Подключите услугу сегодня со скидкой 50% на инфраструктуру.
Подать заявку
#реклама
cloud4y.ru
О рекламодателе
5 033
🤔 Какой метод позволяет создать глубокую копию объекта в C#?
5 033
Какие механизмы позволяют не нарушать принцип dependency inversion ?
Спросят с вероятностью 22%
Принцип инверсии зависимостей (Dependency Inversion Principle, DIP) является одним из пяти принципов SOLID, который играет важную роль в проектировании гибкой и устойчивой к изменениям архитектуры программного обеспечения. Этот принцип утверждает, что:
1️⃣Модули высокого уровня не должны зависеть от модулей низкого уровня. Оба типа модулей должны зависеть от абстракций.
2️⃣Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
Это означает, что вместо того, чтобы дизайн компонентов вашего приложения определялся конкретными реализациями, структура и взаимодействие компонентов должны быть основаны на абстракциях (например, интерфейсах). Это уменьшает жесткость связей между компонентами и облегчает тестирование, модификацию и расширение программы.
Механизмы для реализации принципа:
1️⃣Использование интерфейсов и абстрактных классов
Позволяют определять контракты для функционала, которые должны реализовать конкретные классы, не указывая, каким образом эта функциональность будет выполнена. Такой подход позволяет компонентам общаться друг с другом через абстракции, а не конкретные реализации.
2️⃣Внедрение зависимостей (Dependency Injection, DI)
Это техника, при которой один объект предоставляет зависимости другому объекту. Это может быть реализовано через конструктор, методы установки или прямое внедрение через свойства. Frameworks like Spring for Java, .NET Core’s built-in DI container, or Google Guice help manage dependencies at runtime, allowing for more flexible and decoupled code architectures.
3️⃣Инверсия управления (Inversion of Control, IoC) контейнеры
IoC контейнеры управляют созданием объектов и их жизненным циклом, а также реализуют DI для передачи зависимостей. Примеры таких контейнеров включают Autofac, Unity в .NET, или Spring IoC в Java.
4️⃣Фабричные методы
Этот шаблон проектирования используется для создания объектов без спецификации конкретных классов объектов. Класс Фабрика обычно возвращает объект базового типа или интерфейса, позволяя программе быть гибкой в отношении создаваемых объектов.
5️⃣Сервис-локатор
Хотя это менее предпочтительный способ по сравнению с DI (так как вводит глобальную зависимость), сервис-локатор может использоваться для управления зависимостями в приложении. Он позволяет извлекать экземпляры компонентов по запросу, используя конфигурацию, определённую в одном центральном месте.
public interface IDataRepository
{
void Save(string data);
}
public class DataRepository : IDataRepository
{
public void Save(string data)
{
Console.WriteLine("Data saved: " + data);
}
}
public class BusinessLogic
{
private readonly
IDataRepository _dataRepository;
// Constructor injection
public BusinessLogic(IDataRepository dataRepository)
{
_dataRepository = dataRepository;
}
public void ProcessData(string data)
{
_dataRepository.Save(data);
}
}
class Program
{
static void Main(string[] args)
{
IDataRepository repo = new DataRepository();
BusinessLogic logic = new BusinessLogic(repo);
logic.ProcessData("Example data");
}
}
В этом примере зависимость IDataRepository внедряется в BusinessLogic через конструктор, что обеспечивает слабую связанность и упрощает тестирование компонентов.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых5 033
🤔 Что произойдет при попытке изменить элементы ReadOnlyCollection?
5 033
Какие преимущества представляет C# 12 ?
Спросят с вероятностью 22%
Вот некоторые из функций и улучшений в C# 12:
1️⃣List Patterns
Списочные шаблоны позволяют упростить и сделать более интуитивно понятными проверки списков и массивов. Это расширение существующих возможностей сопоставления с образцом и позволяет разработчикам легко проверять содержимое коллекций.
2️⃣Required Properties
Обязательные свойства улучшат обработку данных, делая явным требование наличия значения для свойств во время создания объекта. Это облегчит создание более безопасных по типам и предсказуемых приложений, уменьшая вероятность ошибок, связанных с отсутствием данных.
3️⃣Improved Pattern Matching
Повышение возможностей сопоставления с образцом продолжает развиваться, обеспечивая более мощные и гибкие способы деконструкции и проверки данных без необходимости писать многословный и ошибочный код.
4️⃣Enhanced Lambdas
Улучшения в лямбда-выражениях, включая новые возможности типизации и возможно улучшения по производительности. Это делает лямбда-выражения еще более мощным инструментом для разработчиков.
5️⃣UTF-8 String Literals
Поддержка литералов строк в UTF-8 может быть добавлена для улучшения обработки текстовых данных, что особенно важно в приложениях, работающих с многими языками и большими объемами текстовых данных.
6️⃣Record Improvements
Записи (records) были введены в C# 9 и представляют собой неизменяемый тип данных, идеально подходящий для создания компактных объектов данных. Улучшения в записях могут включать новые способы работы с ними или расширение их функциональности.
7️⃣Static Virtual Members in Interfaces
Статические виртуальные члены в интерфейсах позволят создавать более гибкие и мощные абстракции, давая разработчикам больше контроля над реализацией и наследованием в их программных структурах.
C# 12 продолжает развивать язык в направлениях, улучшающих безопасность типов, производительность, и удобство программирования. Каждое новое обновление C# старается сделать язык более мощным и удобным для создания разнообразных приложений, от веб-сервисов до крупномасштабных систем. На момент вашего запроса полный список функций C# 12 еще может быть в стадии определения, и для точных деталей стоит обратить внимание на официальные ресурсы Microsoft и сообщества.NET.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых
5 033
Люди любят жаловаться на жизнь, а когда предлагаешь обратиться к психологу — это «дорого», «некогда», «я им не доверяю».
Кому действительно важно разобраться в себе и изменить жизнь, видит возможности, а не препятствия
Первый шаг к решению проблемы — это её осознание. В этом может помочь канал доказательного врача-психиатра и психотерапевта @Doctor_Kovalev, через терапевтические тексты которого можно поработать над:
✅ погружением в себя и определением причины своих непростых состояний
✅ понижением градуса тревожности
✅ повышением самооценки
✅ способностью эффективно контактировать с людьми
Реклама. Ковалев К.И. ИНН: 325502816794
5 033
Приглашаем на пикник для ИТ-специалистов
Отвлекитесь от экрана — оторвитесь на ИТ-пикнике 17 августа.
У фестиваля больше 17-ти ИТ-партнеров. Вас ждут воркшопы, лекции от спикеров известных компаний, нетворкинг, выступления топовых музыкантов и даже детская зона.
Ждем опытных ИТ-специалистов.
Зарегистрироваться
#реклама 16+
it-picnic.ru
О рекламодателе
5 033
🤔 Какой интерфейс используется для асинхронных потоков данных в C#?
5 033
❓Если вам интересно
- Почему батчевые update могут вызывать дедлоки
- Что делать, если одни и те же данные нужны в нескольких сервисах
- Как эффективно осуществлять пагинацию, когда записей очень много
✅ То подписывайтесь на канал Senior Backend разработчика с авторскими статьями про проектирование, архитектуру, базы данных
5 033
Что такое Action Executor и Action Executing ?
Спросят с вероятностью 22%
"Action Executor" и "Action Executing" относятся к компонентам и процессам, управляющим выполнением действий контроллера. Они являются частью жизненного цикла запроса в MVC и играют ключевую роль в обработке запросов и генерации ответов. Подробно рассмотрим каждый из этих терминов.
Action Executor
Это компонент, который отвечает за непосредственное выполнение метода действия контроллера. Когда запрос достигает контроллера, определённый метод действия должен быть вызван для обработки этого запроса. Задача Action Executor — обеспечить вызов этого метода с правильными параметрами, основываясь на данных запроса и конфигурации маршрутизации.
Обрабатывает логику выбора и вызова нужного метода действия, а также управляет привязкой данных запроса к параметрам метода. В случае ASP.NET Core, это может включать использование
IActionInvoker или аналогичных интерфейсов, которые реализуют различные стратегии для вызова действий контроллера.
Action Executing
Относится к процессу, происходящему непосредственно перед выполнением метода действия в контроллере. В ASP.NET MVC это часто управляется с помощью фильтров действий, специально ActionExecutingContext.
Фильтры действий позволяют разработчикам вставлять дополнительную логику до или после выполнения метода действия контроллера. Эти фильтры могут быть использованы для различных целей, таких как:
✅Аутентификация и авторизация: Проверка того, имеет ли пользователь права на выполнение данного действия.
✅Валидация данных: Проверка входящих данных на корректность перед обработкой методом действия.
✅Кэширование: Определение, может ли ответ быть извлечён из кэша, чтобы избежать выполнения метода действия.
✅Логирование и аудит: Запись информации о запросе и его обработке.
Фильтры действий в ASP.NET MVC реализуются через реализацию интерфейсов IActionFilter или IAsyncActionFilter и могут быть применены глобально или на уровне отдельных контроллеров или действий.
public class LogActionFilter : IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
// Логика перед выполнением действия
Log.Information("Action {ActionName} is executing.", context.ActionDescriptor.DisplayName);
}
public void OnActionExecuted(ActionExecutedContext context)
{
// Логика после выполнения действия
Log.Information("Action {ActionName} executed.", context.ActionDescriptor.DisplayName);
}
}
В этом примере LogActionFilter логирует информацию до и после выполнения любого действия контроллера, к которому он применяется. Это помогает в мониторинге и отладке приложения, предоставляя точки данных о выполнении его компонентов.
Action Executor и Action Executing являются важными аспектами в управлении жизненным циклом запроса, позволяя контролировать, как запросы обрабатываются и ответы генерируются в их веб-приложениях.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых5 033
Получи грант на обучение в Центральном университете
Получи несгораемый грант до 2 800 000 ₽ на учебу в бакалавриате Центрального университета. Гранты покрывают от 25 до 100% стоимости обучения. Сумма гранта не уменьшается, а может увеличиться за дополнительные достижения и успехи в учебе
Подать заявку
#реклама
apply.centraluniversity.ru
О рекламодателе
5 033
🤔 Что произойдет, если у метода в C# нет возвращаемого значения и указать return?
5 033
Что такое сборщик мусора ?
Спросят с вероятностью 22%
Сборщик мусора (Garbage Collector, GC) — это форма автоматического управления памятью. Он отслеживает каждый объект, выделенный в куче, и определяет, какие объекты более не доступны для приложения, а затем освобождает память, занимаемую этими объектами. Это ключевой компонент во многих современных языках программирования и средах выполнения, облегчая задачу управления памятью.
Основные этапы работы:
1️⃣Маркировка (Marking): Сборщик мусора периодически проходит через все объекты в куче, начиная с "корней" (объектов, непосредственно доступных в программе, например, через переменные в стеке вызовов и глобальные переменные). Он отмечает все объекты, до которых можно добраться напрямую или косвенно.
2️⃣Очистка (Sweeping): После маркировки доступных объектов, сборщик мусора удаляет все непомеченные объекты, освобождая ресурсы, которые они занимали.
3️⃣Компактификация (Compacting): Некоторые сборщики мусора перемещают оставшиеся объекты, чтобы уменьшить фрагментацию памяти и улучшить производительность работы с памятью.
Почему он важен
Преимущества:
✅Предотвращение утечек памяти: Автоматически освобождает память, которая больше не используется, тем самым предотвращая утечки памяти, которые могут привести к исчерпанию доступных ресурсов.
✅Уменьшение ошибок программирования: Уменьшает количество ошибок, связанных с управлением памятью, таких как двойное освобождение памяти или ошибки доступа к "висячим" (уже освобожденным) указателям.
✅Упрощение разработки: Разработчикам не нужно явно освобождать память, что упрощает процесс написания и поддержки кода.
Ограничения:
Несмотря на многие преимущества, сборщик мусора также имеет недостатки:
✅Производительность: Процесс сборки мусора может быть ресурсоёмким и может привести к заметным паузам в выполнении программы, особенно если куча большая.
✅Непредсказуемость: Точное время сборки мусора может быть непредсказуемым, что может создавать проблемы в приложениях с реальным временем.
В среде .NET, например, сборщик мусора управляется CLR (Common Language Runtime) и работает автоматически, облегчая задачу управления памятью для разработчиков C# и других .NET-языков. Сборка мусора управляется JVM (Java Virtual Machine), которая предлагает разные типы сборщиков мусора, настраиваемых под различные типы приложений.
Сборщик мусора является мощным инструментом для управления памятью, обеспечивая безопасность и удобство, но требует понимания его влияния на производительность приложения.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых
5 033
Запустите рекламу в телеграм-каналах с Яндекс Директом
Перфоманс-реклама теперь в телеграм-каналах ⚡
Яндекс Директ знает, как привлечь целевую аудиторию 💰👌
Попробовать
#реклама
yandex.ru
О рекламодателе
¡Ya disponible! Investigación de Telegram 2025 — los principales insights del año 
