C# | Вопросы собесов
الذهاب إلى القناة على Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads
إظهار المزيد5 001
المشتركون
-124 ساعات
-57 أيام
-830 أيام
أرشيف المشاركات
5 001
5 001
5 001
Как повысить эффективность вебинаров?
Организация продающего вебинара - не простая задача, ведь необходимо предусмотреть множество деталей: удобную дату, вовлекающий контент, методы продвижения и взаимодействия с участниками.
Вебинары от МТС Линк помогают привлекать новых клиентов и увеличивать конверсию из участника в лид. В сервисе доступен анализ поведения пользователей во время вебинара, синхронный перевод, автовебинары и интерактивные инструменты для вовлечения участников.
Делимся методичкой с кейсами, чек-листами и инструкциями для маркетологов, PR и event-менеджеров, чтобы сделать вебинары эффективным инструментом для лидогенерации.
Получите методичку бесплатно на сайте.
Скачать
#реклама 16+
mts-link.ru
О рекламодателе
5 001
Repost from Идущий к IT
10$ за техническое собеседование на английском языке:
1. Отправьте запись технического собеседования на английском языке файлом на этот аккаунт
2. Добавьте ссылку на вакансию или пришлите название компании и должность
3. Напишите номер кошелка USDT (Tether) на который отправить 10$
🛡 Важно:
– Запись будет использована только для сбора данных о вопросах
– Вы останетесь анонимны
– Запись нигде не будет опубликована
🤝 Условия:
– Внятный звук, различимая речь
– Допустимые профессии:
• Любые программисты
• DevOps
• Тестировщики
• Дата сайнтисты
• Бизнес/Системные аналитики
• Прожекты/Продукты
• UX/UI и продукт дизайнеры
5 001
🤔 Какой из методов интерфейса IEnumerator должен быть реализован для поддержки итерации в C#?
5 001
📌 Расскажи про конкурентные коллекции?
💬 Спрашивают в 22% собеседований
Конкурентные коллекции в C# — это специализированные коллекции, которые обеспечивают безопасное выполнение операций в многопоточной среде. В стандартной библиотеке .NET существуют несколько типов таких коллекций, каждая из которых предназначена для различных сценариев использования. Давайте рассмотрим основные из них.
1️⃣ ConcurrentDictionary<TKey, TValue>:
Это словарь, который позволяет безопасно добавлять, удалять и изменять элементы из нескольких потоков одновременно. Он реализует интерфейс
IDictionary<TKey, TValue>.
Пример:
var concurrentDictionary = new ConcurrentDictionary<int, string>();
concurrentDictionary.TryAdd(1, "value1");
concurrentDictionary.TryAdd(2, "value2");
string value;
if (concurrentDictionary.TryGetValue(1, out value))
{
Console.WriteLine(value); // Output: value1
}
2️⃣ ConcurrentQueue<T>:
Это очередь, которая обеспечивает безопасное добавление элементов в конец и извлечение из начала в многопоточной среде. Она реализует интерфейс IProducerConsumerCollection<T>.
Пример:
var concurrentQueue = new ConcurrentQueue<int>();
concurrentQueue.Enqueue(1);
concurrentQueue.Enqueue(2);
int result;
if (concurrentQueue.TryDequeue(out result))
{
Console.WriteLine(result); // Output: 1
}
3️⃣ ConcurrentStack<T>:
Это стек, который обеспечивает безопасное добавление и извлечение элементов в многопоточной среде. Он также реализует интерфейс IProducerConsumerCollection<T>.
Пример:
var concurrentStack = new ConcurrentStack<int>();
concurrentStack.Push(1);
concurrentStack.Push(2);
int result;
if (concurrentStack.TryPop(out result))
{
Console.WriteLine(result); // Output: 2
}
4️⃣ ConcurrentBag<T>:
Это коллекция, которая позволяет безопасно добавлять и извлекать элементы в многопоточной среде. Она не гарантирует порядок элементов, поэтому используется в случаях, когда порядок не имеет значения.
Пример:
var concurrentBag = new ConcurrentBag<int>();
concurrentBag.Add(1);
concurrentBag.Add(2);
int result;
if (concurrentBag.TryTake(out result))
{
Console.WriteLine(result); // Output: 1 или 2
}
5️⃣ BlockingCollection<T>:
Это коллекция, которая поддерживает ограниченную емкость и блокировку потоков при добавлении или извлечении элементов. Она особенно полезна для реализации паттернов продюсер-потребитель.
Пример:
var blockingCollection = new BlockingCollection<int>(boundedCapacity: 5);
Task.Run(() =>
{
for (int i = 0; i < 10; i++)
{
blockingCollection.Add(i);
Console.WriteLine($"Added {i}");
}
blockingCollection.CompleteAdding();
});
foreach (var item in blockingCollection.GetConsumingEnumerable())
{
Console.WriteLine($"Consumed {item}");
}
Заключение:
Конкурентные коллекции в C# обеспечивают безопасное взаимодействие между потоками при работе с общими данными. Они помогают избежать проблем синхронизации и повышают производительность многопоточных приложений за счет оптимизированных алгоритмов управления доступом к элементам коллекций.
Кратко:
Конкурентные коллекции в C# позволяют безопасно работать с данными в многопоточной среде, избегая проблем с синхронизацией. Примеры включают ConcurrentDictionary, ConcurrentQueue, ConcurrentStack, ConcurrentBag и BlockingCollection.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых5 001
Запустите рекламу в телеграм-каналах с Яндекс Директом
Перфоманс-реклама теперь в телеграм-каналах ⚡
Яндекс Директ знает, как привлечь целевую аудиторию 💰👌
Попробовать
#реклама
yandex.ru
О рекламодателе
5 001
🤔 Какое из следующих утверждений о базовом классе Attribute в C# неверно?
5 001
Коммутатор ЦОД MES5500-32 Eltex за 1 минуту
- 32x40G/100G (QSFP+ / QSFP28)
- 2x10G (SFP+)
- RS-232 (RJ-45)
- OOB
- USB 2.0
Пропускная способность - 6,4 Тбит/с
2 модуля питания с горячей заменой:
PM600-220/12 — 220В AC
PM600-48/12 — 48В DC
Настройка:
- CLI через Telnet, SSH (Cisco-like)
- веб-интерфейс
- SNMP
Комплектация:
- Сертификат
- Паспорт устройства
- Комплект крепления в 19"стойку
- Пылезащитные заглушки для портов
Узнать цену
#реклама
eltexcm.ru
О рекламодателе
5 001
Что такое интерфейс ?
Спросят с вероятностью 22%
"интерфейс" используется для описания различных концепций, в зависимости от контекста. Обычно относится к абстрактному типу, который определяет набор методов и свойств, которые классы должны реализовать, но не предоставляет реализацию этих методов.
Основные аспекты:
1️⃣Определение поведения: Интерфейс определяет "контракт" или спецификацию, которой должен следовать класс. Этот контракт включает методы и, иногда, свойства, которые реализующий класс обязан предоставить.
2️⃣Абстракция: Интерфейсы помогают отделить определение того, что класс должен делать, от деталей того, как класс выполняет эти задачи. Это позволяет разрабатывать программы, опираясь на абстракции, а не конкретные реализации.
3️⃣Множественное наследование: В языках, где классы не могут наследовать поведение нескольких классов напрямую (например, в C# и Java), интерфейсы предоставляют способ реализовать множественное наследование на уровне поведения.
4️⃣Интероперабельность: Интерфейсы облегчают взаимодействие различных частей программы или даже различных программ, поскольку они могут взаимодействовать через общий интерфейс, не заботясь о внутренних деталях каждого компонента.
public interface IAnimal
{
void Eat();
void Move();
}
public class Dog : IAnimal
{
public void Eat()
{
Console.WriteLine("Dog is eating.");
}
public void Move()
{
Console.WriteLine("Dog is running.");
}
}
В этом примере, IAnimal — это интерфейс с методами Eat и Move. Класс Dog реализует интерфейс IAnimal, предоставляя конкретную реализацию для каждого из методов интерфейса.
Использование интерфейсов позволяет создавать гибкие и масштабируемые приложения, где компоненты могут быть легко заменены или модифицированы без нарушения работы других частей программы. Они также способствуют созданию чистого и организованного кода, который легче поддерживать и расширять.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых5 001
🤔 Что произойдет, если попытаться изменить значение элемента в структуре, переданной в метод как параметр ref в C#?
5 001
Реклама для бизнеса любого уровня в Яндекс Директе
Создайте эффективную рекламную кампанию с алгоритмами Яндекс Директа 👌
Начните прямо сейчас ⚡
Зарегистрироваться
#реклама
direct.yandex.ru
О рекламодателе
5 001
Что такое 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 001
Jobski - твой помощник при поиске работы в IT
Сервис индивидуально подбирает вакансии, учитывая ваш опыт, навыки и стек технологий.
Узнать больше
#реклама
jobski.ru
О рекламодателе
5 001
🤔 Какой интерфейс следует реализовать, чтобы объект мог быть упакован в Task в C#?
5 001
Как сделать миграцию методов ?
Спросят с вероятностью 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 001
Аренда облачного сервера с аттестатами УЗ-1, К-1.
Размещение и защита персональных данных в специальном сегменте облака, аттестованном в
соответствии со стандартами защиты персональных данных (ФЗ-152) УЗ 1-4 и
требованиями к ГИС (17 приказ ФСТЭК) класса К1.
- Хранение персональных данных УЗ 1-4
- Хранение ГИС по стандарту К-1
- Аудит защищенности ИСПДн
- Подключение к СМЭВ, RSNET, ЕГИСЗ
- Средства защиты сертифицированные ФСТЭК (VPN, NextGen FW, WAF, AntiVirus, DLP и др)
Подключите услугу сегодня со скидкой 50% на инфраструктуру.
Подать заявку
#реклама
cloud4y.ru
О рекламодателе
5 001
🤔 Какой метод позволяет создать глубокую копию объекта в C#?
5 001
Какие механизмы позволяют не нарушать принцип 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 001
🤔 Что произойдет при попытке изменить элементы ReadOnlyCollection?
