C# | Вопросы собесов
رفتن به کانال در Telegram
Cайт easyoffer.ru Реклама @easyoffer_adv ВП @easyoffer_vp Тесты t.me/+nebTPWgpeGs1OWFi Задачи t.me/+Xy-0H7xKlgo0NDVi Вакансии t.me/+BQFHXZQ0zrViNGIy
نمایش بیشتر5 059
مشترکین
-524 ساعت
-77 روز
-1730 روز
آرشیو پست ها
5 059
🤔 Как понять, что в коде будет использоваться IQueryable, а не IEnumerable?
Если запрос выполняется на уровне базы данных или другого внешнего источника данных, используется IQueryable. Если данные уже загружены в память, используется IEnumerable.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 059
🤔 Что такое паттерн MVVM?
MVVM (Model-View-ViewModel) — это паттерн проектирования, который разделяет логику программы и интерфейс пользователя. Он широко используется в WPF, Xamarin, MAUI и Blazor.
🚩Как они взаимодействуют?
ViewModel обновляет Model (через
Command и INotifyPropertyChanged).
Model уведомляет ViewModel об изменениях.
View автоматически обновляется (через Data Binding).
🚩Пример MVVM в WPF
Model (Модель)
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
ViewModel (Логика)
using System.ComponentModel;
using System.Runtime.CompilerServices;
public class PersonViewModel : INotifyPropertyChanged
{
private string _name;
public string Name
{
get => _name;
set { _name = value; OnPropertyChanged(); }
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
View (XAML)
<TextBox Text="{Binding Name, Mode=TwoWay}" />
<TextBlock Text="{Binding Name}" />
Ставь 👍 и забирай 📚 Базу знаний5 059
🤔 В чём отличие методов и функций?
В .NET (и большинстве ООП-языков):
- Функция — подпрограмма, которая возвращает результат.
В C# это — любой static или instance метод с возвращаемым типом.
- Метод — функция, привязанная к классу или объекту.
То есть, в ООП всё называется методами, даже если это технически функция.
Таким образом, всё, что мы называем "функцией" в C#, — это метод. Разница скорее терминологическая.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 059
🤔 Как браузер отправляет запрос и получает ответ от API?
Когда браузер отправляет запрос и получает ответ от API, это включает несколько шагов, которые следуют HTTP-протоколу. Этот процесс включает в себя создание и отправку HTTP-запроса, обработку на сервере и получение HTTP-ответа.
🚩Отправка запроса
🟠Инициация запроса
Обычно запрос инициируется через JavaScript с использованием встроенных функций, таких как
XMLHttpRequest, fetch или сторонние библиотеки, такие как Axios.
fetch('https://api.example.com/data', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer token'
}
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
🟠Формирование HTTP-запроса
Метод: Указывает тип запроса (например, GET, POST, PUT, DELETE). URL: Указывает на какой URL отправляется запрос. Заголовки (Headers): Включают информацию о типе содержимого, авторизации и других метаданных. Тело (Body): Содержит данные, которые отправляются с запросом (для методов POST, PUT и PATCH).
🟠Отправка запроса
Браузер использует сетевые протоколы для отправки сформированного HTTP-запроса на указанный сервер через интернет.
🚩Обработка запроса на сервере
1⃣Получение запроса
Сервер получает HTTP-запрос.
2⃣Обработка запроса
Сервер обрабатывает запрос, выполняя соответствующие действия, такие как чтение данных из базы данных, выполнение логики приложения или взаимодействие с другими сервисами.
3⃣Формирование ответа
Статус код (Status Code): Указывает результат обработки запроса (например, 200 OK, 404 Not Found, 500 Internal Server Error). Заголовки (Headers): Могут включать метаданные о содержимом ответа, кэшировании и других параметрах. Тело (Body): Содержит данные, которые отправляются обратно клиенту, часто в формате JSON или XML.
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 85
{
"id": 1,
"name": "Example",
"description": "This is an example response"
}
🚩Получение ответа
1⃣Получение ответа
Браузер получает HTTP-ответ от сервера.
2⃣Обработка ответа
Статус код: Браузер или JavaScript-код проверяет статус код, чтобы определить, был ли запрос успешным. Заголовки: Заголовки могут быть использованы для получения дополнительной информации о ответе. Тело: Браузер разбирает тело ответа, если это необходимо, например, преобразует JSON-данные в объект JavaScript.
3⃣Использование данных
Полученные данные могут быть использованы в приложении для обновления интерфейса пользователя, хранения в локальном хранилище или выполнения других действий.
🚩Пример полного цикла запроса и ответа
Отправка запроса
fetch('https://api.example.com/data', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer token'
}
})
.then(response => {
if (!response.ok) {
throw new Error('Network response was not ok ' + response.statusText);
}
return response.json();
})
.then(data => {
console.log('Data received:', data);
// Используем данные для обновления UI или других целей
})
.catch(error => {
console.error('There has been a problem with your fetch operation:', error);
});
Ставь 👍 и забирай 📚 Базу знаний5 059
🤔 Если в качестве параметра передаю число и объект — есть ли какая-нибудь разница в их поведении?
Да, разница есть.
Число (например, int) — это значимый тип. При передаче копируется значение. Изменения внутри метода не влияют на оригинальную переменную.
Объект (например, экземпляр класса) — это ссылочный тип. Передаётся ссылка, и метод работает с тем же объектом, изменения будут видны снаружи.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 059
Где вести задачи и проекты?
В Битрикс24 ✅
Бесплатный онлайн-сервис для бизнеса и совместной работы.
— Удобный планировщик задач для всей команды с чек-листами и комментариями.
— Популярные проектные методики: канбан, скрам, диаграмма ганта.
— Видеозвонки в один клик из чата.
— Календарь и слоты для совместного планирования.
— Умный ИИ-помощник для постановки четких тз.
Полный комплект для эффективности вашей команды.
Ставьте первую задачу прямо сейчас⚡
Начать
#реклама 16+
task-24.bitrix24.ru
О рекламодателе
5 059
🤔 Какой слой rest и swap с точки зрения трехслойной архитектуры?
В трехслойной архитектуре (трехуровневая архитектура), также известной как многоуровневая архитектура, приложения разделяются на три логических слоя:
🟠Презентационный слой (Presentation Layer)
Отвечает за взаимодействие с пользователем. Веб-интерфейсы, мобильные приложения, десктопные приложения. Примеры: HTML/CSS/JavaScript для веб-приложений, UI-компоненты в мобильных и десктопных приложениях.
🟠Логический слой (Business Logic Layer)
Содержит бизнес-логику и правила приложения. Обрабатывает данные, выполняет вычисления, применяет бизнес-правила. Примеры: классы и методы, реализующие бизнес-логику, сервисы, обработчики данных.
🟠Слой данных (Data Access Layer):
Отвечает за взаимодействие с источниками данных. Операции с базами данных, файловыми системами, внешними сервисами. Примеры: репозитории, Data Access Objects (DAO), API-клиенты для доступа к внешним системам.
🚩REST
REST — это архитектурный стиль для разработки веб-сервисов. RESTful сервисы используют стандартные HTTP методы (GET, POST, PUT, DELETE и т.д.) для работы с ресурсами.
С точки зрения трехслойной архитектуры:
Презентационный слой:
Вызовы REST API могут происходить с клиентской стороны (например, AJAX запросы из веб-интерфейса) или через клиентские приложения.
Пример: фронтенд веб-приложения, который взаимодействует с REST API.
Логический слой:
REST API реализует бизнес-логику и выступает посредником между презентационным слоем и слоем данных.
Пример: контроллеры и сервисы, обрабатывающие REST запросы и выполняющие соответствующую бизнес-логику.
Слой данных:
REST API может взаимодействовать с базой данных или другими источниками данных для получения и сохранения информации.
Пример: методы в API, которые выполняют запросы к базе данных через репозитории или DAO.
🚩SWAP
SWAP — это гипотетический или менее распространенный термин, часто интерпретируемый как упрощенный API для веб-приложений.
Презентационный слой
Клиентские приложения или пользовательские интерфейсы могут вызывать методы SWAP для получения или отправки данных.Пример: веб-страницы или мобильные приложения, обращающиеся к SWAP для выполнения операций.
Логический слой:
SWAP обрабатывает бизнес-логику аналогично REST API, предоставляя упрощенные конечные точки для взаимодействия с данными.
Пример: сервисы, которые реализуют простые операции (CRUD) без сложной бизнес-логики.
Слой данных:
SWAP взаимодействует с базой данных или другими источниками данных для выполнения операций чтения/записи.
Пример: методы SWAP, которые обращаются к базе данных через абстрактные уровни доступа к данным.
Ставь 👍 и забирай 📚 Базу знаний
5 059
Запустите рекламу в телеграм-каналах с Яндекс Директом
Перфоманс-реклама теперь в телеграм-каналах ⚡
Яндекс Директ знает, как привлечь целевую аудиторию 💰👌
Попробовать
#реклама
yandex.ru
О рекламодателе
5 059
🤔 Что должен возвращать GetHashCode?
Метод GetHashCode должен возвращать целое число, которое уникально идентифицирует объект в контексте его текущего состояния. Объекты, равные по Equals, должны иметь одинаковые hash-коды, но разные объекты могут иметь одинаковый hash-код.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 059
🤔 Что такое 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 059
🤔 Что ORM генерирует на выходе с точки зрения оптимизации исполненного SQL?
ORM (например, Entity Framework) генерирует SQL-запросы на основе LINQ-выражений или методов API.
С точки зрения оптимизации:
- ORM может не всегда создавать эффективные запросы — возможны избыточные JOIN'ы, SELECT * и т.п.
- Хорошие ORM (например, EF Core) стараются оптимизировать SQL, но всё равно могут уступать вручную написанному.
- Можно использовать профайлеры и логирование SQL для контроля и отладки.
- ORM поддерживает отложенное выполнение (IQueryable) и предзагрузку зависимостей (Include), что позволяет управлять оптимизацией вручную.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 059
🤔 В чём отличие ArrayList и List?
В C# есть две похожие коллекции:
ArrayList(старый подход) и List<T> (современный вариант). Основные отличия:
🚩Пример кода
ArrayList arrayList = new ArrayList();
arrayList.Add(1);
arrayList.Add("Hello"); // Ошибки возможны при приведении типов
List<int> list = new List<int>();
list.Add(1); // Только int, безопаснее
Ставь 👍 и забирай 📚 Базу знаний5 059
Виртуальный сервер в аренду в Турции или России.
Отказоустойчивый виртуальный облачный сервер на базе виртуализации VMWARE по модели подписки.
- Бесплатная миграция инфраструктуры в Турцию
- Размещайте ресурсы в Турции или России и оплачивайте в рублях, турицких лирах или евро.
- Храните резервные копии данных за рубежом для минимизации рисков
- Продолжайте использовать импортное ПО, скачивайте обновления и патчи, общайтесь с техподдержкой
- Доступность сервиса — от 99,982% SLA
- Дата центры Tier III в России и Турции
- Почасовой биллинг и постоплата
Подключите услугу сегодня со скидкой 50% на инфраструктуру.
Подать заявку
#реклама
cloud4y.ru
О рекламодателе
5 059
🤔 В чём отличие slim-версий от обычных семафоров?
Slim-версии легче и работают быстрее, но только внутри одного процесса. Они экономичнее по ресурсам и поддерживают асинхронное ожидание. Обычные семафоры — более универсальны, но тяжелее и применимы для взаимодействия между разными процессами.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 059
🤔 Как сделать связь один к одному?
В реляционных базах данных связь "один к одному" (one-to-one) подразумевает, что каждая запись в одной таблице соответствует ровно одной записи в другой таблице. Для реализации связи "один к одному" в SQL можно использовать несколько подходов, в зависимости от требований и архитектуры базы данных.
🚩Основные подходы
🟠Уникальные внешние ключи
Используйте внешний ключ в одной таблице, который ссылается на первичный ключ другой таблицы, и сделайте этот внешний ключ уникальным.
🟠Одинаковые первичные ключи
Используйте один и тот же первичный ключ в обеих таблицах, где одна таблица содержит внешний ключ, который является также первичным ключом.
🚩Уникальные внешние ключи
Таблицы
Users (пользователи)
UserId (Primary Key)
UserName
Profiles (профили)
ProfileId (Primary Key)
UserId (Foreign Key, Unique)
ProfileData
Создание таблиц
CREATE TABLE Users (
UserId INT PRIMARY KEY,
UserName VARCHAR(100)
);
CREATE TABLE Profiles (
ProfileId INT PRIMARY KEY,
UserId INT UNIQUE,
ProfileData VARCHAR(255),
FOREIGN KEY (UserId) REFERENCES Users(UserId)
);
Вставка данных
INSERT INTO Users (UserId, UserName) VALUES (1, 'John Doe');
INSERT INTO Profiles (ProfileId, UserId, ProfileData) VALUES (1, 1, 'Profile data for John Doe');
Запрос данных
SELECT Users.UserName, Profiles.ProfileData
FROM Users
JOIN Profiles ON Users.UserId = Profiles.UserId;
🚩Одинаковые первичные ключи
Таблицы
Users (пользователи)
UserId (Primary Key)
UserName
Profiles (профили)
UserId (Primary Key, Foreign Key)
ProfileData
Создание таблиц
CREATE TABLE Users (
UserId INT PRIMARY KEY,
UserName VARCHAR(100)
);
CREATE TABLE Profiles (
UserId INT PRIMARY KEY,
ProfileData VARCHAR(255),
FOREIGN KEY (UserId) REFERENCES Users(UserId)
);
Вставка данных
INSERT INTO Users (UserId, UserName) VALUES (1, 'John Doe');
INSERT INTO Profiles (UserId, ProfileData) VALUES (1, 'Profile data for John Doe');
Запрос данных
SELECT Users.UserName, Profiles.ProfileData
FROM Users
JOIN Profiles ON Users.UserId = Profiles.UserId;
🚩Плюсы и минусы
🟠Уникальные внешние ключи
➕Четкая семантика внешнего ключа.
➕Легкость добавления дополнительных данных в связанную таблицу.
➖Необходимо следить за уникальностью внешнего ключа.
🟠Одинаковые первичные ключи
➕Единый идентификатор для связанных данных.
➕Простота конструкции при обеспечении связи.
➖Необходимость синхронизации идентификаторов в обеих таблицах.
Ставь 👍 и забирай 📚 Базу знаний5 059
🤔 Зачем используется библиотека Moq?
Это библиотека для создания имитаций (mock) объектов в тестах.
1. Она позволяет подменять зависимости тестируемого кода фейковыми реализациями.
2. Используется для тестирования изолированных частей приложения без вызова реальных ресурсов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 059
🤔 Пример выполнения кода, когда возвращается объект интерфейса Iqueryable?
IQueryable<T> — это интерфейс, который используется для отложенного выполнения запросов (deferred execution). Он позволяет строить SQL-запросы к базе данных или манипулировать данными в памяти, но сам запрос выполняется только в момент его итерации (ToList(), FirstOrDefault(), Count(), и т. д.).
🚩Пример работы с `IQueryable<T>` на Entity Framework Core
Предположим, у нас есть сущность Product и контекст базы данных AppDbContext
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
public class AppDbContext : DbContext
{
public DbSet<Product> Products { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("YourConnectionString");
}
}
Теперь создадим репозиторий, который возвращает IQueryable<Product>
public class ProductRepository
{
private readonly AppDbContext _context;
public ProductRepository(AppDbContext context)
{
_context = context;
}
public IQueryable<Product> GetProducts()
{
return _context.Products.Where(p => p.Price > 100);
// Запрос не выполняется здесь! Только формируется
}
}
🚩Вызов метода и выполнение запроса
Запрос к базе данных выполнится только при материализации (ToList(), FirstOrDefault(), Count(), и т. д.).
var repository = new ProductRepository(new AppDbContext());
// Создаём IQueryable-запрос
IQueryable<Product> query = repository.GetProducts();
// Добавляем дополнительное условие (запрос еще НЕ выполнен)
query = query.OrderBy(p => p.Name);
// Теперь выполняем запрос к БД
List<Product> products = query.ToList(); // SQL-запрос отправляется в базу
Ставь 👍 и забирай 📚 Базу знаний5 059
🤔 Каковы преимущества при использовании внедрения зависимостей (DI) в код?
- Слабая связность — классы не создают зависимости напрямую.
- Тестируемость — можно легко подменить зависимости моками.
- Гибкость — можно менять реализацию без изменения потребителя.
- Расширяемость — можно добавлять новые реализации интерфейсов без изменения старых классов.
- Повторное использование — одно и то же внедрение можно использовать в разных частях системы.
Внедрение зависимостей упрощает архитектуру и повышает удобство поддержки кода.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 059
🤔 Какой сейчас последний C#?
🚩Нововведения
🟠Primary Constructors для классов и структур
Позволяют определять конструкторы прямо в объявлении класса или структуры, что упрощает код и улучшает его читаемость.
public class Person(string name, int age)
{
public string Name { get; } = name;
public int Age { get; } = age;
}
🟠Collection Literals
Обеспечивает более удобный синтаксис для создания коллекций.
var numbers = [1, 2, 3, 4, 5];
🟠Default Values для auto-properties
Теперь можно задавать значения по умолчанию для auto-properties, что делает код более лаконичным.
public string Name { get; set; } = "Unknown";
🟠Using aliases
Позволяет использовать алиасы для пространств имен, улучшая читаемость кода.
using Text = System.Text;
🟠Improved Lambda Expressions:
Улучшены возможности для работы с лямбда-выражениями, делая их более гибкими и мощными.
🚩Зачем нужны эти изменения?
Эти нововведения направлены на упрощение синтаксиса языка, улучшение читаемости и поддерживаемости кода, а также на повышение производительности и удобства разработки.
public class Program
{
public static void Main()
{
var person = new Person("John", 30);
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
var numbers = [1, 2, 3, 4, 5];
numbers.ForEach(n => Console.WriteLine(n));
var name = new Name { Value = "Unknown" };
Console.WriteLine(name.Value);
}
}
public class Person(string name, int age)
{
public string Name { get; } = name;
public int Age { get; } = age;
}
public class Name
{
public string Value { get; set; } = "Default Name";
}
Ставь 👍 и забирай 📚 Базу знаний5 059
🤔 Если есть класс, а в нем значимый тип данных, где он будет храниться?
Если значимый тип (например, int или struct) — это поле класса, то:
- Сам класс хранится в куче (heap).
- Значимый тип как поле будет внутри объекта класса, то есть в той же области памяти (в куче).
Он не уходит в стек отдельно — размещается вместе с объектом, который его содержит.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
