有多少人還努力在求職的道路上,獻上本人面試踩到的地雷
1:ref和out有什麼區別。
不少人應該可能都沒有接觸過這種用法, 這兩個關鍵字均是傳址的用法。
class Program
{
public
static
void Main(String[] args)
{
int r, o;
int m=0;
r = RefValue(1,
ref m);
Console.WriteLine(
"after Ref:m={0}",m);
o = OutValue(1,
out m);
Console.WriteLine(
"after Out:m={0}", m);
Console.WriteLine(
"ref={0}", r);
Console.WriteLine(
"out={0}", o);
Console.ReadLine();
}
public
static
int RefValue(
int i,
ref
int j)
{
return i + j;
}
public
static
int OutValue(
int i,
out
int j)
{
j = 222;
return i + j;
}
}
貼上我回到家測試用的代碼,在方法RefValue和OutValue中,OutValue的參數J被賦值222,由於out的用法就是「只出不進」,如OutValue(1,out m) 雖然m爲0,不過因爲關鍵字out 定義int j,因此m的值就被擋在了函數的外面,而在函數內部就必須給j賦值爲222,將m的值轉成了j的值222(事實上,是讓m指向了j的地址),ref也是傳址方式,不一樣的是在上面代碼中,RefValue中沒有對j進行賦值,調試則不會出現錯誤提示,由於調用RefValue(1,ref m)時,0的寫進了方法裏面,因此在返回的結果就是1+0=1,若在RefValue方法裏面給j賦值,結果會和out輸出的結果相同,總結就是你們常見的:ref可進可出,out只出不進
2:傳址和傳值的區別。
(看到這個題目直接讓我曲解了他們的意思)
傳址就是有變量A=5,B=6,把A的地址指向B,再取出A的值爲6
傳值就是有變量A=5,B=6,把B的值賦值給A,再輸出A的值爲6
3:數據庫鏈接
(原先的題目是寫一段ODBC的數據庫鏈接,因爲我忘記了,就用ADO.NET代替了,結果還少寫了close())
try
{
string source=
"xxxx;server=xxxx;uid=xx;xxxxx"
SqlConnection conn =
new SqlConnnection(source);
conn.open();
}
catch(e)
{
}
finally
{
conn.close();
}
一下的結果會是比較好的形式。
4:接口和抽象類的區別
這種題目須要瞭解接口和抽象類的定義和概念,才能比較好的掌握回答的尺度,答案,網絡上漫天飛,我就很少說了。
5:遞歸求值
這個是比較常見的問題,網上也會有不少不少,好比:1,1,2,3,5,8,13.....問這樣的序列第三十位的值。
public
int Foo(
int i)
{
if(i<=0)
return 0;
else
if(i>0 && i<=2)
return 1;
else
return Foo(i-1)+Foo(i-2);
}
6:堆和棧的區別
簡單來解釋就是:棧用於存放值類型(如int float***);堆用於存放引用類型(object)
棧是由編譯器自動分配釋放的,而堆是由程序員分配釋放的
(解釋的比較爛,求各位幫忙完善,簡單易懂最好)
題目網上有不少,重要的是在面試的時候不光會寫,還要真的能夠解釋,那纔會吸引到別人。
7:ReferenceEquals()和Equals()的區別
簡單來講,Reference 應用於對象類型,Equals應用於值類型的比較
int v=5;ReferenceEquals(v,v)返回false結果 對比值類型
ReferenceEquals(null,null)返回true結果 對比引用類型
int v=5;Equals(v,v)返回true結果