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



    Я подобрал для вас несколько интересных, но не очень известных вопросов из мира .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
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 11

      +9
      2. Банковское округление — это округление к ближайшему ЧЁТНОМУ
      Половина вопросов вообще отношения к C# не имеют. Из остальных — как минимум треть не имеют никакой практической пользы (это как умение разгадывать кроссворды)
        +6
        Зато вот теперь какой-то не шибко умный тим-лид запишет эти вопросики и будет задавать их на собеседованиях несчастным разрабам.
          +3
          Зато как смешно будет слушать, когда он будет зачитывать url адреса из 7 вопроса!
          +1
          17. Никогда не надо так ждать таски. В общем случае нужно перенаправить продолжение с помощью ContinueWith явно указав TaskScheduler (обычно хочется TaskScheduler.FromSynchronizationContext()).

          Единственные исключения — консольные приложения у которых нет message loop (и не хочется его организовывать) и примеры того как не надо делать.
            0
            да и 14-й вопрос тоже весьма и весьма хорош!
              0
              Про String и string дан неправильный ответ. String может означать что угодно, смотря какие using указаны в этом файле. string с маленькой буквы всегда определяется как System.String из BCL.
                0
                там в принципе ответ неправильный… С первого предложения:
                Написано — String это алиас для string
                Должно быть — string это алиас для System.String
                +1
                >10
                «Прикольно» наверно на собеседовании в двоичную систему из 10й перевоить…
                  –1
                  это же просто… просто нужна бумажка и ручка (для больших чисел)
                  +1
                  f = Sum(0.1f, 0.2f);
                  can not resolve symbol f
                    0
                    Спасибо, верное замечание. Поправил.

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                  Самое читаемое