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

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

رفتن به کانال در Telegram
5 050
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-77 روز
-1530 روز
آرشیو پست ها
🤔 Что такое метод set? Метод set в контексте чаще всего используется в свойствах (properties) класса и служит для установки значения свойства. Он работает как часть автоматического или пользовательского свойства, позволяя контролировать, что происходит, когда свойству присваивается значение. 🚩Что такое свойство? Свойство (property) в C# – это синтаксический сахар, который позволяет обращаться к полям класса как к переменным, но при этом добавляет возможность добавлять логику для получения (get) и установки (set) значений.
public class Person
{
    private string name; // Закрытое поле

    public string Name // Свойство
    {
        get { return name; } // Получить значение
        set { name = value; } // Установить значение
    }
}
🚩Зачем нужен метод `set`? 🟠Контролировать логику установки значений Например, вы можете ограничить, какие значения можно присваивать. 🟠Выполнять дополнительные действия при присваивании Например, логирование или обновление других полей. 🟠Защищать данные Вы можете использовать метод set для проверки значений на валидность или ограничения доступа (например, сделать его приватным). 🚩Пример использования `set` Проверка входных данных:
public class Person
{
    private int age;

    public int Age
    {
        get { return age; }
        set
        {
            if (value < 0)
            {
                throw new ArgumentException("Возраст не может быть отрицательным.");
            }
            age = value;
        }
    }
}
Только для чтения Вы можете сделать set приватным, чтобы свойство можно было только читать извне:
public class Person
{
    public string Name { get; private set; }

    public Person(string name)
    {
        Name = name;
    }
}
Автоматические свойства Если вам не нужна дополнительная логика, можно использовать автоматические свойства
public class Person
{
    public string Name { get; set; } // Автоматически создаются get и set
}
Ставь 👍 и забирай 📚 Базу знаний

Ищешь высокооплачиваемые проекты? Попробуй SkillStaff SkillStaff — это платформа для ИТ-специалистов, менеджеров и креаторов,
Ищешь высокооплачиваемые проекты? Попробуй SkillStaff SkillStaff — это платформа для ИТ-специалистов, менеджеров и креаторов, которым мало одного оклада. Здесь можно найти клиентов, выполнять их проекты и увеличивать свой доход. - Проекты с гибким графиком: part time, full time, удаленка и гибрид - Ставка за час работы — та, что ты сам выбрал - Клиенты — ведущие бренды, проверенные с юридической точки зрения при регистрации на платформе - Оплата поступает ежемесячно на расчетный счет исполнителя - Удобный личный кабинет и функционал, автоматизирующий документооборот Все, что нужно для работы — иметь статус самозанятого или ИП, а платформа поможет со всеми нюансами. Регистрируйся прямо сейчас Зарегистрироваться #реклама 16+ skillstaff.ru О рекламодателе

🤔 Как работает Routing? Это механизм сопоставления URL с соответствующими обработчиками в веб-приложении. 1. Сервер анализирует URL-запроса и перенаправляет его в нужный контроллер или обработчик. 2. Используется в веб-фреймворках (например, ASP.NET, Express.js) для обработки маршрутов. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Зачем нужны поколения для сборщика мусора в 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.
Ставь 👍 и забирай 📚 Базу знаний

🤔 Какие основные свойства и методы IEnumerable? IEnumerable предоставляет: - Возможность перебора элементов в коллекции. - Метод GetEnumerator(), возвращающий итератор. - Поддерживает foreach. IEnumerable<T> используется для отложенного выполнения и однократного прохода по данным. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какие есть виды привязок данных и когда применяются? Привязка данных (Data Binding) — это механизм, который позволяет автоматически синхронизировать данные между источником (например, моделью) и интерфейсом (например, элементами UI). 🚩Односторонняя привязка (One-Way Binding) Данные идут только в одном направлении: из модели в UI. - Для вывода данных, которые не должны изменяться пользователем - Например, для отображения текущего времени Пример в WPF
<TextBlock Text="{Binding UserName}" />
🚩Двусторонняя привязка (Two-Way Binding) Данные синхронизируются в обе стороны: UI ↔️ Модель - В формах ввода (например, TextBox), чтобы обновлять данные в модели - Используется в MVVM Пример в WPF
<TextBox Text="{Binding UserName, Mode=TwoWay}" />
🚩Привязка к событиям (Event Binding) Позволяет связывать UI с методами обработки событий. - Для обработки кнопок (Button.Click) - В реактивных фреймворках (Blazor, WinForms) Пример в Blazor
<button @onclick="IncrementCount">Добавить</button>

@code {
    private int count = 0;
    private void IncrementCount() => count++;
}
🚩Привязка к командам (Command Binding) Используется в паттерне MVVM вместо событий - В WPF и Xamarin - Позволяет отделить логику от UI Пример в WPF
<Button Content="Сохранить" Command="{Binding SaveCommand}" />
🚩Привязка к коллекциям (ItemsSource Binding) Позволяет привязывать списки к элементам UI (ListBox, DataGrid) - В списках, таблицах, дропдаунах Пример в WPF
<ListBox ItemsSource="{Binding Users}" DisplayMemberPath="Name" />
Ставь 👍 и забирай 📚 Базу знаний

Крупнейший университет искусственного интеллекта Приглашаем на бесплатный однодневный интенсив по AI! Освой искусственный инт
Крупнейший университет искусственного интеллекта Приглашаем на бесплатный однодневный интенсив по AI! Освой искусственный интеллект для профессионального роста: создавай нейросети, автоматизируй бизнес-задачи и зарабатывай на AI-решениях. ✨ 8 000+ студентов со всего мира ✨ 600+ AI-проектов, созданных студентами ✨ Сборная Университета — победители крупнейших AI-хакатонов России ✨ Стажировки в крупнейших компаниях России (РЖД, Ростелеком, РУДН, Совкомбанк, Самолет и другие) ✨ Трудоустраиваем выпускников в крупнейшие компании (Яндекс, ВТБ, Сбербанк, Роскосмос и другие) Будем рады видеть тебя в наших рядах! Узнать больше #реклама 16+ neural-university.ru О рекламодателе

🤔 Какая разница между статичным методом и методом экземпляра? - Статичный метод (static) принадлежит классу, а не объекту: - Вызывается без создания экземпляра. - Не имеет доступа к this, не может использовать нестатичные поля. - Метод экземпляра принадлежит конкретному объекту: - Требует создания экземпляра (new). - Имеет доступ к полям и методам объекта. Пример: Math.Abs() — статичный, myList.Add() — метод экземпляра. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое boxing и unboxing? boxing и unboxing — это два важных процесса, связанных с преобразованием типов между значимыми типами (value types) и ссылочными типами (reference types). Эти процессы играют ключевую роль в работе с обобщенными коллекциями и при взаимодействии между различными частями .NET Framework. 🚩Boxing Это процесс преобразования переменной значимого типа (например, int или struct) в тип object или в любой другой тип интерфейса, реализуемый этим значимым типом. При боксинге переменная значимого типа оборачивается в объект ссылочного типа, и её значение копируется в новый объект на управляемой куче. Это необходимо, потому что все элементы в .NET в конечном итоге должны быть объектами.
int num = 123;
object obj = num;  // Boxing
🚩Unboxing Это обратный процесс, при котором содержимое объекта ссылочного типа преобразуется обратно в значимый тип. Требует явного указания типа, к которому нужно преобразовать, и может вызывать исключение InvalidCastException, если объект не может быть преобразован в желаемый значимый тип.
object obj = 123;  // Boxing
int num = (int)obj;  // Unboxing
🟠Производительность Боксинг и анбоксинг могут негативно сказаться на производительности, поскольку они влекут за собой операции с памятью, включая выделение памяти и сборку мусора. Поэтому рекомендуется минимизировать их использование, особенно в критичных по производительности частях приложения. 🟠Нужда Несмотря на возможное негативное влияние на производительность, боксинг и анбоксинг необходимы для работы со значимыми типами в контекстах, где требуются объекты (например, при работе с коллекциями типа ArrayList). Ставь 👍 и забирай 📚 Базу знаний

Теперь в Битрикс24 есть ещё и онлайн-доски! ✨Весь привычный функционал плюс любимая фича всех прожектов — и это бесплатно. Похоже, скоро офисные стикеры уйдут в отпуск. Узнать больше #реклама 16+ bitrix24.ru О рекламодателе

🤔 Какие механизмы позволяют не нарушать принцип dependency inversion? Для соблюдения принципа dependency inversion используются интерфейсы и абстракции, которые позволяют код зависеть от общего поведения, а не от конкретных реализаций. Также помогают фабрики (Factories) для создания объектов и DI-контейнеры (Dependency Injection), которые управляют зависимостями и их внедрением. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какая есть классификация у кучи? В информатике и программировании куча (heap) может классифицироваться по нескольким критериям. Рассмотрим основные виды: 🟠По назначению: Куча памяти (Memory Heap) Используется для динамического выделения памяти в приложениях. В C# это управляется сборщиком мусора (GC - Garbage Collector). Примеры: объекты, созданные с помощью new, выделяются в управляемой куче. 🟠Структура данных «Куча» (Heap Data Structure) Это специальная бинарная структура данных, используемая в алгоритмах, например, в сортировке (Heap Sort) или в приоритетных очередях. Бывает максимальная куча (max-heap) и минимальная куча (min-heap). 🚩По типу управления памятью (для кучи памяти в языках программирования): 🟠Управляемая куча (Managed Heap) В C# и .NET память выделяется и освобождается автоматически с помощью GC. Разделяется на поколения (Generation 0, 1, 2), что оптимизирует работу сборщика мусора. 🟠Неуправляемая куча (Unmanaged Heap) Применяется в C/C++ и низкоуровневом коде, где управление памятью выполняется вручную (malloc/free, new/delete). В C# тоже можно работать с ней через Marshal или Unsafe код. 🟠По структуре данных (Heap Data Structure): 🟠Максимальная куча (Max Heap) Корневой узел содержит наибольшее значение, а дочерние узлы – меньшее. Используется в алгоритмах приоритетных очередей. 🟠Минимальная куча (Min Heap) Корневой узел содержит наименьшее значение, а дочерние узлы – большее. Применяется в алгоритме Дейкстры и других задачах.
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        PriorityQueue<int, int> minHeap = new PriorityQueue<int, int>();

        minHeap.Enqueue(5, 5);
        minHeap.Enqueue(3, 3);
        minHeap.Enqueue(8, 8);
        minHeap.Enqueue(1, 1);

        while (minHeap.Count > 0)
        {
            Console.WriteLine(minHeap.Dequeue()); // Выведет: 1, 3, 5, 8
        }
    }
}
Ставь 👍 и забирай 📚 Базу знаний

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

🤔 Что помнишь об авторизации? Авторизация в контексте веб-разработки и программирования — это процесс, который проверяет, имеет ли пользователь права на выполнение определенных действий или доступ к конкретным ресурсам. В C# и .NET, это может быть реализовано через различные механизмы, такие как ролевая модель доступа (Role-based Access Control - RBAC) или претензионное управление доступом (Claims-based Access Control). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Современная магистратура от Центрального университета Хочешь развиваться в сфере ИТ и получить фундаментальные знания с практ
Современная магистратура от Центрального университета Хочешь развиваться в сфере ИТ и получить фундаментальные знания с практикой? Поступай в магистратуру Центрального университета! - 4 офлайн программы по востребованным направлениям ИТ - Онлайн-программа по машинному обучению - 300 мест с грантами до 1,2 млн руб. - Вечерние занятия и учеба по выходным — удобно совмещать с работой - Обучение по модели STEM-образования: на стыке науки, технологий и бизнеса - Возможность стажировок и трудоустройства в ведущих компаниях - Государственный диплом за 2 года Магистратура в Центральном университете — это современный подход к образованию, сильный преподавательский состав и актуальные кейсы от индустрии. Оставляй заявку на грант уже сейчас! Подать заявку #реклама 16+ apply.centraluniversity.ru О рекламодателе

🤔 Какие принципы и практики используешь для обеспечения безопасности приложений? 🟠Валидация и Санитизация Входных Данных Валидация входных данных помогает предотвратить атаки, такие как SQL-инъекции, XSS (межсайтовый скриптинг) и другие. SQL-инъекции: Используйте параметризованные запросы или ORM (например, Entity Framework).
using (SqlCommand cmd = new SqlCommand("SELECT * FROM Users WHERE Username = @username", conn))
{
    cmd.Parameters.AddWithValue("@username", username);
    // Выполнение команды
}
XSS: Используйте библиотеку для экранирования HTML, например, AntiXSS.
string safeContent = Microsoft.Security.Application.Encoder.HtmlEncode(userInput);
🟠Использование Аутентификации и Авторизации Обеспечьте надежную аутентификацию и разграничение доступа к ресурсам. Аутентификация: Используйте современные методы аутентификации, такие как OAuth, OpenID Connect. Авторизация: Применяйте ролевую или заявочную (claims-based) авторизацию.
[Authorize(Roles = "Admin")]
public IActionResult AdminOnly()
{
    return View();
}
🟠Защита от CSRF (Межсайтовая подделка запросов) Используйте анти-CSRF токены для защиты от CSRF атак.
<form asp-action="Create">
    <input type="hidden" name="__RequestVerificationToken" value="@Antiforgery.GetTokens(HttpContext).RequestToken" />
    <!-- Другие поля формы -->
</form>
🟠Шифрование и Защита Данных Шифруйте чувствительные данные как при передаче, так и при хранении. При передаче: Используйте HTTPS для шифрования данных, передаваемых через сеть. При хранении: Используйте библиотеки для шифрования, такие как System.Security.Cryptography.
using (Aes aes = Aes.Create())
{
    aes.Key = key;
    aes.IV = iv;
    // Шифрование данных
}
🟠Логирование и Мониторинг Внедрите логирование и мониторинг для обнаружения и анализа подозрительной активности. Логирование: Логируйте важные действия, такие как входы в систему, изменения данных. Мониторинг: Используйте инструменты мониторинга, такие как Application Insights, для отслеживания состояния приложения.
_logger.LogInformation("User {UserId} logged in.", userId);
🟠Управление Ошибками и Исключениями Не показывайте подробные сообщения об ошибках пользователям, чтобы не раскрывать внутреннюю структуру приложения. Обработка исключений: Ловите и корректно обрабатывайте исключения, предоставляя пользователю дружелюбные сообщения.
try
{
    // Код, который может вызвать исключение
}
catch (Exception ex)
{
    _logger.LogError(ex, "Произошла ошибка.");
    return View("Error");
}
🟠Обновления и Патчи Регулярно обновляйте используемые библиотеки и фреймворки, чтобы закрывать уязвимости. 🟠Минимизация Поверхности Атаки Удалите или отключите ненужные функции и сервисы, чтобы минимизировать возможные точки входа для атак. 🟠Защита Конфигурации Защитите конфигурационные файлы, содержащие чувствительную информацию. Секреты и ключи: Используйте секреты и безопасное хранилище для конфиденциальной информации.
var connectionString = Configuration["ConnectionStrings:DefaultConnection"];
Ставь 👍 и забирай 📚 Базу знаний

Новый год 2026 в Антарктиде с RussiaDiscovery! ✅ Панорамные окна на лайнере SH Vega, бассейн-инфинити, спа, камины в каютах.
Новый год 2026 в Антарктиде с RussiaDiscovery! ✅ Панорамные окна на лайнере SH Vega, бассейн-инфинити, спа, камины в каютах. ✅ Высадки на континент, каякинг у ледников, купание в термальных водах, киты и пингвины! ✅ Все включено: отель 5* в Буэнос-Айресе, перелет до точки отправления, алкоголь, экспедиционная одежда. ✅ Новогодний ужин среди льдов + экскурсия на станцию «Беллинсгаузен». Встречайте Новый год там, где заканчивается карта мира! — Самое теплое время (+15°C днем) и море света антарктического лета. — Стабилизаторы качки, профессиональная команда и VIP-сервис. — 12 дней для получения самых ярких впечатлений жизни. Всего 152 места, забирайте свою каюту, пока есть места! Бронь всего 20% от стоимости. Нажиммайте «Забронировать» Забронировать #реклама 16+ russiadiscovery.ru О рекламодателе

🤔 Что такое ACID? Это набор свойств, обеспечивающих надежность транзакций в базе данных: - A (Atomicity) – атомарность: транзакция либо полностью выполняется, либо не выполняется вовсе. - C (Consistency) – согласованность: транзакция переводит БД из одного корректного состояния в другое. - I (Isolation) – изолированность: параллельные транзакции не влияют друг на друга. - D (Durability) – долговечность: после подтверждения транзакции изменения сохраняются, даже при сбоях. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Чем action отличается от func? Оба — это делегаты, но: Action<T> — ничего не возвращает (void). Func<T> — возвращает значение (TResult). 🚩`Action<T>` – Делегат без возврата Используется, когда метод выполняет действие, но ничего не возвращает.
Action<string> showMessage = message => Console.WriteLine(message);
showMessage("Привет!"); // Выведет: Привет!
🚩`Func<T, TResult>` – Делегат с возвратом Используется, когда метод выполняет вычисления и возвращает значение. Пример Func<T, TResult>
Func<int, int, int> sum = (a, b) => a + b;
int result = sum(5, 3); 
Console.WriteLine(result); // 8
Ставь 👍 и забирай 📚 Базу знаний

Repost from Идущий к IT
Я смотрю на эту цифру и до сих пор не верю. Когда я запускал этот проект, мне реально было страшно. Страшно, что ничего не по
Я смотрю на эту цифру и до сих пор не верю. Когда я запускал этот проект, мне реально было страшно. Страшно, что ничего не получится. Что я и мой проект никому не нужен. Страшно, что все увидят, как я публично обосрался. Я ставил планку в 300т рублей. В самом позитивном сценарии 1млн. Но про 5 миллионов… даже мысли не было. Уже в первые часы стало понятно, что кампания идет не по плану. Сайт краудфандинга не выдержал нашей нагрузки и лег 😁 Особенно в последние три дня — просто какой-то разрыв! Я ощущал, как будто ловлю попутный ветер. В последний час не хватало 50к до 5 млн, и я уже думал сам их докинуть, чтобы красиво закрыть 😁 Но финальная сумма это не так важно. Самое главное это как мы её собрали. Это не инвестиции, не чьи-то деньги под условия и контроль, не кредит. Это вы поверили и поддержали меня напрямую. Вы дали мне возможность оставить за собой полный контроль над easyoffer. Я чувствую огромную ответственность и нервничаю из-за высоких ожиданий. А вдруг что-то пойдёт не так? А вдруг на релизе кому-то что-то не понравится? Именно поэтому я рад, что могу честно выйти на новый этап и без давления от левых инвесторов. В такие моменты вспоминаю, с чего всё начиналось. Как 2 года назад я писал свои первые посты на 500 человек о том, как учу программирование. Как записывал первое видео на YouTube про поиск работы. Как пилил первую версию easyoffer, вообще без понимания, что из этого выйдет. И сейчас я думаю — может, эта история вдохновит кого-то из вас. Может, кто-то запустит свой айтишный проект, найдёт поддержку и соберёт бабки на развитие. Было бы круто Спасибо за невероятную и колосальную поддержку ❤️ О такой аудитории как вы я не мог мечтать