C# | Вопросы собесов
Ir al canal en Telegram
Cайт easyoffer.ru Реклама @easyoffer_adv ВП @easyoffer_vp Тесты t.me/+nebTPWgpeGs1OWFi Задачи t.me/+Xy-0H7xKlgo0NDVi Вакансии t.me/+BQFHXZQ0zrViNGIy
Mostrar más5 050
Suscriptores
+324 horas
-147 días
-2630 días
Archivo de publicaciones
5 048
🤔 Что такое asp.net
ASP.NET — это веб-платформа от Microsoft для создания динамических сайтов и веб-приложений. Она работает на базе .NET Framework, предоставляя разработчикам доступ к широкому набору инструментов и библиотек. ASP.NET поддерживает множество языков программирования, включая C# и VB.NET, что делает её универсальной для различных задач.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 048
Как мы делаем СУБД Pangolin?
Привет! На связи команда разработки СУБД Platform V Pangolin.
Мы делаем полезное сообщество для всех профессионалов из мира СУБД и всех, кому интересен наш продукт.
Пишем о том, как делаем Pangolin, разбираем ваши кейсы в чате, помогаем решать рабочие задачки, зовем на бесплатные вебинары и митапы, проводим квизы про базы данных, разбираем английский сленг, а еще у нас есть вакансии и идеи для хобби айтишников...
Подпишитесь, у нас как раз много нового!
Подписаться
#реклама 16+
О рекламодателе
5 048
🤔 Что такое expression?
Это структура данных, представляющая код в виде дерева. Деревья выражений позволяют программно строить, анализировать и выполнять код. Это мощный инструмент для динамического создания и трансформации выражений, что делает их полезными в различных сценариях, таких как LINQ, ORM (например, Entity Framework), динамическое построение запросов и создание компилируемых делегатов.
🚩Основные концепции
🟠Expression Tree (дерево выражений)
Это структура данных, которая представляет синтаксическое дерево кода. Каждая нода (узел) дерева является экземпляром класса
Expression или его производных.
🟠System.Linq.Expressions
Пространство имен, в котором находятся классы и методы для работы с деревьями выражений.
🚩Пример создания
Простое арифметическое выражение
using System;
using System.Linq.Expressions;
class Program
{
static void Main()
{
// Создаем параметры для выражения
ParameterExpression paramA = Expression.Parameter(typeof(int), "a");
ParameterExpression paramB = Expression.Parameter(typeof(int), "b");
// Создаем выражение: a + b
BinaryExpression body = Expression.Add(paramA, paramB);
// Компилируем выражение в делегат
var add = Expression.Lambda<Func<int, int, int>>(body, paramA, paramB).Compile();
// Используем делегат
int result = add(2, 3);
Console.WriteLine(result); // Output: 5
}
}
🚩Сценарии использования expression
🟠LINQ to SQL и другие ORM
Деревья выражений широко используются в ORM системах для преобразования выражений LINQ в SQL-запросы. Это позволяет использовать LINQ-запросы для взаимодействия с базами данных.
using (var context = new MyDbContext())
{
var query = context.Users.Where(u => u.Age > 30);
// Выражение `u => u.Age > 30` представлено как Expression и переводится в SQL
foreach (var user in query)
{
Console.WriteLine(user.Name);
}
}
🟠Динамическое построение запросов
Деревья выражений позволяют создавать динамические запросы, которые могут изменяться в зависимости от условий во время выполнения программы.
public static IQueryable<T> ApplyFilter<T>(IQueryable<T> query, string propertyName, object value)
{
var parameter = Expression.Parameter(typeof(T), "x");
var member = Expression.Property(parameter, propertyName);
var constant = Expression.Constant(value);
var body = Expression.Equal(member, constant);
var predicate = Expression.Lambda<Func<T, bool>>(body, parameter);
return query.Where(predicate);
}
🟠Построение компилируемых делегатов
Деревья выражений можно использовать для создания делегатов, которые компилируются во время выполнения, что позволяет динамически генерировать и выполнять код.
Expression<Func<int, int, int>> expr = (a, b) => a + b;
var func = expr.Compile();
int result = func(2, 3); // result = 5
Ставь 👍 и забирай 📚 Базу знаний5 048
Repost from Идущий к IT
Твое резюме на HeadHunter — ОК, если ты видишь это.
HeadHunter сравнивает ключевые навыки в твоем резюме и в вакансии и в момент отклика отображает, насколько % ты соответствуешь требованиям.
Специальный бейджик «Подходит по навыкам на 100%» отображается, если соответствие составляет более 60%.
Если при просмотре вакансий ты видишь такой бейджик, это значит, что список навыков в твоем резюме качественно составлен.
Это важный параметр, так как рекрутерам чаще показываются резюме с лучшим соответствием.
О том, как правильно указывать ключевые навыки и оптимизировать свое резюме я уже рассказывал в этом видео
5 048
🤔 Что такое сервис локатор?
Сервис локатор — это шаблон проектирования, который используется в программировании для управления зависимостями между классами. Он действует как централизованный реестр, который хранит экземпляры сервисов и предоставляет их по запросу. В C# этот шаблон помогает избежать жесткой связи между компонентами программы, облегчая тестирование и поддержку.
1. Централизованное управление: Сервис локатор держит реестр всех доступных сервисов и предоставляет их по запросу, что упрощает управление жизненным циклом объектов.
2. Гибкость: Шаблон позволяет легко заменять и обновлять сервисы без изменения кода, который их использует, что делает приложение более модульным.
3. Изоляция зависимостей: С помощью сервис локатора, компоненты могут запрашивать зависимости в рантайме, что снижает зависимость от конкретных реализаций.
Однако стоит учитывать, что чрезмерное использование сервис локатора может привести к скрытому управлению зависимостями, что усложняет отслеживание и управление ими в больших приложениях. Это может сделать архитектуру приложения менее прозрачной и затруднить отладку и тестирование.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 048
Как экономить с Low-code от СберТеха
5 декабря в 11:00 приглашаем на бесплатный вебинар «Полный цикл low-code разработки под ключ: от базы данных до бизнес-процессов» от СберТеха.
Поделимся реальным опытом low-code разработки. Разберем кейсы для банковского, финтех-сегментов и не только. Покажем в реальном времени возможности продуктов Platform V Flow и Platform V DataSpace для low-code разработки. Расскажем о лучших практиках использования low-code инструментов.
А еще вы узнаете:
✅ Как решения, созданные с использованием low-code инструментов, выдерживают highload-нагрузки
✅ Как сэкономить ресурсы senior-разработчиков
✅ Как быстро и дешево создать прототип готового решения / enterprise-grade бэкенда приложений
Регистрируйтесь и приходите!
Зарегистрироваться
#реклама 16+
platformv.sbertech.ru
О рекламодателе
5 048
🤔 Для чего используются expression`ы?
Для представления кода в виде структур данных, что позволяет программно создавать, анализировать и выполнять этот код. Это дает мощные возможности для динамической работы с кодом, включая создание, трансформацию и выполнение выражений во время выполнения программы.
🚩Основные сценарии
🟠LINQ to SQL и другие ORM
Expression`ы широко используются в ORM (Object-Relational Mapping) системах, таких как Entity Framework и LINQ to SQL, для преобразования выражений LINQ в SQL-запросы.
using (var context = new MyDbContext())
{
var query = context.Users.Where(u => u.Age > 30);
// Выражение `u => u.Age > 30` представлено как Expression и переводится в SQL
foreach (var user in query)
{
Console.WriteLine(user.Name);
}
}
🟠Динамическое построение запросов
Expression`ы позволяют создавать динамические запросы, которые могут изменяться в зависимости от условий во время выполнения программы.
public static IQueryable<T> ApplyFilter<T>(IQueryable<T> query, string propertyName, object value)
{
var parameter = Expression.Parameter(typeof(T), "x");
var member = Expression.Property(parameter, propertyName);
var constant = Expression.Constant(value);
var body = Expression.Equal(member, constant);
var predicate = Expression.Lambda<Func<T, bool>>(body, parameter);
return query.Where(predicate);
}
🟠Построение компилируемых делегатов
Expression`ы можно использовать для создания делегатов, которые компилируются во время выполнения, что позволяет динамически генерировать и выполнять код.
Expression<Func<int, int, int>> expr = (a, b) => a + b;
var func = expr.Compile();
int result = func(2, 3); // result = 5
🟠Анализ и трансформация кода
Expression`ы позволяют анализировать и изменять выражения, что полезно для создания библиотек и фреймворков, которые работают с выражениями.
Expression<Func<int, bool>> expr = x => x > 5;
var body = (BinaryExpression)expr.Body;
var left = (ParameterExpression)body.Left;
var right = (ConstantExpression)body.Right;
Console.WriteLine($"Left: {left.Name}, Right: {right.Value}"); // Output: Left: x, Right: 5
🟠Валидация и динамическая генерация правил
Expression`ы могут быть использованы для создания динамических правил валидации и их проверки.
public static Func<T, bool> GetValidator<T>(string propertyName, object value)
{
var parameter = Expression.Parameter(typeof(T), "x");
var member = Expression.Property(parameter, propertyName);
var constant = Expression.Constant(value);
var body = Expression.Equal(member, constant);
return Expression.Lambda<Func<T, bool>>(body, parameter).Compile();
}
var validateAge = GetValidator<User>("Age", 30);
bool isValid = validateAge(new User { Age = 30 }); // isValid = true
🟠Кэширование и оптимизация
Expression`ы могут быть использованы для создания кэша выражений, что позволяет оптимизировать выполнение часто повторяющихся операций.
var parameter = Expression.Parameter(typeof(int), "x");
var body = Expression.Multiply(parameter, Expression.Constant(2));
var lambda = Expression.Lambda<Func<int, int>>(body, parameter);
var compiled = lambda.Compile();
// Кэшируем делегат
var cache = new Dictionary<int, Func<int, int>>();
cache[2] = compiled;
int result = cache ; // result = 6
Ставь 👍 и забирай 📚 Базу знаний5 048
🤔 Как используется ключевое слово await?
В C#, ключевое слово `await` используется в сочетании с асинхронными методами для указания точки, в которой выполнение текущего метода будет приостановлено до завершения асинхронной операции. `await` делает код асинхронной операции выглядящим как синхронный и позволяет возвращать управление вызывающему коду, предотвращая блокировку UI или других операций, пока асинхронная операция выполняется.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 048
+9
Помощь в трудоустройстве в IT-сфере!
В России из-за дефицита айтишников запустили бесплатную программу по обучению IT-специалистов. Теперь любой желающий может попробовать себя в IT с полного нуля и начать обучение бесплатно!
Узнайте про дальнейшее трудоустройство в ведущие IT-компании для восполнения кадрового дефицита.
Для этого нужно:
- Перейти по ссылке
- Заполнить анкету и ответить на вопросы (занимает менее 3 минут)
- На основании ваших ответов вы сразу узнаете, подходит ли вам сфера IT и сможете ли вы в ней работать
Перейти на сайт
#реклама 16+
urban-university.ru
О рекламодателе
5 048
🤔 Что такое деревья выражений?
Представляют собой мощный инструмент для работы с кодом на уровне его синтаксического дерева. Они позволяют программно строить, анализировать и выполнять выражения, представленные в виде дерева объектов.
🚩Понятия
🟠Определение
Деревья выражений — это структура данных, которая представляет собой синтаксическое дерево выражения. Они позволяют рассматривать и манипулировать кодом как данными.
🟠Пространство имен
Деревья выражений находятся в пространстве имен
System.Linq.Expressions.
🚩Зачем нужны?
🟠Динамическое создание кода
Позволяют создавать и компилировать код во время выполнения.
🟠Анализ выражений
Полезны для инструментов анализа кода, таких как ORM (например, Entity Framework), которые преобразуют выражения LINQ в SQL-запросы.
🟠Рефлексия
Помогают в сценариях, где нужно исследовать и манипулировать кодом на уровне метаданных.
Простое арифметическое выражение
using System;
using System.Linq.Expressions;
class Program
{
static void Main()
{
// Создаем параметры для выражения
ParameterExpression paramA = Expression.Parameter(typeof(int), "a");
ParameterExpression paramB = Expression.Parameter(typeof(int), "b");
// Создаем выражение: a + b
BinaryExpression body = Expression.Add(paramA, paramB);
// Компилируем выражение в делегат
var add = Expression.Lambda<Func<int, int, int>>(body, paramA, paramB).Compile();
// Используем делегат
int result = add(2, 3);
Console.WriteLine(result); // Output: 5
}
}
Выражение с логикой
using System;
using System.Linq.Expressions;
class Program
{
static void Main()
{
// Создаем параметры для выражения
ParameterExpression paramX = Expression.Parameter(typeof(int), "x");
ParameterExpression paramY = Expression.Parameter(typeof(int), "y");
// Создаем выражение: x > y ? x - y : y - x
Expression condition = Expression.Condition(
Expression.GreaterThan(paramX, paramY),
Expression.Subtract(paramX, paramY),
Expression.Subtract(paramY, paramX)
);
// Компилируем выражение в делегат
var compareAndSubtract = Expression.Lambda<Func<int, int, int>>(condition, paramX, paramY).Compile();
// Используем делегат
int result1 = compareAndSubtract(10, 5); // Output: 5
int result2 = compareAndSubtract(3, 8); // Output: 5
Console.WriteLine(result1);
Console.WriteLine(result2);
}
}
🚩Использование деревьев выражений
Одним из наиболее распространенных примеров использования деревьев выражений является LINQ. Когда вы пишете выражения LINQ, такие как Queryable.Where, они часто переводятся в деревья выражений, которые затем могут быть преобразованы в SQL-запросы или другие форматы.
using System;
using System.Linq;
using System.Linq.Expressions;
class Program
{
static void Main()
{
Expression<Func<int, bool>> expr = x => x > 5;
// Разбор дерева выражений
var body = (BinaryExpression)expr.Body;
var left = (ParameterExpression)body.Left;
var right = (ConstantExpression)body.Right;
Console.WriteLine($"Left: {left.Name}, Right: {right.Value}"); // Output: Left: x, Right: 5
}
}
Ставь 👍 и забирай 📚 Базу знаний5 048
Бесплатное IT-образование в 2024
Отобрали для вас полезные телеграм-каналы, которые помогут освоить программирование и другие IT-направления
Выбирайте нужное и подписывайтесь:
👩💻 Python: @PythonPortal
📱 GitHub: @git_developer
👩💻 Frontend: @FrontendPortal
🤓 Книги айти: @portalToIT
👩💻 Java: @Java_Iibrary
👩💻 C#: @KodBlog
👩💻 С/С++: @Cpportal
⚙️ Backend: @BackendPortal
🐞 Тестирование: @QAPortal
👩💻 DevOps: @loose_code
🖥 Базы Данных & SQL: @SQL
👩💻 Golang: @juniorGolang
👩💻 PHP: @PHPortal
👩💻 Моб. разработка: @MobDev
👩💻 Разработка игр: @GameDevgx
🖥 Data Science: @DataSciencegx
🤔 Хакинг & ИБ: @cybersecinform
📱 Маркетинг: @MarketingPortal
🖥 Дизайн: @PortalToDesign
➡️ Сохраняйте себе, чтобы не потерять
5 048
🤔 В чем разница между асинхронностью и многопоточностью?
Асинхронность и многопоточность — это два подхода к параллельной обработке задач. Асинхронность позволяет программе продолжать выполнение работы, в то время как она ждет завершения другой задачи (например, ввода/вывода), не блокируя основной поток. Многопоточность включает использование нескольких потоков для выполнения различных задач одновременно, что может ускорить выполнение программы за счет одновременной обработки данных.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 048
+9
Помощь в трудоустройстве в IT-сфере!
В России из-за дефицита айтишников запустили бесплатную программу по обучению IT-специалистов. Теперь любой желающий может попробовать себя в IT с полного нуля и начать обучение бесплатно!
Узнайте про дальнейшее трудоустройство в ведущие IT-компании для восполнения кадрового дефицита.
Для этого нужно:
- Перейти по ссылке
- Заполнить анкету и ответить на вопросы (занимает менее 3 минут)
- На основании ваших ответов вы сразу узнаете, подходит ли вам сфера IT и сможете ли вы в ней работать
Перейти на сайт
#реклама 16+
urban-university.ru
О рекламодателе
5 048
🤔 Как при ref & out выделяется память в кучи?
Ключевые слова
ref и out используются для передачи аргументов по ссылке, что позволяет методам изменять значения переданных переменных. При этом сами ключевые слова не влияют на то, где выделяется память (в стеке или куче). Место выделения памяти определяется типом данных, который передается в метод.
🚩Основные концепции
🟠`ref`
Передает переменную по ссылке, позволяя методу как читать, так и изменять значение переменной.
void Increment(ref int number)
{
number++;
}
int value = 5;
Increment(ref value);
Console.WriteLine(value); // Output: 6
🟠`out`
Также передает переменную по ссылке, но требует, чтобы метод присвоил значение переменной перед тем, как метод завершится.
void Initialize(out int number)
{
number = 10;
}
int value;
Initialize(out value);
Console.WriteLine(value); // Output: 10
🚩Место выделения памяти
🟠Значимые типы (Value Types)
Переменные значимых типов, такие как int, float, struct, хранятся в стеке. Когда такие переменные передаются в метод с ref или out, передается ссылка на место в стеке, где хранится значение.
void ProcessValue(ref int value)
{
value = 42; // Изменение значения переменной в стеке
}
int x = 10;
ProcessValue(ref x); // Передача ссылки на переменную x в стеке
🟠Ссылочные типы (Reference Types)
Переменные ссылочных типов, такие как объекты классов, хранятся в куче, а ссылки на эти объекты — в стеке. При передаче ссылочных типов с ref или out, передается сама ссылка на объект в куче.
void UpdatePerson(ref Person person)
{
person.Name = "Updated Name"; // Изменение объекта в куче
}
Person person = new Person { Name = "Original Name" };
UpdatePerson(ref person); // Передача ссылки на объект person
Ставь 👍 и забирай 📚 Базу знаний5 048
🤔 Что такое EF?
Entity Framework (EF) — это ORM (Object-Relational Mapping) фреймворк от Microsoft, который позволяет разработчикам работать с данными как с объектами, не беспокоясь о базовых SQL запросах. Это упрощает работу с базами данных, автоматически обрабатывая запросы, обновления и связи данных. EF поддерживает широкий спектр функциональности баз данных и облегчает интеграцию данных в .NET-приложения.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 048
Только полезный контент для системных аналитиков!
Устали от лишней теории?
На канале Ольги Пономаревой только практическая информация: советы по проектированию и интеграции, шаги по созданию эффективных решений, навыки работы с Postman и Swagger, а также уникальные шаблоны для упрощения работы. Каждый пост — это кладезь знаний для аналитиков, стремящихся стать профессионалами.
Переходите в канал и получите доступ к полезным материалам от топового эксперта. Не упустите шанс и присоединяйтесь к сообществу профессионалов!
Подписаться
#реклама 16+
О рекламодателе
5 048
🤔 Где хранятся ссылочные типы?
Ссылочные типы хранятся в куче (heap), а переменные, которые их ссылаются, хранятся в стеке (stack).
🚩Моменты
🟠Куча (Heap)
Это область памяти, где выделяется память для объектов ссылочных типов. Куча управляется средой выполнения CLR (Common Language Runtime), и сборщик мусора (Garbage Collector) отвечает за освобождение памяти, когда объекты больше не используются.
🟠Стек (Stack)
Это область памяти, где хранятся значения переменных, которые ссылаются на объекты в куче, а также значения переменных значимых типов.
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
void Example()
{
Person person1 = new Person { Name = "Alice", Age = 30 };
Person person2 = person1; // person2 ссылается на тот же объект, что и person1
person2.Age = 35;
Console.WriteLine(person1.Age); // Output: 35
Console.WriteLine(person2.Age); // Output: 35
}
🚩Что происходит в памяти
🟠Создание объекта `Person`
Когда выполняется new Person { Name = "Alice", Age = 30 }, новый объект Person создается в куче. В памяти выделяется место для хранения полей Name и Age. Переменная person1 хранится в стеке и содержит ссылку на объект Person в куче.
🟠Присваивание `person2 = person1`
Переменная person2 также хранится в стеке и получает копию ссылки, хранящейся в person1. Оба person1 и person2 теперь указывают на один и тот же объект в куче.
🟠Изменение `person2.Age`
Когда изменяется person2.Age, на самом деле изменяется поле Age объекта Person, на который ссылаются обе переменные.
🚩Сборка мусора (Garbage Collection)
Когда объект в куче больше не имеет активных ссылок из стека или других объектов, сборщик мусора может освободить память, занятую этим объектом. Это помогает управлять памятью и предотвращает утечки памяти.
Ставь 👍 и забирай 📚 Базу знаний5 048
🤔 Что такое индексы, какие типы бывают, использовал ли их на практике?
Индексы в контексте баз данных — это структуры, которые помогают ускорить операции выборки данных, предоставляя быстрые пути к данным в таблицах. Виды индексов включают кластерные, некластерные, полнотекстовые и другие. Кластерные индексы определяют физический порядок хранения данных в таблице, в то время как некластерные индексы хранят только указатели на данные. Я использовал индексы на практике для улучшения производительности запросов в базах данных.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 048
🤔 Что такое значимые типы?
Представляют собой типы данных, которые хранят свои значения непосредственно. В отличие от ссылочных типов (reference types), которые хранят ссылки на объекты в памяти, значимые типы хранят данные непосредственно в переменной.
🚩Характеристики
🟠Хранение в стеке
Значимые типы обычно хранятся в стеке, что делает их более эффективными по сравнению с ссылочными типами, которые хранятся в куче.
🟠Копирование значений
При присваивании одной переменной значимого типа другой переменной происходит копирование значения, а не ссылки.
🟠Отсутствие сборщика мусора
Значимые типы не требуют работы сборщика мусора для освобождения памяти, так как они автоматически удаляются при выходе из области видимости.
🚩Примеры
Примитивные типы
int number = 10;
float temperature = 36.6f;
bool isAlive = true;
char letter = 'A';
Структуры
public struct Point
{
public int X;
public int Y;
public Point(int x, int y)
{
X = x;
Y = y;
}
}
Point p1 = new Point(10, 20);
Point p2 = p1; // Копирование значения
p2.X = 30;
Console.WriteLine(p1.X); // Output: 10
Console.WriteLine(p2.X); // Output: 30
Перечисления
public enum DaysOfWeek
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
DaysOfWeek today = DaysOfWeek.Monday;
🚩Отличия от ссылочных типов
🟠Хранение в куче
Объекты ссылочных типов хранятся в куче, и на них ссылаются переменные.
🟠 Копирование ссылок
При присваивании одной переменной ссылочного типа другой переменной копируется ссылка на объект, а не сам объект.
🟠Сборка мусора
Сборщик мусора управляет памятью для объектов ссылочных типов, удаляя их, когда на них больше нет ссылок.
Ставь 👍 и забирай 📚 Базу знаний5 048
🤔 Что такое asp.net?
ASP.NET — это фреймворк для веб-разработки, предоставляемый Microsoft, который позволяет разработчикам строить динамичные веб-сайты, веб-приложения и веб-сервисы. Он основан на .NET Framework и поддерживает языки программирования, такие как C#, VB.NET и другие. ASP.NET отличается от простого HTML тем, что сервер выполняет код и отправляет результаты клиенту, позволяя создавать интерактивные и динамически обновляемые веб-страницы.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
¡Ya disponible! Investigación de Telegram 2025 — los principales insights del año 
