1、什么是.NET?什么是CLI?什么是CLR?IL是什么?JIT是什么,它是如何工作的?GC是什么,简述一下GC的工作方式?
.Net是微软推出的框架
CLI是公共语言接口(规范)
CLR是公共语言运行时
IL是运行在.Net之上的类似汇编的语言,
JTT是即时编译器,用于首次加载的时候编译可重复运行的模块,虽然CLR理解IL, 但是CPU只认识二进制指令, 所以CLR需要JIT的帮助, 将IL翻译成CPU指令. JIT按需工作, 当一个.NET方法即将被执行时, JIT会介入, 把该方法(IL指令) 编译成CPU指令, 并保存以供重用。
GC是垃圾回收,用于回收当前进程中已无人使用的垃圾对象,主要是根据索引数来判断是否应该收回,有定时机制。
2、类(class)和结构(struct)的区别是什么?它们对性能有影响吗?.NET BCL里有哪些是类(结构),为什么它们不是结构(类)?在自定义类型时,您如何选择是类还是结构?
首先,1.0一个是值类型,类是引用类型。就是说值类型是用于存储数据的值,引用类型是用于存储对实际数据的引用地址。,
2.0结构是没有构造函数的。因为构造函数是为了初始化类的字段而存在的,而结构体并不需要初始化就能使用。
对结构体的定义是有些事物是相互关联的,又共同的描述一个完整的事物,主要是描述一个结果上,这个时候就用到结构体。
在自定义类型时,通常对效率要求比较苛刻,或者对内存布局有要求(例如跟C++或者unsafe代码交互)的时候会选择结构类型,而需要频繁传递,各处引用时则选择类。
3、在.NET程序运行过程中,什么是堆,什么是栈?什么情况下会在堆(栈)上分配数据?它们有性能上的区别吗?“结构”对象可能分配在堆上吗?
堆就是一大块自由的内存,把它分成若干内存块,系统维护各个内存块的已分配和未分配状态。栈就是一小块内存,以push和pop的方式分配和回收。一般而言,函数局部变量和参数都是在栈上的,而new的对象在堆上分配。结构对象在做为类成员的时候就是分配在堆上。