最近找工作面的面试题目汇总(一)
網址:http://www.cnblogs.com/renyiqiu/p/6504839.html
目錄
- 1.抽象類的介紹,抽象類里的虛函數和抽象函數
- 參考文檔
- 抽象類特征
- 抽象方法特征
- 2.虛函數和抽象方法
- 參考文檔
- 虛方法的特點
- 虛方法(virtual)和抽象方法(abstract)的區別
- 3.靜態類和靜態類成員
- 參考文檔
- (一).C#靜態方法與非靜態方法比較一、C#靜態成員
- (二).C#靜態方法與非靜態方法比較二、C#靜態方法
- (三).C#靜態方法與非靜態方法比較三、C#靜態方法是一種特殊的成員方法
- (四).C#靜態方法與非靜態方法比較四、C#靜態方法中獲取類的名稱
- 4.靜態構造函數
- 5.接口和抽象類
- 參考文檔
- ①.抽象類和接口的區別:
- ②.抽象類和接口的使用
- 6.mvc和webform
- 7.mvc的filter
- 8.項目中前端用了啥框架,怎么實現,以及如何自定義jquery插件
?
正文
簡介
最近面了幾間公司,每次面試完我都特意把題目記住并寫在云筆記上,用于寫博客文章,也為了給新手們補補基礎。
回到頂部1.抽象類的介紹,抽象類里的虛函數和抽象函數
參考文檔
abstract(C# 參考)
簡介
不能初始化的類被叫做抽象類,它們只提供部分實現,但是另一個類可以繼承它并且能創建它們
的實例。抽象類能夠被用于類,方法,屬性,索引器和事件,使用abstract 在一個類聲明中表示該類傾向要作為其它類的基類,成員被標示成abstract,或被包含進一個抽象類,必須被其派生類實現。
一個抽象類必須為所有的接口成員提供實現
一個用于實現接口的抽象類可能把接口方法安排到抽象方法上。例如
interface I {void M(); } abstract class C: I { public abstract void M(); }抽象類特征
抽象方法特征
*一個抽象屬性能夠通過派生類使用 override 實現.
2.虛函數和抽象方法
參考文檔
虛方法(virtual)和抽象方法(abstract)的區別
虛方法與非虛方法的最大不同是,虛方法的實現可以由派生類所取代,這種取代是通過方法的重寫實現的。
虛方法的特點
其中那個申明時定義的類叫申明類,那個執行時實例化的類叫實例類。
如:A a =new B(); 其中A是申明類,B是實例類。
- 當調用一個對象的函數時,系統會直接去檢查這個對象申明定義的類,即申明類,看所調用的函數是否為虛函數;
- 如果不是虛函數,那么它就直接執行該函數。而如果是一個虛函數,那么這個時候它就不會立刻執行該函數了,而是開始檢查對象的實例類。
- 在這個實例類里,他會檢查這個實例類的定義中是否有實現該虛函數或者重新實現該虛函數(通過override關鍵字)的方法,如果有,它就不會再找了,而是馬上執行該實例類中實現的虛函數的方法。而如果沒有的話,系統就會不停地往上找實例類的父類,并對父類重復剛才在實例類里的檢查,直到找到第一個重載了該虛函數的父類為止,然后執行該父類里重載后的函數。
虛方法(virtual)和抽象方法(abstract)的區別
編譯器會報錯:
Main.cs(10): 'VSTest.Animal.Sleep()' is abstract but it is contained in nonabstract class 'VSTest.Animal'
Main.cs(11): 'VSTest.Animal.Eat()' is abstract but it is contained in nonabstract class 'VSTest.Animal'
編譯器會報錯:Main.cs(14): 'VSTest.Cat' does not implement inherited abstract member 'VSTest.Animal.Eat()'
因為我們沒有實現抽象類中所有抽象方法。
3.靜態類和靜態類成員
參考文檔
(一).C#靜態方法與非靜態方法比較一、C#靜態成員
- 靜態成員屬于類所有,非靜態成員屬于類的實例所有。
- 每創建一個類的實例,都會在內存中為非靜態成員新分配一塊存儲;非靜態成員屬于類所有,為各個類的實例所公用,無論類創建了多少實例;類的靜態成員在內存中只占同一塊區域。
(二).C#靜態方法與非靜態方法比較二、C#靜態方法
- C#靜態方法屬于類所有,類實例化前即可使用。
- 非靜態方法可以訪問類中的任何成員,靜態方法只能訪問類中的靜態成員。
- 因為靜態方法在類實例化前就可以使用,而類中的非靜態變量必須在實例化之后才能分配內存,這樣,C#靜態方法調用時無法判斷非靜態變量使用的內存地址。所以無法使用。而靜態變量的地址對類來說是固定的,故可以使用。
(三).C#靜態方法與非靜態方法比較三、C#靜態方法是一種特殊的成員方法
它不屬于類的某一個具體的實例,而是屬于類本身。所以對靜態方法不需要首先創建一個類的實例,而是采用類名.靜態方法的格式 。
-
static方法是類中的一個成員方法,屬于整個類,即不用創建任何對象也可以直接調用!
static內部只能出現static變量和其他static方法!而且static方法中還不能使用this....等關鍵字..因為它是屬于整個類!
- 靜態方法效率上要比實例化高,靜態方法的缺點是不自動進行銷毀,而實例化的則可以做銷毀。
- 靜態方法和靜態變量創建后始終使用同一塊內存,而使用實例的方式會創建多個內存.
-
C#中的方法有兩種:實例方法,靜態方法.
(四).C#靜態方法與非靜態方法比較四、C#靜態方法中獲取類的名稱
靜態方法中用:
string className = System.Reflection.MethodBase. GetCurrentMethod().ReflectedType.FullName;非靜態方法中還可以用:
string className = this.GetType().FullName; 回到頂部4.靜態構造函數
定義:靜態構造函數用于初始化任何 靜態 數據,或用于執行僅需執行一次的特定操作。 在創建第一個實例或引用任何靜態成員之前,將自動調用靜態構造函數。
靜態構造函數具有以下特點:
5.接口和抽象類
參考文檔
①.抽象類和接口的區別:
盡量避免使用繼承來實現組建功能,而是使用黑箱復用,即對象組合。因為繼承的層次增多,造成最直接的后果就是當你調用這個類群中某一類,就必須把他們全部加載到棧中!后果可想而知。(結合堆棧原理理解)。同時,有心的朋友可以留意到微軟在構建一個類時,很多時候用到了對象組合的方法。比如 asp.net中,Page類,有Server Request等屬性,但其實他們都是某個類的對象。使用Page類的這個對象來調用另外的類的方法和屬性,這個是非常基本的一個設計原則;
如果抽象類實現接口,則可以把接口中方法映射到抽象類中作為抽象方法而不必實現,而在抽象類的子類中實現接口中方法。
②.抽象類和接口的使用
以下是我在網上看到的幾個形象比喻。
1.飛機會飛,鳥會飛,他們都繼承了同一個接口“飛”;但是F22屬于飛機抽象類,鴿子屬于鳥抽象類;
2. 就像鐵門木門都是門(抽象類),你想要個門我給不了(不能實例化),但我可以給你個具體的鐵門或木門(多態);而且只能是門,你不能說它是窗(單繼承),一個門可以有鎖(接口)也可以有門鈴(多實現)。門(抽象類)定義了你是什么,接口(鎖)規定了你能做什么(一個接口最好只能做一件事,你不能要求鎖也能發出聲音吧(接口污染))。
6.mvc和webform
7.mvc的filter
8.項目中前端用了啥框架,怎么實現,以及如何自定義jquery插件
學習閉包:
(1).學習Javascript閉包(Closure)
(2).javascript的閉包
(3).圖解閉包
當你自認為做出了不錯的功能但描述出來時又支支吾吾的時候,不要為自己說不出來而懊惱,因為不是你發揮有問題,更不要向別人解釋用了啥高大上插件,別讓自己成為接口程序員,請靜下心回去補補基礎。總結
以上是生活随笔為你收集整理的最近找工作面的面试题目汇总(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux的strace命令(详解)
- 下一篇: GCC优化选项:一般的文档里不容易找到的