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

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

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

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

Наши каналы: https://t.me/proglibrary/9197
Download Telegram
Почему мы используем коллекции в C#?

Классы коллекций используются для динамического выделения памяти элементам и доступа к списку элементов на основе индекса.

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

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

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

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

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

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

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

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


Библиотека собеса по С#
Как изменить размер массива?

Для изменения размера массива применяется метод Resize. Его первый параметр — изменяемый массив, а второй параметр — количество элементов, которые должны быть в массиве.

Если второй параметр меньше длины массива, то массив усекается. Если значение параметра, наоборот, больше, то массив дополняется дополнительными элементами, которые имеют значение по умолчанию. Причем первый параметр передается по ссылке.


Библиотека собеса по С#
Что такое виртуальный метод в C#?

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

Библиотека собеса по С#
Как бы вы объяснили разницу между Repeater и ListView?

Элемент управления Repeater является производным от класса Control. Повторитель просто повторяет данные, указанные в шаблонах. Повторяющиеся данные обычно представляют собой HTML-код, смешанный с записями из источников данных. Вывод Repeater не предопределен. Из-за этого Repeater требует больше всего работы для определения шаблона. Взамен он дает нам наибольшую гибкость для построения макета и оптимизации представления.

С тем же шаблоном и тем же набором данных Repeater обычно работает быстрее, чем элементы управления Data List или GridView. Это в основном из-за класса DataReader, который используется для доступа только для чтения. DataReader быстрее, чем классы DataSet или DataTable, обычно используемые с GridView.

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

Элемент управления ListView — это новейший элемент управления представлением данных, представленный в
ASP.NET 3.5. Предыдущие элементы управления (Repeater, DataList и GridView) логически следуют друг за другом. Например, Repeater — самый простой, но быстрый, затем DataList имеет больше функций, но и больше накладных расходов, и, наконец, GridView — самый сложный, имеет больше функций, но самый тяжелый и, следовательно, самый медленный на странице. Теперь есть новый элемент управления ListView, который пытается предоставить лучшее с обеих сторон: скорость и гибкость в дизайне, а также множество функций, таких как разбиение на страницы, обновление или удаление записей и т. д. Из-за этого элемент управления ListView часто является лучшим выбором, чем Repeater или DataList.

Библиотека собеса по С#
В чем различие между операцией cast (приведения типов) и оператором as?

В случае ошибки cast выбрасывает исключение InvalidCastException, а оператор as возвращает null.

Библиотека собеса по С#
Что такое кэширование и его различные типы?

В Asp.Net метод кэширования позволяет хранить или кэшировать вывод веб-страницы. Эта техника используется для избежания расходов на повторное создание тех же данных. В ASP.NET доступны три различных типа кэширования:

✍🏻 Кэширование вывода страницы
✍🏻 Кэширование фрагмента страницы
✍🏻 Кэширование данных

Кэширование увеличивает параметр производительности, если пользователь запрашивает те же данные или информацию.

✍🏻 Кэширование вывода страницы: реализуется путем размещения директивы OutputCache в верхней части страницы .aspx во время разработки.
✍🏻 Кэширование данных: используется для быстрого извлечения данных приложения и реализуется объектом Cache.
✍🏻 Кэширование фрагмента страницы: используется для хранения части ответа веб-формы в памяти путем кэширования пользовательского элемента управления.


Библиотека собеса по С#
Что такое статический класс?

Статический класс — это класс, в котором CLR автоматически заполняет память во время выполнения кода.

Библиотека собеса по С#
Как произвести отладку приложения C#?

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

Пример ответа: «Для отладки приложения C# используются инструменты отладки в таких IDE, как Visual Studio. Мы устанавливаем точки останова на определенных строках кода, чтобы остановить выполнение программы и изучить её состояние. Затем можно пошагово выполнить код, изучить переменные и найти ошибки. Логирование и использование выводов отладчика также являются хорошими техниками для устранения неполадок и изучения поведения программы».

На что обращают внимание: на кандидатов, которые могут объяснить процесс отладки в C# с учётом использования точек останова, пошагового выполнения кода и эффективного использования инструментов отладки.


Библиотека собеса по С#
Как реализовать шаблон проектирования Singleton в C#?

В шаблоне Singleton класс может иметь только один экземпляр и предоставляет глобальную точку доступа к нему.

Public sealed class Singleton
{
Private static readonly Singleton _instance = new Singleton();
}

Библиотека собеса по С#
Что такое данные JSON и как разработчики .NET могут работать с JSON?

JSON (JavaScript Object Notation) позволяет разработчикам упорядочивать и хранить данные для легкого доступа и чтения. Для разработчиков JSON является важным инструментом, так как позволяет управлять JSON-потоками с других сайтов и загружать их быстрее и проще, чем через каналы SML / RSS. Json.NET предоставляет возможность разработчикам .NET определять классы, которые могут анализировать объекты и массивы из текста JSON. Также Json.NET можно использовать для сериализации типов значений в текстовый формат JSON. Json.NET совместим с .NET2, .NET3 и .NET4.

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

Частичный метод — это, по сути, специальный метод в частичном классе, который также называется структурой. Одна часть частичного класса имеет единственное объявление частичного метода, что означает, что сигнатура, а также другая часть той же структуры, могут иметь выполнение.

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

Пример ответа: "Мой опыт работы с сетевым многопользовательским режимом в Unity включает использование Mirror и Netcode Unity для GameObjects. Я реализовал такие функции, как синхронизация движений игроков, создание и обработка обновлений состояния игры. Распространенной проблемой является снижение задержки. Я решил эту проблему с помощью таких методов, как прогнозирование на стороне клиента и серверное согласование, чтобы игра казалась отзывчивой, несмотря на задержки в сети. Для синхронизации я использовал компоненты NetworkTransform и пользовательские реализации NetworkVariable, выбирая правильный подход на основе частоты обновления данных и важности.

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


Библиотека собеса по С#
Как реализовать простое сохранение данных (сохранение и загрузку игровых данных) в Unity?

Пример ответа: "Для простого сохранения данных в Unity я обычно использую PlayerPrefs. Он прост для сохранения примитивных типов данных, таких как целые числа, числа с плавающей точкой и строки. Для сохранения данных я использую такие методы, как PlayerPrefs.SetInt("score", scoreValue), PlayerPrefs.SetFloat("volume", volumeValue) и PlayerPrefs.SetString("playerName", playerName). Для загрузки данных я использую соответствующие методы PlayerPrefs.GetInt("score"), PlayerPrefs.GetFloat("volume") и PlayerPrefs.GetString("playerName"). Я также проверяю, существует ли ключ перед загрузкой, используя PlayerPrefs.HasKey("keyName"), чтобы предоставить значения по умолчанию, если это необходимо.

В качестве альтернативы я могу сериализовать данные в JSON или двоичный файл для более сложных структур данных. Для JSON я бы использовал JsonUtility.ToJson() для сериализации объекта и JsonUtility.FromJson() для его обратной десериализации. Для двоичного формата я бы использовал BinaryFormatter для сериализации и десериализации данных. Сохранение в файл включает использование File.WriteAllText() или File.WriteAllBytes(), а чтение из файла включает использование File.ReadAllText() или File.ReadAllBytes() соответственно. Это часто используется, когда более сложные игровые данные необходимо хранить постоянно."


Библиотека собеса по С#
Что означают следующие аббревиатуры в .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. Процессор компьютера выполняет родной машинный код.


Библиотека собеса по С#
🔥 Последняя неделя перед стартом курса по AI-агентам

Старт курса уже 5го числа! Если вы планировали вписаться — сейчас ПОСЛЕДНИЙ шанс забронировать место

На курсе:
разложим LLM по косточкам: токенизация, SFT, PEFT, инференс
— соберём RAG и научимся оценивать его адекватно
— построим настоящую мультиагентную систему — архитектуру, которая умеет расти
— разберём CoPilot, сломаем через prompt injection (спасибо Максу)
— и наконец, посмотрим, как это работает в MCP и реальных кейсах

📍 Это 5 живых вебинаров + раздатка + домашки + чат с преподавателями

И главное — возможность реально разобраться, как проектировать системы на LLM, а не просто «поиграться с API»

👉 Курс здесь
Что такое архитектура REST?

REST означает REpresentational State Transfer (передача репрезентативного состояния). REST — это архитектурный стиль, который не следует никакому строгому стандарту, но следует шести ограничениям, определенным Роем Филдингом в 2000 году. Эти ограничения: Единый интерфейс, Клиент-сервер, Без сохранения состояния, Кэшируемый, Многоуровневая система, Код по требованию. REST не ограничивается XML, и выбор того, какой тип носителя использовать, например XML, JSON, Обычный текст остается за реализатором. Более того, REST может использовать протокол SOAP, но SOAP не может использовать REST. REST прост в реализации и требует меньшей пропускной способности, например, смартфонов.

Архитектурные ограничения RESTful API: Ниже перечислены шесть архитектурных ограничений, которые делают любую веб-службу:

✔️ Единый интерфейс
✔️ Без сохранения состояния
✔️ Кэшируемый
✔️ Клиент-сервер
✔️ Многоуровневая система
✔️ Код по требованию


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

Функция оператора return в C# заключается в завершении выполнения метода в месте его появления и передаче управления вызывающему методу.

Библиотека собеса по С#
🧠 «Поиграйся с LLM, почитай про агентов — и сам поймёшь, как это работает»

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

Поиграйся — это как?
Потыкать пару промптов в ChatGPT и решить, что теперь ты можешь строить мультиагентные системы? 🤡 Ну-ну.

AI-агенты — это не «очередная обёртка над GPT». Это архитектура. Состояния, инструменты, цепочки вызовов, память, оценка качества и адекватность поведения.

➡️ Чтобы разобраться, нужно:
— понимать, как устроен LLM под капотом
— уметь подключать внешние данные (RAG, retrievers, rerankers)
— уметь масштабировать и дебажить поведение агентов
— разбираться в фреймворках вроде AutoGen, CrewAI, LangChain
— знать, как всё это тащится в прод

Если вы реально хотите не «поиграться», а научиться собирать рабочие агентные системы — у нас стартует курс по разработке ИИ-агентов 5го июля

P.S: не упусти свой шанс, промокод: LASTCALL на 10.000₽
Какую цель выполняет оператор «using» в C#?

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

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