и посмотреть медиа
C# - вопросы собесов
и посмотреть медиа
Собесы C#.
AI bot for text-to-speech and voice cloning in Telegram. Create audio using neural network quickly and easily.
Вопросы для собеседований по C#.
🤔 Что такое SignalR? SignalR — это библиотека от Microsoft для обеспечения двусторонней связи в реальном времени между клиентом и сервером. Она использует протоколы, такие как WebSockets, для высокой производительности, а в случае их недоступности — другие технологии, например, long polling. SignalR упрощает разработку чатов, уведомлений и других динамичных приложений. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Какие типы данных можно использовать у Dictionary в качестве ключа? В C# ключ (TKey) в Dictionary должен быть уникальным и поддерживать сравнение. Лучше всего использовать неизменяемые (immutable) типы, такие как: Примитивные типы (int, string, char, bool, Guid, enum) Кортежи (Tuple, ValueTuple) Неизменяемые структуры (struct, если переопределён Equals и GetHashCode) 🚩Какие типы подходят в качестве ключа? Числовые типы (int, double, long) var dict = new Dictionary { {1, "Один"}, {2, "Два"} }; Console.WriteLine(dict[1]); // Вывод: Один string (лучший выбор) var dict = new Dictionary { {"apple", 10}, {"banana", 5} }; Console.WriteLine(dict["apple"]); // 10 Guid (уникальные идентификаторы) var dict = new Dictionary { {Guid.NewGuid(), "User1"}, {Guid.NewGuid(), "User2"} }; enum (хороший вариант) enum Status { New, Processing, Completed } var dict = new Dictionary { {Status.New, "Заказ создан"}, {Status.Processing, "Заказ в обработке"} }; Можно использовать несколько значений в качестве ключа: var dict = new Dictionary { {(1, "apple"), "Красное яблоко"}, {(2, "banana"), "Жёлтый банан"} }; Console.WriteLine(dict[(1, "apple")]); // Красное яблоко 🚩Какие типы нельзя использовать в качестве ключа? List (и другие изменяемые коллекции) var dict = new Dictionary • , string>(); // Ошибка при использовании в качестве ключа! class, если не переопределён Equals и GetHashCode class Person { public string Name; } var dict = new Dictionary(); // Плохо! Нужно переопределить Equals и GetHashCode class Person { public string Name { get; } public Person(string name) => Name = name; public override bool Equals(object? obj) { return obj is Person other && Name == other.Name; } public override int GetHashCode() => Name.GetHashCode(); } Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что такое значимый и ссылочный тип данных? Значимые типы (value types) хранят данные непосредственно, а ссылочные типы (reference types) хранят ссылки на данные в памяти. Значимые типы живут в стеке, а ссылочные — в куче. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Как сейчас делается Singleton? В современном C# паттерн Singleton можно реализовать несколькими способами, каждый из которых имеет свои преимущества и предназначен для различных сценариев использования. Рассмотрим несколько распространенных подходов к реализации Singleton. 🟠Ленивый Singleton (Lazy Initialization) Ленивый Singleton инициализируется при первом обращении. Это обеспечивает отложенную инициализацию объекта и гарантирует потокобезопасность. public class Singleton { private static readonly Lazy lazyInstance = new Lazy(() => new Singleton()); public static Singleton Instance => lazyInstance.Value; private Singleton() { // Приватный конструктор } } 🟠Потокобезопасный Singleton (Thread-safe) Этот подход использует lock для обеспечения потокобезопасности при создании экземпляра. public class Singleton { private static Singleton instance; private static readonly object lockObj = new object(); private Singleton() { // Приватный конструктор } public static Singleton Instance { get { if (instance == null) { lock (lockObj) { if (instance == null) { instance = new Singleton(); } } } return instance; } } } Eager Initialization (Инициализация при загрузке) Экземпляр Singleton создается при загрузке класса. Это гарантирует потокобезопасность за счет особенностей инициализации статических переменных в .NET. public class Singleton { private static readonly Singleton instance = new Singleton(); public static Singleton Instance => instance; private Singleton() { // Приватный конструктор } } 🟠Static Constructor (Статический конструктор) Использование статического конструктора для инициализации Singleton. public class Singleton { private static readonly Singleton instance; static Singleton() { instance = new Singleton(); } public static Singleton Instance => instance; private Singleton() { // Приватный конструктор } } Singleton с внедрением зависимостей (Dependency Injection) В современных приложениях, особенно с использованием ASP.NET Core, Singleton часто регистрируется в контейнере внедрения зависимостей. public class SingletonService { public void DoWork() { // Выполнение работы } } // Регистрация в контейнере служб public void ConfigureServices(IServiceCollection services) { services.AddSingleton(); } // Использование в контроллере public class MyController : ControllerBase { private readonly SingletonService _singletonService; public MyController(SingletonService singletonService) { _singletonService = singletonService; } public IActionResult Index() { _singletonService.DoWork(); return Ok(); } } Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Какие проблемы могут быть при многопоточности и как их избежать? Проблемы: состояния гонки, deadlock, livelock, взаимные блокировки и неправильная синхронизация данных. Их избегают с помощью использования примитивов синхронизации (например, lock, Monitor, Mutex), разделения ответственности между потоками, атомарных операций и минимизации общего доступа к ресурсам. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Если мы используем Ref & out, то становится ли эта структура ссылочным типом? Нет, структура (struct) не становится ссылочным типом, даже если мы передаём её через ref или out. Однако, когда структура передаётся с ref или out, передаётся сама структура (по ссылке), а не её копия. Это позволяет изменять исходный объект напрямую, избегая копирования. 🚩Разница между обычной передачей и передачей через `ref` Передача структуры без ref (по значению, копируется) struct Point { public int X; public int Y; } void ChangePoint(Point p) { p.X = 100; } Point myPoint = new Point { X = 10, Y = 20 }; ChangePoint(myPoint); Console.WriteLine(myPoint.X); // 10 (НЕ изменилось, потому что была копия) Передача структуры с ref (по ссылке, изменения сохраняются) void ChangePointRef(ref Point p) { p.X = 100; } ChangePointRef(ref myPoint); Console.WriteLine(myPoint.X); // 100 (значение изменилось) 🚩Что насчёт `out`? out работает так же, как ref, но требует обязательной инициализации внутри метода. void InitPoint(out Point p) { p = new Point { X = 50, Y = 50 }; // Обязательно присвоить значение } Point newPoint; InitPoint(out newPoint); Console.WriteLine(newPoint.X); // 50 Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что такое 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}"); } } } Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что такое В3 индекс? Это структура данных, используемая в системах управления базами данных (СУБД) для организации и ускорения доступа к данным. B-tree индекс является сбалансированным деревом, обеспечивающим эффективное выполнение операций поиска, вставки, удаления и диапазонного поиска. B-tree индекс используется большинством реляционных СУБД, таких как SQL Server, MySQL, PostgreSQL и Oracle. 🚩Основные характеристики B-tree индекса 🟠Сбалансированное дерево B-tree индекс является сбалансированным деревом, где все листья находятся на одном уровне. Это обеспечивает равномерное время доступа к данным. 🟠Ключи и значения В узлах B-tree хранятся ключи, которые могут ссылаться на строки в таблице или на другие узлы дерева. 🟠Упорядоченность Ключи в каждом узле упорядочены, что позволяет эффективно выполнять бинарный поиск внутри узла. 🟠Диапазонные запросы B-tree индекс эффективно поддерживает диапазонные запросы (например, поиск всех записей с ключами между заданными значениями). 🟠Динамическое поддержание B-tree автоматически сбалансирован, что позволяет эффективно выполнять операции вставки, удаления и обновления. 🚩Пример использования CREATE TABLE Employees ( EmployeeID INT PRIMARY KEY, FirstName VARCHAR(50), LastName VARCHAR(50), DepartmentID INT, Salary DECIMAL(10, 2) ); CREATE INDEX idx_lastname ON Employees(LastName); 🚩Операции 🟠Поиск Операция поиска в B-tree выполняется за логарифмическое время O(log n), где n — количество узлов. SELECT * FROM Employees WHERE LastName = 'Smith'; 🟠Диапазонный поиск Диапазонные запросы, такие как поиск всех сотрудников с фамилией от 'A' до 'M', выполняются эффективно. SELECT * FROM Employees WHERE LastName BETWEEN 'A' AND 'M'; 🟠Вставка При вставке новой записи в таблицу с индексом B-tree, запись добавляется в соответствующее место, поддерживая балансировку дерева. INSERT INTO Employees (EmployeeID, FirstName, LastName, DepartmentID, Salary) VALUES (1, 'John', 'Doe', 10, 60000.00); 🟠Удаление При удалении записи соответствующий ключ удаляется из B-tree, и дерево автоматически перестраивается, чтобы сохранить балансировку. DELETE FROM Employees WHERE EmployeeID = 1; 🚩Плюсы ➕Быстрый доступ Обеспечивает быстрый доступ к данным благодаря сбалансированной структуре дерева. ➕Эффективная работа с большими объемами данных Поддерживает операции вставки, удаления и поиска с логарифмической сложностью. ➕Поддержка диапазонных запросов Эффективно обрабатывает диапазонные запросы благодаря упорядоченной структуре. ➕Автоматическая балансировка Динамическая балансировка дерева обеспечивает равномерное время доступа и вставки/удаления. 🚩Минусы ➖Использование ресурсов Требует дополнительного пространства для хранения структуры дерева и ключей. ➖Затраты на поддержание Вставка и удаление могут требовать перестроения узлов, что влечет за собой дополнительные вычислительные затраты. ➖Фрагментация При частых операциях вставки и удаления может возникнуть фрагментация, что может потребовать периодического обслуживания (например, реорганизации индекса). Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Какие есть структуры данных? - Линейные: массивы, списки, стеки, очереди. - Связные: односвязные, двусвязные списки. - Хеш-таблицы: Dictionary, HashMap. - Деревья: бинарные, AVL, красно-чёрные. - Графы: ориентированные, неориентированные. - Кучи, матрицы, множества, деки, очереди с приоритетом. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиаOnly registered users can share their opinion.
Be the first to share your impression of this resource!
FPV electronics repair channel and hobbies. Instructions, tips and different for fans of FPV-drones.
100% free prompts for generating images and text in AI.
A channel about production projects and content production with examples and materials.