Библиотека собеса по C# | вопросы с собеседований
5.68K subscribers
213 photos
2 videos
1 file
199 links
Вопросы с собеседований по C# и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/4c2f1c3b

Работать у нас: https://job.proglib.io/

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
#️⃣🏗 Как не запутаться в структурах данных в Unity и C#

Когда работаете с Unity, почти каждая система — это работа с данными. Инвентарь, состояния врагов, квесты, сохранения. И вот тут важно не просто «что-то завести», а осознанно выбрать структуру данных под задачу.

Экономия памяти, меньше багов и чище код — это не абстрактные плюсы, а реальные бонусы при разработке.

➡️ Подробности в статье

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
✍🏻 В чем разница между абстрактными и виртуальными классами? Между виртуальными и абстрактными методами?

Абстрактный класс — это класс, помеченный ключевым словом abstract. В абстрактном классе содержатся абстрактные члены (методы, свойства, индексаторы, события), они не имеют внутренней реализации и выступают в роли интерфейса. Они так же обязаны быть помечены ключевыми словом abstract. При наследовании от абстрактного класса класс-наследник получает все свойства своего класса родителя, а если в родительском классе есть еще и абстрактные члены, то в классе наследнике обязательно их нужно переопределять.
Виртуальный класс, это просто класс в котором есть виртуальные члены (методы, свойства...). Виртуальные члены помечаются модификатором virtual и имеют внутреннюю реализацию, которая может быть переопределена в классе наследнике.


Библиотека собеса по С#
✍🏻 Можно ли использовать out и ref для перегрузки как различные сигнатуры метода?

Этого сделать нельзя. Даже когда ref и out обрабатываются по-разному во время выполнения, во время компиляции они обрабатываются одинаково. Поэтому его нельзя загружать с похожими типами аргументов.

Библиотека собеса по С#
✍🏻 Каковы различные способы перегрузки метода?

Различные типы данных параметров, разное количество параметров, разный порядок параметров.

Библиотека собеса по С#
📝 Создаем красивую документацию API с помощью Scalar в ASP.NET Core

Документация для API — это не просто набор ссылок и описаний. Это инструмент, который помогает разработчикам быстрее понять, как использовать ваш сервис. Используя Scalar, можно превратить стандартный Swagger в нечто действительно элегантное.

Процесс не сложный, а результат превзойдет все ожидания.

➡️ Прочитать статью

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
Какой из них лучше/быстрее, switch или операторы if-else-if, и почему?

Среди этих двух оператор switch считается быстрее, чем оператор if-else-if. Это потому, что switch не проверяет предыдущие операторы, а в случае if-else-if каждое условие должно быть проверено.

Библиотека собеса по С#
💡 Что такое оператор перехода в C#?

Оператор перехода в C# используется для передачи управления программой из одной точки в другую точку программы.

Библиотека собеса по С#
Please open Telegram to view this post
VIEW IN TELEGRAM
✍🏻 Чем отличаются интерфейсы от абстрактных классов в C#?

Интерфейсы и абстрактные классы в C# являются механизмами для реализации полиморфизма и обеспечения повторного использования кода. Вот основные отличия между ними:

1. Отношение к классам-наследникам: Абстрактный класс может иметь как абстрактные, так и конкретные (реализованные) методы. Интерфейс же предоставляет только определения методов. Класс может наследоваться только от одного абстрактного класса, но может реализовывать несколько интерфейсов.

2. Реализация: Абстрактным классам разрешено иметь переменные экземпляра и иметь реализацию методов. Интерфейсы могут иметь только методы (и свойства) без реализации, только сигнатуры. Класс, реализующий интерфейс, должен предоставить реализацию всех методов и свойств интерфейса.

3. Использование: Абстрактные классы применяются, когда некоторые базовые методы и свойства должны быть доступны и переопределены в классах-наследниках. Интерфейсы используются для создания контракта, который должны выполнить классы, обеспечивая использование полиморфизма.

Оба механизма полезны в разных сценариях разработки. Выбор между использованием абстрактных классов и интерфейсов зависит от конкретных требований проекта.


Библиотека собеса по С#
✍🏻 Расскажите, какова функция Inspector в Unity 3D

Инспектор — это контекстно-зависимая панель, на которой вы можете настроить положение, масштаб и поворот игровых объектов, перечисленных на панели иерархии.


Библиотека собеса по С#
🪄 Визуальные вычисления в Power BI: прокачиваем условное форматирование

Теперь настраивать условное форматирование в Power BI можно без сложных DAX-формул!

Разбираем, как новые визуальные вычисления помогают создавать динамичные, адаптивные и стильные отчеты, которые мгновенно реагируют на изменения данных.

⭐️ Пора сделать отчеты действительно интерактивными!

🔗 Ссылка на статью: https://proglib.io/sh/lsb0fEuYSv

Библиотека дата-сайентиста
Please open Telegram to view this post
VIEW IN TELEGRAM
✔️ Как в C# поля и свойства отличаются друг от друга?

В C# поля и свойства имеют различия друг от друга. Поле — это член класса или объекта, предназначенный для хранения данных, в то время как свойство — это член класса, который предоставляет методы для чтения, записи и вычисления значения соответствующего поля.

Библиотека собеса по С#
Что означает «A» в ACID?

Это свойство означает, что транзакция — неделимая единица работы: либо выполняется полностью, либо не выполняется вообще.

Если хоть одна операция внутри транзакции не удалась — все изменения откатываются, и система остаётся в исходном состоянии, будто ничего не происходило.


🐸Библиотека собеса по С#
Please open Telegram to view this post
VIEW IN TELEGRAM
🕸 Как работает протокол 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
Что означает «C» в ACID?

Это свойство гарантирует, что транзакция всегда переводит систему из одного валидного состояния в другое.

Например: перевод денег с одного счета на другой, система остаётся в корректном состоянии: сумма на одном счете уменьшилась, а на другом увеличилась. Если транзакция не завершится, изменения не будут внесены, и система останется в исходном валидном состоянии.


🐸Библиотека собеса по С#
Please open Telegram to view this post
VIEW IN TELEGRAM
🎮🔌 4 cамых популярных фреймворка для разработки онлайн-игр на Unity

Сетевое взаимодействие — это сердце многопользовательской игры, и правильный выбор фреймворка это решающий фактор для проекта.

Посмотрите обзор самых популярных фреймворков для разработки онлайн-игр на Unity и выберите тот, который подходит для вашего проекта.

➡️ Читать обзор

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
✍🏼 Расскажите про конкурентные коллекции в C#?

Конкурентные коллекции в C# предназначены для безопасного доступа к данным в многозадачных приложениях. Они позволяют нескольким потокам одновременно читать и изменять данные, исключая необходимость ручной синхронизации и минимизируя блокировки.

ConcurrentQueue — потокобезопасная очередь (FIFO), отлично подходит для сценариев с последовательной обработкой;
ConcurrentStack — потокобезопасный стек (LIFO), полезен, когда важен обратный порядок обработки;
ConcurrentBag — коллекция без определённого порядка, оптимальна для хранения данных в локальном кэше потоков;
ConcurrentDictionarу — потокобезопасный словарь, замена обычному Dictionary в многопоточном окружении; и наконец,
BlockingCollection — высокоуровневая обёртка над другими коллекциями, поддерживающая блокировки и ограничение размера, идеально подходит для реализации паттерна "продюсер-потребитель"


🐸Библиотека собеса по С#
Please open Telegram to view this post
VIEW IN TELEGRAM
Что означает «I» в ACID?

Это свойство означает, что каждая транзакция выполняется независимо от других, даже если они происходят одновременно.

Например: два пользователя одновременно пытаются обновить информацию о товаре в магазине, то изменения одного пользователя не могут "перемешиваться" с действиями другого. Транзакции не видят промежуточные результаты других транзакций, пока они не будут завершены. Это гарантирует, что одна транзакция не повлияет на другую до её завершения.


🐸Библиотека собеса по С#
Please open Telegram to view this post
VIEW IN TELEGRAM
👀 Как оптимизировать ситуацию, когда к таблице много join`ов?

Для оптимизации запросов с множественными JOIN-ами важно использовать индексы на полях JOIN-ов, избегать избыточных соединений, заменять несколько JOIN-ов на подзапросы и разбивать запросы на этапы с меньшим количеством JOIN-ов. Агрегация и фильтрация данных перед JOIN-ами также помогут ускорить запрос.
Правильный выбор типа JOIN-а, например, INNER JOIN вместо LEFT JOIN, тоже важен для производительности.


🐸Библиотека собеса по С#
Please open Telegram to view this post
VIEW IN TELEGRAM
Что означает «D» в ACID?

Это свойство гарантирует, что как только транзакция завершена, её изменения будут сохранены, даже если система внезапно выйдет из строя.

Допустим, вы перевели деньги через интернет-банк, и транзакция завершилась успешно. Даже если сервер после этого упал, ваш перевод всё равно будет сохранён. Это означает, что данные, записанные в процессе транзакции, не потеряются и останутся целыми.


🐸Библиотека собеса по С#
Please open Telegram to view this post
VIEW IN TELEGRAM
👀 Какую проблему решает ThreadPool

ThreadPool решает проблему управления потоками в многозадачных приложениях. Он помогает оптимизировать производительность за счет повторного использования уже созданных потоков, чтобы избежать дорогих операций по созданию и уничтожению потоков при каждой задаче.
Основная цель ThreadPool — эффективно управлять количеством потоков, чтобы не перегружать систему и при этом поддерживать высокую производительность. Когда задача добавляется в пул потоков, ThreadPool выбирает свободный поток или создает новый, если их недостаточно. Это позволяет избежать утечек памяти и перегрузки, которые могут возникнуть при прямом управлении потоками вручную.

Это особенно полезно для приложений с большим количеством короткоживущих задач, таких как веб-сервисы или серверные приложения, где создание нового потока для каждой задачи может сильно снизить производительность.


🐸Библиотека собеса по С#
Please open Telegram to view this post
VIEW IN TELEGRAM