日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

最近找工作面的面试题目汇总(一)

發(fā)布時(shí)間:2023/12/9 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 最近找工作面的面试题目汇总(一) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

網(wǎng)址:http://www.cnblogs.com/renyiqiu/p/6504839.html

目錄

  • 1.抽象類的介紹,抽象類里的虛函數(shù)和抽象函數(shù)
    • 參考文檔
    • 抽象類特征
    • 抽象方法特征
  • 2.虛函數(shù)和抽象方法
    • 參考文檔
    • 虛方法的特點(diǎn)
    • 虛方法(virtual)和抽象方法(abstract)的區(qū)別
  • 3.靜態(tài)類和靜態(tài)類成員
    • 參考文檔
    • (一).C#靜態(tài)方法與非靜態(tài)方法比較一、C#靜態(tài)成員
    • (二).C#靜態(tài)方法與非靜態(tài)方法比較二、C#靜態(tài)方法
    • (三).C#靜態(tài)方法與非靜態(tài)方法比較三、C#靜態(tài)方法是一種特殊的成員方法
    • (四).C#靜態(tài)方法與非靜態(tài)方法比較四、C#靜態(tài)方法中獲取類的名稱
  • 4.靜態(tài)構(gòu)造函數(shù)
  • 5.接口和抽象類
    • 參考文檔
    • ①.抽象類和接口的區(qū)別:
    • ②.抽象類和接口的使用
  • 6.mvc和webform
  • 7.mvc的filter
  • 8.項(xiàng)目中前端用了啥框架,怎么實(shí)現(xiàn),以及如何自定義jquery插件

?

正文

簡(jiǎn)介

最近面了幾間公司,每次面試完我都特意把題目記住并寫在云筆記上,用于寫博客文章,也為了給新手們補(bǔ)補(bǔ)基礎(chǔ)。

回到頂部

1.抽象類的介紹,抽象類里的虛函數(shù)和抽象函數(shù)

參考文檔

  • 抽象類、密封類及類成員(C# 編程指南)
  • abstract(C# 參考)

    簡(jiǎn)介

    不能初始化的類被叫做抽象類,它們只提供部分實(shí)現(xiàn),但是另一個(gè)類可以繼承它并且能創(chuàng)建它們
    的實(shí)例。抽象類能夠被用于類,方法,屬性,索引器和事件,使用abstract 在一個(gè)類聲明中表示該類傾向要作為其它類的基類,成員被標(biāo)示成abstract,或被包含進(jìn)一個(gè)抽象類,必須被其派生類實(shí)現(xiàn)。

  • 一個(gè)抽象類可以包含抽象和非抽象方法,當(dāng)一個(gè)類繼承于抽象類,那么這個(gè)派生類必須實(shí)現(xiàn)所有的,一個(gè)抽象方法是一個(gè)沒(méi)有方法體的方法。
  • 通過(guò)聲明派生類也為抽象,我們可以避免所有或特定的虛方法的實(shí)現(xiàn),這就是抽象類的部分實(shí)現(xiàn)。
  • 在C#中,一個(gè)抽象類能夠繼承另一個(gè)非抽象類,另外,繼承了基類的方法,添加新的抽象和非抽象方法是可行的。
  • 一個(gè)抽象類也能從一個(gè)接口來(lái)實(shí)現(xiàn),這種情況,我們必須為所有的方法提供方法體,這些方法是來(lái)自接口。
  • 我們不能把關(guān)鍵字abstract 和 sealed 一起用在C#中,因?yàn)橐粋€(gè)密封類不能夠被抽象。
  • 一個(gè)抽象類必須為所有的接口成員提供實(shí)現(xiàn)

  • 一個(gè)用于實(shí)現(xiàn)接口的抽象類可能把接口方法安排到抽象方法上。例如

    interface I {void M(); } abstract class C: I { public abstract void M(); }

    抽象類特征

  • 抽象類不能被實(shí)例化;
  • 抽象類可以包含抽象方法和訪問(wèn)器;
  • 不能把抽象類用密封(sealed)來(lái)修飾,那就意味著類不能被繼承,這違反抽象類被繼承的原則;
  • 一個(gè)派生于一個(gè)抽象類的非抽象類必須包括所有的繼承來(lái)的抽象方法和訪問(wèn)器的實(shí)現(xiàn);
  • 在方法和屬性中使用abstract 關(guān)鍵字意味著包含它們的實(shí)現(xiàn)
  • 抽象方法特征

  • 抽象方法是隱式的虛方法;
  • 抽象方法的聲明只能在抽象類中;
  • 因?yàn)槌橄蠓椒暶髦惶峁┮粋€(gè)無(wú)實(shí)現(xiàn)的方式,沒(méi)有方法體;
  • 方法體的實(shí)現(xiàn)被覆寫方法提供,覆寫方法是一個(gè)非抽象類的成員;
  • 抽象屬性的行為和抽象方法相像,除了不同的聲明形式。
  • 在一個(gè)靜態(tài)屬性中使用abstract 是一個(gè)錯(cuò)誤。
    *一個(gè)抽象屬性能夠通過(guò)派生類使用 override 實(shí)現(xiàn).
  • 回到頂部

    2.虛函數(shù)和抽象方法

    參考文檔

  • C#之虛函數(shù)
  • 虛方法(virtual)和抽象方法(abstract)的區(qū)別

    虛方法與非虛方法的最大不同是,虛方法的實(shí)現(xiàn)可以由派生類所取代,這種取代是通過(guò)方法的重寫實(shí)現(xiàn)的。

  • 虛方法的特點(diǎn)

  • 虛方法前不允許有static,abstract,或override修飾符;
  • 虛方法不能是私有的,因此不能使用private修飾符;
  • 我們知道一般函數(shù)在編譯時(shí)就靜態(tài)地編譯到了執(zhí)行文件中,其相對(duì)地址在程序運(yùn)行期間是不發(fā)生變化的,而虛函數(shù)在編譯期間是不被靜態(tài)編譯的,它的相對(duì)地址是不確定的,它會(huì)根據(jù)運(yùn)行時(shí)期對(duì)象實(shí)例來(lái)動(dòng)態(tài)判斷要調(diào)用的函數(shù),
    其中那個(gè)申明時(shí)定義的類叫申明類,那個(gè)執(zhí)行時(shí)實(shí)例化的類叫實(shí)例類
    如:A a =new B(); 其中A是申明類,B是實(shí)例類。
    • 當(dāng)調(diào)用一個(gè)對(duì)象的函數(shù)時(shí),系統(tǒng)會(huì)直接去檢查這個(gè)對(duì)象申明定義的類,即申明類,看所調(diào)用的函數(shù)是否為虛函數(shù);
    • 如果不是虛函數(shù),那么它就直接執(zhí)行該函數(shù)。而如果是一個(gè)虛函數(shù),那么這個(gè)時(shí)候它就不會(huì)立刻執(zhí)行該函數(shù)了,而是開(kāi)始檢查對(duì)象的實(shí)例類。
    • 在這個(gè)實(shí)例類里,他會(huì)檢查這個(gè)實(shí)例類的定義中是否有實(shí)現(xiàn)該虛函數(shù)或者重新實(shí)現(xiàn)該虛函數(shù)(通過(guò)override關(guān)鍵字)的方法,如果有,它就不會(huì)再找了,而是馬上執(zhí)行該實(shí)例類中實(shí)現(xiàn)的虛函數(shù)的方法。而如果沒(méi)有的話,系統(tǒng)就會(huì)不停地往上找實(shí)例類的父類,并對(duì)父類重復(fù)剛才在實(shí)例類里的檢查,直到找到第一個(gè)重載了該虛函數(shù)的父類為止,然后執(zhí)行該父類里重載后的函數(shù)。

    虛方法(virtual)和抽象方法(abstract)的區(qū)別

  • 虛方法必須有實(shí)現(xiàn)部分,抽象方法沒(méi)有提供實(shí)現(xiàn)部分,抽象方法是一種強(qiáng)制派生類覆蓋的方法,否則派生類將不能被實(shí)例化。如:
  • //抽象方法 public abstract class Animal { public abstract void Sleep(); public abstract void Eat(); } //虛方法 public class Animal { public virtual void Sleep(){} public virtual void Eat(){} }
  • 抽象方法只能在抽象類中聲明,虛方法不是。其實(shí)如果類包含抽象方法,那么該類也是抽象的,也必須聲明為抽象的。如:
  • public class Animal {public abstract void Sleep(); public abstract void Eat(); }

    編譯器會(huì)報(bào)錯(cuò):
    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'

  • 抽象方法必須在派生類中重寫,這一點(diǎn)跟接口類似,虛方法不必。
  • public abstract class Animal {public abstract void Sleep(); public abstract void Eat(); } public class Cat : Animal { public override void Sleep() { Console.WriteLine( "Cat is sleeping" ); } // we need implement Animal.Eat() here }

    編譯器會(huì)報(bào)錯(cuò):Main.cs(14): 'VSTest.Cat' does not implement inherited abstract member 'VSTest.Animal.Eat()'
    因?yàn)槲覀儧](méi)有實(shí)現(xiàn)抽象類中所有抽象方法。

    回到頂部

    3.靜態(tài)類和靜態(tài)類成員

    參考文檔

  • 靜態(tài)類和靜態(tài)類成員(C# 編程指南)
  • C#靜態(tài)方法與非靜態(tài)方法的比較
  • (一).C#靜態(tài)方法與非靜態(tài)方法比較一、C#靜態(tài)成員

    • 靜態(tài)成員屬于類所有,非靜態(tài)成員屬于類的實(shí)例所有。
    • 每創(chuàng)建一個(gè)類的實(shí)例,都會(huì)在內(nèi)存中為非靜態(tài)成員新分配一塊存儲(chǔ);非靜態(tài)成員屬于類所有,為各個(gè)類的實(shí)例所公用,無(wú)論類創(chuàng)建了多少實(shí)例;類的靜態(tài)成員在內(nèi)存中只占同一塊區(qū)域。

    (二).C#靜態(tài)方法與非靜態(tài)方法比較二、C#靜態(tài)方法

    • C#靜態(tài)方法屬于類所有,類實(shí)例化前即可使用。
    • 非靜態(tài)方法可以訪問(wèn)類中的任何成員,靜態(tài)方法只能訪問(wèn)類中的靜態(tài)成員
    • 因?yàn)殪o態(tài)方法在類實(shí)例化前就可以使用,而類中的非靜態(tài)變量必須在實(shí)例化之后才能分配內(nèi)存,這樣,C#靜態(tài)方法調(diào)用時(shí)無(wú)法判斷非靜態(tài)變量使用的內(nèi)存地址。所以無(wú)法使用。而靜態(tài)變量的地址對(duì)類來(lái)說(shuō)是固定的,故可以使用。

    (三).C#靜態(tài)方法與非靜態(tài)方法比較三、C#靜態(tài)方法是一種特殊的成員方法

    它不屬于類的某一個(gè)具體的實(shí)例,而是屬于類本身。所以對(duì)靜態(tài)方法不需要首先創(chuàng)建一個(gè)類的實(shí)例,而是采用類名.靜態(tài)方法的格式 。

    • static方法是類中的一個(gè)成員方法,屬于整個(gè)類,即不用創(chuàng)建任何對(duì)象也可以直接調(diào)用!

      static內(nèi)部只能出現(xiàn)static變量和其他static方法!而且static方法中還不能使用this....等關(guān)鍵字..因?yàn)樗菍儆谡麄€(gè)類!

    • 靜態(tài)方法效率上要比實(shí)例化高,靜態(tài)方法的缺點(diǎn)是不自動(dòng)進(jìn)行銷毀,而實(shí)例化的則可以做銷毀。
    • 靜態(tài)方法和靜態(tài)變量創(chuàng)建后始終使用同一塊內(nèi)存,而使用實(shí)例的方式會(huì)創(chuàng)建多個(gè)內(nèi)存.
    • C#中的方法有兩種:實(shí)例方法,靜態(tài)方法.

    (四).C#靜態(tài)方法與非靜態(tài)方法比較四、C#靜態(tài)方法中獲取類的名稱

    靜態(tài)方法中用:

    string className = System.Reflection.MethodBase. GetCurrentMethod().ReflectedType.FullName;

    非靜態(tài)方法中還可以用:

    string className = this.GetType().FullName; 回到頂部

    4.靜態(tài)構(gòu)造函數(shù)

    定義:靜態(tài)構(gòu)造函數(shù)用于初始化任何 靜態(tài) 數(shù)據(jù),或用于執(zhí)行僅需執(zhí)行一次的特定操作。 在創(chuàng)建第一個(gè)實(shí)例或引用任何靜態(tài)成員之前,將自動(dòng)調(diào)用靜態(tài)構(gòu)造函數(shù)。

    靜態(tài)構(gòu)造函數(shù)具有以下特點(diǎn):

  • 靜態(tài)構(gòu)造函數(shù)既沒(méi)有訪問(wèn)修飾符,也沒(méi)有參數(shù)。
  • 在創(chuàng)建第一個(gè)實(shí)例或引用任何靜態(tài)成員之前,將自動(dòng)調(diào)用靜態(tài)構(gòu)造函數(shù)來(lái)初始化類。
  • 無(wú)法直接調(diào)用靜態(tài)構(gòu)造函數(shù)。
  • 在程序中,用戶無(wú)法控制何時(shí)執(zhí)行靜態(tài)構(gòu)造函數(shù)。
  • 靜態(tài)構(gòu)造函數(shù)的典型用途是:當(dāng)類使用日志文件時(shí),將使用這種構(gòu)造函數(shù)向日志文件中寫入項(xiàng)。
  • 靜態(tài)構(gòu)造函數(shù)在為非托管代碼創(chuàng)建包裝類時(shí)也很有用,此時(shí)該構(gòu)造函數(shù)可以調(diào)用 LoadLibrary 方法。
  • 如果靜態(tài)構(gòu)造函數(shù)引發(fā)異常,運(yùn)行時(shí)將不會(huì)再次調(diào)用該構(gòu)造函數(shù),并且在程序運(yùn)行所在的應(yīng)用程序域的生存期內(nèi),類型將保持未初始化。
  • 回到頂部

    5.接口和抽象類

    參考文檔

  • C#中抽象類和接口的區(qū)別
  • ①.抽象類和接口的區(qū)別:

  • 類是對(duì)對(duì)象的抽象,可以把抽象類理解為把類當(dāng)作對(duì)象,抽象成的類叫做抽象類.而接口只是一個(gè)行為的規(guī)范或規(guī)定,微軟的自定義接口總是后帶able字段,證明其是表述一類類“我能做。。。”。抽象類更多的是定義在一系列緊密相關(guān)的類間,而接口大多數(shù)是關(guān)系疏松但都實(shí)現(xiàn)某一功能的類中;
  • 接口基本上不具備繼承的任何具體特點(diǎn),它僅僅承諾了能夠調(diào)用的方法;
  • 一個(gè)類一次可以實(shí)現(xiàn)若干個(gè)接口,但是只能擴(kuò)展一個(gè)父類;
  • 接口可以用于支持回調(diào),而繼承并不具備這個(gè)特點(diǎn);
  • 抽象類不能被密封;
  • 抽象類實(shí)現(xiàn)的具體方法默認(rèn)為虛的,但實(shí)現(xiàn)接口的類中的接口方法卻默認(rèn)為非虛的,當(dāng)然您也可以聲明為虛的;
  • (接口)與非抽象類類似,抽象類也必須為在該類的基類列表中列出的接口的所有成員提供它自己的實(shí)現(xiàn)。但是,允許抽象類將接口方法映射到抽象方法上;
  • 抽象類實(shí)現(xiàn)了oop中的一個(gè)原則,把可變的與不可變的分離。抽象類和接口就是定義為不可變的,而把可變的座位子類去實(shí)現(xiàn);
  • 好的接口定義應(yīng)該是具有專一功能性的,而不是多功能的,否則造成接口污染。如果一個(gè)類只是實(shí)現(xiàn)了這個(gè)接口的中一個(gè)功能,而不得不去實(shí)現(xiàn)接口中的其他方法,就叫接口污染;
  • 盡量避免使用繼承來(lái)實(shí)現(xiàn)組建功能,而是使用黑箱復(fù)用,即對(duì)象組合。因?yàn)槔^承的層次增多,造成最直接的后果就是當(dāng)你調(diào)用這個(gè)類群中某一類,就必須把他們?nèi)考虞d到棧中!后果可想而知。(結(jié)合堆棧原理理解)。同時(shí),有心的朋友可以留意到微軟在構(gòu)建一個(gè)類時(shí),很多時(shí)候用到了對(duì)象組合的方法。比如 asp.net中,Page類,有Server Request等屬性,但其實(shí)他們都是某個(gè)類的對(duì)象。使用Page類的這個(gè)對(duì)象來(lái)調(diào)用另外的類的方法和屬性,這個(gè)是非常基本的一個(gè)設(shè)計(jì)原則;

  • 如果抽象類實(shí)現(xiàn)接口,則可以把接口中方法映射到抽象類中作為抽象方法而不必實(shí)現(xiàn),而在抽象類的子類中實(shí)現(xiàn)接口中方法。

  • ②.抽象類和接口的使用

  • 如果預(yù)計(jì)要?jiǎng)?chuàng)建組件的多個(gè)版本,則創(chuàng)建抽象類。抽象類提供簡(jiǎn)單的方法來(lái)控制組件版本;
  • 如果創(chuàng)建的功能將在大范圍的全異對(duì)象間使用,則使用接口。如果要設(shè)計(jì)小而簡(jiǎn)練的功能塊,則使用接口;
  • 如果要設(shè)計(jì)大的功能單元,則使用抽象類。如果要在組件的所有實(shí)現(xiàn)間提供通用的已實(shí)現(xiàn)功能,則使用抽象類;
  • 抽象類主要用于關(guān)系密切的對(duì)象;而接口適合為不相關(guān)的類提供通用功能。
  • 以下是我在網(wǎng)上看到的幾個(gè)形象比喻。
    1.飛機(jī)會(huì)飛,鳥(niǎo)會(huì)飛,他們都繼承了同一個(gè)接口“飛”;但是F22屬于飛機(jī)抽象類,鴿子屬于鳥(niǎo)抽象類;
    2. 就像鐵門木門都是門(抽象類),你想要個(gè)門我給不了(不能實(shí)例化),但我可以給你個(gè)具體的鐵門或木門(多態(tài));而且只能是門,你不能說(shuō)它是窗(單繼承),一個(gè)門可以有鎖(接口)也可以有門鈴(多實(shí)現(xiàn))。門(抽象類)定義了你是什么,接口(鎖)規(guī)定了你能做什么(一個(gè)接口最好只能做一件事,你不能要求鎖也能發(fā)出聲音吧(接口污染))。

    回到頂部

    6.mvc和webform

  • 圖解ASP.NET MVC與WebForm的區(qū)別
  • 深入比較ASP.NET Webform和ASP.NET MVC兩種開(kāi)發(fā)方式的優(yōu)缺點(diǎn)
  • mvc與三層結(jié)構(gòu)終極區(qū)別
  • MVC:請(qǐng)求過(guò)程
  • asp.net MVC處理機(jī)制
  • 回到頂部

    7.mvc的filter

  • [ASP.NET MVC 小牛之路]11 - Filter
  • ASP.Net MVC開(kāi)發(fā)基礎(chǔ)學(xué)習(xí)筆記:四、校驗(yàn)、AJAX與過(guò)濾器點(diǎn)
  • 回到頂部

    8.項(xiàng)目中前端用了啥框架,怎么實(shí)現(xiàn),以及如何自定義jquery插件

  • jquery開(kāi)發(fā)自定義的插件總結(jié)
  • 做自定義輪播
  • 學(xué)習(xí)閉包:

    (1).學(xué)習(xí)Javascript閉包(Closure)

    (2).javascript的閉包

    (3).圖解閉包

    當(dāng)你自認(rèn)為做出了不錯(cuò)的功能但描述出來(lái)時(shí)又支支吾吾的時(shí)候,不要為自己說(shuō)不出來(lái)而懊惱,因?yàn)椴皇悄惆l(fā)揮有問(wèn)題,更不要向別人解釋用了啥高大上插件,別讓自己成為接口程序員,請(qǐng)靜下心回去補(bǔ)補(bǔ)基礎(chǔ)。

    總結(jié)

    以上是生活随笔為你收集整理的最近找工作面的面试题目汇总(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。