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

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

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

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

Наши каналы: https://t.iss.one/proglibrary/9197
Download Telegram
Что такое данные JSON и как разработчики .NET могут работать с JSON?

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

Реальная сущность, имеющая поведение и атрибуты, объект в C# представляет класс, к которому он принадлежит. Для своих функций-членов он выполняет распределение памяти.

Библиотека собеса по С#
Объясните, что такое локальные и глобальные ресурсы?

Локальный ресурс явно относится к определенной странице, которая является той, которая может получить к нему доступ, в то время как глобальные ресурсы могут быть доступны из любого места. Локальные ресурсы хранятся в органайзере App_LocalResources, в то время как глобальные хранятся в папке App_GlobalResources. Записи локальных и глобальных ресурсов будут выглядеть идентичными, поэтому единственным различием будет папка, в которой они находятся. Но они используются по-разному.

Библиотека собеса по С#
🤔2🌚1
Что такое enum и когда его следует использовать?

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

Библиотека собеса по С#
В чем разница между локальными и глобальными переменными в SQL?

Локальные переменные могут быть доступны только внутри функции, в которой они были объявлены. А глобальные переменные, будучи объявленными вне какой-либо функции, хранятся в фиксированных структурах памяти и могут использоваться во всей программе.

Библиотека собеса по С#
4
Что подразумевается под свойствами в C#?

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

Библиотека собеса по С#
Запишите различные события страницы в ASP.NET

PreInit
Init
InitComplete
LoadViewState
LoadPostData
PreLoad
Load
LoadComplete
PreRender
PreRenderComplete
SaveStageComplete
UnLoad


Библиотека собеса по С#
Как используется property?

Свойство — это обёртка вокруг поля. Свойство используется как для присвоения, так и для чтения значения из поля с помощью методов set и get. Свойство можно создать для различных полей, таких как закрытые, открытые, защищённые и внутренние.

Библиотека собеса по С#
Что такое цепочка конструкторов в C#?

Цепочка конструкторов — это способ соединить два или более классов в отношениях в виде наследования. В цепочке конструкторов каждый конструктор дочернего класса неявно сопоставляется с конструктором родительского класса с помощью ключевого слова base, поэтому, когда вы создаете экземпляр дочернего класса, он вызывает конструктор родительского класса. Без этого наследование невозможно.

Библиотека собеса по С#
В чем отличие использования Finalize и Dispose?

Метод Finalize уже определен в базовом для всех типов классе Object, однако данный метод нельзя так просто переопределить. И фактическая его реализация происходит через создание деструктора. Вызывается сборщиком мусора, а точный момент вызова неопределен.
Метод Dispose нужен для ручного освобождения ресурсов, через его явный вызов или с помощью using.


Библиотека собеса по С#
Как перемешать (случайно переставить) элементы в массиве?

Если у вас уже есть набор данных (массив или List), скорее всего вам нужно перемешивание его «на месте». Для этого подойдёт алгоритм из 3.4.2P из TAOCP, известный также как Fisher–Yates shuffle.

Пусть ваши данные находятся в массиве T[] data. Пусть random — экземпляр типа Random*. Тогда для перемешивания подходит следующий код.

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