Библиотека собеса по C# | вопросы с собеседований
5.51K subscribers
247 photos
5 videos
1 file
404 links
Вопросы с собеседований по C# и ответы на них.

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

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

Для обратной связи: @proglibrary_feeedback_bot

Наши каналы: https://t.me/proglibrary/9197
Download Telegram
Что делает lock(obj) под капотом и почему плохая идея — блокировать this или строку?

Компилятор разворачивает в try { Monitor.Enter(obj); } finally { Monitor.Exit(obj); }, монитор реентерабелен и висит на объекте. Блокировка this/публичных объектов/строк опасна: внешний код может их тоже залочить (строки интернируются) → риск дедлоков и лишнего контеншна.

Библиотека собеса по С#
🥰1
Можно ли вызывать Unity API из Job System/дополнительных потоков и как правильно применить параллельно посчитанные результаты к объектам сцены?

Нельзя: UnityEngine.Object и большинство API — только с главного потока. Параллелим расчёты на NativeArray/NativeSlice/NativeHashMap (без managed-ссылок), помечаем [ReadOnly]/[WriteOnly], включаем Burst, Schedule/ScheduleParallel, сохраняем JobHandle, затем на главном потоке делаем Complete() и читаем Native*, применяя значения к Transform/Mesh в Update/LateUpdate. Контейнеры реюзаем с Allocator.Persistent, не аллоцируем каждый кадр.

Библиотека собеса по С#
Что вы подразумеваете под массивом и какие типы массивов существуют в C#?

Коллекция схожих элементов, доступных через числовой индекс, называется массивом. Бывают одномерные массивы, двумерные массивы и jagged массивы.

Библиотека собеса по С#
Как вы подходите к оптимизации производительности в Unity для мобильных устройств, учитывая ограничения аппаратного обеспечения и разнообразие экосистемы устройств?

Для оптимизации производительности в Unity для мобильных устройств, важно сосредоточиться на следующих аспектах:

Оптимизация ресурсов: Сжатие текстур и мешей, использование LOD (Level of Detail) для уменьшения детализации объектов на расстоянии и оптимизация ассетов для уменьшения загрузки на GPU.

Эффективное использование освещения: Использование статического и запекаемого освещения вместо динамического, что снижает нагрузку на процессор.

Оптимизация скриптов: Минимизация использования операций Update() и FixedUpdate(), оптимизация алгоритмов и структур данных.

Пакетная обработка и куллинг: Использование пакетной обработки для уменьшения количества draw calls и эффективный куллинг для исключения не видимых объектов из рендеринга.

Тестирование и профилирование: Регулярное использование профилировщика Unity для выявления и устранения узких мест производительности.

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


Библиотека собеса по С#