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

时间:2010-05-17 20:59:15

标签: .net

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

7 个答案:

答案 0 :(得分:31)

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

答案 1 :(得分:13)

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

对于我们这些来自Delphi或C ++并且过去不得不进行手动资源管理的人来说,这显然是盲目,但对于那些用Java或Python甚至VB学习的人来说,没那么多。如果忘记Dispose一个对象,你永远不会收到编译器警告;如果你在.NET编程中自学成才,你可以很容易地多年没有意识到它实际上是一个问题。

所以考虑到这一点,如果他们不理解IDisposable的含义和正确用法,我不会立即失败某人接受采访,但我认为这是一个红旗,像许多其他的东西。它并不像(例如)不知道如何遍历树结构或无法编写FizzBu​​zz那样糟糕。

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

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

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

答案 2 :(得分:8)

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

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

答案 3 :(得分:7)

我希望具有这种经验水平的开发人员能够了解IDisposable。但是,如果您想深入了解所有细节,那么这是一个复杂的主题。 Joe Duffy wrote a rather elaborate post on the subject some years ago。我不希望所有开发人员能够涵盖该帖子中的所有血腥细节。

答案 4 :(得分:2)

我很惊讶IDisposable的知识太低了。只要您拥有必须关闭的资源,并且不使用using语句,就必须使用IDisposable。

答案 5 :(得分:2)

今天刚刚接受了面试,我希望我被问过这样的问题!所有程序员都应该了解IDisposable。由于using语句,它可以说是最重要的理解界面。

我发现一个有4到6年经验的程序员不知道这一点是不可想象的。

答案 6 :(得分:1)

是的,这是不合理的。很少有大学年龄+ 3到5岁的程序员(总是首选的候选人)曾编写过纯Win32代码来了解“非托管资源”是什么样的。它通常不会出现在他们的大学时代,Java是当今的教学语言,是一种不具有相同模式的语言。

有许多.NET程序员已经编写了多年的.NET代码,并且在没有曾经处理任何东西的情况下发布了生产代码。我建议其他面试问题:

  • 为什么Java不需要IDisposable模式?
  • 为什么.NET程序员从不处理任何事情就逃之夭夭?

测试洞察力而非死记硬背。也许更适合第二次采访?