日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

dotNET面試題匯總系列連載(1):基礎(chǔ)語(yǔ)法

 dotNet全棧開(kāi)發(fā) 2020-02-06

全文約4000字,預(yù)計(jì)閱讀時(shí)間8分鐘

馬上要到2020年了,這里整理一個(gè).NET 工程師面試題系列,希望年底或者明年金三銀四跳槽的程序猿們帶來(lái)一些幫助,建議收藏,如果文中答案有不準(zhǔn)確的地方,請(qǐng)?jiān)谠u(píng)論中指出。

前文傳送門(mén)

  • dotNET面試題匯總系列之基礎(chǔ)語(yǔ)法

  • dotNET面試題匯總系列之面向?qū)ο?/p>

  • dotNET面試題匯總系列之設(shè)計(jì)模式

  • dotNET面試題匯總系列之集合、異常、泛型、日志

  • dotNET面試題匯總系列之算法

  • dotNET面試題匯總系列之?dāng)?shù)據(jù)庫(kù)

  • dotNET面試題匯總系列系列之前端

  • dotNET面試題匯總系列系列之MVC

問(wèn)題目錄

  • 1. 字符串中string str=null和string str=""和string str=string.Empty的區(qū)別

  • 2. byte b = 'a'; byte c = 1; byte d = 'ab'; byte e = '啊'; byte g = 256; 這些變量有些錯(cuò)誤是錯(cuò)再哪里?

  • 3. string和StringBuilder的區(qū)別,兩者性能的比較

  • 4.什么是擴(kuò)展方法?

  • 5. byte a =255;a+=5;a的值是多少?

  • 6. 什么是裝箱和拆箱?

  • 7. 值類(lèi)型和引用類(lèi)型的區(qū)別?

  • 8. new關(guān)鍵字的作用
  • 9. int?和int有什么區(qū)別?
  • 10. C#中的委托是什么?
  • 11. 用最有效的方法算出2乘以8等于幾?
  • 12. const和readonly有什么區(qū)別?
  • 13. 現(xiàn)有一個(gè)整數(shù)number,請(qǐng)寫(xiě)一個(gè)方法判斷這個(gè)整數(shù)是否是2的N次
  • 14. CTS、CLS、CLR分別作何解釋
  • 15. 在.net中,配件的意思是?
  • 16. 分析下面代碼,a、b的值是多少?
  • 17. String s = new String(“xyz”);創(chuàng)建了幾個(gè)String Object?
  • 18. 靜態(tài)成員和非靜態(tài)成員的區(qū)別
  • 19. c#可否對(duì)內(nèi)存直接操作
  • 20. short s1 = 1; s1 = s1 + 1;有什么錯(cuò)? short s1 = 1; s1 += 1;有什么錯(cuò)?
  • 21. 什么是強(qiáng)類(lèi)型,什么是弱類(lèi)型?哪種更好些?為什么?
  • 22. using關(guān)鍵字的作用
  • 23. ref和out有什么區(qū)別
  • 24. a.Equals(b)和a==b一樣嗎?
  • 25. 下面這段代碼求值
  • 26. 關(guān)于構(gòu)造函數(shù)說(shuō)法正確的是哪個(gè)?
  • 27. Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
  • 28. &和&&的區(qū)別?
  • 29. i++和++i有什么區(qū)別?
  • 30. as和is的區(qū)別?

問(wèn)題和答案

1. 字符串中string str=null和string str=""和string str=string.Empty的區(qū)別

string.Empty相當(dāng)于“”,Empty是一個(gè)靜態(tài)只讀的字段。string str="" ,初始化對(duì)象,并分配一個(gè)空字符串的內(nèi)存空間 string str=null,初始化對(duì)象,不會(huì)分配內(nèi)存空間

2. byte b = 'a'; byte c = 1; byte d = 'ab'; byte e = '啊'; byte g = 256; 這些變量有些錯(cuò)誤是錯(cuò)再哪里?

  • 本題考查的是數(shù)據(jù)類(lèi)型能承載數(shù)據(jù)的大小。
  • 1byte =8bit,1個(gè)漢字=2個(gè)byte,1個(gè)英文=1個(gè)byte=8bit
  • 所以bc是對(duì)的,deg是錯(cuò)的。'a'是char類(lèi)型,a錯(cuò)誤
  • java byte取值范圍是-128~127, 而C#里一個(gè)byte是0~255
3.string和StringBuilder的區(qū)別,兩者性能的比較
  • 都是引用類(lèi)型,分配再堆上
  • StringBuilder默認(rèn)容量是16,可以允許擴(kuò)充它所封裝的字符串中字符的數(shù)量.每個(gè)StringBuffer對(duì)象都有一定的緩沖區(qū)容量,當(dāng)字符串大小沒(méi)有超過(guò)容量時(shí),不會(huì)分配新的容量,當(dāng)字符串大小超過(guò)容量時(shí),會(huì)自動(dòng)增加容量。
  • 對(duì)于簡(jiǎn)單的字符串連接操作,在性能上stringbuilder不一定總是優(yōu)于strin因?yàn)閟tringbulider對(duì)象的創(chuàng)建也消耗大量的性能,在字符串連接比較少的情況下,過(guò)度濫用stringbuilder會(huì)導(dǎo)致性能的浪費(fèi)而非節(jié)約,只有大量無(wú)法預(yù)知次數(shù)的字符串操作才考慮stringbuilder的使用。從最后分析可以看出如果是相對(duì)較少的字符串拼接根本看不出太大差別。
  • Stringbulider的使用,最好制定合適的容量值,否則優(yōu)于默認(rèn)值容量不足而頻繁的進(jìn)行內(nèi)存分配操作,是不妥的實(shí)現(xiàn)方法。參考鏈接:https://www.cnblogs.com/haofuqi/p/4826262.html
4.什么是擴(kuò)展方法?
  • 一句話解釋?zhuān)瑪U(kuò)展方法使你能夠向現(xiàn)有類(lèi)型“添加”方法,無(wú)需修改類(lèi)型
  • 條件:按擴(kuò)展方法必須滿足的條件,1.必須要靜態(tài)類(lèi)中的靜態(tài)方法2.第一個(gè)參數(shù)的類(lèi)型是要擴(kuò)展的類(lèi)型,并且需要添加this關(guān)鍵字以標(biāo)識(shí)其為擴(kuò)展方法
  • 建議:通常,只在不得已的情況下才實(shí)現(xiàn)擴(kuò)展方法,并謹(jǐn)慎的實(shí)現(xiàn)
  • 使用:不能通過(guò)類(lèi)名調(diào)用,直接使用類(lèi)型來(lái)調(diào)用
5.byte a =255;a+=5;a的值是多少?

byte的取值范圍是-2的8次方至2的8次方-1,-256至258,a+=1時(shí),a的值時(shí)0,a+=5時(shí),a的值是0,所以a+=5時(shí),值是4

6.什么是裝箱和拆箱?
  • 裝箱就是隱式地將一個(gè)值類(lèi)型轉(zhuǎn)換成引用類(lèi)型,如:
int i=0;
Syste.Object obj=i;
  • 拆箱就是將引用類(lèi)型轉(zhuǎn)換成值類(lèi)型,如:
int i=0;
System.Object obj=i;
int j=(int)obj;(將obj拆箱)
7.值類(lèi)型和引用類(lèi)型的區(qū)別
  • 值類(lèi)型變量是直接包含值。將一個(gè)值類(lèi)型變量賦給另一個(gè)值類(lèi)型變量,是復(fù)制包含的值,默認(rèn)值是0。
  • 引用類(lèi)型變量的賦值只復(fù)制對(duì)對(duì)象的引用,而不復(fù)制對(duì)象本身,默認(rèn)值是null
  • 值類(lèi)型有整形、浮點(diǎn)型、bool、枚舉。
  • 引用類(lèi)型有class、delegate、Object、string
  • 值類(lèi)型存儲(chǔ)在棧中,引用類(lèi)型存儲(chǔ)在堆中
8.new關(guān)鍵字的作用
  • 運(yùn)算符:創(chuàng)建對(duì)象實(shí)例
  • 修飾符:在派生類(lèi)定義一個(gè)重名的方法,隱藏掉基類(lèi)方法
  • 約束:泛型約束定義,約束可使用的泛型類(lèi)型,如:
public class ItemFactory<T> where T : IComparable, new()
{
}
9. int?和int有什么區(qū)別
  • int?為可空類(lèi)型,默認(rèn)值可以是null
  • int默認(rèn)值是0
  • int?是通過(guò)int裝箱為引用類(lèi)型實(shí)現(xiàn)
10. C#中的委托是什么?

一句話解釋就是:將方法當(dāng)作參數(shù)傳入另一個(gè)方法的參數(shù)。.net中有很多常見(jiàn)的委托如:Func 、Action 作用:提高方法的擴(kuò)展性

11.用最有效的方法算出2乘以8等于幾?

位運(yùn)算是最快,使用的是位運(yùn)算 邏輯左位移<<。方法是2<<3相當(dāng)于0000 0000 0000 0010 (2的16位int二進(jìn)制)左移三位就是 0000 0000 0001 0000(16的二進(jìn)制)

12.const和readonly有什么區(qū)別?

都可以標(biāo)識(shí)一個(gè)常量。主要有以下區(qū)別:

  • 1、初始化位置不同。const必須在聲明的同時(shí)賦值;readonly即可以在聲明處賦值,也可以在靜態(tài)構(gòu)造方法(必須是靜態(tài)構(gòu)造方法,普通構(gòu)造方法不行)里賦值。
  • 2、修飾對(duì)象不同。const即可以修飾類(lèi)的字段,也可以修飾局部變量;readonly只能修飾類(lèi)的字段
  • 3、const是編譯時(shí)常量,在編譯時(shí)確定該值;readonly是運(yùn)行時(shí)常量,在運(yùn)行時(shí)確定該值。
  • 4、const默認(rèn)是靜態(tài)的;而readonly如果設(shè)置成靜態(tài)需要顯示聲明
  • 5、修飾引用類(lèi)型時(shí)不同,const只能修飾string或值為null的其他引用類(lèi)型;readonly可以是任何類(lèi)型。
13.現(xiàn)有一個(gè)整數(shù)number,請(qǐng)寫(xiě)一個(gè)方法判斷這個(gè)整數(shù)是否是2的N次方
  • 4(100)、5(101)、8(1000)、16(10000)

  • 取模運(yùn)算:用number%2==0可以判斷,但是這個(gè)有點(diǎn)低級(jí)

  • 位運(yùn)算:(使用位運(yùn)算邏輯并,兩個(gè)位上的都為1才是1,其余都是0,判斷是否等于0)

  • 4&3相當(dāng)于100&011 ,結(jié)果是000等于0,所以4是2的n次方

  • 5&4相當(dāng)于101&100,結(jié)果是100不等于0,所以5不是2的n次方

如果要問(wèn)如果是2的N次方,這個(gè)N是多少?這該怎么算?

private static byte get(int n)
{
byte number = 1;
while (n/2!=1)
{
n = n / 2;
number += 1;
}
return number;
}
14.CTS、CLS、CLR分別作何解釋

CTS:通用語(yǔ)言系統(tǒng)。CLS:通用語(yǔ)言規(guī)范。CLR:公共語(yǔ)言運(yùn)行庫(kù)。

  • CTS:Common Type System 通用類(lèi)型系統(tǒng)。Int32、Int16→int、String→string、Boolean→bool。每種語(yǔ)言都定義了自己的類(lèi)型,.Net通過(guò)CTS提供了公共的類(lèi)型,然后翻譯生成對(duì)應(yīng)的.Net類(lèi)型。

  • CLS:Common Language Specification 通用語(yǔ)言規(guī)范。不同語(yǔ)言語(yǔ)法的不同。每種語(yǔ)言都有自己的語(yǔ)法,.Net通過(guò)CLS提供了公共的語(yǔ)法,然后不同語(yǔ)言翻譯生成對(duì)應(yīng)的.Net語(yǔ)法。

  • CLR:Common Language Runtime 公共語(yǔ)言運(yùn)行時(shí),就是GC、JIT等這些。有不同的CLR,比如服務(wù)器CLR、Linux CLR(Mono)、Silverlight CLR(CoreCLR)。相當(dāng)于一個(gè)發(fā)動(dòng)機(jī),負(fù)責(zé)執(zhí)行IL。

15.在.net中,配件的意思是?

程序集。(中間語(yǔ)言,源數(shù)據(jù),資源,裝配清單)

16.分析下面代碼,a、b的值是多少?
string strTmp = "a1某某某";
int a = System.Text.Encoding.Default.GetBytes(strTmp).Length;
int b = strTmp.Length;

分析:一個(gè)字母、數(shù)字占一個(gè)byte,一個(gè)中文占占兩個(gè)byte,所以a=8,b=5

17.Strings = new String(“xyz”);創(chuàng)建了幾個(gè)String Object?

兩個(gè)對(duì)象,一個(gè)是“xyz”,一個(gè)是指向“xyz”的引用對(duì)象s。

18.靜態(tài)成員和非靜態(tài)成員的區(qū)別
  • 1.靜態(tài)成員用statis修飾符聲明,在類(lèi)被實(shí)例化時(shí)創(chuàng)建,通過(guò)類(lèi)進(jìn)行訪問(wèn)
  • 2.不帶statis的變量時(shí)非靜態(tài)變量,在對(duì)象被實(shí)例化時(shí)創(chuàng)建,通過(guò)對(duì)象進(jìn)行訪問(wèn),
  • 3.靜態(tài)方法里不能使用非靜態(tài)成員,非靜態(tài)方法可以使用靜態(tài)成員
  • 4.靜態(tài)成員屬于類(lèi),而不屬于對(duì)象
19.c#可否對(duì)內(nèi)存直接操作

C#在unsafe 模式下可以使用指針對(duì)內(nèi)存進(jìn)行操作, 但在托管模式下不可以使用指針,C#NET默認(rèn)不運(yùn)行帶指針的,需要設(shè)置下,選擇項(xiàng)目右鍵->屬性->選擇生成->“允許不安全代碼”打勾->保存

20.short s1 = 1; s1 = s1 + 1;有什么錯(cuò)? short s1 = 1; s1 += 1;有什么錯(cuò)?

s1+1不能顯式轉(zhuǎn)換成short類(lèi)型,可以修改為s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正確

21.什么是強(qiáng)類(lèi)型,什么是弱類(lèi)型?哪種更好些?為什么?

強(qiáng)類(lèi)型是在編譯的時(shí)候就確定類(lèi)型的數(shù)據(jù),在執(zhí)行時(shí)類(lèi)型不能更改,而弱類(lèi)型在執(zhí)行的時(shí)候才會(huì)確定類(lèi)型。沒(méi)有好不好,二者各有好處,強(qiáng)類(lèi)型安全,因?yàn)樗孪纫呀?jīng)確定好了,而且效率高。一般用于編譯型編程語(yǔ)言,如c++,java,c#,pascal等,弱類(lèi)型相比而言不安全,在運(yùn)行的時(shí)候容易出現(xiàn)錯(cuò)誤,但它靈活,多用于解釋型編程語(yǔ)言,如javascript,vb,php等

22.using關(guān)鍵字的作用
  • 1.引用命名空間,也可using 別名
  • 2.釋放資源,實(shí)現(xiàn)了IDisposiable的類(lèi)在using中創(chuàng)建,using結(jié)束后會(huì)自定調(diào)用該對(duì)象的Dispose方法,釋放資源。
23.ref和out有什么區(qū)別
  • 1.都是按引用類(lèi)型進(jìn)行傳遞
  • 2.屬性不是變量不能作為out、ref參數(shù)傳遞
  • 3.ref參數(shù)必須初始化。out不需要初始化
  • 4.作用,當(dāng)方法有多個(gè)返回值時(shí),out非常有用
24.a.Equals(b)和a==b一樣嗎?

不一樣,a==b僅僅表示a和b值相等,a.Equals(b)表示a與b一致

25.下面這段代碼求值
class Class1
{
internal static int count = 0;
static Class1()
{
count++;
}
public Class1()
{
count++;
}
}
Class1 o1 = new Class1();
Class1 o2 = new Class1();

o1.count的值是多少?

答案:3,靜態(tài) 構(gòu)造方法計(jì)算一次,兩個(gè)實(shí)例化對(duì)象計(jì)算兩次。

26.關(guān)于構(gòu)造函數(shù)說(shuō)法正確的是哪個(gè)?

a)構(gòu)造函數(shù)可以聲明返回類(lèi)型。

b)構(gòu)造函數(shù)不可以用private修飾

c)構(gòu)造函數(shù)必須與類(lèi)名相同

d)構(gòu)造函數(shù)不能帶參數(shù)

答案:c ,構(gòu)造函數(shù)必須與類(lèi)名相同,可以傳遞多個(gè)傳遞,作用就是便于初始化對(duì)象成員,不能有任何返回類(lèi)型

27.Math.Round(11.5)等於多少? Math.Round(-11.5)等於多少?
  • Math.Round(11.5)=12
  • Math.Round(-11.5)=-12
28.&和&&的區(qū)別
  • 相同點(diǎn)

&和&&都可作邏輯與的運(yùn)算符,表示邏輯與(and),當(dāng)運(yùn)算符兩邊的表達(dá)式的結(jié)果都為true時(shí),其結(jié)果才為true,否則,只要有一方為false,則結(jié)果為false。(ps:當(dāng)要用到邏輯與的時(shí)候&是毫無(wú)意義,&本身就不是干這個(gè)的)

  • 不同點(diǎn)
if(loginUser!=null&&string.IsnullOrEmpty(loginUser.UserName))

&&具有短路的功能,即如果第一個(gè)表達(dá)式為false,則不再計(jì)算第二個(gè)表達(dá)式,對(duì)于上面的表達(dá)式,當(dāng)loginUser為null時(shí),后面的表達(dá)式不會(huì)執(zhí)行,所以不會(huì)出現(xiàn)NullPointerException如果將&&改為&,則會(huì)拋出NullPointerException異常。(ps:所以說(shuō)當(dāng)要用到邏輯與的時(shí)候&是毫無(wú)意義的)

& 是用作位運(yùn)算的。

  • 總結(jié)

&是位運(yùn)算,返回結(jié)果是int類(lèi)型 &&是邏輯運(yùn)算,返回結(jié)果是bool類(lèi)型

29. i++和++i有什么區(qū)別?
  • 1.i++是先賦值,然后再自增;++i是先自增,后賦值。
  • 2.i=0,i++=0,++i=1;Console.WriteLine(++i==i++); 結(jié)果位true
30.as和is的區(qū)別
  • as在轉(zhuǎn)換的同時(shí)判斷兼容性,如果無(wú)法進(jìn)行轉(zhuǎn)換,返回位null(沒(méi)有產(chǎn)生新的對(duì)象),as轉(zhuǎn)換是否成功判斷的依據(jù)是是否位null is只是做類(lèi)型兼容性判斷,并不執(zhí)行真正的類(lèi)型轉(zhuǎn)換,返回true或false,對(duì)象為null也會(huì)返回false。
  • as比is效率更高,as只需要做一次類(lèi)型兼容檢查

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多