全文約4000字,預(yù)計(jì)閱讀時(shí)間8分鐘
馬上要到2020年了,這里整理一個(gè).NET 工程師面試題系列,希望年底或者明年金三銀四跳槽的程序猿們帶來一些幫助,建議收藏,如果文中答案有不準(zhǔn)確的地方,請(qǐng)?jiān)谠u(píng)論中指出。
dotNET面試題匯總系列之基礎(chǔ)語法
dotNET面試題匯總系列之面向?qū)ο?/p>
dotNET面試題匯總系列之設(shè)計(jì)模式
dotNET面試題匯總系列之集合、異常、泛型、日志
dotNET面試題匯總系列之算法
dotNET面試題匯總系列之?dāng)?shù)據(jù)庫
dotNET面試題匯總系列系列之前端
dotNET面試題匯總系列系列之MVC
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. 值類型和引用類型的區(qū)別?
string.Empty相當(dāng)于“”,Empty是一個(gè)靜態(tài)只讀的字段。string str="" ,初始化對(duì)象,并分配一個(gè)空字符串的內(nèi)存空間string str=null,初始化對(duì)象,不會(huì)分配內(nèi)存空間
byte的取值范圍是-2的8次方至2的8次方-1,-256至258,a+=1時(shí),a的值時(shí)0,a+=5時(shí),a的值是0,所以a+=5時(shí),值是4
int i=0;
Syste.Object obj=i;
int i=0;
System.Object obj=i;
int j=(int)obj;(將obj拆箱)
public class ItemFactory<T> where T : IComparable, new()
{
}
一句話解釋就是:將方法當(dāng)作參數(shù)傳入另一個(gè)方法的參數(shù)。.net中有很多常見的委托如:Func 、Action作用:提高方法的擴(kuò)展性
位運(yùn)算是最快,使用的是位運(yùn)算 邏輯左位移<<。方法是2<<3相當(dāng)于0000 0000 0000 0010 (2的16位int二進(jìn)制)左移三位就是 0000 0000 0001 0000(16的二進(jìn)制)
都可以標(biāo)識(shí)一個(gè)常量。主要有以下區(qū)別:
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次方
如果要問如果是2的N次方,這個(gè)N是多少?這該怎么算?
private static byte get(int n)
{
byte number = 1;
while (n/2!=1)
{
n = n / 2;
number += 1;
}
return number;
}
CTS:通用語言系統(tǒng)。CLS:通用語言規(guī)范。CLR:公共語言運(yùn)行庫。
CTS:Common Type System 通用類型系統(tǒng)。Int32、Int16→int、String→string、Boolean→bool。每種語言都定義了自己的類型,.Net通過CTS提供了公共的類型,然后翻譯生成對(duì)應(yīng)的.Net類型。
CLS:Common Language Specification 通用語言規(guī)范。不同語言語法的不同。每種語言都有自己的語法,.Net通過CLS提供了公共的語法,然后不同語言翻譯生成對(duì)應(yīng)的.Net語法。
CLR:Common Language Runtime 公共語言運(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。
程序集。(中間語言,源數(shù)據(jù),資源,裝配清單)
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
兩個(gè)對(duì)象,一個(gè)是“xyz”,一個(gè)是指向“xyz”的引用對(duì)象s。
C#在unsafe 模式下可以使用指針對(duì)內(nèi)存進(jìn)行操作, 但在托管模式下不可以使用指針,C#NET默認(rèn)不運(yùn)行帶指針的,需要設(shè)置下,選擇項(xiàng)目右鍵->屬性->選擇生成->“允許不安全代碼”打勾->保存
s1+1不能顯式轉(zhuǎn)換成short類型,可以修改為s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正確
強(qiáng)類型是在編譯的時(shí)候就確定類型的數(shù)據(jù),在執(zhí)行時(shí)類型不能更改,而弱類型在執(zhí)行的時(shí)候才會(huì)確定類型。沒有好不好,二者各有好處,強(qiáng)類型安全,因?yàn)樗孪纫呀?jīng)確定好了,而且效率高。一般用于編譯型編程語言,如c++,java,c#,pascal等,弱類型相比而言不安全,在運(yùn)行的時(shí)候容易出現(xiàn)錯(cuò)誤,但它靈活,多用于解釋型編程語言,如javascript,vb,php等
不一樣,a==b僅僅表示a和b值相等,a.Equals(b)表示a與b一致
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ì)算兩次。
a)構(gòu)造函數(shù)可以聲明返回類型。
b)構(gòu)造函數(shù)不可以用private修飾
c)構(gòu)造函數(shù)必須與類名相同
d)構(gòu)造函數(shù)不能帶參數(shù)
答案:c ,構(gòu)造函數(shù)必須與類名相同,可以傳遞多個(gè)傳遞,作用就是便于初始化對(duì)象成員,不能有任何返回類型
&和&&都可作邏輯與的運(yùn)算符,表示邏輯與(and),當(dāng)運(yùn)算符兩邊的表達(dá)式的結(jié)果都為true時(shí),其結(jié)果才為true,否則,只要有一方為false,則結(jié)果為false。(ps:當(dāng)要用到邏輯與的時(shí)候&是毫無意義,&本身就不是干這個(gè)的)
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:所以說當(dāng)要用到邏輯與的時(shí)候&是毫無意義的)
& 是用作位運(yùn)算的。
&是位運(yùn)算,返回結(jié)果是int類型&&是邏輯運(yùn)算,返回結(jié)果是bool類型
聯(lián)系客服