2010-05-17 168 views
20

最近我一直在採訪很多.NET程序員,並且我還沒有遇到知道IDisposable是什麼或者它用於什麼的人。期望擁有4 - 6年經驗的人知道這一點真的不合理嗎?面試問題:IDisposable很難理解嗎?

+2

在一個相關的,但略有不同的筆記,我經常聽到在面試中詢問候選人描述「處置模式」。雖然我知道並使用了配置模式,但我發現它並不是開發人員質量或深度的有用指標。部分原因在於,如果您實施* IDisposable(而不是*使用* it - 雙關意圖),那麼您只需要這樣做,部分原因在於它無論如何都不是一個好的模式。 – hemp 2010-05-17 23:55:30

回答

32

不,對不起。如果他們不知道IDisposable,他們不明白.NET中的對象生命週期,所以可以假定他們不知道GC如何工作。對於聲稱擁有4-6年經驗的人來說,他可能是一名「拖放式」開發人員,或者是一個騙子。無論哪種方式,沒有僱用。

+12

那麼,他可以有相同的第一年的經驗4-6倍:) – kemiller2002 2010-05-18 01:12:00

+3

@凱文:你擊中了頭部的指甲。很多程序員經歷了很多年,沒有學到任何東西,他們需要知道編寫工作(但寫得不好)的軟件。 – 2010-05-18 20:37:01

+1

-1,這個答案只是假設開發者不知道IDisposable,他/她不能生產 – RollRoll 2013-03-25 00:19:52

8

我不這麼認爲。如果您不明白什麼是IDisposable,那麼您如何正確理解何時使用using聲明?

我的猜測是,很多人都知道使用某些代碼來使用語句,但不知道爲什麼這是相當可怕的。

+4

貨物崇拜編程無處不在。我們也不應該對.NET發生的事情感到驚訝。 – Oded 2010-05-17 21:04:56

+1

哦,別誤會我的意思,我並不感到驚訝。當你看代碼並且不得不問自己:「他們是否真的想要這麼做,或者這樣做了,因爲他們不知道不這麼做?」有時候會讓人有點難堪。 – kemiller2002 2010-05-17 21:06:34

+0

@Oded,我不得不大聲笑 - 沒有很多人知道什麼是貨物崇拜... – code4life 2010-05-19 21:00:04

2

我很驚訝IDisposable的知識太低。只要有必須關閉的資源,並且不使用using語句,就必須使用IDisposable。

+4

實際上,你必須使用* implements * IDisposable的類。而且由於我見過或使用過的大多數每次都是一次性的,所以我們可以忘記Dispose(),永遠不會注意,也沒有任何問題。 – cHao 2010-05-17 21:35:21

2

今天剛剛接受了面試,希望我有過這樣的問題!所有程序員都應該知道IDisposable。它可以說是因爲using聲明而理解的最重要的界面。

我覺得有4-6年經驗的程序員不知道這件事是不可想象的。

7

我希望具有該級別經驗的開發人員知道IDisposable。但是,如果您想深入瞭解所有細節,這是一個複雜的主題。 Joe Duffy wrote a rather elaborate post on the subject some years ago。我不希望所有開發人員都能夠涵蓋該帖子中的所有血腥細節。

+0

我只是在談論一個基本的理解,我同意你不應該在面試環境中談論達菲的帖子。 – 2010-05-18 01:12:08

1

是的,這是不合理的。很少有大學年齡段+ 3至5年的程序員(總是首選的候選人)曾經寫過純粹的Win32代碼來了解「非託管資源」的外觀。 Java在大學時代通常不會出現,Java是當今的教學語言,它是一種不具有相同模式的語言。

有大量已經編寫.NET代碼多年,運生產代碼,而不斷處置任何.NET程序員。我推薦其他面試問題:

  • 爲什麼Java不需要IDisposable模式?
  • 爲什麼.NET程序員逃不掉任何東西?

這測試洞察力而不是死記硬背的編程。也許更適合第二次面試?

+2

我會授予一位開發者的主要經驗來自其他語言,但他們可能沒有在IDisposable中運行,但這也意味着他們不是**(但)是一名有能力的.NET開發人員。這是否應該被用作招聘標準是一個完全不同的主題。 任何聲稱對.NET有着「多年」經驗的人都不瞭解垃圾收集的基礎知識,特別是在申請.NET作業時,對.NET有非常深入的理解。因此,他們要麼誇大其經驗,要麼可能不是質量開發商喬納森尋求的。 – hemp 2010-05-17 23:51:01

+0

我聘請了具有先天馬感的人員,知道如何將現實生活中的問題轉化爲算法。 booky的知識從來都不是問題,很容易被代碼審查覆蓋。馬的感覺和經驗是弱聯繫的。 – 2010-05-18 00:41:54

+1

從未使用過處置的.NET程序員也是一位從未處理過數據庫或文件訪問的程序員。在我工作的地方,這兩者都是明確的無人僱用。 – 2010-05-18 01:53:58

13

這不是不合理的期望有人瞭解IDisposable,但我也注意到,在這裏對堆棧溢出,IDisposable爲主題的問題,只有到LINQ的問題是第二次在其發生的頻率而言。很明顯,很少有程序員真正理解他們應該做的所有事情,而且我真的不知道爲什麼;它不能是他們所有不合格,我認爲這只是對它的教育太少。

對於我們這些誰從Delphi或C++來了,不得不做手工資源管理在過去,這是激將法明顯,但對人誰在Java或Python甚至VB瞭解到,沒有這麼多。如果忘記Dispose對象,則永遠不會收到編譯器警告;如果你是在.NET編程中自學成才的話,那麼你可以很容易地去多年,而不會意識到它實際上是一個問題。

考慮到這一點

所以,我不會馬上失敗人在接受採訪時,如果他們不明白其中的含義和IDisposable正確使用,但我認爲這是一個紅旗,像許多其他的東西。它並不像(例如)不知道如何遍歷樹結構或無法編寫FizzBu​​zz那麼糟糕。

我認爲這是一個很好的問題,如果有人以前從來沒有聽說過,我可能會給出一個非常快速的解釋,然後問一個後續問題:「.NET垃圾收集器只能管理內存IDisposable可以讓你明確地釋放其他種類的資源,你能想到屬於這個類別的任何資源嗎?「如果他們不能回答問題,然後我會擔心,因爲這將表明不僅對.NET Framework中的特定接口,而且對一般資源管理的無知。即使你在學校教過Java,你也應該明白你需要關閉你打開的文件和連接。

另一個紅旗,也許是更大的一個,如果有人說你需要把每個IDisposable放在using塊中,但不能解釋爲什麼或列出規則的任何例外(即工廠方法)。這對我來說更糟糕,因爲這可能表明貨運崇拜節目的傾向。因此,不斷詢問這個問題,但也許會緩和你的反應。如果有人無法回答,請不要立即結束面試。考慮一個.NET程序員從來沒有真的來學習這個,以編寫正常運行(雖然有問題)的軟件。