C# | Вопросы собесов
Відкрити в Telegram
Cайт easyoffer.ru Реклама @easyoffer_adv ВП @easyoffer_vp Тесты t.me/+nebTPWgpeGs1OWFi Задачи t.me/+Xy-0H7xKlgo0NDVi Вакансии t.me/+BQFHXZQ0zrViNGIy
Показати більше5 063
Підписники
-324 години
-57 днів
-1230 день
Архів дописів
5 063
🤔 Какие есть виды привязок данных и когда применяются?
1. One-way binding — от источника к UI. Применяется при отображении.
2. Two-way binding — синхронизация UI и модели. Применяется в формах.
3. One-time binding — однократная установка значения при инициализации.
4. Event binding — привязка событий.
Используется в WPF, Xamarin, Blazor и других MVVM-фреймворках.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 063
Сегодня последний день, когда можно приобрести пожизненный PRO тариф easyoffer
Акция до 20 февраля 00:00
Покупаешь сейчас один раз — пользуешься всю жизнь без лимита, включая все будущие функции.
👉 Смотри подробности тарифа и покупай на https://easyoffer.ru/
5 063
🤔 Что такое Generic-и?
Термин "Generic" (общий тип) относится к функциональности, позволяющей определять классы, интерфейсы или методы с использованием параметра типа, который определяется в момент создания экземпляра класса или вызова метода. Обобщённые типы широко используются для повышения повторного использования кода, типобезопасности и производительности. Как и во многих других языках программирования, generics представляют собой мощный инструмент, который устраняет необходимость в чрезмерном приведении типов и может уменьшить количество дублирующего кода.
🚩Основы
Пример использования Generic-ов в классе
public class GenericList<T>
{
private T[] elements;
private int size;
public GenericList(int size)
{
elements = new T[size];
this.size = size;
}
public void Add(T element)
{
// Логика добавления элемента
}
public T this[int i]
{
get { return elements[i]; }
set { elements[i] = value; }
}
}
Пример использования Generic-ов в методе
public T GenericMax<T>(T x, T y) where T : IComparable
{
return x.CompareTo(y) > 0 ? x : y;
}
🚩Плюсы
➕Повышение переиспользуемости кода
Обобщённые классы и методы могут работать с любым типом данных, что позволяет разработчикам использовать один и тот же код для данных различных типов.
➕Типобезопасность
Generics обеспечивают проверку типов на этапе компиляции. Это улучшает безопасность и стабильность кода, уменьшая риск возникновения ошибок во время выполнения программы из-за некорректного приведения типов.
➕Улучшение производительности
Использование generics может помочь улучшить производительность, т.к. уменьшает необходимость в приведении типов, которое может быть дорогостоящим в плане ресурсов процессора.
Ставь 👍 и забирай 📚 Базу знаний5 063
IT-магистратура ИТМО, МИФИ в партнёрстве с Яндексом
Освойте высокооплачиваемую IT-профессию. Актуальные программы ИТМО и МФТИ 2026 года, диплом гособразца, много практики от Яндекса. Гибкий график, обучение полностью онлайн, господдержка оплаты, отсрочка от армии
Узнать больше
#реклама 16+
practicum.yandex.ru
О рекламодателе
5 063
🤔 Где используется IQueryable?
IQueryable используется для создания запросов к источникам данных с возможностью отложенного выполнения. Оно позволяет строить сложные запросы, которые преобразуются в SQL-запросы или другие команды на этапе выполнения. Часто используется с ORM, такими как Entity Framework.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 063
Завтра конец акции на возможность приобрести PRO тариф по цене одного года
Доступный функционал включает базы вопросов с собеседований, задач для live-coding, реальных интервью и тестовых заданий от топ-компаний, а также аналитику требований для резюме и тренажеры с режимом симуляции собеседования под конкретную компанию.
Акция до 20 февраля (включительно) на PRO-тариф. Покупаешь сейчас один раз — пользуешься всю жизнь без лимита, включая все будущие функции.
👉 Смотри подробности тарифа и покупай на https://easyoffer.ru/
5 063
🤔 Что такое примитив синхронзиации semaphore?
Это механизм синхронизации, который используется для управления доступом к ограниченному ресурсу. Он позволяет ограниченному количеству потоков одновременно использовать общий ресурс.
🚩Как работает семафор?
Семафор использует счётчик для отслеживания доступных "разрешений":
Когда поток запрашивает доступ к ресурсу, семафор уменьшает счётчик.
Если счётчик больше нуля, поток получает доступ.
Если счётчик равен нулю, поток блокируется, пока другой поток не освободит ресурс (увеличив счётчик).
🚩Пример использования `SemaphoreSlim`
В .NET часто используется
SemaphoreSlim, так как он более лёгкий и эффективный, чем Semaphore.
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static SemaphoreSlim semaphore = new SemaphoreSlim(2); // Разрешаем максимум 2 потока одновременно
static async Task AccessResource(int id)
{
Console.WriteLine($"Поток {id} ждёт доступа...");
await semaphore.WaitAsync(); // Захватываем семафор
try
{
Console.WriteLine($"Поток {id} получил доступ!");
await Task.Delay(2000); // Имитация работы с ресурсом
}
finally
{
Console.WriteLine($"Поток {id} освобождает ресурс.");
semaphore.Release(); // Освобождаем семафор
}
}
static async Task Main()
{
Task[] tasks = new Task[5];
for (int i = 0; i < 5; i++)
{
tasks[i] = AccessResource(i);
}
await Task.WhenAll(tasks);
}
}
🚩Обычный `Semaphore`
Если нужна синхронизация между разными процессами, можно использовать Semaphore
Semaphore semaphore = new Semaphore(2, 2, "MyGlobalSemaphore");
Ставь 👍 и забирай 📚 Базу знаний5 063
Нужны 7 желающих для работы с искусственным интеллектом.
Работа из дома. График свободный.
Пришло задание — изучили — выполнили — получили свои деньги.
Деньги вы получаете в зависимости от сложности задания. Например:
За задание могут платить 500-10.000 рублей.
500 рублей — это около 5-30 минут.
10 000 руб. это 5-6 часов.
Работа может быть разной: Оживить фото, создать видео, реставрировать старое фото и т.д.
💰 В среднем новичок получает до 150.000 руб в месяц. А опытный может и 300-500т.
Мы обучим вас сами:
— 3 дня уроков по 30 минут
— Домашки с проверкой и оплатой бонусами
— Платим 10 тыс за каждую выполненную домашку
⚡ Набор заканчивается завтра.
Для регистрации жмите кнопку "Зарегистрироваться":
Зарегистрироваться
#реклама 16+
ganstaagency.com
О рекламодателе
5 063
🤔 Пример паттерна Строитель?
Например, при создании объекта типа "Отчёт":
- У объекта много параметров (заголовок, дата, содержимое, автор, таблицы).
- С помощью билдера можно поочерёдно вызывать методы SetTitle(), SetContent(), SetFooter() и получить готовый объект методом Build().
Этот подход улучшает читаемость и гибкость кода.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 063
🤔 Что такое исключения?
Исключения в программировании — это механизмы обработки ошибок и необычных ситуаций, которые возникают во время выполнения программы. В C# и других языках программирования исключения позволяют отделить код обработки ошибок от основного кода программы, что упрощает его чтение и поддержку.
🚩Основные понятия
🟠Исключение (Exception)
Событие, которое прерывает нормальный поток выполнения программы.
🟠Блок try
Содержит код, который может вызвать исключение.
🟠Блок catch
Содержит код, который выполняется, если возникает исключение. В catch блок можно передать параметр — экземпляр исключения, которое произошло.
🟠Блок finally
Содержит код, который выполняется в любом случае, независимо от того, произошло исключение или нет. Обычно используется для освобождения ресурсов.
🟠Бросание исключения (throw)
Механизм для явного вызова исключения.
🚩Пример использования
Основные блоки
try
{
// Код, который может вызвать исключение
int divisor = 0;
int result = 10 / divisor;
}
catch (DivideByZeroException ex)
{
// Обработка исключения
Console.WriteLine("Деление на ноль невозможно.");
}
finally
{
// Код, который выполнится в любом случае
Console.WriteLine("Блок finally выполнен.");
}
Создание и бросание собственного исключения
public class InvalidAgeException : Exception
{
public InvalidAgeException(string message) : base(message) { }
}
public void SetAge(int age)
{
if (age < 0)
{
throw new InvalidAgeException("Возраст не может быть отрицательным.");
}
// Логика установки возраста
}
Ставь 👍 и забирай 📚 Базу знаний5 063
Wildberries: Сезон скидок для него
Как выбрать подарок к мужскому дню? Кто-то считает, что нет подарка лучше, чем носки.
А мы считаем, что все подарки хороши со скидками до 80% на Wildberries.
Перейти на сайт
#реклама
wildberries.ru
О рекламодателе
5 063
🤔 Как работает Routing?
Это механизм сопоставления URL с соответствующими обработчиками в веб-приложении.
1. Сервер анализирует URL-запроса и перенаправляет его в нужный контроллер или обработчик.
2. Используется в веб-фреймворках (например, ASP.NET, Express.js) для обработки маршрутов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 063
🤔 Что такое 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
Ставь 👍 и забирай 📚 Базу знаний5 063
Книжный магазин Касталия: раздел "Философия"
Возможно, мы не всегда это замечаем - но в основе нашего мира лежит философия. То, что считается верным и неверным - и то, на основе чего мы так считаем; то, как мы мыслим - и как мы воспринимаем само мышление. Каким будет будущее? Как нам нужно смотреть на прошлое? Что происходит прямо сейчас?
Концепции мыслителей, живших века назад, сотрясают сегодняшний мир; идеи современных философов определят облик будущего мира. Участие в философской жизни - не просто громадное удовольствие, но и большая ответственность.
Издательство Касталия предлагает ряд книг современных мыслителей, чья интеллектуальная дерзость и вдохновляет, и побуждает к дискуссии.
Посмотреть каталог
#реклама 16+
ozon.ru
О рекламодателе
5 063
🤔 Можно ли передать значимый тип данных по ссылке?
Да, можно. Это делается явно, чтобы изменить оригинальное значение, а не копию.
- Обычно значимые типы передаются по значению (создаётся копия).
- Чтобы изменить исходный объект, его передают по ссылке, указав это явно (например, через ref или out).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 063
Пожизненная PRO подписка на easyoffer по цене одного года.
Акция до 20 февраля. Покупаешь сейчас один раз – пользуешься всю жизнь без лимита, включая все будущие функции.
Запланированные новые фичи на ближайшие пол года:
1. Агрегатор вакансий
2. Улучшение резюме, чтобы проходить ATS системы
3. Генерация уникального резюме и сопроводительного письма под вакансию
Покупай на https://easyoffer.ru/
5 063
🤔 В чем отличие dispose и finalize?
Dispose и Finalize являются двумя механизмами для управления ресурсами, особенно теми, которые не управляются средой выполнения .NET, такими как файловые дескрипторы или соединения с базой данных. Они играют важную роль в освобождении ресурсов, но работают по-разному.
🚩Finalize
Можно переопределить в классе для выполнения очистки ресурсов перед тем, как объект будет собран сборщиком мусора. Этот метод вызывается сборщиком мусора автоматически, если объект уничтожается и не имеет других живых ссылок.
🚩Dispose
Является частью интерфейса
IDisposable и предоставляет явный способ освобождения управляемых и неуправляемых ресурсов. Разработчики могут вызывать Dispose вручную или использовать конструкцию using, которая гарантирует вызов Dispose по завершении блока кода.
public class ResourceHolder : IDisposable
{
private bool disposed = false;
~ResourceHolder() // Финализатор
{
Dispose(false);
}
public void Dispose() // Метод Dispose из IDisposable
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
// Освобождение управляемых ресурсов
}
// Освобождение неуправляемых ресурсов
disposed = true;
}
}
}
Ставь 👍 и забирай 📚 Базу знаний5 063
Мужской клуб Wildberries
На WB появился новый раздел — «Мужчины выбирают»
Там есть всё: от носков до молотков. И есть даже специальные подборки по интересам для геймеров, спортсменов, автолюбителей и вообще всех-всех!
Кстати, теперь искать подарки для своих любимых мужчин можно прямо в подборках! Ставим лайк этому лайфхаку ❤️
Перейти на сайт
#реклама
wildberries.ru
О рекламодателе
5 063
🤔 Как называется механизм, при котором переиспользуются одинаковые литералы?
Этот механизм называется интернирование строк (String Interning). Он позволяет хранить одинаковые строковые значения в едином пуле для экономии памяти.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 063
🤔 Что такое 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
}
}
🚩Плюсы
➕Контроль процесса создания
Позволяет контролировать процесс создания сложных объектов поэтапно.
➕Гибкость
Разделение конструирования и представления позволяет использовать один и тот же процесс для создания различных объектов.
➕Читаемость кода
Код становится более читаемым и поддерживаемым, так как процесс создания объекта инкапсулирован в отдельный класс.
➕Поддержка сложных объектов
Упрощает создание объектов с множеством параметров и сложной иерархией.
Ставь 👍 и забирай 📚 Базу знаний
Вже доступно! Дослідження Telegram за 2025 — головні інсайти року 
