Подтвердить что ты не робот

Вопросы для интервью: трудно ли понять IDisposable?

В последнее время я много интервьюировал многих программистов .NET, и я не встречал того, кто знает, что такое IDisposable или для чего он используется. Неужели неразумно ожидать, что кто-то с опытом 4-6 лет узнает об этом?

4b9b3361

Ответ 1

Нет, извините. Если они не знают IDisposable, они не понимают время жизни объекта в .NET, поэтому можно с уверенностью предположить, что они не знают, как работает GC. Для тех, кто претендует на 4-6 лет опыта, он либо разработчик "перетаскивания", либо лжец. В любом случае, нет аренды.

Ответ 2

Не так уж и сложно ожидать, что кто-то поймет IDisposable, но я также заметил, что здесь, в Stack Overflow, IDisposable - эти вопросы уступают только вопросам Linq с точки зрения их частоты появления. Совершенно очевидно, что слишком мало программистов действительно понимают все, что им нужно, и я честно не знаю, почему; не может быть, что они все неквалифицированы, я думаю, что это слишком мало образования.

Для тех из нас, кто приехал из Delphi или С++, и в прошлом он занимался ручным управлением ресурсами, это ослепительно очевидно, но для людей, которые изучали Java или Python или даже VB, не так много. И вы никогда не получите предупреждение о компиляторе, если вы забудете Dispose объект; если вы участвуете в обучении по программированию .NET, вы можете легко пойти на годы, не осознавая, что это на самом деле проблема.

Итак, имея в виду это, я не стал бы ни с кем не отвечать в интервью, если бы они не поняли смысл и правильное использование IDisposable, но я бы назвал его красным флагом, как и многие другие вещи. Это не так плохо, как (например), не зная, как перемещаться по древовидной структуре или не удается написать FizzBuzz.

Я думаю, что это хороший вопрос, и если кто-то никогда не слышал об этом раньше, я бы, вероятно, дал очень быстрое объяснение, а затем задал следующий вопрос: "Сборщик мусора .NET может управлять только памятью. IDisposable позволяет вам явно освобождать другие виды ресурсов. Можете ли вы придумать какие-либо ресурсы, которые попадут в эту категорию?" Если они не могут ответить на этот вопрос, то я бы волновался, потому что это указывало бы на незнание не только определенного интерфейса в .NET Framework, но и управления ресурсами в целом. Даже если вы учили Java в школе, вы должны понимать, что вам нужно закрыть файлы и соединения, которые вы открываете.

Еще один красный флаг, возможно, еще один, если кто-то говорит, что вам нужно поместить каждый IDisposable в блок using, но не может объяснить, почему или перечислить любые исключения из правила (т.е. factory методы). Это еще хуже для меня, потому что это может быть признаком тенденций в области кулинарного искусства.

Так что продолжайте задавать вопрос, но, возможно, настройте свои ответы. Не завершайте интервью сразу, если кто-то не может ответить на него. Считайте, что .NET-программисту никогда не нужно это изучать, чтобы написать функционирующее (хотя и багги) программное обеспечение.

Ответ 3

Я бы так не подумал. Если вы не понимаете, что такое IDisposable, как вы можете правильно понять, когда использовать инструкцию using?

Мое предположение заключается в том, что многие люди знают, что нужно использовать определенный код при использовании утверждений, но не знаете, почему это довольно страшно.

Ответ 4

Я бы ожидал, что разработчики с таким уровнем опыта будут знать IDisposable. Тем не менее, это сложный вопрос, если вы хотите вникнуть во все детали. Джо Даффи написал довольно сложный пост по этому вопросу несколько лет назад. Я бы не ожидал, что все разработчики смогут охватить все детали gory в этом сообщении.

Ответ 5

Я очень удивлен, что знание IDisposable слишком мало. Всякий раз, когда у вас есть ресурс, который должен быть закрыт, и вы не используете инструкцию using, вы должны использовать IDisposable.

Ответ 6

Имея только что проведенное собеседование сегодня, мне жаль, что меня не задали такой вопрос! Все программисты должны знать о IDisposable. Это, возможно, самый важный интерфейс для понимания из-за инструкции using.

Мне кажется немыслимым, что программист с опытом 4-6 лет не знает об этом.

Ответ 7

Да, это необоснованно. Немногие программисты, достигшие возраста в возрасте от 3 до 5 лет (всегда предпочитаемый кандидат), когда-либо писали чистый код Win32, чтобы узнать, как выглядит "неуправляемый ресурс". Обычно в истории колледжей они не появляются, в настоящее время Java является языком обучения, язык которого не имеет одинакового шаблона.

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

  • Почему Java не нуждается в шаблоне IDisposable?
  • Почему .NET-программисты уходят, чтобы никогда ничего не использовать?

Это тесты для понимания, а не для программирования. Возможно, более подходящим для второго интервью?