C# | Вопросы собесов
رفتن به کانال در Telegram
Cайт easyoffer.ru Реклама @easyoffer_adv ВП @easyoffer_vp Тесты t.me/+nebTPWgpeGs1OWFi Задачи t.me/+Xy-0H7xKlgo0NDVi Вакансии t.me/+BQFHXZQ0zrViNGIy
نمایش بیشتر5 048
مشترکین
-124 ساعت
-157 روز
-2530 روز
آرشیو پست ها
5 048
🌊 Водоворот знаний в Кодовороте
🤿 Погружайся в мир лучших видео уроков по программированию. Каждый день на канале выходит полезный контент. Кодируй своё будущее вместе с нами!
⛓ Подпишись
5 048
📌 Garbage collectior что это?
💬 Спрашивают в 22 % собеседований
Garbage Collector (GC) — это механизм управления памятью в среде выполнения .NET, который автоматически освобождает память, занимаемую объектами, которые больше не используются приложением. Это важная часть управления ресурсами в .NET, так как она предотвращает утечки памяти и улучшает общую производительность приложения. Вот основные аспекты работы Garbage Collector и его преимущества:
🤔 Основные функции Garbage Collector
1️⃣ Автоматическое управление памятью:
GC автоматически отслеживает объекты, создаваемые в управляемой куче (managed heap), и освобождает память, занимаемую объектами, которые больше не достижимы или не используются приложением. Это снижает необходимость ручного управления памятью и уменьшает вероятность утечек памяти.
2️⃣ Сборка мусора:
GC выполняет сборку мусора (garbage collection) в несколько этапов:
➕ Маркировка (Marking): GC определяет, какие объекты все еще достижимы и используются.
➕ Очистка (Sweeping): Память, занимаемая недостижимыми объектами, освобождается.
➕ Компактирование (Compacting): Память, занимаемая достижимыми объектами, перемещается для сокращения фрагментации.
3️⃣ Поколения объектов:
Объекты в управляемой куче делятся на поколения (Generation):
➕ Generation 0: Новые объекты, которые недавно созданы. Сборка мусора для этого поколения выполняется чаще.
➕ Generation 1: Объекты, которые пережили хотя бы одну сборку мусора.
➕ Generation 2: Объекты, которые живут достаточно долго и пережили несколько сборок мусора.
Такое разделение помогает оптимизировать производительность сборки мусора, так как более молодые объекты имеют большую вероятность стать недостижимыми быстрее, чем старые.
4️⃣ Сборка в фоновом режиме:
.NET GC поддерживает сборку мусора в фоновом режиме, что позволяет минимизировать паузы в работе приложения за счет выполнения сборки мусора параллельно с основной работой приложения.
🤔 Преимущества Garbage Collector
1️⃣ Простота использования:
Программисты могут сосредоточиться на логике приложения, не заботясь о ручном управлении памятью, что упрощает разработку и снижает вероятность ошибок.
2️⃣ Предотвращение утечек памяти:
GC автоматически освобождает память, занимаемую недостижимыми объектами, что помогает предотвратить утечки памяти, которые могут привести к снижению производительности и нестабильности приложения.
3️⃣ Оптимизация использования памяти:
GC периодически выполняет компактирование памяти, что снижает фрагментацию и улучшает производительность приложения.
🤔 Пример работы Garbage Collector
Рассмотрим пример создания объектов в C# и как GC их обрабатывает:
class Program
{
static void Main()
{
// Создание объектов
for (int i = 0; i < 100; i++)
{
MyClass obj = new MyClass();
}
// Вызов сборки мусора вручную (обычно не рекомендуется)
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
class MyClass
{
~MyClass()
{
// Финализатор, который вызывается перед удалением объекта
Console.WriteLine("Объект удален");
}
}
В этом примере создается 100 объектов класса MyClass. Когда они выходят из области видимости, GC может освободить память, занимаемую этими объектами.
🤔 Краткое резюме:
Garbage Collector автоматически управляет памятью, освобождая память, занимаемую неиспользуемыми объектами. Это упрощает разработку, предотвращает утечки памяти и улучшает производительность приложения.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых5 048
Экраны и меню борды для кафе и фастфуда. От 150.000 р
Внедрение цифровых меню бордов "под ключ" от ведущего интегратора
Рассчитайте стоимость меню бордов, ответив всего на 5 вопросов!
В подарок скидка 15% на дизайн анимированного меню.
Перейти на сайт
#реклама
quiz.in-gr.ru
О рекламодателе
5 048
🤔 Какой модификатор доступа в C# делает класс или член доступным только внутри своей сборки?
5 048
👨💻 Чтобы стать более востребованным перцем в IT индустрии неплохо бы знать английский.
Канал Hello Word в игровом стиле поможет улучшить твой English skill.
🤓У нас ты найдешь:
🟡 Тесты с пропуском слов
🟡 Мемы на английском
🟡 Полезные шпаргалки для изучения
😎 Расширяй свои навыки и покоряй начинай покорять западную индустрию.
Испытай свои знания и попробуй пройти тест.
5 048
📌 Какие преимущества у LinQ?
💬 Спрашивают в 22 % собеседований
LINQ (Language Integrated Query) — это компонент .NET Framework, который добавляет возможности запроса данных из различных источников (таких как коллекции, базы данных, XML и другие) прямо в код C#. LINQ обеспечивает единообразный способ работы с данными, позволяя использовать одни и те же методы для различных типов данных. Вот основные преимущества LINQ:
1️⃣ Унифицированный синтаксис:
LINQ предоставляет единый и последовательный способ работы с данными, будь то массивы, списки, базы данных или XML. Это снижает необходимость изучения различных API для работы с разными источниками данных.
// Пример запроса к массиву
int[] numbers = { 1, 2, 3, 4, 5 };
var evenNumbers = from num in numbers
where num % 2 == 0
select num;
2️⃣ Читабельность кода:
Запросы LINQ легко читаются и понимаются, так как они используют знакомые конструкты языка программирования. Это упрощает поддержку и развитие кода.
// Пример запроса к списку объектов
List<Person> people = GetPeopleList();
var adults = from person in people
where person.Age >= 18
select person;
3️⃣ Типобезопасность:
LINQ предоставляет строгую проверку типов на этапе компиляции, что помогает избежать многих ошибок, связанных с неправильным использованием типов данных. Это делает код более надежным.
// Пример использования LINQ с типизированными данными
var adults = people.Where(p => p.Age >= 18);
4️⃣ Упрощение сложных запросов:
LINQ позволяет легко составлять сложные запросы, которые могут включать сортировку, группировку и объединение данных. Это позволяет сосредоточиться на логике запроса, а не на низкоуровневых деталях его выполнения.
// Пример группировки данных с использованием LINQ
var groupedPeople = from person in people
group person by person.Age into ageGroup
select new { Age = ageGroup.Key, People = ageGroup };
5️⃣ Ленивые вычисления:
LINQ поддерживает ленивые вычисления, что означает, что данные не извлекаются из источника до тех пор, пока это не потребуется. Это может существенно повысить производительность, особенно при работе с большими объемами данных.
// Пример ленивых вычислений
var query = people.Where(p => p.Age >= 18); // Запрос еще не выполнен
foreach (var person in query)
{
Console.WriteLine(person.Name); // Запрос выполняется здесь
}
6️⃣ Поддержка различных источников данных:
LINQ работает с различными источниками данных, включая массивы, списки, базы данных (через LINQ to SQL или Entity Framework), XML и даже сторонние сервисы.
// Пример запроса к базе данных с использованием Entity Framework
using (var context = new MyDbContext())
{
var users = from user in context.Users
where user.IsActive
select user;
}
🤔 Краткое резюме:
LINQ упрощает работу с данными, делая код более читабельным и типобезопасным, поддерживает различные источники данных и позволяет легко составлять сложные запросы. Это инструмент, который помогает программистам писать более понятный, поддерживаемый и эффективный код.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых5 048
Получите диплом от НИТУ МИСИС в веб-разработке
Яндекс Практикум и НИТУ МИСИС приглашают на онлайн-программу «Веб-разработчик»
Полноценная учёба в онлайн-формате
Зачёты, сессии, лекции и семинары с гибким графиком.
На платформе Практикума
Гибкая теория, автоматическая проверка заданий и встроенная YandexGPT.
Преподаватели НИТУ МИСИС и наставники Яндекс Практикума
Они будут проводить занятия и учить вас применять теорию на практике.
Студенческий, льготы и диплом гособразца
У вас будут все преимущества студента-очника. Доступ к инфраструктуре вуза — кампусам, библиотекам и мероприятиям.
Оплатить учёбу можно разными способами: всю сумму сразу, по семестрам или с помощью госкредита — тогда ежемесячный платёж составит от 500 ₽, а государство погасит часть кредита за вас.
Подать заявку
#реклама 16+
practicum.yandex.ru
О рекламодателе
5 048
🤔 Какое из следующих утверждений о потокобезопасности в C# неверно?
5 048
5 048
Такси для бизнеса. Яндекс Go
Оптимизируйте свои расходы и повысьте эффективность бизнеса с Яндекс Go
Узнать больше
#реклама
business.go.yandex
О рекламодателе
5 048
📌 Что такое Inversion of control и dependency injection ?
💬 Спрашивают в 78% собеседований
Inversion of Control (IoC) и Dependency Injection (DI) — это два тесно связанных принципа, используемых для уменьшения зависимостей между компонентами программного обеспечения, что упрощает управление этими зависимостями, их тестирование и поддержку.
1️⃣ Inversion of Control (Инверсия управления)
Это принцип программирования, при котором управление потоком программы передаётся из пользовательского кода во внешнюю библиотеку или фреймворк. В традиционном программировании пользовательский код, который вы пишете, вызывает библиотеки, когда нуждается в выполнении какой-либо функциональности. При использовании IoC библиотека вызывает ваш код. Это обеспечивает большую гибкость и упрощает расширение функциональности и тестирование, так как уменьшает зависимость кода от конкретной реализации задач.
IoC часто реализуется с помощью таких паттернов, как Dependency Injection, Event, Strategy.
2️⃣ Dependency Injection (Внедрение зависимостей)
Это конкретный способ реализации IoC, при котором создание объектов и управление их зависимостями не осуществляется самими объектами, а делегируется внешнему компоненту (например, IoC-контейнеру). Вместо того чтобы компоненты создавали нужные им зависимости самостоятельно, они получают их извне. Это позволяет сделать код более модульным, упрощает замену компонентов системы и их тестирование, поскольку зависимости можно легко подменять, например, моками (mock) в тестах.
Пример:
public interface ILogger
{
void Log(string message);
}
public class ConsoleLogger : ILogger
{
public void Log(string message)
{
Console.WriteLine(message);
}
}
public class Application
{
private readonly ILogger _logger;
// Внедрение зависимости через конструктор
public Application(ILogger logger)
{
_logger = logger;
}
public void Run()
{
_logger.Log("Приложение запущено");
}
}
// Где-то в другом месте приложения
ILogger logger = new ConsoleLogger();
Application app = new Application(logger);
app.Run();
В этом примере Application зависит от абстракции ILogger. Вместо того чтобы создавать конкретный экземпляр ConsoleLogger внутри Application, мы передаём его через конструктор, что позволяет легко заменить реализацию логгера без изменения кода класса Application.
IoC — это более широкий принцип проектирования, который гласит: не ваш код должен контролировать поток выполнения программы, а некая внешняя сущность. DI — это конкретный способ достижения IoC, когда зависимости объектов предоставляются извне, а не создаются самими объектами.
Инверсия управления — это когда ваш код не управляет потоком выполнения, а подчиняется внешнему "руководителю". Внедрение зависимостей — это когда ваш код не создает то, что ему нужно для работы сам, а получает это "снаружи".
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых5 048
Онлайн-встреча: «Профессия психолог-консультант»
Спикер - ректор МИПИП Марк Бартон
📅31 июля в 19:00 МСК
- Поймете, подходит ли вам профессия психолог-консультант
- Как с нуля стать практикующим психологом, если вам 30, 40 или 50+
- Узнаете о том, что изменилось на рынке психологии в 2024 году
- Разберем перспективные направления с ТОП-1 психологом России и ректором МИПИП - Марком Бартоном
✨Бонус после регистрации✨
Бесплатный 4-дневный тренинг с Марком Бартоном «Введение в профессию психолог-консультант»
Регистрируйтесь бесплатно по ссылке
Зарегистрироваться
#реклама 16+
mipip.ru
О рекламодателе
5 048
🤔 Какое утверждение о управляемом и неуправляемом коде в C# неверно?
5 048
📌 Что такое групповые делегаты?
💬 Спрашивают в 22% собеседований
Групповые делегаты в C# представляют собой делегаты, которые могут содержать ссылки на несколько методов. Такие делегаты позволяют вызывать несколько методов последовательно в рамках одного вызова делегата. Это часто используется для событий и обратных вызовов (callbacks).
1️⃣ Основные понятия:
1. Делегат — это тип, который представляет ссылку на метод с определенной сигнатурой.
2. Групповой делегат — это делегат, который содержит ссылки на несколько методов и вызывает их по очереди.
2️⃣ Как создаются групповые делегаты:
Объединение делегатов.
Чтобы создать групповой делегат, нужно объединить несколько делегатов с помощью оператора
+ или метода Delegate.Combine.
Пример:
using System;
public delegate void MyDelegate();
public class Program
{
public static void Method1()
{
Console.WriteLine("Method1");
}
public static void Method2()
{
Console.WriteLine("Method2");
}
public static void Main()
{
MyDelegate del1 = Method1;
MyDelegate del2 = Method2;
// Объединяем делегаты
MyDelegate groupDel = del1 + del2;
// Вызов группового делегата
groupDel();
}
}
Вывод:
Method1 Method2Удаление делегатов. Для удаления метода из группового делегата используется оператор
- или метод Delegate.Remove.
Пример:
using System;
public delegate void MyDelegate();
public class Program
{
public static void Method1()
{
Console.WriteLine("Method1");
}
public static void Method2()
{
Console.WriteLine("Method2");
}
public static void Main()
{
MyDelegate del1 = Method1;
MyDelegate del2 = Method2;
// Объединяем делегаты
MyDelegate groupDel = del1 + del2;
// Удаляем делегат
groupDel -= del1;
// Вызов группового делегата
groupDel();
}
}
Вывод:
Method23️⃣ Использование в событиях: Групповые делегаты особенно полезны при работе с событиями, где несколько подписчиков могут быть уведомлены об одном и том же событии. Пример:
using System;
public delegate void Notify(); // делегат для события
public class ProcessBusinessLogic
{
public event Notify ProcessCompleted; // событие
public void StartProcess()
{
Console.WriteLine("Process Started!");
// Какое-то логика процесса...
OnProcessCompleted();
}
protected virtual void OnProcessCompleted()
{
// Если есть подписчики
if (ProcessCompleted != null)
ProcessCompleted.Invoke();
}
}
public class Program
{
public static void Main()
{
ProcessBusinessLogic bl = new ProcessBusinessLogic();
bl.ProcessCompleted += bl_ProcessCompleted; // подписка на событие
bl.ProcessCompleted += bl_ProcessCompleted2; // подписка на событие
bl.StartProcess();
}
public static void bl_ProcessCompleted()
{
Console.WriteLine("Process Completed!");
}
public static void bl_ProcessCompleted2()
{
Console.WriteLine("Process Completed Again!");
}
}
Вывод:
Process Started! Process Completed! Process Completed Again!Заключение: Групповые делегаты в C# позволяют объединять несколько методов в один делегат и вызывать их последовательно. Они часто используются в событиях для уведомления нескольких подписчиков. Кратко: Групповые делегаты в C# позволяют объединять несколько методов в один делегат и вызывать их последовательно. Это полезно для уведомления нескольких подписчиков в событиях. 🔥 ТОП ВОПРОСОВ С СОБЕСОВ 🔒 База собесов | 🔒 База тестовых
5 048
5 048
5 048
Как повысить эффективность вебинаров?
Организация продающего вебинара - не простая задача, ведь необходимо предусмотреть множество деталей: удобную дату, вовлекающий контент, методы продвижения и взаимодействия с участниками.
Вебинары от МТС Линк помогают привлекать новых клиентов и увеличивать конверсию из участника в лид. В сервисе доступен анализ поведения пользователей во время вебинара, синхронный перевод, автовебинары и интерактивные инструменты для вовлечения участников.
Делимся методичкой с кейсами, чек-листами и инструкциями для маркетологов, PR и event-менеджеров, чтобы сделать вебинары эффективным инструментом для лидогенерации.
Получите методичку бесплатно на сайте.
Скачать
#реклама 16+
mts-link.ru
О рекламодателе
5 048
Repost from Идущий к IT
10$ за техническое собеседование на английском языке:
1. Отправьте запись технического собеседования на английском языке файлом на этот аккаунт
2. Добавьте ссылку на вакансию или пришлите название компании и должность
3. Напишите номер кошелка USDT (Tether) на который отправить 10$
🛡 Важно:
– Запись будет использована только для сбора данных о вопросах
– Вы останетесь анонимны
– Запись нигде не будет опубликована
🤝 Условия:
– Внятный звук, различимая речь
– Допустимые профессии:
• Любые программисты
• DevOps
• Тестировщики
• Дата сайнтисты
• Бизнес/Системные аналитики
• Прожекты/Продукты
• UX/UI и продукт дизайнеры
5 048
🤔 Какой из методов интерфейса IEnumerator должен быть реализован для поддержки итерации в C#?
5 048
📌 Расскажи про конкурентные коллекции?
💬 Спрашивают в 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.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
