C# | Вопросы собесов
الذهاب إلى القناة على Telegram
Cайт easyoffer.ru Реклама @easyoffer_adv ВП @easyoffer_vp Тесты t.me/+nebTPWgpeGs1OWFi Задачи t.me/+Xy-0H7xKlgo0NDVi Вакансии t.me/+BQFHXZQ0zrViNGIy
إظهار المزيد5 049
المشتركون
-824 ساعات
-137 أيام
-2330 أيام
أرشيف المشاركات
5 049
В Битрикс24 теперь можно сделать сайт за 30 секунд
Серьёзно. Пишешь, что нужно, и AI сам всё собирает: тексты, картинки, оформление.
✨Никакой магии, просто умный помощник.
Попробуйте — закайфуете от скорости!
Попробовать
#реклама 16+
sites-24.bitrix24.ru
О рекламодателе
5 049
🤔 Что такое join в SQL?
JOIN — это операция в SQL, которая объединяет строки из двух или более таблиц на основе связующего условия. Существуют разные типы JOIN, такие как INNER JOIN (только совпадающие строки), LEFT JOIN (все строки из левой таблицы) и другие, обеспечивающие гибкость работы с данными.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 049
Дизайнеры, получайте до 40% с продажи освещения!
Приглашаем дизайнеров и комплектаторов к сотрудничеству, предлагаем самые выгодные условия!
Выбирайте декоративное освещение, металлическую мебель в свои проекты и забирайте кэшбэк до 40% деньгами.
Создавайте уникальные интерьеры с изделиями от GLODE и зарабатывайте больше!
Получить предложение
#реклама
mrqz.me
О рекламодателе
5 049
🤔 Интерполяция - это возможность использовать в строке переменные?
Да, интерполяция строк — это удобный способ вставки значений переменных в строку без использования конкатенации (
+) или String.Format().
Простой пример интерполяции строк
string name = "Иван";
int age = 25;
string message = $"Привет, меня зовут {name}, и мне {age} лет.";
Console.WriteLine(message);
Вывод
Привет, меня зовут Иван, и мне 25 лет.🚩Дополнительные возможности интерполяции 🟠Форматирование значений Можно форматировать числа и даты прямо в строке:
double price = 99.99;
DateTime today = DateTime.Now;
string formatted = $"Цена: {price:C}, Дата: {today:dd.MM.yyyy}";
Console.WriteLine(formatted);
Вывод
Цена: 99,99 ₽, Дата: 01.03.2025🟠Выполнение выражений Можно вставлять даже арифметические операции и вызовы методов:
int a = 10, b = 5;
string mathResult = $"Сумма: {a + b}, Разница: {a - b}";
Console.WriteLine(mathResult);
Вывод
Сумма: 15, Разница: 5🟠Экранирование фигурных скобок Если нужно вывести
{} в тексте, их надо удваивать:
Console.WriteLine($"JSON: {{ \"name\": \"Иван\" }}");
Вывод
JSON: { "name": "Иван" }
Ставь 👍 и забирай 📚 Базу знаний5 049
🤔 В чём разница абстрактного класса и интерфейса?
Абстрактный класс может содержать как реализацию методов, так и абстрактные методы, а интерфейс — только определения методов без реализации. Абстрактные классы могут иметь поля и конструкторы, а интерфейсы — нет. Класс может наследовать только один абстрактный класс, но реализовать несколько интерфейсов. Интерфейсы предоставляют более гибкий способ организации контракта для классов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 049
🤔 Какие бывают типы данных?
В C# существует множество различных типов данных, которые можно разделить на две основные категории: значимые типы (value types) и ссылочные типы (reference types). Рассмотрим каждую из этих категорий и их подтипы.
🚩Значимые типы (Value Types)
Значимые типы хранят данные непосредственно в своей памяти. Они обычно располагаются в стеке и имеют фиксированный размер. К значимым типам относятся:
🟠Простые типы (Simple Types)
Числовые типы
Целочисленные типы:
byte (8 бит)
sbyte (8 бит)
short (16 бит)
ushort (16 бит)
int (32 бита)
uint (32 бита)
long (64 бита)
ulong (64 бита)
Вещественные типы:
float (32 бита)
double (64 бита)
Десятичный тип:
decimal (128 бит)
Логический тип
bool (1 бит, значения true или false)
Символьный тип
char (16 бит, символы в формате Unicode)
🟠Структуры (Structs)
Пользовательские типы, которые могут содержать поля, свойства и методы. Пример: struct Point { public int X; public int Y; }
🟠Перечисления (Enums)
Специальные типы, представляющие набор именованных констант. Пример: enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }
🟠Nullable Types
Типы, которые могут принимать значение null. Пример: int?, double?
🚩Ссылочные типы (Reference Types)
🟠Классы (Classes)
Основные объекты в C#, могут содержать поля, свойства, методы и события. Пример: class Person { public string Name; public int Age; }
🟠Интерфейсы (Interfaces)
Определяют контракт, который должны реализовать классы. Пример: interface IMovable { void Move(); }
🟠Массивы (Arrays)
Коллекции однотипных элементов. Пример: int[] numbers = new int[5];
🟠Делегаты (Delegates)
Типы, которые представляют собой ссылки на методы. Пример: delegate void Process(int value);
🟠Строки (Strings)
Непосредственно представляют собой последовательность символов. Пример: string message = "Hello, World!";
🟠Записи (Records)
Новый тип в C# 9.0, предназначенный для неизменяемых объектов. Пример: record Person(string Name, int Age);
🚩Примеры и использование
Значимые типы
int a = 5;
float b = 3.14f;
bool isTrue = true;
char letter = 'A';
Ссылочные типы
string message = "Hello, World!";
Person person = new Person { Name = "Alice", Age = 30 };
int[] numbers = new int[] { 1, 2, 3, 4, 5 };
Ставь 👍 и забирай 📚 Базу знаний5 049
🤔 Для чего нужны примитивы синхронизации?
Примитивы синхронизации используются для управления доступом к общим ресурсам, чтобы избежать ошибок, когда потоки вмешиваются в работу друг друга. Они помогают обеспечить безопасное и последовательное выполнение в многопоточном окружении.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 049
🤔 Что такое Redis?
Это система управления базами данных с открытым исходным кодом, работающая в памяти и поддерживающая множество типов данных, таких как строки, списки, множества, хеши и другие. Redis часто используется как кэш, брокер сообщений и база данных. Он известен своей высокой производительностью, низкой задержкой и простотой в использовании.
🚩Особенности
🟠Работа в памяти
Redis хранит все данные в памяти, что обеспечивает очень быструю скорость чтения и записи. Данные также могут периодически сохраняться на диск для обеспечения долговечности.
🟠Поддержка различных типов данных
Строки (Strings): Самый простой тип данных в Redis, который может содержать текст или двоичные данные.
Списки (Lists): Упорядоченные коллекции строк, которые можно использовать как очереди или стеки.
Множества (Sets): Неупорядоченные коллекции уникальных строк.
Упорядоченные множества (Sorted Sets): Коллекции уникальных строк, каждая из которых связана с числовым значением (score), определяющим порядок.
Хеши (Hashes): Коллекции пар "ключ-значение", где каждый хеш связан с ключом.
Bitmaps и HyperLogLogs: Для эффективного хранения и обработки больших объемов данных.
🟠Высокая производительность
Благодаря хранению данных в памяти и простому протоколу клиент-сервер, Redis обеспечивает очень высокую скорость операций.
🟠Поддержка репликации
Redis поддерживает мастер-слейв репликацию, что позволяет создать резервные копии данных и обеспечить отказоустойчивость.
🟠Кластеризация
Redis Cluster позволяет распределить данные по нескольким узлам, обеспечивая горизонтальную масштабируемость.
🟠Поддержка Lua-скриптов
Redis позволяет выполнять атомарные операции с помощью Lua-скриптов.
🟠Транзакции
Redis поддерживает транзакции, позволяя выполнить несколько команд атомарно.
🚩Примеры использования
🟠Кэширование
Redis часто используется для кэширования данных, что позволяет значительно уменьшить задержку доступа и снизить нагрузку на базу данных.
using StackExchange.Redis;
using System;
class Program
{
static void Main()
{
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
IDatabase db = redis.GetDatabase();
db.StringSet("key", "value");
string value = db.StringGet("key");
Console.WriteLine(value);
}
}
🟠Сессии
Хранение сессий пользователя для веб-приложений, что обеспечивает быстрое и эффективное управление состоянием.
🟠Очереди сообщений
Использование списков или упорядоченных множеств для организации очередей сообщений.
using StackExchange.Redis;
using System;
class Program
{
static void Main()
{
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
IDatabase db = redis.GetDatabase();
db.ListLeftPush("queue", "task1");
db.ListLeftPush("queue", "task2");
string task = db.ListRightPop("queue");
Console.WriteLine(task);
}
}
🟠Счетчики и рейтинги
Использование упорядоченных множеств для реализации счетчиков, рейтингов или систем рекомендаций.
using StackExchange.Redis;
using System;
class Program
{
static void Main()
{
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
IDatabase db = redis.GetDatabase();
// Add scores for users
db.SortedSetAdd("scores", "user1", 100);
db.SortedSetAdd("scores", "user2", 200);
// Retrieve scores with scores included
var scores = db.SortedSetRangeByRankWithScores("scores", 0, -1);
foreach (var score in scores)
{
Console.WriteLine($"{score.Element}: {score.Score}");
}
}
}
Ставь 👍 и забирай 📚 Базу знаний5 049
🤔 Может ли pipeline не обрабатывать HTTP-запросы?
Да, может.
Пайплайн — это обобщённое понятие, означающее цепочку обработки данных. Он может использоваться для чего угодно: логирования, обработки событий, работы с файлами и т.д.
Если это HTTP-пайплайн, то он заточен под HTTP. Но в общем случае — pipeline может вообще не иметь отношения к HTTP.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 049
🤔 Можно ли передать значимый тип данных по ссылке?
Да, можно!
По умолчанию значимые типы (структуры,
int, double) передаются по значению.
Но их можно передать по ссылке с помощью ref или out.
🚩Передача по значению (обычное поведение)
Копия передаётся в метод, а оригинал не меняется.
void ChangeValue(int number)
{
number = 10; // Изменится только копия
}
int x = 5;
ChangeValue(x);
Console.WriteLine(x); // 5 (значение не изменилось)
🚩Передача значимого типа по ссылке (`ref`)
Позволяет менять оригинальную переменную.
void ChangeValue(ref int number)
{
number = 10; // Меняем оригинальное значение
}
int x = 5;
ChangeValue(ref x);
Console.WriteLine(x); // 10 (значение изменилось)
🚩Использование `out` (без начального значения)
out тоже передаёт по ссылке, но требует обязательного присвоения внутри метода.
void InitializeValue(out int number)
{
number = 100; // Обязательно присваиваем значение
}
int x;
InitializeValue(out x);
Console.WriteLine(x); // 100
Ставь 👍 и забирай 📚 Базу знаний5 049
🤔 Что такое связанность и связность?
1. Связанность (Coupling):
- Мера зависимости между модулями системы.
- Чем слабее связность, тем легче изменять и тестировать код.
2. Связность (Cohesion):
- Мера, насколько хорошо элементы внутри модуля связаны друг с другом.
- Высокая связность означает, что модуль выполняет одну задачу.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 049
🤔 Какая есть классификация у кучи?
В информатике и программировании куча (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
}
}
}
Ставь 👍 и забирай 📚 Базу знаний5 049
🤔 Что такое сборщик мусора?
Сборщик мусора — это механизм автоматического управления памятью, который отслеживает каждый объект в системе и удаляет те объекты, на которые больше нет ссылок, автоматически освобождая ресурсы и предотвращая утечки памяти.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 049
🤔 Какие есть способы (протоколы) обмена данными между сервером и клиентом?
При взаимодействии клиента и сервера используются различные*протоколы обмена данными, в зависимости от задачи, скорости, надежности и реального времени.
🚩HTTP(S) – стандартный протокол веба
Клиент (браузер, мобильное приложение) делает запрос к серверу.
Сервер отправляет ответ с данными (HTML, JSON, XML).
Использует методы:
GET, POST, PUT, DELETE и т. д.
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => console.log(data));
🚩WebSocket – двусторонняя связь в реальном времени
Клиент устанавливает постоянное соединение с сервером.
Сервер и клиент могут отправлять друг другу данные в любое время.
Используется для чата, онлайн-игр, бирж, обновлений в реальном времени.
const socket = new WebSocket('wss://example.com/socket');
socket.onopen = () => socket.send('Привет, сервер!');
socket.onmessage = event => console.log('Сообщение от сервера:', event.data);
🚩SSE (Server-Sent Events) – поток данных от сервера
Клиент делает HTTP-запрос, но соединение не закрывается.
Сервер постепенно отправляет данные в виде событий (event-stream).
Используется для новостей, биржевых данных, уведомлений.
const eventSource = new EventSource('/events');
eventSource.onmessage = event => console.log('Новое сообщение:', event.data);
🚩gRPC – быстрый RPC поверх HTTP/2
Клиент вызывает удаленные методы напрямую как обычные функции.
Работает на HTTP/2, использует бинарный формат Protocol Buffers (быстрее, чем JSON).
Используется для высокопроизводительных API, микросервисов.
import grpc
import my_service_pb2
import my_service_pb2_grpc
channel = grpc.insecure_channel('localhost:50051')
stub = my_service_pb2_grpc.MyServiceStub(channel)
response = stub.MyMethod(my_service_pb2.MyRequest(name="Alice"))
print(response.message)
🚩MQTT – лёгкий протокол для IoT
Работает по модели издатель/подписчик.
Клиент подписывается на тему (topic) и получает сообщения, когда кто-то публикует данные.
Используется для умных устройств, датчиков, IoT.
const mqtt = require('mqtt');
const client = mqtt.connect('mqtt://broker.hivemq.com');
client.on('connect', () => {
client.subscribe('myTopic');
client.publish('myTopic', 'Привет, MQTT!');
});
client.on('message', (topic, message) => {
console.log(`Сообщение из ${topic}: ${message.toString()}`);
});
Ставь 👍 и забирай 📚 Базу знаний5 049
Такси для бизнеса. Яндекс Go
Оптимизируйте свои расходы и повысьте эффективность бизнеса с Яндекс Go
Узнать больше
#реклама
business.go.yandex
О рекламодателе
5 049
🤔 Где используется IQueryable?
IQueryable используется для создания запросов к источникам данных с возможностью отложенного выполнения. Оно позволяет строить сложные запросы, которые преобразуются в SQL-запросы или другие команды на этапе выполнения. Часто используется с ORM, такими как Entity Framework.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
5 049
🤔 Расскажи про конкурентные коллекции?
Конкурентные коллекции — это специализированные коллекции, которые обеспечивают безопасное выполнение операций в многопоточной среде. В стандартной библиотеке .NET существуют несколько типов таких коллекций, каждая из которых предназначена для различных сценариев использования. Давайте рассмотрим основные из них.
🟠ConcurrentDictionary<TKey, TValue>
Это словарь, который позволяет безопасно добавлять, удалять и изменять элементы из нескольких потоков одновременно. Он реализует интерфейс
IDictionary<TKey, TValue>.
var concurrentDictionary = new ConcurrentDictionary<int, string>();
concurrentDictionary.TryAdd(1, "value1");
concurrentDictionary.TryAdd(2, "value2");
string value;
if (concurrentDictionary.TryGetValue(1, out value))
{
Console.WriteLine(value); // Output: value1
}
🟠ConcurrentQueue<T>
Это очередь, которая обеспечивает безопасное добавление элементов в конец и извлечение из начала в многопоточной среде. Она реализует интерфейс IProducerConsumerCollection<T>.
var concurrentQueue = new ConcurrentQueue<int>();
concurrentQueue.Enqueue(1);
concurrentQueue.Enqueue(2);
int result;
if (concurrentQueue.TryDequeue(out result))
{
Console.WriteLine(result); // Output: 1
}
🟠ConcurrentStack<T>
Это стек, который обеспечивает безопасное добавление и извлечение элементов в многопоточной среде. Он также реализует интерфейс IProducerConsumerCollection<T>.
var concurrentStack = new ConcurrentStack<int>();
concurrentStack.Push(1);
concurrentStack.Push(2);
int result;
if (concurrentStack.TryPop(out result))
{
Console.WriteLine(result); // Output: 2
}
🟠ConcurrentBag<T>
Это коллекция, которая позволяет безопасно добавлять и извлекать элементы в многопоточной среде. Она не гарантирует порядок элементов, поэтому используется в случаях, когда порядок не имеет значения.
var concurrentBag = new ConcurrentBag<int>();
concurrentBag.Add(1);
concurrentBag.Add(2);
int result;
if (concurrentBag.TryTake(out result))
{
Console.WriteLine(result); // Output: 1 или 2
}
🟠BlockingCollection<T>
Это коллекция, которая поддерживает ограниченную емкость и блокировку потоков при добавлении или извлечении элементов. Она особенно полезна для реализации паттернов продюсер-потребитель.
var blockingCollection = new BlockingCollection<int>(boundedCapacity: 5);
Task.Run(() =>
{
for (int i = 0; i < 10; i++)
{
blockingCollection.Add(i);
Console.WriteLine($"Added {i}");
}
blockingCollection.CompleteAdding();
});
foreach (var item in blockingCollection.GetConsumingEnumerable())
{
Console.WriteLine($"Consumed {item}");
}
Ставь 👍 и забирай 📚 Базу знаний5 049
⚡️ Айтишник из «VISION» скупил топовые айти-курсы и выложил гигабайты материалов к себе
Каждый найдет что-то по душе:
903 ГБ — Python
812 ГБ — Frontend
978 ГБ — C, C++
804 ГБ — Java
432 ГБ — C#, GameDev
411 ГБ — SQL & БД
309 ГБ — DevOps
998 ГБ — ИБ & Хакинг
773 ГБ — Kotlin, Swift
189 ГБ — PHP
201 ГБ — GoLang
170 ГБ — Rust
167 ГБ — QA-Тестирование
310 ГБ — 1C + Лицензии
495 ГБ — Машинное обучение
704 ГБ — Аналитика Данных
991 ГБ — Дизайн
Материалы в закрепе, постоянно пополняются👆🏻
5 049
Подключите высокоскоростной интернет в офис от МегаФона
Доступ в интернет для компаний с выделенным каналом на высоких скоростях — до 10 Гбит/с
— Собственные дата-центры и оборудование ведущих мировых производителей обеспечивают бесперебойную связь
— Высокая скорость передачи данных благодаря собственной магистральной IP/MPLS-сети МегаФона. Общая пропускная способность — более 1000 Гбит/с
— Архив 180 дней (хранение записи в облаке до 180 дней)
— Постоянный безлимитный интернет в любой точке России
Перейти на сайт
#реклама
megafon.ru
О рекламодателе
5 049
🤔 Когда сравниваются String, мы сравниваем ссылки?
В .NET:
- При использовании оператора == или метода Equals() для строк — сравниваются значения, а не ссылки.
- Однако сравнение через ReferenceEquals() — это сравнение ссылок. Важно: строки в .NET иммутабельны и могут быть интернированы, то есть одинаковые строковые литералы могут указывать на одну и ту же область памяти.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
متاح الآن! بحث تيليغرام 2025 — أهم رؤى العام 
