Только что мне предложили пройти анкету с вопросами по c#, ну я быстро ответил и довольный отправил его эйчару. Удивило потом то что я оказывается мало на что ответил правильно. Было странно, вопросы то вроде простые, ну я начал разбираться и сравнивать правильные ответы с неправильными. Итак вот что было:

  1. На какие сегменты делится память в .NET?

    Мой: Куча, стек

    Правильный: На стек и кучу

  2. Сколько поколений внутри кучи малых объектов?

    Мой: 3

    Правильный: 3 (0, 1, 2)

  3. В чем разница алгоритмов сборки кучи малых и больших объектов?

    Мой: При сборке малых она сжимается, дефрагментируется, при сборке loh остаются "дыры", но при указании нужного параметра и там можно запустить сжатие.

    Правильный: В наличие у кучи малых объектов дефрагментации

  4. Что такое интернирование строк?

    Мой: Оптимизация когда все одинаковые строки заменяются одним объектом строкой.

    Правильный: Перемещение строк в спецаильную облсть памяти для препятствия излишнему копированию

  5. Что такое StringBuilder?

    Мой: Построитель строк, более оптимизирован чем обычная конкатенация, выделяется меньше объектов строк.

    Правильный: Способ оптимизации построения больших строк

  6. var list = new List { 1, 2, 3, 4, 1, 2 };
    var result = list.Where(i => i > 1);
    Что будет лежать в переменной result и сколько раз выполнится проверка i > 1?

    Мой: 2,3,4,2 Выполнится столько сколько там элементов: 6

    Правильный: Нисколько, в result будет IEnumerable

  7. Во что разворачивается конструкция lock?

    Мой: monitor

    Правильный: Monitor.Enter и Monitor.Exit

  8. Чем Monitor отличается от Mutex?

    Мой: mutex сквозной для ОС, монитор в рамках процесса

    Правильный: Первый гибридный и не дает защиты на межпроцессном уровне, второй уровня ядра и дает блокировку между процессами

  9. Как запустить Task?
    Мой: .Run( => ...)

    Правильный: Через методы Run, StartNew и через вызов асинхронного метода без ожидания

  10. Кто управляет потоками на кготорых запускаются Task'и?
    Мой: ThreadPool

    Правильный: TaskScheduler

  11. В чем разница между Task.WaitAll и Task.WhenAll?

    Мой: второй вариант асинхронный, можно эвейтить, первый блокирует поток.

    Правильный: В том что один позволяет запускать с блокировкой потоков, а второй в асинхронном режиме

  12. О чем паттерн Dependency Injection?

    Мой: Суть в том что конструирование объекта и его временем жизни управляют из вне

    Правильный: О том через какие точки модуля (класса) может произойти инъекция зависимости

  13. Расскажите о чем буква S в акрониме SOLID

    Мой: Принцип единой обязанности. Суть его в том, что класс не должен быть ответственен более чем за одну явно логически выраженную задачу в нем, иначе одна задача может неявно, через общий код, влиять на другую. Например акторы, группы пользователей, если класс решает задачу связанную с ними и доступными ресурсами, велика вероятность, что при изменении логии для админов изменится логика для остальных.

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

  14. Чем паттерн Repository отличается от UnitOfWork?
    Мой:

    UnitOfWork накапливает изменения происходящие в программной модели и применяется их сразу за одно действие не создавая долгой транзакции.

    Репозиторий это в моем понимании инверсия зависимости для бизнес логики, реализации методов для доступа к данным и методов открытия и закрытия транзакции.

    Правильный: Первый предоставляет доступ к данным, а второй абстрактная транзакция

Итак, в 3м у меня оказалось правильнее «правильного», если задать GCSettings.LargeObjectHeapCompactionMode, то loh так же сожмется.

В 4 "правильный" ответ не содержит саму суть почему строки куда то там перемещаются? Нет информации то что это именно для одинаковых.

5е опять у меня более полное объяснение. Это частая замена конкатенации.

В 6м, согласен, подловили, мы привыкли, что в итоге ienumerable материализуется. И часто упускаем эту "ленивость". (спасибо райдеру что подсвечивает когда материализация повторяется)

В 9м я ответил предпочтительный запуск, а насчет "через вызов асинхронного метода без ожидания" сомнительно. Ну ок, частично ответил, там действительно есть фабрика и надо было и про нее написать.

10, тут без комментариев, все помнят что потоки для задач из ThreadPool, но планирует это шедулер, ошибся, поспешил, справедливо.

12, "правильный" ответ говорил куда внедрять, конструктор, свойство, но это не объяснение, считаю "правильный" ответ далек от правильности. Суть именно в том что я написал, внешние механизмы управляют этим.

13, очень специфическая формулировка в "правильном" ответе, все же принято говорить про причину изменения, что является ей. Или ответственность класса. То что бизнес процесс имеет части это неоспоримо, но какие это части и кто их information expert?

14, Вот тут "правильность" вообще непонятна. Unit of Work наоборот придуман, что бы избежать долгой транзакции и мелких действий, он накапливает изменения в предметной модели и разом их сохраняет. А репозиторий открывает транзакцию выполняет какие то действия с бд и коммитит ее.

"UnitOfWork" = "абстрактная транзакция" это конечно жестко, даже Fowler бы не прошел такой простой опросник.

В общем мне интересно мнение еще кого то по этому поводу.

Комментарии (29)


  1. Tzimie
    05.07.2023 17:46
    +13

    В итоге ни одного правильного ответа

    Например, вы ответили "куча и стек", а правильный ответ - "стек и куча"


    1. Ascar Автор
      05.07.2023 17:46
      +6

      "Куча, стек" вообще упустил букву "и", стыд то какой...


  1. dopusteam
    05.07.2023 17:46
    +8

    Перемещение строк в спецаильную облсть памяти для препятствия излишнему копированию

    Что это за опросник такой странный и зачем о нем писать на хабре?


    1. Ascar Автор
      05.07.2023 17:46

      Хотел узнать еще мнений, ведь его кто то же да проходит.


      1. dopusteam
        05.07.2023 17:46

        Вроде как хабр не для этого.

        И с чего вы взяли, что этот опросник кто то проходит?


        1. Ascar Автор
          05.07.2023 17:46

          Хабр для многого, видите тег "мнение" и "проверка знаний"?

          Механизм оценки профпригодности с нулевой пропускаемостью не имеет смысла.


          1. dopusteam
            05.07.2023 17:46

            Вы так и не ответили, что это за опросник и кто его, по-вашему, проходит?

            В чем ценность статьи?


            1. Ascar Автор
              05.07.2023 17:46

              В статье и в комменте ответил, слово "эйчар" что то говорит для вас?

              В чем ценность вашего комментария?


              1. dopusteam
                05.07.2023 17:46
                -1

                От каких эйчаров? Что за компания? Вы специально игнорите и не отвечаете?

                Я пытаюсь понять зачем вы написали статью, а вы не отвечаете, вот в чем смысл


                1. Ascar Автор
                  05.07.2023 17:46

                  А вы буйный пациент однако.

                  1. А какие у вас бывают они? Дайте классификацию и я отвечу вам

                  2. Статья не про компанию. Тематика не та.

                  3. Я вас не игнорю, на все был дан ответ, вопрос на ваш ответ тоже ответ.

                  Я сказал зачем, мне интересно мнение. Возможно кто то найдет еще какой то смысл в статье. Если вы не видите смысла в каких то статьях, то не читайте, минусуйте, это сообщество, а не платформа для лично вас. Перед вами отчитываться никто не должен, понимаете?


                  1. dopusteam
                    05.07.2023 17:46

                    Я правильно понимаю, что вы не можете прямо ответить в чем ценность вашей статьи, для кого то кроме вас? Хотя бы ссылкой, если вдруг "уже отвечали"


                    1. Ascar Автор
                      05.07.2023 17:46

                      Вы не похожи на того кто примет чью то ценности это раз. Два это, что "ценность статьи" у всех читателей своя. Три "ценность статьи" у вас не то же самое что и "зачем статья", потому что на "зачем" я уже однозначно ответил несколько раз, там не может быть разночтений.

                      Еще раз повторю, поскольку вы видимо не в состоянии прочесть сложное предложение, вам никто не обязан доказывать "ценность", даже если вы дадите свое определение ей, а у вас оно явно какое то свое.

                      Интересность текста определяется плюсами и дискуссией. Даже если статья неинтересна, как ваши заминусенные, это все равно не запрещает их тут размещать.

                      И прекратите флудить, если вас сильно что то задело, то обратитесь к администрации, возможно вам там помогут.


                      1. dopusteam
                        05.07.2023 17:46

                        Простого "нет" было бы достаточно


                      1. Ascar Автор
                        05.07.2023 17:46

                        Смешно то что "нет" не подходит к вашему вопросу.


                      1. dopusteam
                        05.07.2023 17:46

                        Я правильно понимаю, что вы не можете прямо ответить в чем ценность вашей статьи, для кого то кроме вас?

                        Уверены, что "нет" не подходит?

                        upd: Но вы правы, "нет" тут действительно не подходит)

                        Тогда простого "да" было бы достаточно


                      1. Ascar Автор
                        05.07.2023 17:46

                        Ответ "нет" означает что вы не правильно понимаете и я могу дать вам ответ. Это никак не бьется с тем что я написал до и после.

                        Ответ "да" подходит, это что что вы пытаетесь вытащить вопреки здравому смыслу.

                        Отвечаю на upd:

                        Ответ "да" невозможен. https://habr.com/ru/articles/746144/#comment_25724802


  1. freeExec
    05.07.2023 17:46
    +1

    Только надо было свои комментарии к вопросу писать сразу за ним, а не потом что думаешь о 11 вопросе, а про что это был вопрос, ну сходи посмотри.


    1. Ascar Автор
      05.07.2023 17:46

      Что бы дать читающему сформировать своё мнение, а потом показать своё.


      1. eton65
        05.07.2023 17:46
        +1

        В спойлер бы загнали.


        1. Ascar Автор
          05.07.2023 17:46

          Это идея


  1. amadonus
    05.07.2023 17:46
    +1

    и в чем практический смысл этих вопросов...


  1. spajderby
    05.07.2023 17:46
    +1

    8. Mutex позволяет обеспеспечить межпроцессую синхронизацию только если он именованный. Mutex без имени (локальный) позволяет обеспечить синхронизацию только внутри одного процесса.


    1. Ascar Автор
      05.07.2023 17:46

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


  1. Ascar Автор
    05.07.2023 17:46

    Слуйчайно коммент один отклонил с телефона. Отвечаю: опросник от эйчаров.


    1. mvv-rus
      05.07.2023 17:46
      +2

      4. Что такое интернирование строк?

      Правильный: Перемещение строк в спецаильную облсть памяти для препятствия излишнему копированию

      Этот правильный ответ — ни хрена не правильный. Почему неправильный — цитирую по книге К.Кокоса «Управление памятью в .NET», с.254:
      В памяти есть несколько мест, относящихся к интернированию строк (см.
      рис. 4.21). Главная из них – карта строковых литералов (String Literal Map), находя-
      щаяся в самом .NET Framework (в частной неуправляемой куче). Это хеш-таблица
      строк, распределенных по кластерам. Для каждой интернированной строки там
      есть отдельная запись, которая содержит вычисленный хеш и адрес записи в дру-
      гой структуре – LargeHeapHandleTable. Эта таблица описателей, которая фактически
      находится в куче больших объектов, содержит ссылки на экземпляры строк. Но
      это экземпляры «нормальных» строк, находящихся в управляемой куче. Таким
      образом, мы не можем сказать, что интернированные строки обитают в каком-то
      специальном пуле интернированных строк. Они просто регистрируются в карте
      строковых литералов и в таблице описателей.

      То есть, сами строки никуда не перемещаются.
      Значения строковых литералов, определенных в программе, тоже копируются в кучу: там в книге ниже расписано, как именно, сюда копировать поленился.
      PS Если у вас остался контакт пользователей опросника — можете им этот факт сообщить.


      1. Ascar Автор
        05.07.2023 17:46
        +1

        Да, согласен, звучит абсурдно, строка как ссылочный тип всегда в куче, неважно кто и где ее ссылку обернет.

        Думаю я просто скину им ссылку на статью)


    1. eton65
      05.07.2023 17:46
      +1

      Опросник то может и от эйчаров, только вот проверяет кто? Если они же — то это полный бред. Если разработчики — тем более (судя по замечаниям).


      1. Ascar Автор
        05.07.2023 17:46

        Мне сказали руководитель.


        1. senglory
          05.07.2023 17:46
          +1

          А как называется контора, где такие альтернативно одарённые руководители обитают?