Только что мне предложили пройти анкету с вопросами по c#, ну я быстро ответил и довольный отправил его эйчару. Удивило потом то что я оказывается мало на что ответил правильно. Было странно, вопросы то вроде простые, ну я начал разбираться и сравнивать правильные ответы с неправильными. Итак вот что было:
-
На какие сегменты делится память в .NET?
Мой: Куча, стек
Правильный: На стек и кучу
-
Сколько поколений внутри кучи малых объектов?
Мой: 3
Правильный: 3 (0, 1, 2)
-
В чем разница алгоритмов сборки кучи малых и больших объектов?
Мой: При сборке малых она сжимается, дефрагментируется, при сборке loh остаются "дыры", но при указании нужного параметра и там можно запустить сжатие.
Правильный: В наличие у кучи малых объектов дефрагментации
-
Что такое интернирование строк?
Мой: Оптимизация когда все одинаковые строки заменяются одним объектом строкой.
Правильный: Перемещение строк в спецаильную облсть памяти для препятствия излишнему копированию
-
Что такое StringBuilder?
Мой: Построитель строк, более оптимизирован чем обычная конкатенация, выделяется меньше объектов строк.
Правильный: Способ оптимизации построения больших строк
-
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
-
Во что разворачивается конструкция lock?
Мой: monitor
Правильный: Monitor.Enter и Monitor.Exit
-
Чем Monitor отличается от Mutex?
Мой: mutex сквозной для ОС, монитор в рамках процесса
Правильный: Первый гибридный и не дает защиты на межпроцессном уровне, второй уровня ядра и дает блокировку между процессами
-
Как запустить Task?
Мой: .Run( => ...)Правильный: Через методы Run, StartNew и через вызов асинхронного метода без ожидания
-
Кто управляет потоками на кготорых запускаются Task'и?
Мой: ThreadPoolПравильный: TaskScheduler
-
В чем разница между Task.WaitAll и Task.WhenAll?
Мой: второй вариант асинхронный, можно эвейтить, первый блокирует поток.
Правильный: В том что один позволяет запускать с блокировкой потоков, а второй в асинхронном режиме
-
О чем паттерн Dependency Injection?
Мой: Суть в том что конструирование объекта и его временем жизни управляют из вне
Правильный: О том через какие точки модуля (класса) может произойти инъекция зависимости
-
Расскажите о чем буква S в акрониме SOLID
Мой: Принцип единой обязанности. Суть его в том, что класс не должен быть ответственен более чем за одну явно логически выраженную задачу в нем, иначе одна задача может неявно, через общий код, влиять на другую. Например акторы, группы пользователей, если класс решает задачу связанную с ними и доступными ресурсами, велика вероятность, что при изменении логии для админов изменится логика для остальных.
Правильный: О том что каждый модуль должен выполнять свою часть бизнес процесса
-
Чем паттерн 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)
dopusteam
05.07.2023 17:46+8Перемещение строк в спецаильную облсть памяти для препятствия излишнему копированию
Что это за опросник такой странный и зачем о нем писать на хабре?
Ascar Автор
05.07.2023 17:46Хотел узнать еще мнений, ведь его кто то же да проходит.
dopusteam
05.07.2023 17:46Вроде как хабр не для этого.
И с чего вы взяли, что этот опросник кто то проходит?
Ascar Автор
05.07.2023 17:46Хабр для многого, видите тег "мнение" и "проверка знаний"?
Механизм оценки профпригодности с нулевой пропускаемостью не имеет смысла.
dopusteam
05.07.2023 17:46Вы так и не ответили, что это за опросник и кто его, по-вашему, проходит?
В чем ценность статьи?
Ascar Автор
05.07.2023 17:46В статье и в комменте ответил, слово "эйчар" что то говорит для вас?
В чем ценность вашего комментария?
dopusteam
05.07.2023 17:46-1От каких эйчаров? Что за компания? Вы специально игнорите и не отвечаете?
Я пытаюсь понять зачем вы написали статью, а вы не отвечаете, вот в чем смысл
Ascar Автор
05.07.2023 17:46А вы буйный пациент однако.
А какие у вас бывают они? Дайте классификацию и я отвечу вам
Статья не про компанию. Тематика не та.
Я вас не игнорю, на все был дан ответ, вопрос на ваш ответ тоже ответ.
Я сказал зачем, мне интересно мнение. Возможно кто то найдет еще какой то смысл в статье. Если вы не видите смысла в каких то статьях, то не читайте, минусуйте, это сообщество, а не платформа для лично вас. Перед вами отчитываться никто не должен, понимаете?
dopusteam
05.07.2023 17:46Я правильно понимаю, что вы не можете прямо ответить в чем ценность вашей статьи, для кого то кроме вас? Хотя бы ссылкой, если вдруг "уже отвечали"
Ascar Автор
05.07.2023 17:46Вы не похожи на того кто примет чью то ценности это раз. Два это, что "ценность статьи" у всех читателей своя. Три "ценность статьи" у вас не то же самое что и "зачем статья", потому что на "зачем" я уже однозначно ответил несколько раз, там не может быть разночтений.
Еще раз повторю, поскольку вы видимо не в состоянии прочесть сложное предложение, вам никто не обязан доказывать "ценность", даже если вы дадите свое определение ей, а у вас оно явно какое то свое.
Интересность текста определяется плюсами и дискуссией. Даже если статья неинтересна, как ваши заминусенные, это все равно не запрещает их тут размещать.
И прекратите флудить, если вас сильно что то задело, то обратитесь к администрации, возможно вам там помогут.
dopusteam
05.07.2023 17:46Я правильно понимаю, что вы не можете прямо ответить в чем ценность вашей статьи, для кого то кроме вас?
Уверены, что "нет" не подходит?
upd: Но вы правы, "нет" тут действительно не подходит)
Тогда простого "да" было бы достаточно
Ascar Автор
05.07.2023 17:46Ответ "нет" означает что вы не правильно понимаете и я могу дать вам ответ. Это никак не бьется с тем что я написал до и после.
Ответ "да" подходит, это что что вы пытаетесь вытащить вопреки здравому смыслу.
Отвечаю на upd:
Ответ "да" невозможен. https://habr.com/ru/articles/746144/#comment_25724802
freeExec
05.07.2023 17:46+1Только надо было свои комментарии к вопросу писать сразу за ним, а не потом что думаешь о 11 вопросе, а про что это был вопрос, ну сходи посмотри.
spajderby
05.07.2023 17:46+18. Mutex позволяет обеспеспечить межпроцессую синхронизацию только если он именованный. Mutex без имени (локальный) позволяет обеспечить синхронизацию только внутри одного процесса.
Ascar Автор
05.07.2023 17:46Слуйчайно коммент один отклонил с телефона. Отвечаю: опросник от эйчаров.
mvv-rus
05.07.2023 17:46+24. Что такое интернирование строк?
…
Правильный: Перемещение строк в спецаильную облсть памяти для препятствия излишнему копированию
Этот правильный ответ — ни хрена не правильный. Почему неправильный — цитирую по книге К.Кокоса «Управление памятью в .NET», с.254:В памяти есть несколько мест, относящихся к интернированию строк (см.
рис. 4.21). Главная из них – карта строковых литералов (String Literal Map), находя-
щаяся в самом .NET Framework (в частной неуправляемой куче). Это хеш-таблица
строк, распределенных по кластерам. Для каждой интернированной строки там
есть отдельная запись, которая содержит вычисленный хеш и адрес записи в дру-
гой структуре – LargeHeapHandleTable. Эта таблица описателей, которая фактически
находится в куче больших объектов, содержит ссылки на экземпляры строк. Но
это экземпляры «нормальных» строк, находящихся в управляемой куче. Таким
образом, мы не можем сказать, что интернированные строки обитают в каком-то
специальном пуле интернированных строк. Они просто регистрируются в карте
строковых литералов и в таблице описателей.
То есть, сами строки никуда не перемещаются.
Значения строковых литералов, определенных в программе, тоже копируются в кучу: там в книге ниже расписано, как именно, сюда копировать поленился.
PS Если у вас остался контакт пользователей опросника — можете им этот факт сообщить.Ascar Автор
05.07.2023 17:46+1Да, согласен, звучит абсурдно, строка как ссылочный тип всегда в куче, неважно кто и где ее ссылку обернет.
Думаю я просто скину им ссылку на статью)
eton65
05.07.2023 17:46+1Опросник то может и от эйчаров, только вот проверяет кто? Если они же — то это полный бред. Если разработчики — тем более (судя по замечаниям).
Tzimie
В итоге ни одного правильного ответа
Например, вы ответили "куча и стек", а правильный ответ - "стек и куча"
Ascar Автор
"Куча, стек" вообще упустил букву "и", стыд то какой...