Библиотека собеса по С#
Please open Telegram to view this post
VIEW IN TELEGRAM
✍🏻 Чем отличаются интерфейсы от абстрактных классов в C#?
Интерфейсы и абстрактные классы в C# являются механизмами для реализации полиморфизма и обеспечения повторного использования кода. Вот основные отличия между ними:
1. Отношение к классам-наследникам: Абстрактный класс может иметь как абстрактные, так и конкретные (реализованные) методы. Интерфейс же предоставляет только определения методов. Класс может наследоваться только от одного абстрактного класса, но может реализовывать несколько интерфейсов.
2. Реализация: Абстрактным классам разрешено иметь переменные экземпляра и иметь реализацию методов. Интерфейсы могут иметь только методы (и свойства) без реализации, только сигнатуры. Класс, реализующий интерфейс, должен предоставить реализацию всех методов и свойств интерфейса.
3. Использование: Абстрактные классы применяются, когда некоторые базовые методы и свойства должны быть доступны и переопределены в классах-наследниках. Интерфейсы используются для создания контракта, который должны выполнить классы, обеспечивая использование полиморфизма.
Оба механизма полезны в разных сценариях разработки. Выбор между использованием абстрактных классов и интерфейсов зависит от конкретных требований проекта.
Библиотека собеса по С#
1. Отношение к классам-наследникам: Абстрактный класс может иметь как абстрактные, так и конкретные (реализованные) методы. Интерфейс же предоставляет только определения методов. Класс может наследоваться только от одного абстрактного класса, но может реализовывать несколько интерфейсов.
2. Реализация: Абстрактным классам разрешено иметь переменные экземпляра и иметь реализацию методов. Интерфейсы могут иметь только методы (и свойства) без реализации, только сигнатуры. Класс, реализующий интерфейс, должен предоставить реализацию всех методов и свойств интерфейса.
3. Использование: Абстрактные классы применяются, когда некоторые базовые методы и свойства должны быть доступны и переопределены в классах-наследниках. Интерфейсы используются для создания контракта, который должны выполнить классы, обеспечивая использование полиморфизма.
Оба механизма полезны в разных сценариях разработки. Выбор между использованием абстрактных классов и интерфейсов зависит от конкретных требований проекта.
Библиотека собеса по С#
✍🏻 Расскажите, какова функция Inspector в Unity 3D
Инспектор — это контекстно-зависимая панель, на которой вы можете настроить положение, масштаб и поворот игровых объектов, перечисленных на панели иерархии.
Библиотека собеса по С#
Инспектор — это контекстно-зависимая панель, на которой вы можете настроить положение, масштаб и поворот игровых объектов, перечисленных на панели иерархии.
Библиотека собеса по С#
Forwarded from Библиотека дата-сайентиста | Data Science, Machine learning, анализ данных, машинное обучение
🪄 Визуальные вычисления в Power BI: прокачиваем условное форматирование
Теперь настраивать условное форматирование в Power BI можно без сложных DAX-формул!
Разбираем, как новые визуальные вычисления помогают создавать динамичные, адаптивные и стильные отчеты, которые мгновенно реагируют на изменения данных.
⭐️ Пора сделать отчеты действительно интерактивными!
🔗 Ссылка на статью: https://proglib.io/sh/lsb0fEuYSv
Библиотека дата-сайентиста
Теперь настраивать условное форматирование в Power BI можно без сложных DAX-формул!
Разбираем, как новые визуальные вычисления помогают создавать динамичные, адаптивные и стильные отчеты, которые мгновенно реагируют на изменения данных.
⭐️ Пора сделать отчеты действительно интерактивными!
Библиотека дата-сайентиста
Please open Telegram to view this post
VIEW IN TELEGRAM
✔️ Как в C# поля и свойства отличаются друг от друга?
В C# поля и свойства имеют различия друг от друга. Поле — это член класса или объекта, предназначенный для хранения данных, в то время как свойство — это член класса, который предоставляет методы для чтения, записи и вычисления значения соответствующего поля.
Библиотека собеса по С#
Библиотека собеса по С#
Если хоть одна операция внутри транзакции не удалась — все изменения откатываются, и система остаётся в исходном состоянии, будто ничего не происходило.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека шарписта | C#, F#, .NET, ASP.NET
🕸 Как работает протокол HTTP/2: основные принципы и преимущества в сравнении с HTTP/1.1
HTTP/2 — это как переход с однополосной дороги HTTP/1.1 на скоростное шоссе: быстрее, эффективнее и без пробок.
Узнайте, как новые технологии ускоряют загрузку веб-страниц и улучшают работу приложений.
➡️ Читать статью
🐸 Библиотека шарписта
HTTP/2 — это как переход с однополосной дороги HTTP/1.1 на скоростное шоссе: быстрее, эффективнее и без пробок.
Узнайте, как новые технологии ускоряют загрузку веб-страниц и улучшают работу приложений.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Например: перевод денег с одного счета на другой, система остаётся в корректном состоянии: сумма на одном счете уменьшилась, а на другом увеличилась. Если транзакция не завершится, изменения не будут внесены, и система останется в исходном валидном состоянии.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека шарписта | C#, F#, .NET, ASP.NET
🎮🔌 4 cамых популярных фреймворка для разработки онлайн-игр на Unity
Сетевое взаимодействие — это сердце многопользовательской игры, и правильный выбор фреймворка это решающий фактор для проекта.
Посмотрите обзор самых популярных фреймворков для разработки онлайн-игр на Unity и выберите тот, который подходит для вашего проекта.
➡️ Читать обзор
🐸 Библиотека шарписта
Сетевое взаимодействие — это сердце многопользовательской игры, и правильный выбор фреймворка это решающий фактор для проекта.
Посмотрите обзор самых популярных фреймворков для разработки онлайн-игр на Unity и выберите тот, который подходит для вашего проекта.
Please open Telegram to view this post
VIEW IN TELEGRAM
✍🏼 Расскажите про конкурентные коллекции в C#?
Конкурентные коллекции в C# предназначены для безопасного доступа к данным в многозадачных приложениях. Они позволяют нескольким потокам одновременно читать и изменять данные, исключая необходимость ручной синхронизации и минимизируя блокировки.
ConcurrentQueue — потокобезопасная очередь (FIFO), отлично подходит для сценариев с последовательной обработкой;
ConcurrentStack — потокобезопасный стек (LIFO), полезен, когда важен обратный порядок обработки;
ConcurrentBag — коллекция без определённого порядка, оптимальна для хранения данных в локальном кэше потоков;
ConcurrentDictionarу — потокобезопасный словарь, замена обычному Dictionary в многопоточном окружении; и наконец,
BlockingCollection — высокоуровневая обёртка над другими коллекциями, поддерживающая блокировки и ограничение размера, идеально подходит для реализации паттерна "продюсер-потребитель"
🐸 Библиотека собеса по С#
ConcurrentStack — потокобезопасный стек (LIFO), полезен, когда важен обратный порядок обработки;
ConcurrentBag — коллекция без определённого порядка, оптимальна для хранения данных в локальном кэше потоков;
ConcurrentDictionarу — потокобезопасный словарь, замена обычному Dictionary в многопоточном окружении; и наконец,
BlockingCollection — высокоуровневая обёртка над другими коллекциями, поддерживающая блокировки и ограничение размера, идеально подходит для реализации паттерна "продюсер-потребитель"
Please open Telegram to view this post
VIEW IN TELEGRAM
Например: два пользователя одновременно пытаются обновить информацию о товаре в магазине, то изменения одного пользователя не могут "перемешиваться" с действиями другого. Транзакции не видят промежуточные результаты других транзакций, пока они не будут завершены. Это гарантирует, что одна транзакция не повлияет на другую до её завершения.
Please open Telegram to view this post
VIEW IN TELEGRAM
Правильный выбор типа JOIN-а, например, INNER JOIN вместо LEFT JOIN, тоже важен для производительности.
Please open Telegram to view this post
VIEW IN TELEGRAM
Допустим, вы перевели деньги через интернет-банк, и транзакция завершилась успешно. Даже если сервер после этого упал, ваш перевод всё равно будет сохранён. Это означает, что данные, записанные в процессе транзакции, не потеряются и останутся целыми.
Please open Telegram to view this post
VIEW IN TELEGRAM
Основная цель ThreadPool — эффективно управлять количеством потоков, чтобы не перегружать систему и при этом поддерживать высокую производительность. Когда задача добавляется в пул потоков, ThreadPool выбирает свободный поток или создает новый, если их недостаточно. Это позволяет избежать утечек памяти и перегрузки, которые могут возникнуть при прямом управлении потоками вручную.
Это особенно полезно для приложений с большим количеством короткоживущих задач, таких как веб-сервисы или серверные приложения, где создание нового потока для каждой задачи может сильно снизить производительность.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека шарписта | C#, F#, .NET, ASP.NET
🤔📝 Псевдокод: когда преподы не шарят, а ты в тупике
Псевдокод может быть настоящим головняком, особенно если требования к нему кажутся непонятными или не совпадают с тем, что вы видите в реальной практике программирования.
Узнайте, как сделать псевдокод полезным инструментом, а не дополнительной нагрузкой.
➡️ Читать статью
🐸 Библиотека шарписта
Псевдокод может быть настоящим головняком, особенно если требования к нему кажутся непонятными или не совпадают с тем, что вы видите в реальной практике программирования.
Узнайте, как сделать псевдокод полезным инструментом, а не дополнительной нагрузкой.
Please open Telegram to view this post
VIEW IN TELEGRAM
Например:
Если класс является ссылочным типом (class), то сам объект класса будет размещен в куче (heap), но значимый тип данных будет храниться в этом объекте в том же месте.
Если класс является структурой (struct), то данные будут храниться в том месте, где создается экземпляр структуры (например, в стеке, если структура объявлена локально).
Таким образом, где именно будет храниться значимый тип данных, зависит от того, является ли класс ссылочным типом или значимым типом.
Please open Telegram to view this post
VIEW IN TELEGRAM
Когда вы используете lock, поток блокируется до тех пор, пока не завершится выполнение кода внутри блока. Операции с await требуют освобождения потока, чтобы он мог продолжить выполнение других задач, что несовместимо с блокировкой потока через lock.
Если вы хотите использовать асинхронные операции с ожиданием, следует использовать другие механизмы синхронизации, такие как SemaphoreSlim, которые поддерживают асинхронное ожидание.
Please open Telegram to view this post
VIEW IN TELEGRAM