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

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

Відкрити в Telegram
5 059
Підписники
-524 години
-77 днів
-1730 день
Архів дописів
🤔 Если есть класс, а в нем значимый тип данных, где он будет храниться? Если значимый тип (например, int или struct) — это поле класса, то: - Сам класс хранится в куче (heap). - Значимый тип как поле будет внутри объекта класса, то есть в той же области памяти (в куче). Он не уходит в стек отдельно — размещается вместе с объектом, который его содержит. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как в кучах разделяются объекты? В .NET среде управления памятью, объекты размещаются в куче (heap), и управление памятью осуществляется сборщиком мусора (Garbage Collector, GC). Куча разделена на несколько поколений для оптимизации производительности управления памятью. 🚩Поколения кучи Куча в .NET разделена на три поколения: Generation 0, Generation 1 и Generation 2. Это разделение позволяет эффективно управлять памятью, минимизируя частоту сборок мусора и оптимизируя их выполнение. 🟠Generation 0 Содержит новосозданные объекты. Сборка мусора для этого поколения происходит чаще, так как большинство объектов "умирает" быстро. Наименьший размер среди всех поколений. 🟠Generation 1 Промежуточное поколение, используемое для объектов, которые пережили хотя бы одну сборку мусора Generation 0. Содержит объекты с более длительным временем жизни, чем объекты в Generation 0. 🟠Generation 2 Содержит объекты с самым длительным временем жизни. Наибольший размер среди всех поколений. Сборка мусора для этого поколения происходит реже всего. 🚩Large Object Heap (LOH) LOH используется для размещения крупных объектов (размером 85,000 байт и более). Объекты в LOH не перемещаются при сборке мусора, что уменьшает фрагментацию памяти. Сборка мусора для LOH происходит одновременно со сборкой Generation 2. 🚩Как разделяются объекты 🟠Размещение объектов При создании объекта он сначала размещается в Generation 0. Если объект переживает сборку мусора в Generation 0, он перемещается в Generation 1. Если объект переживает сборку мусора в Generation 1, он перемещается в Generation 2. 🟠Сборка мусора Generation 0: Быстрая и частая сборка. Цель - освободить память от краткоживущих объектов. Generation 1: Реже, чем Generation 0. Служит промежуточной зоной. Generation 2: Самая редкая и длительная сборка. Обрабатывает долгоживущие объекты. Large Object Heap (LOH): Сборка мусора проводится вместе с Generation 2.
public class Program
{
    public static void Main()
    {
        // Создание объектов в Generation 0
        for (int i = 0; i < 1000; i++)
        {
            var obj = new object();
        }

        // Создание большого объекта (размещается в LOH)
        byte[] largeArray = new byte[100000];
        
        // Принудительный вызов сборщика мусора
        GC.Collect();

        // Проверка поколения объекта
        Console.WriteLine(GC.GetGeneration(largeArray)); // Скорее всего, 2
    }
}
Ставь 👍 и забирай 📚 Базу знаний

Repost from easyoffer
Новая фича на easyoffer – Автоотлики Вы автоматически откликаетесь на подходящие вам вакансии. Попробуйте её бесплатно и начн
Новая фича на easyoffer Автоотлики Вы автоматически откликаетесь на подходящие вам вакансии. Попробуйте её бесплатно и начните получать больше предложений о работе. 🚀 Запуск занимаем всего 3 минуты, а экономит очень много времени 🛡 Это безопасно: easyoffer официально одобрен HeadHunter и прошел его модерацию. 🥷🏻 Автоотклик незаметен для рекртера. Автоотклик ничем не отличается от обычного отклика, который вы делаете вручную Рекрутеры давно используют автоматизацию для поиска кандидатов. Так почему вы должны откликаться вручную? 💡Совет – Добавьте шаблон сопроводительного письма, чтобы откликаться на большее количество вакансий (на некоторые вакансии нельзя откликнуться без сопроводительного) Попробовать бесплатно → https://easyoffer.ru/autoapply

🤔 Примеры паттерна абстрактной фабрики? Абстрактная фабрика — это паттерн, который позволяет создавать семейства взаимосвязанных объектов, не привязываясь к конкретным классам. Пример: В графической системе можно иметь: - Button и Checkbox для Windows, - Button и Checkbox для macOS. Абстрактная фабрика позволяет создавать соответствующие элементы без знания, для какой платформы они реализованы. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Получите консультацию по Китаю Надежные поставщики из Китая. Аудит фабрик и доставка образцов для вашего бизнеса! Хотите наладить сотрудничество с производителями в Китае? Мы поможем найти надежного поставщика, проведем аудит фабрик и организуем доставку образцов. Получить консультацию #реклама ecomax-group.ru О рекламодателе

🤔 Что такое куки и где оно хранится в запросе? Это небольшие фрагменты данных, которые веб-сайты сохраняют на устройствах пользователей для хранения информации о сессии и отслеживания состояния. Куки используются для различных целей, таких как аутентификация пользователей, хранение настроек и предпочтений, а также отслеживание активности пользователей на сайте. 🚩Основные свойства 🟠Имя (Name) Уникальный идентификатор для каждого куки. 🟠Значение (Value) Данные, которые хранит куки. 🟠Домен (Domain) Домен, для которого куки действителен. 🟠Путь (Path) Путь на сервере, для которого куки действителен. 🟠Время истечения (Expiration/Max-Age) Дата или время, когда куки должен быть удален. 🟠Безопасность (Secure) Указывает, что куки должны передаваться только через HTTPS. 🟠HTTPOnly Указывает, что куки недоступен через JavaScript, только через HTTP(S) запросы. 🚩Где хранятся 🟠Установка куки с сервера (Set-Cookie) Сервер отправляет куки в ответе на запрос клиента с использованием заголовка Set-Cookie.
   HTTP/1.1 200 OK
   Set-Cookie: sessionId=abc123; Path=/; Expires=Wed, 09 Jun 2023 10:18:14 GMT
   Content-Type: text/html
   
🟠Отправка куки клиентом (Cookie) Браузер автоматически добавляет соответствующие куки в заголовок Cookie при каждом последующем запросе к серверу, для которого эти куки действительны.
   GET /dashboard HTTP/1.1
   Host: example.com
   Cookie: sessionId=abc123
   
🚩Пример использования Установка куки на сервере (пример на Node.js с использованием Express)
const express = require('express');
const app = express();

app.get('/', (req, res) => {
    // Устанавливаем куки
    res.cookie('sessionId', 'abc123', { 
        maxAge: 900000, 
        httpOnly: true 
    });
    res.send('Куки установлены');
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});
Доступ к куки на клиенте (пример на JavaScript)
// Установка куки
document.cookie = "username=JohnDoe; expires=Thu, 18 Dec 2023 12:00:00 UTC; path=/";

// Получение всех куки
let cookies = document.cookie;
console.log(cookies);
🚩Важные моменты 🟠Безопасность Куки с флагом Secure передаются только по HTTPS-соединениям. Куки с флагом HttpOnly недоступны через JavaScript, что помогает защитить их от XSS-атак. 🟠Размер и количество Обычно один куки не должен превышать 4KB, и на одном домене может быть установлено не более 20-30 куки. 🟠Конфиденциальность Куки могут содержать чувствительные данные, поэтому важно защищать их и использовать шифрование, если необходимо. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое транзакция? Транзакция — это единица работы с базой данных, которая выполняется полностью или не выполняется вовсе. Основные свойства транзакции — ACID: - Atomicity (атомарность) — всё или ничего. - Consistency (согласованность) — данные переходят из одного допустимого состояния в другое. - Isolation (изолированность) — параллельные транзакции не мешают друг другу. - Durability (надёжность) — после коммита изменения сохраняются. В .NET можно управлять транзакциями вручную или через TransactionScope. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Если в двух переменных хранится одинаковое значение, то будут ли они равны? Сравнение значений переменных может зависеть от типа данных, хранящихся в этих переменных, и от способа их сравнения. 🟠Примитивные типы (Value Types) Для примитивных типов (например, int, float, char, bool) значение хранятся непосредственно в переменных, и их сравнение выполняется по значению.
int a = 5;
int b = 5;

bool areEqual = (a == b); // True
🟠Ссылочные типы (Reference Types) Для ссылочных типов (например, классы, строки) переменные содержат ссылки на объекты в куче. Сравнение ссылочных типов по умолчанию выполняется по ссылке, а не по значению.
class Person
{
    public string Name { get; set; }
}

Person person1 = new Person { Name = "Alice" };
Person person2 = new Person { Name = "Alice" };

bool areEqual = (person1 == person2); // False, потому что сравниваются ссылки
🟠Строки (Strings) Строки являются ссылочными типами, но переопределяют операторы сравнения == и Equals для сравнения по значению.
string str1 = "Hello";
string str2 = "Hello";

bool areEqual = (str1 == str2); // True, строки сравниваются по значению
🟠Кастомные классы Для кастомных классов можно переопределить методы Equals и GetHashCode, чтобы сравнивать объекты по значению.
class Person
{
    public string Name { get; set; }

    public override bool Equals(object obj)
    {
        if (obj == null || GetType() != obj.GetType())
            return false;

        Person other = (Person)obj;
        return Name == other.Name;
    }

    public override int GetHashCode()
    {
        return Name.GetHashCode();
    }
}

Person person1 = new Person { Name = "Alice" };
Person person2 = new Person { Name = "Alice" };

bool areEqual = person1.Equals(person2); // True
Ставь 👍 и забирай 📚 Базу знаний

Простая CRM в Битрикс24 Битрикс24 не грузит менеджеров лишними действиями. Всё автоматизировано: задачи ставятся сами, отчёты
Простая CRM в Битрикс24 Битрикс24 не грузит менеджеров лишними действиями. Всё автоматизировано: задачи ставятся сами, отчёты собираются в один клик, продажи растут. CRM, которая экономит нервы и деньги. ✅ Начните бесплатно Зарегистрироваться #реклама 16+ bitrix24.ru О рекламодателе

🤔 Для чего используют GVT? Концепт из распределённых систем, чаще используется в симуляциях и распределённых вычислениях (например, в алгоритмах параллельной дискретной симуляции). Применение: - Определение момента времени, до которого все события в системе завершены. - Управление откатами, удалением стейтов, сборкой мусора в системах с отложенным выполнением событий. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Изиоффер переходит в публичное бета-тестирование! 🎉 Что нового: 🟢Анализ IT собеседований на основе 4500+ реальных интервью
Изиоффер переходит в публичное бета-тестирование! 🎉 Что нового: 🟢Анализ IT собеседований на основе 4500+ реальных интервью 🟢Вопросы из собеседований с вероятностью встречи 🟢Видео-примеры ответов на вопросы от Senior, Middle, Junior грейдов 🟢Пример лучшего ответа 🟢Задачи из собеседований 🟢Тестовые задания 🟢Примеры собеседований 🟢Фильтрация всего контента по грейдам, компаниям 🟢Тренажер подготовки к собеседованию на основе интервальных повторений и флеш карточек 🟢Тренажер "Реальное собеседование" с сценарием вопросов из реальных собеседований (скоро) 🟢Автоотклики на HeadHunter 🟢Закрытое сообщество easyoffer 💎 Акция в честь открытия для первых 500 покупателей: 🚀 Скидка 50% на PRO тариф на 1 год 🔥 Акция уже стартовала! 👉 https://easyoffer.ru/pro

🤔 Какие есть подходы в рамках эфкора? Entity Framework Core (EF Core) — это ORM (Object-Relational Mapping), которая упрощает работу с базой данных в C#. Основные подходы работы с EF Core: Code First (Код → База) Database First (База → Код) Model First (Модель → База → Код) 🚩Code First (Сначала код) Сначала создаётся код (C# классы), а база данных создаётся автоматически. Если у нас нет готовой базы данных Когда разрабатываем с нуля Легче вносить изменения через миграции 1⃣Создаём модель
public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
}
2⃣Создаём контекст (DbContext)
public class AppDbContext : DbContext
{
    public DbSet<User> Users { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder options)
        => options.UseSqlServer("Server=.;Database=TestDb;Trusted_Connection=True;");
}
3⃣Применяем миграции
dotnet ef migrations add InitialCreate
dotnet ef database update
🚩Database First (Сначала база) База данных уже есть → EF Core генерирует код (модели, DbContext). Когда уже существует база Когда работаете с наследуемой системой Как сгенерировать модели из базы?
dotnet ef dbcontext scaffold "Server=.;Database=TestDb;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models
🚩Model First (Сначала модель) Создаём модель (визуально), потом генерируем базу и код. Не поддерживается в EF Core! (была в EF 6) В старых проектах (EF 6) с визуальным проектированием Когда нужна автогенерация схемы БД Используйте Code First с миграциями вместо Model First. Ставь 👍 и забирай 📚 Базу знаний

🤔 Как можно использовать делегаты? Делегаты позволяют: - Передавать методы как параметры. - Создавать цепочки вызовов (мультикаст). - Реализовывать обратные вызовы (callback). - Использовать события и обработчики событий. - Организовывать стратегии поведения в шаблонах проектирования. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

📺 База 1000+ реальных собеседований На программиста, тестировщика, аналитика, проджекта и другие IT профы. Есть собесы от ведущих компаний: Сбер, Яндекс, ВТБ, Тинькофф, Озон, Wildberries и т.д. 🎯 Переходи по ссылке и присоединяйся к базе, чтобы прокачать свои шансы на успешное трудоустройство!

Как повысить эффективность вебинаров? Организация продающего вебинара - не простая задача, ведь необходимо предусмотреть множ
Как повысить эффективность вебинаров? Организация продающего вебинара - не простая задача, ведь необходимо предусмотреть множество деталей: удобную дату, вовлекающий контент, методы продвижения и взаимодействия с участниками. Вебинары от МТС Линк помогают привлекать новых клиентов и увеличивать конверсию из участника в лид. В сервисе доступен анализ поведения пользователей во время вебинара, синхронный перевод, автовебинары и интерактивные инструменты для вовлечения участников. Делимся методичкой с кейсами, чек-листами и инструкциями для маркетологов, PR и event-менеджеров, чтобы сделать вебинары эффективным инструментом для лидогенерации. Получите методичку бесплатно на сайте. Скачать #реклама 16+ mts-link.ru О рекламодателе

🤔 В чем разница между переменными const, readonly и static? В C# const, readonly используются для разных целей и имеют разные характеристики. Давайте рассмотрим различия между ними. 🚩`const` Поле, объявленное как const, является константой и должно быть инициализировано во время объявления. Значение const поля не может быть изменено после компиляции. Область применения Константы компилируются в код и становятся частью метаданных сборки. Они не могут быть изменены в процессе выполнения программы. Тип данных const поддерживает только примитивные типы данных, строки и enum.
public class MyClass
{
    public const int MyConst = 10;
}
🚩`readonly` Поле, объявленное как readonly, может быть инициализировано либо во время объявления, либо в конструкторе. Значение readonly поля может быть изменено только в конструкторе и не может быть изменено после этого. Область применения readonly поля используются для значений, которые должны быть неизменными после инициализации объекта, но могут различаться между экземплярами класса. Тип данных readonly поддерживает любые типы данных.
public class MyClass
{
    public readonly int MyReadonly;

    public MyClass(int value)
    {
        MyReadonly = value;
    }
}
Ставь 👍 и забирай 📚 Базу знаний

Сервис аналитики для маркетплейсов Попробуй новый сервис аналитики маркетплейсов Бесплатно. Попробовать #реклама xstat.ru О рекламодателе

🤔 Что из себя представляет DI в ASP.NET Core? Dependency Injection (внедрение зависимостей) — это встроенный механизм, с помощью которого ASP.NET Core: - Создаёт и управляет зависимостями (объектами). - Позволяет вкладывать зависимости в конструкторы или методы. - Использует контейнер служб, где регистрируются интерфейсы и реализации. DI позволяет отделить создание объектов от их использования, улучшая тестируемость и масштабируемость. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое сборщик мусора? Сборщик мусора (Garbage Collector, GC) — это форма автоматического управления памятью. Он отслеживает каждый объект, выделенный в куче, и определяет, какие объекты более не доступны для приложения, а затем освобождает память, занимаемую этими объектами. Это ключевой компонент во многих современных языках программирования и средах выполнения, облегчая задачу управления памятью. 🚩Основные этапы работы 🟠Маркировка (Marking) Сборщик мусора периодически проходит через все объекты в куче, начиная с "корней" (объектов, непосредственно доступных в программе, например, через переменные в стеке вызовов и глобальные переменные). Он отмечает все объекты, до которых можно добраться напрямую или косвенно. 🟠Очистка (Sweeping) После маркировки доступных объектов, сборщик мусора удаляет все непомеченные объекты, освобождая ресурсы, которые они занимали. 🟠Компактификация (Compacting) Некоторые сборщики мусора перемещают оставшиеся объекты, чтобы уменьшить фрагментацию памяти и улучшить производительность работы с памятью. 🚩Ограничения 🟠Производительность Процесс сборки мусора может быть ресурсоёмким и может привести к заметным паузам в выполнении программы, особенно если куча большая. 🟠Непредсказуемость Точное время сборки мусора может быть непредсказуемым, что может создавать проблемы в приложениях с реальным временем. Ставь 👍 и забирай 📚 Базу знаний

🤔 Если мы используем Ref & Out, то становится ли эта структура ссылочным типом? Нет, структура остаётся значимым типом, но передаётся по ссылке, что позволяет изменять её данные внутри метода. Однако это не делает её ссылочным типом, как класс. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний