上個月離職了,這幾天整理了一些常見的面試題,整理成一個系列給你們分享一下,機會是給有準備的人,面試造火箭,工做擰螺絲,不慌,共勉。 1.net必問的面試題系列之基本概念和語法 2.net必問的面試題系列之面向對象 3.net必問的面試題系列之設計模式 4.net必問的面試題系列之集合、異常、泛型 5.net必問的面試題系列之簡單算法 6.net必問的面試題系列之數據庫 7.net必問的面試題系列之web前端 .net打雜工程師的面試感想和總結 ###問題目錄 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.能用foreach遍歷訪問的對象須要實現 ______接口或聲明______方法的類型。 19.靜態成員和非靜態成員的區別 20.c#能否對內存直接操做 21.short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯? 22.什麼是強類型,什麼是弱類型?哪一種更好些?爲何? 23.using關鍵字的做用 24.ref和out有什麼區別 25.a.Equals(b)和a==b同樣嗎? 26下面這段代碼求值 27關於構造函數說法正確的是哪一個? 28 Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 29 &和&&的區別 30 i++和++i有什麼區別? 31 float f = 3.4; 是否正確? 32 什麼是自動轉換,什麼是強制轉換,何時須要自動轉換,何時須要強制轉換 32 as和is的區別javascript
string.Empty至關於「」,Empty是一個靜態只讀的字段。 string str="" ,初始化對象,並分配一個空字符串的內存空間 string str=null,初始化對象,不會分配內存空間php
a 本題考查的是數據類型能承載數據的大小。 b 1byte =8bit,1個漢字=2個byte,1個英文=1個byte=8bit c 因此bc是對的,deg是錯的。'a'是char類型,a錯誤 d java byte取值範圍是-128~127, 而C#裏一個byte是0~255html
a 都是引用類型,分配再堆上 b StringBuilder默認容量是16,能夠容許擴充它所封裝的字符串中字符的數量.每一個StringBuffer對象都有必定的緩衝區容量,當字符串大小沒有超過容量時,不會分配新的容量,當字符串大小超過容量時,會自動增長容量。 c 對於簡單的字符串鏈接操做,在性能上stringbuilder不必定老是優於string。由於stringbulider對象的建立也消耗大量的性能,在字符串鏈接比較少的狀況下,過分濫用stringbuilder會致使性能的浪費而非節約,只有大量沒法預知次數的字符串操做才考慮stringbuilder的使用。從最後分析能夠看出若是是相對較少的字符串拼接根本看不出太大差異。 d Stringbulider的使用,最好制定合適的容量值,不然優於默認值容量不足而頻繁的進行內存分配操做,是不妥的實現方法。 參考連接:http://www.javashuo.com/article/p-havqpruy-dc.html前端
a 一句話解釋,擴展方法使你可以向現有類型「添加」方法,無需修改類型 b 條件:按擴展方法必須知足的條件,1.必需要靜態類中的靜態方法2.第一個參數的類型是要擴展的類型,而且須要添加this關鍵字以標識其爲擴展方法 c建議:一般,只在不得已的狀況下才實現擴展方法,並謹慎的實現 d使用:不能經過類名調用,直接使用類型來調用java
byte的取值範圍是-2的8次方至2的8次方-1,-256至258,a+=1時,a的值時0,a+=5時,a的值是0,因此a+=5時,值是4c++
裝箱就是隱式地將一個值類型轉換成引用類型,如: int i=0; Syste.Object obj=i; 拆箱就是將引用類型轉換成值類型,如: int i=0; System.Object obj=i; int j=(int)obj;(將obj拆箱)web
運算符:建立對象實例面試
修飾符:在派生類定義一個重名的方法,隱藏掉基類方法算法
約束:泛型約束定義,約束可以使用的泛型類型數據庫
public class ItemFactory<T> where T : IComparable, new() { }
int?爲可空類型,默認值能夠是null,int默認值是0,int?是經過int裝箱爲引用類型實現
一句話解釋就是:將方法看成參數傳入另外一個方法的參數。 .net中有不少常見的委託如:Func 、Action 做用:提升方法的擴展性
位運算是最快,使用的是位運算 邏輯左位移<<。 方法是2<<3至關於0000 0000 0000 0010 (2的16位int二進制)左移三位就是 0000 0000 0001 0000(16的二進制) 相關參考連接:http://www.javashuo.com/article/p-rwnlhlnl-ks.html
均可以標識一個常量。主要有如下區別:
一、初始化位置不一樣。const必須在聲明的同時賦值;readonly便可以在聲明處賦值,也能夠在靜態構造方法(必須是靜態構造方法,普通構造方法不行)裏賦值。 二、修飾對象不一樣。const便可以修飾類的字段,也能夠修飾局部變量;readonly只能修飾類的字段 三、const是編譯時常量,在編譯時肯定該值;readonly是運行時常量,在運行時肯定該值。 四、const默認是靜態的;而readonly若是設置成靜態須要顯示聲明 五、修飾引用類型時不一樣,const只能修飾string或值爲null的其餘引用類型;readonly能夠是任何類型。
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; }
CTS:通用語言系統。CLS:通用語言規範。CLR:公共語言運行庫。
CTS:Common Type System 通用類型系統。Int3二、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。
程序集。(中間語言,源數據,資源,裝配清單)
string strTmp = "a1某某某"; int a = System.Text.Encoding.Default.GetBytes(strTmp).Length; int b = strTmp.Length;
分析:一個字母、數字佔一個byte,一箇中文佔佔兩個byte,因此a=8,b=5
兩個對象,一個是「xyz」,一個是指向「xyz」的引用對象s。
IEnumerable 、 GetEnumerator
1.靜態成員用statis修飾符聲明,在類被實例化時建立,經過類進行訪問 2.不帶statis的變量時非靜態變量,在對象被實例化時建立,經過對象進行訪問, 3.靜態方法裏不能使用非靜態成員,非靜態方法可使用靜態成員 4.靜態成員屬於類,而不屬於對象
C#在unsafe 模式下可使用指針對內存進行操做, 但在託管模式下不可使用指針,C#NET默認不運行帶指針的,須要設置下,選擇項目右鍵->屬性->選擇生成->「容許不安全代碼」打勾->保存
s1+1不能顯式轉換成short類型,能夠修改成s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正確
強類型是在編譯的時候就肯定類型的數據,在執行時類型不能更改,而弱類型在執行的時候纔會肯定類型。沒有好很差,兩者各有好處,強類型安全,由於它事先已經肯定好了,並且效率高。通常用於編譯型編程語言,如c++,java,c#,pascal等,弱類型相比而言不安全,在運行的時候容易出現錯誤,但它靈活,多用於解釋型編程語言,如javascript,vb,php等
1.引用命名空間 2.釋放資源,實現了IDisposiable的類在using中建立,using結束後會自定調用該對象的Dispose方法,釋放資源。
1.都是按引用類型進行傳遞 2.屬性不是變量不能做爲out、ref參數傳遞 3.ref參數必須初始化。out不須要初始化 4.做用,當方法有多個返回值時,out很是有用
不同,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,靜態 構造方法計算一次,兩個實例化對象計算兩次。
a)構造函數能夠聲明返回類型。
b)構造函數不能夠用private修飾
c)構造函數必須與類名相同
d)構造函數不能帶參數 答案:c ,構造函數必須與類名相同,能夠傳遞多個傳遞,做用就是便於初始化對象成員,不能有任何返回類型
c#裏面都是12
&是位運算邏輯與運算符,如true&true 結果是true,0&0結果是0,2&3的結果是(10&11=10)2 &&是與運算符,兩個都爲true纔是true 參考連接http://www.javashuo.com/article/p-rwnlhlnl-ks.html
1.i++是先賦值,而後再自增;++i是先自增,後賦值。 2.i=0,i++=0,++i=1; Console.WriteLine(++i==i++); 結果位true
不正確,。3.4是double類型雙精度的,double向下轉型float會形成精度缺失(相似於long轉int),所以須要強制轉換,float f =3.4F 或者float f =(float)3.4
1.自動類型轉換:編譯器自動完成類型轉換,不須要在程序中編寫代碼。 2.強制類型轉換:強制編譯器進行類型轉換,必須在程序中編寫代碼 3.轉換規則:從存儲範圍小的類型到存儲範圍大的類型,是自動轉換,如byte=>short=>int=>long
as在轉換的同時判斷兼容性,若是沒法進行轉換,返回位null(沒有產生新的對象),as轉換是否成功判斷的依據是是否位null is只是作類型兼容性判斷,並不執行真正的類型轉換,返回true或false,對象爲null也會返回false。 as比is效率更高,as只須要作一次類型兼容檢查
有興趣的能夠關注一下個人微信公衆號[dotNet全棧開發],分享一些編程相關的經典文章
原文出處:https://www.cnblogs.com/zhangmumu/p/11406751.html