2018年9月7日.NET笔试面试题

GC 是什么? 为什么要有 GC?

  • C/C++中由程序员进行对象的回收像学校食堂中由学生收盘子,.Net 中由 GC进行垃圾回收像餐馆中店员去回收。
  • GC 是垃圾收集器(Garbage Collection),程序员不用担心内存管理,因为垃圾收集器会自动进行管理。
  • GC 只能处理托管内存资源的释放,对于非托管资源则不能使用 GC 进行回收,必须由程序员手工回收。
  • 例:
    FileStream 或者 SqlConnection 需要程序员调用 Dispose 进行资源的回收。
  • 要请求垃圾收集,可以调用下面的方法:GC.Collect(),一般不需要手动调用。

当一个对象没有任何变量指向(不再能使用)的时候就可以被回收了,但不一定会立即被回收。

  • 代码示例
object obj = new object();//只有new才会有新对象
Console.WriteLine(obj);
object obj2 = obj;
obj = null;
obj2 = null;
Console.WriteLine();

StringBuilder 和 String 的区别?

  • String在进行运算时(如赋值、拼接等)会产生一个新的实例,而StringBuilder则不会,所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用StringBuilder,不要使用String

两个类的工作原理不同:

  • String类是一种传统的修改字符串的方式,它确实可以完成把一个字符串添加到另一个字符串上的工作没错,但是在.NET框架下,这个操作实在是划不来。
  • 因为系统先是把两个字符串写入内存,接着删除原来的String对象,然后创建一个String对象,并读取内存中的数据赋给该对象,这一来二去的,消耗了不少时间。
  • 使用System.Text命名空间下面的StringBuilder类就不是这样了,它提供的Append方法,能够在已有对象的原地进行字符串的修改,简单而且直接。
  • 一般情况下觉察不到这二者效率的差异,但如果你要对某个字符串进行大量的添加操作,那么 StringBuilder类所耗费的时间和 String 类简直不是一个数量级的。

string str = null 与 string str = "" 的区别

string str = null; //不给str分配内存空间,实际上拥有的对象为Null。
string str = ""; //会给str分配长度为空字符串的内存空间。

你可能感兴趣的:(2018年9月7日.NET笔试面试题)