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

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

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

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

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
Что такое пространство имен и является ли оно обязательным?

Ответ:
Пространство имен - это способ организации классов одной и той же группы или функциональности под одним и тем же именем. Мы можем назвать это модулем. Хотя не обязательно помещать класс в пространство имен.
Каков будет результат программы?

Ответ:
location is null
1/1/0001 12:00:00 AM

Обе переменные неинициализированы, но String со ссылочным типом, а DateTime — с типом значения. В качестве типа значения для DateTime устанавливается значение по умолчанию в полночь 1/1/1, а не null.
Расскажите, какова функция Inspector в Unity 3D

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

С помощью метода IndexOf мы можем определить индекс первого вхождения отдельного символа или подстроки в строке.

Подобным образом действует метод LastIndexOf, только находит индекс последнего вхождения символа или подстроки в строку.
Операторы as и is

Оператор is используется для того, чтобы определить принадлежность объекта к типу, если это так, то вернет true. Например, является ли объект Person экземпляром типа Adult или типа, производного от Adult.

Для проверки возможности преобразования типов используйте оператор as.

Если преобразование невозможно, то будет возвращено значение NULL.
Что означают следующие аббревиатуры в .NET: IL, CIL, MSIL, CLI и JIT?

Ответ:

IL (Intermediate Language)
– это независимый от процессора частично скомпилированный код. Код IL будет скомпилирован в родной машинный код с использованием текущих свойств среды компилятором Just-In-Time (JIT). JIT-компилятор переводит IL-код в код сборки и использует архитектуру процессора целевой машины для выполнения приложения .NET.

В .NET язык IL называется Common Intermediate Language (CIL), а на первых этапах .NET он назывался Microsoft Intermediate Language (MSIL).

CLI (Common Language Infrastructure) – это открытая спецификация, разработанная компанией Microsoft. Это библиотека скомпилированного кода, используемая для развертывания, создания версий и обеспечения безопасности.

В .NET существует два типа CLI: сборки процессов (EXE) и сборки библиотек (DLL). Сборки CLI содержат код на языке CIL, и, как уже упоминалось, при компиляции языков программирования CLI исходный код транслируется в код CIL, а не в объектный код, специфичный для платформы или процессора.

Подведем итоги:

1. При компиляции исходный код сначала транслируется в IL (в .NET это CIL, а ранее назывался MSIL).
2. Затем CIL собирается в байткод и создается сборка CLI.
3. Перед выполнением кода CLI-код проходит через JIT-компилятор среды выполнения для генерации родного машинного кода.
4. Процессор компьютера выполняет родной машинный код.
Опишите модификатор «protected internal»

Члены с таким модификатором доступны классам, находящимся в той же сборке и унаследованным от данного класса.
Простое и довольно эффективное решение — отсортировать обе коллекции, а затем сравнить их на равенство.
Как в Unity обрабатывается физика на объектах с компонентами Rigidbody в сценах с множественными активными камерами, и как это может повлиять на производительность игры?

В Unity, когда на сцене присутствуют множественные активные камеры, физические расчеты для объектов с компонентами Rigidbody выполняются независимо от количества камер. Физика обрабатывается на уровне движка и не дублируется для каждой камеры. Однако, визуализация сцены с множеством камер может заметно увеличить требования к производительности, поскольку каждая камера требует отдельного рендеринга сцены. Это может привести к снижению частоты кадров, особенно если сцены сложные или содержат большое количество детализированных объектов. Важно оптимизировать использование камер и стараться минимизировать их количество для поддержания оптимальной производительности.
Каким образом можно реализовать движение объекта при помощи клавиатуры в Unity?

Объяснение решения:
В данном примере мы используем метод `Input.GetAxis()` для получения значения нажатий клавиш клавиатуры. Значения сохраняются в `moveHorizontal` и `moveVertical` величины.

Затем создается новый вектор `movement`, который состоит из `moveHorizontal`, `0f` (ось Y мы не используем для движения объекта) и `moveVertical`. Затем этот вектор умножается на скорость движения и время, прошедшее с момента последнего кадра (`Time.deltaTime`), чтобы обеспечить плавное перемещение объекта.

Наконец, используется метод `Translate()` для перемещения объекта на заданное расстояние в указанном направлении.

Поместите этот скрипт на объект в Unity, и объект будет двигаться в соответствии с нажатиями клавиш клавиатуры.
Как вы подходите к оптимизации производительности в Unity для мобильных устройств, учитывая ограничения аппаратного обеспечения и разнообразие экосистемы устройств?

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

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

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

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

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

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

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

Подробнее можно почитать здесь.
Инициализаторы объектов, массивов и коллекций

Намного проще создавать экземпляры классов, массивы и коллекции при помощи специальных инициализаторов.

Приведенный выше пример может быть очень полезным при unit-тестировании, однако в других ситуациях лучше создавать экземпляры при помощи конструкторов.
Типы данных, коллекции и структуры данных в .NET
Как вы можете управлять памятью в C# в сценарии, где у вас есть множество объектов с коротким временем жизни, создаваемых в высоконагруженной многопоточной среде, и какие подходы вы использовали бы для минимизации сборки мусора (GC)?

В такой ситуации я бы использовал пул объектов для управления памятью. Пулинг объектов позволяет избежать частого создания и уничтожения объектов, что снижает нагрузку на сборщик мусора. Также можно использовать структуры (ValueType) вместо классов, где это возможно, чтобы уменьшить нагрузку на кучу. Помимо этого, важно тщательно управлять многопоточностью, чтобы избежать состояния гонки и утечек памяти.
Как вы бы подошли к оптимизации сцены в Unity для виртуальной реальности (VR), учитывая ограничения по производительности? Обсудите как вы бы управляли ресурсами, освещением и рендерингом.

Этот вопрос тестирует понимание кандидатом специфических аспектов оптимизации в Unity для VR. Оптимизация для VR имеет особое значение из-за высоких требований к производительности и низкой задержке. Ответ должен включать стратегии по оптимизации ассетов и текстур, управлению памятью, использованию LOD (Level of Detail) систем для управления сложностью моделей, а также эффективному использованию освещения и теней. Кандидат также может обсудить использование различных профилировщиков и инструментов для мониторинга производительности, а также специфические подходы к рендерингу для VR, такие как сокращение overdraw и использование occlusion culling.
Метод All()

Метод All() проверяет, соответствуют ли все элементы условию. Если все элементы соответствуют условию, то возвращается true.

В первом случае проверяем, все ли строки в массиве people имеют длину в три символа. Поскольку это условие верно, то метод All возвращает true. Во втором случае смотрим, все ли строки начинаются с буквы «T». это условие ложно, поэтому метод All возвращает false.
Что такое обработка исключений в C#? Как она работает?

Как ответить: Опишите обработку исключений как механизм для обработки и восстановления после ошибок времени выполнения. Объясните блоки try, catch и finally и порядок их выполнения при появлении исключения.
Пример ответа: «Обработка исключений в C# позволяет обрабатывать ошибки и восстанавливаться после них. Мы используем блоки try-catch для инкапсуляции кода, который может выбросить исключение. Если исключение возникает в блоке try, выполняются блок(и) catch, подходящие типу исключения, что позволяет правильно его обработать. Код в блоке finally выполняется вне зависимости от того, возникло исключение или нет».
На что обращают внимание: на кандидатов, которые могут объяснить назначение и порядок выполнения обработки исключений в C#, рассказать про роль блоков try-catch-finally и продемонстрировать знание типов исключений и стратегий их обработки.
Как подключиться к базе данных в С#?

Как ответить: Объясните, что к базе данных в C# можно подключиться с помощью ADO.NET. Расскажите про создание объекта Connection, открытие подключения, выполнение запросов SQL или хранящихся процедур и обработку исключений.
Пример ответа: «В C# подключение к базе данных происходит с помощью ADO.NET, который предоставляет богатый набор классов для доступа к базам данных. Для подключения создается объект Connection, указывается строка подключения, и затем с помощью объектов Command выполняются запросы SQL или хранящиеся процедуры. В конце подключение закрывается и обрабатываются любые возникшие исключения».
На что обращают внимание: на кандидатов, способных объяснить процесс подключения к базе данных с помощью ADO.NET, рассказать про главные шаги и продемонстрировать знания обработки исключений.