有多少人还努力在求职的道路上,献上本人面试踩到的地雷
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结果