說起來我也面試過相當數量的.NET(包括C#,後文不重複)程式員了,有的通過電話,有的面談。後來發現,其實提的問題來來回回也就那麼幾個。這些問題有的已經有十年曆史了,至少也有三年。我想對于一個“不錯”的.NET程式員來說,在簡單的提示下絕大部分問題應該可以“對答如流”。可能您也會覺得這些太細節,真要追究起來似乎也大都不是必須的,無視這些照樣可以寫程式,做網站,賺工資,但是我不會滿足于成為(包括招聘)這樣的程式員,暫時也懶得解釋掌握這些東西的益處和重要性。 每個人都有自己的看法, 一切就看您自己的選擇了。
那麼現在就開始吧。
什麼是.NET?什麼是CLI?什麼是CLR?IL是什麼?JIT是什麼,它是如何工作的?GC是什麼,簡述一下GC的工作方式?
類(class)和結構(struct)的差別是什麼?它們對性能有影響嗎?.NET BCL裡有哪些是類(結構),為什麼它們不是結構(類)?在自定義類型時,您如何選擇是類還是結構?
在.NET程式運作過程中,什麼是堆,什麼是棧?什麼情況下會在堆(棧)上配置設定資料?它們有性能上的差別嗎?“結構”對象可能配置設定在堆上嗎?什麼情況下會發生,有什麼需要注意的嗎?
泛型的作用是什麼?它有什麼優勢?它對性能有影響嗎?它在執行時的行為是什麼?.NET BCL中有哪些泛型類型?舉例說明平時程式設計中您定義的泛型類型。
異常的作用是什麼?.NET BCL中有哪些常見的異常?在代碼中您是如何捕獲/處理異常的?在“catch (ex)”中,“throw”和“throw ex”有什麼差別?您會如何設計異常的結構,什麼情況下您會抛出異常?
List<T>和T[]的差別是什麼,平時你如何進行選擇?Dictionary<TKey, TValue>是做什麼的?.NET BCL中還有哪些常用的容器?它們分别是如何實作的(哪種資料結構)?分别是适用于哪些場景?
抽象類和接口有什麼差別?使用時有什麼需要注意的嗎?如何選擇是定義一個“完全抽象”的抽象類,還是接口?什麼是接口的“顯式實作”?為什麼說它很重要?
字元串是引用類型類型還是結構類型?它和普通的引用類型相比有什麼特别的地方嗎?使用字元串時有什麼需要注意的地方?為什麼說StringBuilder比較高效?在連接配接多個字元串時,它無論何時都比直接相加更高效嗎?
如何高效地進行數組複制?“二維數組”和“數組的數組”有什麼差別?在使用雙重循環周遊一個二維數組時,如何選擇内外層的周遊順序?
什麼是元程式設計,.NET有哪些元程式設計的手段和場景?什麼是反射?能否舉一些反射的常用場景?有人說反射性能較差,您怎麼看待這個問題?有什麼辦法可以提高反射的性能嗎?
委托是什麼?匿名方法是什麼?在C# 3.0中,Lambda表達式是什麼?擴充方法是什麼?LINQ是什麼?您覺得C# 3.0中還有哪些重要的特性,它們帶來了什麼優勢?BCL中哪些類庫和這些特性有關?您平時最常用哪些?
工作之外您看哪些技術相關的書、網站、社群、項目等等?您還接觸哪些.NET以外的技術,能和.NET或.NET中有針對性的部分做個對比嗎?
我并不擔心大家知道這些問題,而且我可以表示以後的面試估計也逃不開這些。如果您有某些意向,做些針對性的準備可能也是不錯的。當然,既然是面試,就會有“随機應變”,你我都一樣。我有自信可以在不斷追問下發現到底是“真材實料”還是“臨時抱佛腳”。
您覺得還有哪些問題值得補充呢?
本文轉自cnn23711151CTO部落格,原文連結:http://blog.51cto.com/cnn237111/508394 ,如需轉載請自行聯系原作者