С#. Вопросы и ответы к собеседованию. Часть 3

Источник

Вопрос 9

Является ли тип List потокбезопасной (thread-safe) коллекцией?

Варианты ответов:

  1. Только при операциях чтения
  2. Не является ни в каком случае
  3. Только при операциях записи
  4. Является во всех случаях

Ответ

Не является ни в каком случае. Интересный пост на эту тему есть на хабре.

Вопрос 10

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

  1. Оператор “as” – это просто синтаксический сахар для “cast”
  2. Cast изменяет диначеский тип, в то время как as изменяет статический тип
  3. В случае ошибки cast выбрасывает исключение InvalidCastException, а оператор as возвращает null
  4. В случае ошибки cast возвращает null, а оператор as выбрасывает исключение InvalidCastException

Ответ

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

Вопрос 11

Какова алгоритмическая сложность для операций чтения и записи для коллекции Dictionary?

  1. Чтение – О(1), запись – О(1)
  2. Чтение – О(n), запись – О(1)
  3. Чтение – О(n), запись – О(n)
  4. Чтение – О(1), запись – О(n)

Ответ

Чтение – О(1), запись – О(n)

Вопрос 12

В чем различие между ключевыми словами “ref” и “out”?

  1. Параметр с ключевым слово ref может быть не инициализирован, а параметр с ключевым словом out обязательно должен быть инииализирован до вызова метода, который использует эти параметры
  2. Параметр с ключевым слово out может быть не инициализирован, а параметр с ключевым словом ref обязательно должен быть инииализирован до вызова метода, который использует эти параметры
  3. Нет различий
  4. Ключевым слово ref может использоваться только со значимыми типами (value types), а out может использоваться как со значимыми, так и с ссылочными типами.

Ответ

Параметр с ключевым слово ref может быть не инициализирован, а параметр с ключевым словом out обязательно должен быть инииализирован до вызова метода, который использует эти параметры

Вопрос 13

Какой будет результат вызова следующего кода:

Варианты ответов:

  1. Будет выброшено SynchronizationLockException
  2. Слово “test” не будет напечатано, так как произойдет взаимоблокировка (deadlock)
  3. В одних случаях может быть напечатано слово “test”, а в других может произойти взаимоблокировка
  4. Всегда будет напечатано слово “test”Ответ

Всегда будет напечатано слово “test”

Теория

Метод Monitor.Wait освобождает блокировку объекта и переводит поток в очередь ожидания объекта. Следующий поток в очереди готовности объекта блокирует данный объект. А все потоки, которые вызвали метод Wait, остаются в очереди ожидания, пока не получат сигнала от метода Monitor.Pulse или Monitor.PulseAll, посланного владельцем блокировки. Если метод Monitor.Pulse отправлен, поток, находящийся во главе очереди ожидания, получает сигнал и блокирует освободившийся объект. Если же метод Monitor.PulseAll отправлен, то все потоки, находящиеся в очереди ожидания, получают сигнал и переходят в очередь готовности, где им снова разрешается получать блокировку объекта.

Вопрос 14

Какой результат выполнения будет у следующего кода:

 

Варианты ответов:

  1. Catch DivideByZeroException, Catch MyCustomException
  2. Catch Exception, Catch MyCustomException
  3. Catch DivideByZeroException, Catch DivideByZeroException
  4. Catch Exception, Catch DivideByZeroException

Ответ

Деление на ноль не генерирует ошибку класса MyCustomException, а генерируется стандартный DivideByZeroException. Поэтому срабатывает второй кэтч.

Catch Exception, Catch MyCustomException

 

This entry was posted in C#. Bookmark the permalink.

Leave a Reply