亚洲国产综合网站|精品国产自在免费观看|日本免费精品一区二区三区|亚洲一区在线日韩在线尤物

<blockquote id="2t14e"></blockquote>
<ul id="2t14e"></ul>
  • <blockquote id="2t14e"></blockquote>

    1. .net面試題及答案

      時(shí)間:2022-11-25 22:59:02 面試技巧 我要投稿

      .net面試題及答案

        .net程序員在求職面試中,學(xué)會(huì)做好面試準(zhǔn)備很重要,那么你了解面試題及答案了嗎?下面陽光網(wǎng)小編已經(jīng)為你們整理了.net面試題及答案,希望可以幫到你。

      .net面試題及答案

        .net面試題及答案(一)

        1.JIT是什么,它是如何工作的?GC是什么,簡述一下GC的工作方式?

        JIT:Just in time,C#或者是VB.NET的代碼首先被編譯為IL存儲(chǔ)在本地,當(dāng)要運(yùn)行這些代碼的時(shí)候,CLR對IL進(jìn)行第二次編譯轉(zhuǎn)換成機(jī)器碼運(yùn)行。好處:可移植性,而且IL在加載到內(nèi)存中時(shí)將受到類型安全性方面檢查,這實(shí)現(xiàn)了更好的安全性和可靠性。

        GC:垃圾回收(garbage collection),是根據(jù)程序的需要自動(dòng)分配和回收內(nèi)存的過程。垃圾回收器處理的是引用對象,而且只回收堆上的內(nèi)存。這意味著假如維持對一個(gè)對象的引用,就會(huì)阻止GC重用對象使用的`內(nèi)存。在.NET中,垃圾回收器采用的是mark-and-compact算法。在一次垃圾回收周期開始的時(shí)候,它要識別對象的所有跟引用,根據(jù)這個(gè)引用可以遍歷每個(gè)根引用所標(biāo)識的一個(gè)樹形結(jié)構(gòu),并遞歸確定所有引用指向的對象。這樣一來,垃圾回收器就可以識別所有可達(dá)的對象,在執(zhí)行回收的時(shí)候,GC不是枚舉所有訪問不到的對象,相反,通過壓縮所有相鄰的可達(dá)的對象來執(zhí)行垃圾回收。不可訪問的對象就會(huì)被覆蓋。垃圾回收的宗旨是提高內(nèi)存的利用率,它并不是用來清理文件句柄,和數(shù)據(jù)庫連接字符串,端口或者其他有限的資源(終接器finalizer,不能被顯示調(diào)用,不能傳遞任何參數(shù),即不能被重載,只有垃圾回收器才能調(diào)用終接器,使用Using語句進(jìn)行確定性終結(jié)

        2.類(class)和結(jié)構(gòu)(struct)的區(qū)別是什么?它們對性能有影響嗎?

        01. 值類型與引用類型

        結(jié)構(gòu)是值類型:值類型在棧上分配地址,所有的基類型都是結(jié)構(gòu)類型,例如:int 對應(yīng)System.int32 結(jié)構(gòu),通過使用結(jié)構(gòu)可以創(chuàng)建更多的值類型

        類是引用類型:引用類型在堆上分配地址堆棧的執(zhí)行效率要比堆的執(zhí)行效率高,可是堆棧的資源有限,不適合處理大的邏輯復(fù)雜的對象。所以結(jié)構(gòu)處理作為基類型對待的小對象,而類處理某個(gè)商業(yè)邏輯因?yàn)榻Y(jié)構(gòu)是值類型所以結(jié)構(gòu)之間的賦值可以創(chuàng)建新的結(jié)構(gòu),而類是引用類型,類之間的賦值只是復(fù)制引用

        注:1.雖然結(jié)構(gòu)與類的類型不一樣,可是他們的基類型都是對象(object),c#中所有類型的基類型都是object

        2.雖然結(jié)構(gòu)的初始化也使用了New 操作符可是結(jié)構(gòu)對象依然分配在堆棧上而不是堆上,如果不使用“新建”(new),那么在初始化所有字段之前,字段將保持未賦值狀態(tài),且對象不可用

        02.繼承性

        結(jié)構(gòu):不能從另外一個(gè)結(jié)構(gòu)或者類繼承,本身也不能被繼承,雖然結(jié)構(gòu)沒有明確的用sealed聲明,可是結(jié)構(gòu)是隱式的sealed .

        類:完全可擴(kuò)展的,除非顯示的聲明sealed 否則類可以繼承其他類和接口,自身也能被繼承注:雖然結(jié)構(gòu)不能被繼承 可是結(jié)構(gòu)能夠繼承接口,方法和類繼承接口一樣

        03.內(nèi)部結(jié)構(gòu):

        結(jié)構(gòu): 沒有默認(rèn)的構(gòu)造函數(shù),但是可以添加構(gòu)造函數(shù)沒有析構(gòu)函數(shù)沒有 abstract 和 sealed(因?yàn)椴荒芾^承)不能有protected 修飾符可以不使用new 初始化在結(jié)構(gòu)中初始化實(shí)例字段是錯(cuò)誤的

        類: 有默認(rèn)的構(gòu)造函數(shù) 有析構(gòu)函數(shù) 可以使用 abstract 和 sealed 有protected 修飾符

        必須使用new 初始化

        .net面試題及答案(二)

        1.什么是元編程,.NET有哪些元編程的手段和場景?什么是反射?能否舉一些反射的常用場景?有人說反射性能較差,您怎么看待這個(gè)問題?有什么辦法可以提高反射的性能嗎?

        學(xué)著做OA的時(shí)候,動(dòng)態(tài)加載不同的DataProvider(Oracle和Sqlserver),方便,可以隨時(shí)替換不用重新編譯程序

        2.委托是什么?匿名方法是什么?在C# 3.0中,Lambda表達(dá)式是什么?擴(kuò)展方法是什么?LINQ是什么?您覺得C# 3.0中還有哪些重要的特性,它們帶來了什么優(yōu)勢?BCL中哪些類庫和這些特性有關(guān)?您平時(shí)最常用哪些?

        委托可以把一個(gè)方法作為參數(shù)代入另一個(gè)方法。

        委托可以理解為指向一個(gè)函數(shù)的指針。

        匿名方法:就是沒有實(shí)際方法聲明的委托實(shí)例;蛘哒f,它們的定義是直接內(nèi)嵌在代碼中的。

        Lambda表達(dá)式:是比匿名方法更加簡潔的一種匿名函數(shù)語法

        委托和事件沒有可比性,因?yàn)槲惺穷愋,事件是對象,下面說的是委托的對象(用委托方式實(shí)現(xiàn)的事件)和(標(biāo)準(zhǔn)的event方式實(shí)現(xiàn))事件的區(qū)別。事件的內(nèi)部是用委托實(shí)現(xiàn)的。因?yàn)閷τ谑录䜩碇v,外部只能“注冊自己+=、注銷自己-=”,外界不可以注銷其他的注冊者,外界不可以主動(dòng)觸發(fā)事件,因此如果用Delegate就沒法進(jìn)行上面的控制,因此誕生了事件這種語法。事件是用來閹割委托實(shí)例的,類比用一個(gè)自定義類閹割List。事件只能add、remove自己,不能賦值。事件只能+=、-=,不能= 。事件內(nèi)部就是一個(gè)private的委托和add、remove兩個(gè)方法。

        3.工作之外您看哪些技術(shù)相關(guān)的`書、網(wǎng)站、社區(qū)、項(xiàng)目等等?

        您還接觸哪些.NET以外的技術(shù),能和.NET或.NET中有針對性的部分做個(gè)對比嗎?

        C#本質(zhì)論,SQL Server2008實(shí)戰(zhàn),數(shù)據(jù)結(jié)構(gòu),ASP.NET揭秘,Javascript深入淺出

        4.website和webapplication的區(qū)別

        1)website修改后不需要重啟即可看到效果,webapplication需要

        2)website不分namespace,webapplication有namespace

        3)website為了兼容asp轉(zhuǎn)過來的開發(fā)人員習(xí)慣

        4)沒有技術(shù)上的區(qū)別,調(diào)試習(xí)慣不同

        5)website為每個(gè)編譯為一個(gè)dll,webapplication生成一個(gè)dll

        6)不利于工程開發(fā),比如代碼出錯(cuò)不容易發(fā)現(xiàn)

        .net面試題及答案(三)

        1.異常的作用是什么?.NET BCL中有哪些常見的異常?在代碼中您是如何捕獲/處理異常的?在“catch (ex)”中,“throw”和“throw ex”有什么區(qū)別?您會(huì)如何設(shè)計(jì)異常的結(jié)構(gòu),什么情況下您會(huì)拋出異常?

        (1)C# 語言的異常處理功能可幫助您處理程序運(yùn)行時(shí)出現(xiàn)的任何意外或異常情況

        (2)throw會(huì)保留堆棧信息。throw ex 不會(huì)。當(dāng)然,如果你拋出新的異常之前設(shè)置innerException的話,可以通過innerException的堆棧訪問原有的堆棧。

        (3)靠異常才能發(fā)現(xiàn)錯(cuò)誤的,通過try catch finally來捕獲異常。如果是未預(yù)料到的則不處理(內(nèi)存不足,刪除文件)直接報(bào)錯(cuò)更容易發(fā)現(xiàn)錯(cuò)誤catch塊從最具體到常規(guī)排列

        2.List<T>和T[]的區(qū)別是什么,平時(shí)你如何進(jìn)行選擇?Dictionary<TKey, TValue>是做什么的?.NET BCL中還有哪些常用的容器?它們分別是如何實(shí)現(xiàn)的(哪種數(shù)據(jù)結(jié)構(gòu))?分別是適用于哪些場景?

        01.List<T>arrylist的泛型版本,大小是可變的,T[]繼承自Array,大小是固定的。如果大小沒有怎么變化,選擇T[],一般情況下選擇List<T>

        02.Dictionary是hashtable的.泛型版本,用來存儲(chǔ)鍵值對的.例如:sortlist,stack等

        3.抽象類和接口有什么區(qū)別?使用時(shí)有什么需要注意的嗎?

        如何選擇是定義一個(gè)“完全抽象”的抽象類,還是接口?什么是接口的“顯式實(shí)現(xiàn)”?為什么說它很重要?

        相同點(diǎn):都不能被直接實(shí)例化,都通過繼承實(shí)現(xiàn)其抽象方法

        不同點(diǎn):

        (1) 接口支持多繼承;抽象類不能實(shí)現(xiàn)多繼承。

        (2) 接口只能定義行為;抽象類既可以定義行為,還可能提供實(shí)現(xiàn)。

        (3) 抽象類允許包含實(shí)現(xiàn)的virtual成員,所以能為派生類成員提供一個(gè)默認(rèn)的實(shí)現(xiàn),而接口所有的成員自動(dòng)成為virtual成員,而且不能包含任何實(shí)現(xiàn)

        4.字符串是引用類型類型還是結(jié)構(gòu)類型? 引用類型

        它和普通的引用類型相比有什么特別的地方嗎?不可變的

        使用字符串時(shí)有什么需要注意的地方?為什么說StringBuilder比較高效?

        當(dāng)拼接兩個(gè)字符串時(shí),系統(tǒng)先是把兩個(gè)字符串寫入內(nèi)存,接著刪除原來的String對象,然后創(chuàng)建一個(gè)String對象,并讀取內(nèi)存中的數(shù)據(jù)賦給該對象。這一來二去的,耗了不少時(shí)間。而使用System.Text命名空間下面的StringBuilder類就不是這樣了,它提供的Append方法,能夠在已有對象的原地進(jìn)行字符串的修改,簡單而且直接。

        在連接多個(gè)字符串時(shí),它無論何時(shí)都比直接相加更高效嗎?

        不一定,在1000個(gè)字符以內(nèi)效果一樣,達(dá)到10000時(shí)StringBuilder類的效率會(huì)顯著提升

        如何高效地進(jìn)行數(shù)組復(fù)制?“二維數(shù)組”和“數(shù)組的數(shù)組”有什么區(qū)別?

        數(shù)組復(fù)制的方法:for CopyTo() 靜態(tài)CopyTo() Clone

      【.net面試題及答案】相關(guān)文章:

      .net經(jīng)典面試題04-08

      .net軟件工程師面試題及答案04-02

      .net基礎(chǔ)面試題04-08

      .net開發(fā)工程師面試題04-08

      .net軟件工程師面試題04-06

      經(jīng)典面試題及答案04-04

      面試題及答案04-04

      .net高級工程師面試題04-08

      net高級工程師面試題12-09