Pull to refresh

Еще немного каверзных вопросов по .NET и C#

Reading time4 min
Views6.1K


Я подобрал для вас несколько интересных, но не очень известных вопросов из мира .NET и C#. Плюс какие-то вопросы я написал сам, основываясь на книгах, статьях и видео которые мне понравились.

1. Что будет отображено на экране? (если что-то вообще будет отображено)

string nullString = (string)null;
Console.WriteLine (nullString is string);

Ответ
False, потому что Null не имеет типа в runtime
Credits: https://www.dotnetcurry.com/csharp/1417/csharp-common-mistakes

2. Что будет выведено на экран консольным .NET приложением?

Console.WriteLine (Math.Round(1.5));
Console.WriteLine (Math.Round(2.5));

Ответ
2 и 2. Потому что по умолчанию используется округление вверх к ближайшему четному — банковское округление. Интересно знать, что Mono вернет 2 и 3.

3. Что будет результатом выполнения следующего кода:

static void Main(string[] args)
{
    float f = Sum(0.1f, 0.2f);
    float g = Sum(0.1f, 0.2f);
    Console.WriteLine(f == g);
}

static float Sum(float f1, float f2)
{
    return f1 + f2;
}

a) True
b) False
c) Будет выброшено исключение
d) Нельзя сказать однозначно (скорее всего true, но может быть и false)

Ответ
d
Иногда JIT может сохранять результат суммы гораздо более точно чем это может сделать float. То есть, результат сравнения может зависеть от настроек компилятора, версии CLR, модели процессора и может быть погоды за окном (насчет погоды я, конечно, не всерьез). Попробуйте запустить код на разных версиях фреймворка в разных режимах Debug/Release и, возможно, вам повезет поймать False. Я проверял, — иногда в Release конфигурации действительно возвращается False. Кроме шуток. Причем, с чем это связано сказать действительно сложно.
Credits:
Binary floating point and .NET

4. Что будет результатом выполнения следующего кода:

float price = 4.99F;
int quantity = 17;
float total = price * quantity;
Console.WriteLine("The total price is ${0}.", total);

a) The total price is $85
b) The total price is $84.83
c) The total price is $84
d) The total price is $84.82999

Ответ
d
Это не глюк платформы. Такой результат связан со способом хранения числа в памяти компьютера (float хранится в экспоненциальной форме) и количеством разрядов отведенных для хранения мантиссы и порядка.
Credits:
Binary floating point and .NET
Floating Point in .NET part 1: Concepts and Formats

5. Каким образом лучше всего хранить пароли в базе данных? Выберите один или несколько ответов:

a) В виде незашифрованного текста
b) Зашифрованными с помощью DES
c) Зашифрованными с помощью AES
d) Захешированными с помощью MD5
e) Захешированными с помощью SHA512

Ответ
e
В наше время MD5 больше не следует использовать.
Кстати, можно использовать и keyed hash алгоритмы: HMACSHA1 или MACTripleDES

6. В среде .NET существует множество различных таймеров. Какого из таймеров не существует?

a) Timer из System.Windows.Forms
b) DispatchTimer из System.Windows.Threading
c) DispatchTimer из Windows.UI.XAML
d) Timer из System.Timers
e) Timer из System.Windows.Threading.Timers
f) Timer из System.Threading

Ответ
e
Credits: CLR via C# Jeffrey Richter

7. Какого .NET REPL не существует в сети?

a) dotnetfiddle.net
b) repl.it/languages/csharp
c) csharpcompiler.net
d) dotnet.microsoft.com/platform/try-dotnet
e) csharppad.com

Ответ
c

8. Если вы захотите указать что число является типом long, то вы можете указать в конце числа литеру l или L. Например, так:

var l = 138l;

С помощью какой литеры можно указать тип decimal?

a) C или c
b) D или d
c) M или m
d) E или e

Ответ
c

9. Что будет отображено на экране консолького приложения содержащего следующий код:

     class Program
    {
         static Program()
        {
            Console.WriteLine("Static constructor");
        }

         public Program()
        {
            Console.WriteLine("Constructor");
        }

        static void Main(string[] args)
        {
            Console.WriteLine("Main");
            Console.ReadLine();
        }
    }

Ответ
«Static constructor» и «Main»
Знаете вы это или нет, но статический конструктов вызывается перед тем как экземпляр класс создается. И только после этого уже вызывается публичный конструктор. Но в данном случае код выполняется в консольном приложении и публичный конструктор не вызывается.

10. Что будет выведено на экран в качестве результата?

      [Flags]
      public enum Status 
      {
         Funny = 0x01,
         Hilarious = 0x02,
         Boring = 0x04,
         Cool = 0x08,
         Interesting = 0x10,
         Informative = 0x20,
         Error = 0x40
      }

  public static void Main (string[] args) {
         var code = 24;
         Console.WriteLine (String.Format("This Quiz is: {0}",  (Status)code));
      }

Ответ
This Quiz is: Cool Interesting

24 в двоичной системе будет 0011000
Записываем цифры в столбик
Funny = 0
Hilarious = 0
Boring = 0
Cool = 1
Interesting = 1
Informative = 0
Error = 0
Credits:
C# Often Surprises Me, part: 000001
Enumeration types (C# reference)


11. В чем разница между String и string?

Ответ
String это .NET алиас для c# string. Примерно так же как short и int в C# сопоставляются Int16 и Int32 в .NET
По следующей ссылке найдете статью с более подробным описанием Difference between string and String in C#

12. Что означает (или как минимум изначально означал) символ Visual Studio?

Ответ
Пересечение миров Intranet и Internet
Credits: That Visual Studio logo--it's not what you think it is

13. Пожалуйста, сопоставьте:
Async/await
Try/catch
ValidateAntiForgeryToken
со следующими аббревиатурами:
TAP, SEH, STP

Ответ
Async/await -> TAP (Task asynchronous programming model)
Try/catch -> SEH (Structured Exception Handling)
ValidateAntiForgeryToken -> STP (Synchronizer Token Pattern)

14. Что из следующего не является .NET CMS?

a) mojoPortal
b) N2 CMS
c) Atomic CMS
d) Composite C1
e) Concrete5
f) Piranha CMS

Ответ
e

15. Что будет отображено на экране? (если что-то будет отображено)

  
     class Program
    {
        private static int y = x;
        private static int x = 5;

        static void Main(string[] args)
        {
            Console.WriteLine(y);
            Console.ReadLine();
        }
    }

Ответ
0
Порядок объявления переменных иногда играет роль

16. Какого класса Concurrent Collection не существует в .Net

a) ConcurrentQueue
b) ConcurrentStack
c) ConcurrentList
d) ConcurrentDictionary
e) ConcurrentBag

Ответ
c

17. Какой способ вызова async кода синхронным способом предпочтителен (разумеется, что делается это в редких ситуациях когда await ну никак не получается использовать):

a) Wait()
b) Result()
c) GetAwaiter().GetResult()

Ответ
c
Wait и Result выбрасывают aggregate exception вместо обычного
Credits: Correcting Common Async/Await Mistakes in .NET — Brandon Minnick
Tags:
Hubs:
-11
Comments11

Articles

Change theme settings