笔者近几年前前后后面试了50+公司左右,怎么讲呢,每个面试官的风格都不一样,要问的问题也不尽相同。但是面试是需要技巧的,提前准备工作以及如何把简历写得让人眼前一亮是很有必要的,关于这一块将在其它篇幅作介绍。话不多说,先总结出面试遇到的主流面试题,将分8篇文章,每篇25道,几乎涵盖90%以上的面试知识点,适用于中高级、架构师去复习,暂时还那么多时间把答案写出来,后续会加上,如果大家有好的答案也可以在评论区写出来,谢谢大家。
一、如何在.NET中做deep copy?
1)使用序列化反序列化对象实现深度克隆
2)使用反射实现深度克隆
参考文章:C# 中的浅拷贝和深拷贝 如何在C#中做deep copy?
二、throw与throw e的区别?应该用哪一个?
先来看下面这个例子
using System;
using System.Text;
namespace ConsoleApp4
{
class Program
{
static void Main(string[] args)
{
try
{
Method2();
}
catch (Exception ex)
{
Console.Write(ex.StackTrace.ToString());
Console.ReadKey();
}
}
private static void Method2()
{
try
{
Method1();
}
catch (Exception ex)
{
throw;
}
}
private static void Method1()
{
try
{
throw new Exception("Inside Method1");
}
catch (Exception)
{
throw;
}
}
}
}
上面的代码输出的结果如下:显示了完整的层次结构和引发异常的方法名称。
现在单独把Method2()方法中的异常抛出throw改成throw ex。
private static void Method2()
{
try
{
Method1();
}
catch (Exception ex)
{
throw ex;
}
}
接着再把程序运行一遍,执行的结果如下所示:可以看出引发异常的Method1并没有被抛出。throw ex忽略所有先前的层次结构,重置了堆栈跟踪,抛出的异常将成为“原始”异常,因此所有先前的堆栈跟踪都不会存在。
结论:引发异常后,堆栈携带的部分信息就是堆栈跟踪。堆栈跟踪是方法调用层次结构的列表,该列表以引发异常的方法开始并以捕获异常的方法结束。如果通