面试问题:IDisposable难以理解吗?

Jon*_*len 20 .net

我最近一直在采访很多.NET程序员,但我还没有遇到过知道IDisposable是什么或者它用于什么的人.期望有4到6年经验的人知道这一点真的不合理吗?

Iga*_*nik 31

不,谢谢.如果他们不知道IDisposable,他们不了解.NET中的对象生命周期,因此可以安全地假设他们不知道如何GC工作.对于声称拥有4 - 6年经验的人来说,他要么是"拖放式"开发人员,要么是骗子.无论哪种方式,没有雇用.

  • 好吧,他可以有相同的第一年经验4-6倍:) (13认同)
  • @Kevin:你的头上钉了一针.很多程序员都没有学到任何东西,只需要知道编写工作(但编写得很糟糕)的软件. (3认同)

Aar*_*ght 13

期待有人理解并不是没有道理的IDisposable,但我也注意到Stack Overflow上的IDisposable问题 - 主题问题仅次于Linq问题的发生频率.很明显,很少有程序员真正理解他们应该做的一切,而且老实说我不确定为什么; 它不可能是他们都是不合格的,我认为这只是对它的教育太少了.

对于我们这些谁从Delphi或C++来了,不得不做手工资源管理在过去,这是令人眼花缭乱的明显,但对人谁在Java或Python甚至VB了解到,没有这么多.如果忘记Dispose某个对象,你永远不会收到编译器警告; 如果你在.NET编程中自学成才,你可以很容易地多年没有意识到这实际上是一个问题.

因此,考虑到这一点,如果他们不理解其中的含义和正确用法,我不会立即在面试中失败IDisposable,但我认为这是一个红旗,就像许多其他事情一样.它不像(例如)不知道如何遍历树结构或无法编写FizzBu​​zz那么糟糕.

我认为这是一个很好的问题,如果有人以前从未听说过,我可能会给出一个非常快速的解释,然后提出一个后续问题:".NET垃圾收集器只能管理内存. IDisposable让你明确免费的其他资源.你能想到任何属于这一类的资源吗?" 如果他们也无法回答这个问题,那么我会担心,因为它不仅表明.NET Framework中的特定接口,而且表示资源管理一般都是无知的.即使你在学校教Java,你也应该明白你需要关闭你打开的文件和连接.

另一个红旗,也许是一个更大的红旗,如果有人说你需要把每一个IDisposable放在一个using区块中但是无法解释为什么或列出规则的任何例外(即工厂方法).这对我来说更糟糕,因为它可能表明了货物崇拜的编程倾向.

所以继续问这个问题,但也许会缓和你的反应.如果有人无法回答,请不要立即结束面试.考虑到.NET程序员实际上从来没有必须学习这个以编写功能(尽管有错误)的软件.


kem*_*002 8

我不这么认为.如果你不明白IDisposable是什么,你怎么能恰当地理解何时使用using声明?

我的猜测是很多人都知道将某些代码放在使用语句中,但不知道为什么这是相当可怕的.

  • Cargo cult编程随处可见.我们也不应该对.NET发生这种情况感到惊讶. (4认同)

Bri*_*sen 7

我希望具有这种经验水平的开发人员能够了解IDisposable.但是,如果您想深入了解所有细节,那么这是一个复杂的主题.几年前乔·达菲写了一篇关于这个主题的相当精细的文章.我不希望所有开发人员能够涵盖该帖子中的所有血腥细节.