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

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

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

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

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
Объясните разницу между System.Array.CopyTo() и System.Array.Clone()?

CopyTo требует наличия выходного массива, тогда как Clone создает новый массив.
CopyTo позволяет указывать индекс элемента, начиная с которого производить копирование.
Какая разница между классами System.String и System.Text.StringBuilder?

Данные, хранящиеся в классе System.String и есть неизменяемые (immutable). Класс System.StringBuilder разрабатывался так, чтобы над изменяемой строкой можно было проделать множество операций. То есть при каждой операции над объектом класса System.String происходит перенос данных в новую область памяти, что влияет на производительность программы.
Что такое интеграционные тесты и unit-тесты?

Модульное тестирование: проверка отдельного модуля (класса, библиотеки) приложения независимо от другого модуля. Позволяет провести регресионное тестирование (при внесении изменений в модуль, убедиться, что он по прежнему работает).
Интеграционное тестирование: программные модули объединяются и тестируются в группе. Эти тесты проверяют правильность взаимодействия нескольких подсистем (например, двух классов). Проводится после модульного тестирования.
Системное тестирование: проверяется все приложение в целом на соответсвие требованиям по принципу черного ящика (без учета внутреннего строения приложения).
В чем разница между абстрактными и виртуальными классами? Между виртуальными и абстрактными методами?

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

Например, изменим порядок элементов с помощью следующего кода.
Может ли класс реализовать два интерфейса, у которых объявлены одинаковые методы? Если да, то каким образом?

Может. Общие методы при этом надо реализовывать один раз неявно или два раза явно (с указанием имени интерфейса). При явной реализации метод нельзя будет вызывать без приведения экземпляра класса к интерфейсу (если только не будет третьей реализации метода в классе).
Если два метода интерфейса выполняют разные действия, то неявная реализация интерфейсов может быть некорректной.
Получение всех дат между двумя DateTime в C#

Вы можете использовать DateTime объекты непосредственно в цикле. DateTime.AddDays правильно обрабатывает окончание месяца.
Что выведет на экран следующий код?

Выведет 4. Оператор ~ производит побитовую реверсию.
Console.WriteLine(«{0:x8}, {1:x8}», -5, ~(-5));
// выведет fffffffb, 00000004
Причем для значения 5 выведет -6.
Локальные функции

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

В этом примере, метод Add определен внутри SomeMethod. Это не только помогает сгруппировать связанный функционал, но и ограничивает область видимости Add, делая код более безопасным и управляемым.
Можно ли запретить наследование от своего собственного класса?

Для того, чтобы запретить наследоваться от класса необходимо объявить его с модификатором sealed.
В чем разница инкапсуляции и сокрытия?

Инкапсуляция — одна из парадигм ООП. Она представляет собой способность языка упаковывать определённые участки кода в контейнеры, исключая возможность внешнего мира нарушения целостности данного кода. Основной единицей инкапсуляции в C# является класс. Инкапсуляция позволяет структурировать код и помогает обезопасить его от многих возможных проблем, относительно защиты данных и информации.
Сокрытие же скрывает детали о процессе. Для определения прав доступа к данным в классе и к классу непосредственно используются модификаторы доступа. Получается, что использование этих модификаторов и есть то самое сокрытие. Но сам термин «сокрытие» лучше употреблять в контексте методов. Сокрытие метода представляет собой реализация тела метода в дочернем классе, сигнатура которого соответствует сигнатуре метода в родительском классе. Для сокрытия применяется ключевое слово «new».
Смена регистра

Для приведения строки к верхнему и нижнему регистру используются соответственно функции ToUpper() и ToLower().
Dynamic hair

Хотите сделать вашего персонажа в Unity интереснее? Тогда для вас этот видеоурок о том, как добавить физику и движение его волосам.

Смотреть видео
Назовите отличия между интерфейсом и абстрактным классом?

Интерфейс — это абстрактный класс, у которого ни один метод не реализован, все они публичные и нет переменных класса.
Абстрактные классы и интерфейсы используются в наследовании, при этом разрешено наследование нескольких интерфейсов, но только одного класса.
⚡️Proglib запускает каналы про нейросети

По каждому направлению отдельно! А именно:

Библиотека нейрозвука — здесь все, связанное с транскрибацией, синтезом речи, ИИ-музыкой
Библиотека нейротекста — классические ИИ-помощники вроде ChatGPT, Gemini, Bing
Библиотека нейровидео — здесь пишем про нашумевшую Sora AI, а также про Runway ML, дипфейки и другие видеотехнологии
Библиотека нейрокартинок — генерируем изображения и рассказываем про Midjourney, DALL-E, Stable Diffusion
⭐️Библиотека робототехники и беспилотников — наконец, тут мы рассказываем не столько про ИИ, сколько про роботов, беспилотные технологии и интернет вещей

И все это — максимально подробно: с пошаговыми инструкциями, промтами, инструментами и лайфхаками.

Подписывайтесь!
Что такое assembly manifest (манифест сборки)?

Манифест сборки содержит следующую информацию (первые чертыре составляют удостоверение сборки):

Имя сборки
✍🏻 Номер версии: основной и дополнительный номера. Используется для управления версиями
✍🏻 Язык и региональные параметры: информация о языке и региональных параметрах, которые поддерживает сборка
✍🏻 Информация о строгом имени: открытый ключ издателя
✍🏻 Список всех файлов сборки: хэш и имя каждого из входящих в сборку файлов
✍🏻 Список ссылок на другие сборки, которые использует текущая сборка
✍🏻 Список ссылок на типы, используемые сборкой
Какие реализации DI контейнеров вы знаете на C#. Какой DI контейнер является лучшим?

Castle Windsor, Autofac, Ninject, Unity... и так далее, на самом деле их очень много. Насчет того, какой из них лучший — не совсем корректный вопрос. Все зависит от конкретной реализации.