Библиотека собеса по 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
加入频道
Какой оператор используется для остановки цикла?
Anonymous Quiz
1%
stop
3%
return
95%
break
1%
exit
В чем суть полиморфизма?

Полиморфизм — способность функции обрабатывать данные разных типов.

Ad-hoc полифорфизм (перегрузка функций, приведение типа) — можно создать несколько методов с одним именем и разными аргументами, примитивные типы могут неявно приводиться.
Параметрический полиморфизм (обобщённое программирование) — можно создать полиморфные (обобщённые) типы.
Полиморфизм включения (наследование) — интерфейсы, наследование классов, виртуальные функции.
Назовите важные IDE для разработки на C#.

Следующие IDE полезны при разработке на C#:
✍🏻 MonoDevelop
✍🏻 Visual Studio Code (VS Code)
✍🏻 Browxy
✍🏻 Visual Studio Express (VSE)
✍🏻 Visual Web Developer (VWD)
Что такое цепочка конструкторов в C#?

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

Шаблон MVVM (Model-View-ViewModel) позволяет разделить бизнес-логику от представления, применяется в технологии WPF. Основные элементы:

Модель (Model) описывает используемые в приложении данные. Модели могут содержать логику, непосредственно связанную этими данными, например, логику валидации свойств модели.
Представление (View) — определяет визуальный интерфейс (кнопки, текстовые поля и прочие визуальные элементы), через который пользователь взаимодействует с приложением.
Модель Представления (ViewModel) — связывает модель и представление через механизм привязки данных. Если в модели изменяются значения свойств, автоматически идет изменение отображаемых данных в представлении, хотя напрямую модель и представление не связаны. ViewModel также содержит логику по получению данных из модели, которые потом передаются в представление. И также VewModel определяет логику по обновлению данных в модели.
Thread, task, примеры использования?

Класс Thread создает и контролирует поток. На входе указывается метод, который будет выполняться в потоке.
Класс Task позволяет запускать отдельную продолжительную задачу. Она запускается асинхронно в одном из потоков из пула потоков, но ее можно запускать и синхронно.

var t = new Thread(() => Thread.Sleep(1000));
t.IsBackground = false; //основной поток, система сама ожидает его завершение
t.Start();
Task.Run(() => Task.Delay(1000)).Wait(); //с использованием TPL
Какой интерфейс должен реализовать класс, чтобы к переменной данного типа был применим оператор foreach?

Оператор foreach может быть использован с переменными, которые реализуют интерфейс IEnumerable или IEnumerable, или с экземпляром любого типа, который удовлетворяет следующим условиям:

— должен содержать открытый метод GetEnumerator без параметров, возвращающий класс, структуру или тип интерфейса;
— тип возвращаемого значения метода GetEnumerator должен иметь открытое свойство Current и открытый метод MoveNext без параметров, возвращающий значение типа Boolean.
Когда использовать StringBuilder предпочтительнее, чем string?

StringBuilder предпочтительнее использовать, если строка часто изменяется.
Дайте определение паттерна синглтон и предложите реализацию.

Одиночка (Singleton, Синглтон) — порождающий паттерн, который гарантирует, что для определенного класса будет создан только один объект, а также предоставит к этому объекту точку доступа. Используется тогда, когда необходимо, чтобы для класса существовал только один экземпляр. Синглтоны бывают потокобезопасные и нет, с простой и отложенной инициализацией.
Разница IEnumerable и IQueryable при работе с удаленной БД?

Объект IEnumerable представляет набор данных в памяти и может перемещаться по этим данным только вперед.
IQueryable располагается в пространстве имен System.Linq. Объект предоставляет удаленный доступ к базе данных и позволяет перемещаться по данным как в прямом порядке от начала до конца, так и в обратном порядке. В процессе же выполнения запроса, происходит оптимизация запроса.

IEnumerable phoneIEnum = db.Phones;
var phones1 = phoneIEnum.Where(p => p.Id > id).ToList(); //SELECT * FROM PHONES, фильтрация на стороне клиента
IQueryable phoneIQuer = db.Phones;
int id = 3;
var phones2 = phoneIQuer.Where(p => p.Id > id).ToList(); //SELECT * FROM PHONES WHERE ID > 3
Самый простой способ чтения и записи в файлы

С помощью данного фрагмента когда вы сможете с лёгкостью прочитать, а также добавить какую-нибудь информацию в ваш файл.
В чем разница между Array и ArrayList?

Массив (Array) — это группа переменных одинакового типа, на которые ссылаются общим именем. ArrayList представляет собой упорядоченную коллекцию объектов, которые можно индексировать индивидуально. По сути, это альтернатива массиву. На картинке описаны основные различия.
В чем разница между методами Dispose() и Finalize()?

Основное различие между обоими методами заключается в том, что метод Dispose() используется для освобождения неуправляемых ресурсов объекта, а метод Finalize также используется для той же цели, но он не гарантирует сбор мусора объекта. Еще одним важным отличием является то, что метод Dispose() вызывается пользователем явно, а метод Finalize() вызывается сборщиком мусора непосредственно перед уничтожением объекта.
В чем основные отличия класса от структуры в языке C#?

Основные отличия класса от структуры следующие:
✍🏻 Структура является размерным типом, а класс — ссылочным.
✍🏻 Все структурные типы неявно наследуются от System.ValueType, они не бывают абстрактными и всегда неявно запечатаны (sealed)
✍🏻 При присваивании переменных структурного типа, создается копия данных
✍🏻 Объявления полей структуры не могут иметь инициализаторов
✍🏻 Различная интерпретация this для структуры и класса
✍🏻 Структура не может содержать конструктор без параметров
✍🏻 Структура не может содержать деструктор
✍🏻 Для ссылочных типов значение по умолчанию — null
✍🏻 При конвертировании между ссылочным и размерным типами происходит упаковка и распаковка.
Что означает модификатор virtual?

Модификатор virtual служит для того, чтобы помечать виртуальные методы или свойства в классе родителя. Виртуальные методы (свойства) — это такие методы, которые мы хотим переопределить в классах наследниках. А чтобы переопределить метод в классе-наследнике, этот метод определяется с модификатором override. Переопределенный метод в классе-наследнике должен иметь тот же набор параметров, что и виртуальный метод в базовом классе.
Переопределять можно и невиртуальные методы, но тогда выбор метода (родителя или наследника) будет осуществляться статически во время компиляции на основании типа переменной, а не типа объекта, хранящейся в ней.
Ответьте на 3 вопроса, чтобы получить вводные занятия к курсу «Алгоритмы и структуры данных»

🔥Получите вводные занятия, ответив на 3 вопроса – https://proglib.io/w/504b46d1

На вводной части вас ждут:

1. Лекция «Производительность алгоритмов» от руководителя разработки Яндекс.Самокатов

2. Лекция «Итеративные сортировки и линейные сортировки» от аспирант департамента искусственного интеллекта ВШЭ

3. Практические задания после лекций

4. Ссылки на дополнительные материалы для самостоятельного изучения

⚡️Переходите и начинайте учиться уже сегодня – https://proglib.io/w/504b46d1
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое частные и общие сборки?

Частные сборки:
✍🏻 Видны только самому приложению
✍🏻 Нет необходимости заботиться об уникальном имени во всем глобальном пространстве имен
✍🏻 Не нужно делать записей в реестре при развертывании приложения
✍🏻 Сборки просто копируются в директорию приложения или в подчинённую директорию
✍🏻 Общая среда выполнения (CLR) при запуске приложения прочитает его манифест и определит какие сборки необходимы. Затем будет произведен поиск нужной сборки по директории приложения (процесс зондирования)

Общие сборки:
✍🏻 Могут быть использованы сразу несколькими приложениями
✍🏻 Сборка должна иметь строгое имя (strong name)
✍🏻 Сборка должна быть помещена в общедоступное место — Global Assembly Cache (GAC, глобальный кэш сборок)
Можно ли разрешить наследование класса, но запретить переопределение метода?

Можно для второго класса в иерархии наследования, если переопределяем виртуальный метод как sealed override, тогда дальнейшее переопределение по цепочке наследования запрещено.