點擊上方“dotNET全棧開發”,“設爲星標”
加“星標★”,每天11.50,好文必達
全文約4000字,預計閱讀時間8分鐘
馬上要到2020年了,這裏整理一個.NET 工程師面試題系列,希望年底或者明年金三銀四跳槽的程序猿們帶來一些幫助,建議收藏,如果文中答案有不準確的地方,請在評論中指出。
前文傳送門
-
dotNET面試題彙總系列之設計模式
-
dotNET面試題彙總系列之集合、異常、泛型、日誌
-
dotNET面試題彙總系列之算法
-
dotNET面試題彙總系列之數據庫
-
dotNET面試題彙總系列系列之前端
-
dotNET面試題彙總系列系列之MVC
問題目錄
-
1. 字符串中string str=null和string str=""和string str=string.Empty的區別
-
2. byte b = 'a'; byte c = 1; byte d = 'ab'; byte e = '啊'; byte g = 256; 這些變量有些錯誤是錯再哪裏?
-
3. string和StringBuilder的區別,兩者性能的比較
-
4.什麼是擴展方法?
-
5. byte a =255;a+=5;a的值是多少?
-
6. 什麼是裝箱和拆箱?
-
7. 值類型和引用類型的區別?
-
8. new關鍵字的作用
-
9. int?和int有什麼區別?
-
10. C#中的委託是什麼?
-
11. 用最有效的方法算出2乘以8等於幾?
-
12. const和readonly有什麼區別?
-
13. 現有一個整數number,請寫一個方法判斷這個整數是否是2的N次
-
14. CTS、CLS、CLR分別作何解釋
-
15. 在.net中,配件的意思是?
-
16. 分析下面代碼,a、b的值是多少?
-
17. String s = new String(“xyz”);創建了幾個String Object?
-
18. 靜態成員和非靜態成員的區別
-
19. c#可否對內存直接操作
-
20. short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?
-
21. 什麼是強類型,什麼是弱類型?哪種更好些?爲什麼?
-
22. using關鍵字的作用
-
23. ref和out有什麼區別
-
24. a.Equals(b)和a==b一樣嗎?
-
25. 下面這段代碼求值
-
26. 關於構造函數說法正確的是哪個?
-
27. Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
-
28. &和&&的區別?
-
29. i++和++i有什麼區別?
-
30. as和is的區別?
問題和答案
1. 字符串中string str=null和string str=""和string str=string.Empty的區別
string.Empty相當於“”,Empty是一個靜態只讀的字段。string str="" ,初始化對象,並分配一個空字符串的內存空間 string str=null,初始化對象,不會分配內存空間
2. byte b = 'a'; byte c = 1; byte d = 'ab'; byte e = '啊'; byte g = 256; 這些變量有些錯誤是錯再哪裏?
-
本題考查的是數據類型能承載數據的大小。
-
1byte =8bit,1個漢字=2個byte,1個英文=1個byte=8bit
-
所以bc是對的,deg是錯的。'a'是char類型,a錯誤
-
java byte取值範圍是-128~127, 而C#裏一個byte是0~255
3.string和StringBuilder的區別,兩者性能的比較
-
都是引用類型,分配再堆上
-
StringBuilder默認容量是16,可以允許擴充它所封裝的字符串中字符的數量.每個StringBuffer對象都有一定的緩衝區容量,當字符串大小沒有超過容量時,不會分配新的容量,當字符串大小超過容量時,會自動增加容量。
-
對於簡單的字符串連接操作,在性能上stringbuilder不一定總是優於strin因爲stringbulider對象的創建也消耗大量的性能,在字符串連接比較少的情況下,過度濫用stringbuilder會導致性能的浪費而非節約,只有大量無法預知次數的字符串操作才考慮stringbuilder的使用。從最後分析可以看出如果是相對較少的字符串拼接根本看不出太大差別。
-
Stringbulider的使用,最好制定合適的容量值,否則優於默認值容量不足而頻繁的進行內存分配操作,是不妥的實現方法。參考鏈接:https://www.cnblogs.com/haofuqi/p/4826262.html
4.什麼是擴展方法?
-
一句話解釋,擴展方法使你能夠向現有類型“添加”方法,無需修改類型
-
條件:按擴展方法必須滿足的條件,1.必須要靜態類中的靜態方法2.第一個參數的類型是要擴展的類型,並且需要添加this關鍵字以標識其爲擴展方法
-
建議:通常,只在不得已的情況下才實現擴展方法,並謹慎的實現
-
使用:不能通過類名調用,直接使用類型來調用
5.byte a =255;a+=5;a的值是多少?
byte的取值範圍是-2的8次方至2的8次方-1,-256至258,a+=1時,a的值時0,a+=5時,a的值是0,所以a+=5時,值是4
6.什麼是裝箱和拆箱?
-
裝箱就是隱式地將一個值類型轉換成引用類型,如:
int i=0;
Syste.Object obj=i;
-
拆箱就是將引用類型轉換成值類型,如:
int i=0;
System.Object obj=i;
int j=(int)obj;(將obj拆箱)
7.值類型和引用類型的區別
-
值類型變量是直接包含值。將一個值類型變量賦給另一個值類型變量,是複製包含的值,默認值是0。
-
引用類型變量的賦值只複製對對象的引用,而不復制對象本身,默認值是null
-
值類型有整形、浮點型、bool、枚舉。
-
引用類型有class、delegate、Object、string
-
值類型存儲在棧中,引用類型存儲在堆中
8.new關鍵字的作用
-
運算符:創建對象實例
-
修飾符:在派生類定義一個重名的方法,隱藏掉基類方法
-
約束:泛型約束定義,約束可使用的泛型類型,如:
public class ItemFactory<T> where T : IComparable, new()
{
}
9. int?和int有什麼區別
-
int?爲可空類型,默認值可以是null
-
int默認值是0
-
int?是通過int裝箱爲引用類型實現
10. C#中的委託是什麼?
一句話解釋就是:將方法當作參數傳入另一個方法的參數。.net中有很多常見的委託如:Func 、Action 作用:提高方法的擴展性
11.用最有效的方法算出2乘以8等於幾?
位運算是最快,使用的是位運算 邏輯左位移<<。方法是2<<3相當於0000 0000 0000 0010 (2的16位int二進制)左移三位就是 0000 0000 0001 0000(16的二進制)
12.const和readonly有什麼區別?
都可以標識一個常量。主要有以下區別:
-
1、初始化位置不同。const必須在聲明的同時賦值;readonly即可以在聲明處賦值,也可以在靜態構造方法(必須是靜態構造方法,普通構造方法不行)裏賦值。
-
2、修飾對象不同。const即可以修飾類的字段,也可以修飾局部變量;readonly只能修飾類的字段
-
3、const是編譯時常量,在編譯時確定該值;readonly是運行時常量,在運行時確定該值。
-
4、const默認是靜態的;而readonly如果設置成靜態需要顯示聲明
-
5、修飾引用類型時不同,const只能修飾string或值爲null的其他引用類型;readonly可以是任何類型。
13.現有一個整數number,請寫一個方法判斷這個整數是否是2的N次方
-
4(100)、5(101)、8(1000)、16(10000)
-
取模運算:用number%2==0可以判斷,但是這個有點低級
-
位運算:(使用位運算邏輯並,兩個位上的都爲1纔是1,其餘都是0,判斷是否等於0)
-
4&3相當於100&011 ,結果是000等於0,所以4是2的n次方
-
5&4相當於101&100,結果是100不等於0,所以5不是2的n次方
如果要問如果是2的N次方,這個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:通用語言系統。CLS:通用語言規範。CLR:公共語言運行庫。
-
CTS:Common Type System 通用類型系統。Int32、Int16→int、String→string、Boolean→bool。每種語言都定義了自己的類型,.Net通過CTS提供了公共的類型,然後翻譯生成對應的.Net類型。
-
CLS:Common Language Specification 通用語言規範。不同語言語法的不同。每種語言都有自己的語法,.Net通過CLS提供了公共的語法,然後不同語言翻譯生成對應的.Net語法。
-
CLR:Common Language Runtime 公共語言運行時,就是GC、JIT等這些。有不同的CLR,比如服務器CLR、Linux CLR(Mono)、Silverlight CLR(CoreCLR)。相當於一個發動機,負責執行IL。
15.在.net中,配件的意思是?
程序集。(中間語言,源數據,資源,裝配清單)
16.分析下面代碼,a、b的值是多少?
string strTmp = "a1某某某";
int a = System.Text.Encoding.Default.GetBytes(strTmp).Length;
int b = strTmp.Length;
分析:一個字母、數字佔一個byte,一箇中文佔佔兩個byte,所以a=8,b=5
17.Strings = new String(“xyz”);創建了幾個String Object?
兩個對象,一個是“xyz”,一個是指向“xyz”的引用對象s。
18.靜態成員和非靜態成員的區別
-
1.靜態成員用statis修飾符聲明,在類被實例化時創建,通過類進行訪問
-
2.不帶statis的變量時非靜態變量,在對象被實例化時創建,通過對象進行訪問,
-
3.靜態方法裏不能使用非靜態成員,非靜態方法可以使用靜態成員
-
4.靜態成員屬於類,而不屬於對象
19.c#可否對內存直接操作
C#在unsafe 模式下可以使用指針對內存進行操作, 但在託管模式下不可以使用指針,C#NET默認不運行帶指針的,需要設置下,選擇項目右鍵->屬性->選擇生成->“允許不安全代碼”打勾->保存
20.short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?
s1+1不能顯式轉換成short類型,可以修改爲s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正確
21.什麼是強類型,什麼是弱類型?哪種更好些?爲什麼?
強類型是在編譯的時候就確定類型的數據,在執行時類型不能更改,而弱類型在執行的時候纔會確定類型。沒有好不好,二者各有好處,強類型安全,因爲它事先已經確定好了,而且效率高。一般用於編譯型編程語言,如c++,java,c#,pascal等,弱類型相比而言不安全,在運行的時候容易出現錯誤,但它靈活,多用於解釋型編程語言,如javascript,vb,php等
22.using關鍵字的作用
-
1.引用命名空間,也可using 別名
-
2.釋放資源,實現了IDisposiable的類在using中創建,using結束後會自定調用該對象的Dispose方法,釋放資源。
23.ref和out有什麼區別
-
1.都是按引用類型進行傳遞
-
2.屬性不是變量不能作爲out、ref參數傳遞
-
3.ref參數必須初始化。out不需要初始化
-
4.作用,當方法有多個返回值時,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,靜態 構造方法計算一次,兩個實例化對象計算兩次。
26.關於構造函數說法正確的是哪個?
a)構造函數可以聲明返回類型。
b)構造函數不可以用private修飾
c)構造函數必須與類名相同
d)構造函數不能帶參數
答案:c ,構造函數必須與類名相同,可以傳遞多個傳遞,作用就是便於初始化對象成員,不能有任何返回類型
27.Math.Round(11.5)等於多少? Math.Round(-11.5)等於多少?
-
Math.Round(11.5)=12
-
Math.Round(-11.5)=-12
28.&和&&的區別
-
相同點
&和&&都可作邏輯與的運算符,表示邏輯與(and),當運算符兩邊的表達式的結果都爲true時,其結果才爲true,否則,只要有一方爲false,則結果爲false。(ps:當要用到邏輯與的時候&是毫無意義,&本身就不是幹這個的)
-
不同點
if(loginUser!=null&&string.IsnullOrEmpty(loginUser.UserName))
&&具有短路的功能,即如果第一個表達式爲false,則不再計算第二個表達式,對於上面的表達式,當loginUser爲null時,後面的表達式不會執行,所以不會出現NullPointerException如果將&&改爲&,則會拋出NullPointerException異常。(ps:所以說當要用到邏輯與的時候&是毫無意義的)
& 是用作位運算的。
-
總結
&是位運算,返回結果是int類型 &&是邏輯運算,返回結果是bool類型
29. i++和++i有什麼區別?
-
1.i++是先賦值,然後再自增;++i是先自增,後賦值。
-
2.i=0,i++=0,++i=1;Console.WriteLine(++i==i++); 結果位true
30.as和is的區別
-
as在轉換的同時判斷兼容性,如果無法進行轉換,返回位null(沒有產生新的對象),as轉換是否成功判斷的依據是是否位null is只是做類型兼容性判斷,並不執行真正的類型轉換,返回true或false,對象爲null也會返回false。
-
as比is效率更高,as只需要做一次類型兼容檢查
推薦閱讀
作者信息:
【文章信息】:作者-張林
【原創公衆號】:dotNet全棧開發。
【簡介】:CSDN 博客專家, xamarin跨平臺開發者,博客園app開發者(ps:雖然下載量還行10萬+,並沒有什麼大用)這是一個堅持原創的技術公衆號,每天堅持推送各種 dotNet 基礎/進階文章,編程技巧,爬蟲實戰,面試經驗,xamarin開發系列不定期分享各類資源。
【福利】:送你新人大禮包一份,關注微信公衆號,後臺回覆:“CSDN” 即可獲取! 版權聲明:本文爲CSDN博主「dotNet全棧開發」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
版權聲明:本文爲CSDN博主「dotnet全棧開發」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/kebi007/article/details/103502349