哎,找工作是老夫永遠的痛!!! 廢話不多說,最近整理了一些企業常問道的理論題目,如下:
1. C#中值類型和引用類型分別有哪些?
值類型:結構體(數值類型,bool型,用戶定義的結構體),枚舉,可空類型。
引用類型:數組,用戶定義的類、接口、委托,object,字符串。
2. 談談你對EF的理解
這個可以談很多,比如說EF實現機制,最核心的是對象關系映射機制和LINQ To EF Provider,在此基礎上的緩存機制、延遲加載、對象狀態跟蹤、事務等等,從對開發者的影響上來說,EF是微軟官方的ORM框架,結束了之前各種第三方ORM混戰的局面,統一了API,這無疑是開發者的福音。EF擁有非常優雅的,基於C#/VB語言優化的API,比如原生的LINQ查詢,自然的Code First的對數據結構的定義,Fluent API方式的數據庫和關系的定義等等。VS完美支持EF並且提供了多種數據庫的適配。
3. 字段和屬性有什么區別
如果你編寫一些控件給別的開發者用,而需要給他們提供“數據綁定”這種傻瓜化的機制,那么使用屬性才可以做到。
屬性是方法而字段不是,當你用反射去掉用的時候,它們有各自的API。因為屬性是方法,所以它可以和方法那樣定義在接口中,或者被繼承和重寫,重寫屬性被ORM/AOP等框架用來注入代碼。
4. 抽象方法和虛方法的區別
抽象方法一定是虛方法,虛方法未必是抽象方法。虛方法是指可以被繼承類重寫的方法,而抽象方法是指,基類是抽象類,沒有實現它,因此必須被繼承類重寫的方法。
5. new的幾種用法
除了作為創建對象實例的關鍵字以外,new還有個罕見的用法,就是在派生類定義一個重名的同函數簽名的方法,隱藏掉基類的方法。另外就是泛型約束定義構造函數約束的時候用。
6. 什么叫做泛型
從編程的角度說是在定義類或者方法的時候省去具體的類型,由調用者來指定,類型+泛型類型合成得到真正的類型。從實現機制上說,泛型是CLR在運行時動態根據泛型類型創建的匿名類型。從OO設計的角度說,泛型體現了多態性。泛型使得程序員可以復用數據結構和算法,並且適應不同的類型,享有編譯期間的強類型檢查和語法提示。
一些經典的FCL提供的泛型類型和接口: List<T>、Dictionary<T1, T2>這個屬於復用數據結構 IComparer<T>、IEnumerable<T>這個屬於復用算法
7. 什么叫做類
就C#而言,類是對象的模板,對象是類的實例。C#是強類型語言,一切皆需要類型,除了內置的簡單類型,那些其實例為引用對象的都叫做類。C#也允許定義抽象類和密封類,以及兩者的疊加——靜態類,它們都無法實例化,其實這是編譯器的限制,本質上它們和一般的類沒有區別,是特殊情況
8. 請說明在.net中常用的幾種頁面間傳遞參數的方法,並說出他們的優缺點。
1.QueryString 傳遞一個或多個安全性要求不高或是結構簡單的數值。但是對於傳遞數組或對象的話,就不能用這個方法了
2.session(viewstate) 簡單,但易丟失 作用於用戶個人,過量的存儲會導致服務器內存資源的耗盡。
3.application 對象的作用范圍是整個全局,也就是說對所有用戶都有效。其常用的方法用Lock和UnLock
4.cookie 簡單,但可能不支持,可能被偽造 Cookie是存放在客戶端的,而session是存放在服務器端的。而且Cookie的使用要配合ASP.NET內置對象Request來使用
5.input ttype="hidden" 簡單,可能被偽造
6.url參數簡單,顯示於地址欄,長度有限
9. 接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)?
接口可以繼承接口。抽象類可以實現(implements)接口,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數。
10. 啟動一個線程是用run()還是start()?
啟動一個線程是調用start()方法,使線程所代表的虛擬處理機處於可運行狀態,這意味着它可以由JVM調度並執行。這並不意味着線程就會立即運行。run()方法可以產生必須退出的標志來停止一個線程。
11. GC是什么? 為什么要有GC?
GC是垃圾收集器。程序員不用擔心內存管理,因為垃圾收集器會自動進行管理。要請求垃圾收集,可以調用下面的方法之一: System.gc() Runtime.getRuntime().gc()
12. 什么是Web Service?
Web Service便是基於網絡的、分布式的模塊化組件,它執行特定的任務,遵守具體的技術規范,這些規范使得Web Service能與其他兼容的組件進行互操作。
13. c#中值類型和引用類型的區別
1.值類型的數據存儲在內存的棧中;引用類型的數據存儲在內存的堆中,而內存單元中只存放堆中對象的地址。
2.值類型存取速度快,引用類型存取速度慢。
3.值類型表示實際數據,引用類型表示指向存儲在內存堆中的數據的指針或引用
4.值類型繼承自System.ValueType,引用類型繼承自System.Object
5.棧的內存分配是自動釋放;而堆在.NET中會有GC來釋放
14. c#語言中,結構體和類的區別?
1.結構是實值類型(Value Types),而類則是引用類型(Reference Types)。
2.結構使用棧存儲(Stack Allocation),而類使用堆存儲(Heap Allocation)。
3.所有結構成員默認都是Public,而類的變量和常量數則默認位Private,不過其他類成員默認都是Public。
4.結構成員不能被聲明位Protected,而類成員可以。
15. BS與CS的聯系與區別。
1.C/S是客戶端需要安裝專用的客戶端軟件,B/S是客戶機上只要安裝一個瀏覽器
2.C/S 一般建立在專用的網絡上,C/S更強的適應范圍,
3.C/S比B/S更安全。
4.C/S可以控制本機的其他程序、可以讀寫本地磁盤文件、可以與硬件交互。
5.B/S很難和本地硬件、程序、文件進行交互
16. post、get的區別
1.post的參數不會顯示在瀏覽器地址欄中,get的參數會顯示在瀏覽器地址欄中
2.用post可提交較大的數據量,get提交的數據量則非常小(2k)
3.用post可進行文件的提交,而用get則不可以
17. 常用的調用WebService的方法有哪些?
1.使用WSDL.exe命令行工具。
2.使用VS.NET中的Add Web Reference菜單選項
18. try{}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執行,什么時候被執行,在return前還是后?
會執行,在return前執行。
19. 如何處理幾十萬條並發數據?
用存儲過程或事務。取得最大標識的時候同時更新..注意主鍵不是自增量方式這種方法並發的時候是不會有重復主鍵的..取得最大標識要有一個存儲過程來獲取.
20. 堆和棧的區別?
堆:一般由程序員分配釋放。用new、malloc等分配內存函數分配得到的就是在堆上
棧:由編譯器自動分配、釋放。在函數體中定義的變量通常在棧上。
21. StringBuilder 和 String 的區別?
1.StringBuilder 是可擴展的,在大量字符串拼接時使用
2.String 在進行運算時會產生一個新的實例
22. 請說明在.net中常用的幾種頁面間傳遞參數的方法,並說出他們的優缺點。
1.session(viewstate) 簡單,但易丟失application 全局
2.cookie 簡單,但可能不支持,可能被偽造
3.input type="hidden" 簡單,可能被偽造
4.url參數 簡單,顯示於地址欄,長度有限
5.數據庫 穩定,安全,但性能相對弱
23. 向服務器發送請求有幾種方式?
get,post。get一般為鏈接方式,post一般為按鈕方式
24. float f=-123.567F; int i=(int)f;i的值現在是_____?
-123。
25. 委托聲明的關鍵字是______?
delegate
26. &和&&的區別。
&是位運算符,表示按位與運算,&&是邏輯運算符,表示邏輯與(and)
27. MVC模式
MVC(Model-View-Controller)把交互系統的組成分解成模型、視圖、控制器三種部件
28. mvc的優點:
1.通過把項目分成model view和controller,使得復雜項目更加容易維護。
2.沒有使用view state和服務器表單控件,可以更方便的控制應用程序的行為
3.應用程序通過controller來控制程序請求,可以提供豐富的url重寫。
4.對單元測試的支持更加出色
5.在團隊開發模式下表現更出眾
29. MVC的不足:
(1)增加了系統結構和實現的復雜性。對於簡單的界面,嚴格遵循MVC,使模型、視圖與控制器分離,會增加結構的復雜性,並可能產生過多的更新操作,降低運行效率。
(2)視圖與控制器間的過於緊密的連接。視圖與控制器是相互分離,但確實聯系緊密的部件,視圖沒有控制器的存在,其應用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用。
(3)視圖對模型數據的低效率訪問。依據模型操作接口的不同,視圖可能需要多次調用才能獲得足夠的顯示數據。對未變化數據的不必要的頻繁訪問,也將損害操作性能。