и посмотреть медиа
C# - вопросы собесов
и посмотреть медиа
Собесы C#.
bot de IA para clonar texto a voz y voz en Telegram. Cree audio utilizando la red neuronal de forma rápida y fácil.
Вопросы для собеседований по 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, красно-чёрные. - Графы: ориентированные, неориентированные. - Кучи, матрицы, множества, деки, очереди с приоритетом. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиаSolo los usuarios registrados pueden compartir su opinión.
¡Sé el primero en compartir tu experiencia con este recurso!
Comunidad activa de propietariosXiaomi: discusiones, noticias, consejos útiles e intercambio de experiencias en Telegram.
Base de datos de servicios Harley-Davidson Sportster.
El canal oficial Guarda Wallet: una cartera fiable no custodial para más de 70 cadenas de bloques y miles de fichas.