.NET_初中高级开发人员面试题
.net framework相关面试题

1.请简述.NET Framework是什么?
Framework和.NET Core有什么区别?
3.请解释一下什么是装箱和拆箱?
4.什么是垃圾回收?请简述.NET Framework中的垃圾回收机制。
5.请解释一下什么是委托?在.NET Framework中如何使用委托?
6.什么是事件?在.NET Framework中如何使用事件?
7.请简述一下.NET Framework中的异常处理机制。
8.请解释一下什么是泛型?在.NET Framework中如何使用泛型?
9.请解释一下什么是LINQ?在.NET Framework中如何使用LINQ?
10.请解释一下什么是反射?在.NET Framework中如何使用反射?
以上问题只是.NET Framework面试中的一部分,具体的面试题还会根据面试官的要求和应聘的职位有所不同。
.NET开发人员面试题(含答案)

.NET开发人员试题(综合)每题5分1、用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?2、软件开发过程一般有几个阶段?每个阶段的作用?3、请列举一些您用到过的设计模式以及在什么情况下使用该模式?4、您对编程的兴趣如何?工作中遇到不懂的问题是怎样去解决的?您一般怎样去提高自己的编程水平?5、您离职的原因是什么?.NET开发人员试题(基础)一、填空:每题2分1.面向对象的语言具有继承性、封装性、多态性。
2. 能用foreach遍历访问的对象需要实现 IEnumerable _接口或声明3.委托声明的关键字是delegate ?4.在.Net托管代码中我们不用担心内存漏洞,这是因为有了gc __?5.当类T只声明了私有实例构造函数时,则在T的程序文本外部,不可以(可以or 不可以)从T派生出新的类,不可以(可以or 不可以)直接创建T的任何实例。
二、单选:每题2分6.在对SQL Server 数据库操作时应选用(A)。
a)SQL Server .NET Framework 数据提供程序;b)OLE DB .NET Framework 数据提供程序;c)ODBC .NET Framework 数据提供程序;d)Oracle .NET Framework数据提供程序;7.以下描述错误的是(A)a)在C++中支持抽象类而在C#中不支持抽象类。
b)C++中可在头文件中声明类的成员而在CPP文件中定义类的成员,在C#中没有头文件并且在同一处声明和定义类的成员。
c)在C#中可使用new 修饰符显式隐藏从基类继承的成员。
d)在C#中要在派生类中重新定义基类的虚函数必须在前面加Override。
8.C#的数据类型有(A)a)值类型和调用类型;b)值类型和引用类型;c)引用类型和关系类型;d)关系类型和调用类型;9.下列描述错误的是(D)a)类不可以多重继承而接口可以;b)抽象类自身可以定义成员而接口不可以;c)抽象类和接口都不能被实例化;d)一个类可以有多个基类和多个基接口;10.在DOM中,装载一个XML文档的方法(D)a)save方法b)load方法c)loadXML方法d)send方法三、不定项选择:每题3分11. 以下叙述正确的是:B CA. 接口中可以有虚方法。
net面试必会6题经典

net面试必会6题经典当准备面试时,掌握经典的面试问题确实很重要。
以下是六个经典的面试问题,我将从不同角度对每个问题进行全面回答。
1. 请介绍一下自己。
这是一个经典的开场问题,面试官希望通过这个问题更好地了解你。
你可以从个人背景、教育背景、工作经验、专业技能和职业目标等方面进行介绍。
强调与应聘职位相关的经验和技能,突出你的优势。
2. 你为什么对我们公司感兴趣?这个问题考察了你对公司的了解程度以及你选择这家公司的原因。
在回答时,可以提及公司的产品、文化、发展前景等方面,并结合自己的职业发展规划和价值观来说明为什么对该公司感兴趣。
3. 你最大的优点和缺点是什么?在回答这个问题时,要客观真实地描述自己的优点和缺点,不要刻意夸大或淡化。
优点可以包括沟通能力、团队合作、解决问题能力等,缺点可以是工作经验相对较少、追求完美导致效率较低等。
同时,要说明在工作中如何充分发挥优点、克服缺点。
4. 你是如何处理工作中的压力和挑战的?这个问题考察了你的抗压能力和解决问题的能力。
可以结合具体的案例来说明自己是如何应对工作中的压力和挑战,比如制定合理的工作计划、寻求他人帮助、调整心态等。
5. 你是如何与团队合作的?这个问题考察了你的团队合作能力和沟通能力。
可以举例说明自己在团队中扮演的角色、如何协助他人、解决团队内部矛盾等,突出你在团队中的价值和作用。
6. 你对未来的职业规划是什么?这个问题考察了你的职业目标和规划能力。
可以结合自己的职业发展规划,说明对于当前职位的选择是基于对未来发展的认知和规划,展示自己的目标和追求。
总的来说,面试问题的回答要真实、积极、具体,突出自己的优势和特点,同时与应聘职位和公司进行结合,展现出自己与公司的匹配度和价值。
希望我的回答能够帮助到你。
.NET面试题完整版(含前、后端及数据库等多个个方面带参考答案)

.NET⾯试题完整版(含前、后端及数据库等多个个⽅⾯带参考答案)⼀。
基础篇1.简述 private、 protected、 public、 internal 修饰符的权限。
private : 私有成员, 在类的内部才可以访问。
protected : 保护成员,该类内部和继承类中可以访问。
public : 公共成员,完全公开,没有访问限制。
internal: 在同⼀命名空间内可以访问。
2 .列举 页⾯之间传递值的⼏种⽅式。
QueryString,Session,Cookies,Application,Server.Transfer。
2.C#中的委托是什么?事件是不是⼀种委托?委托是将⽅法作为参数带⼊另⼀个⽅法,委托可以理解为指向⼀个函数的引⽤,事件是⼀种特殊的委托。
3.堆和栈的区别? 1、栈(操作系统):由操作系统⾃动分配释放 ,存放函数的参数值,局部变量的值等。
其操作⽅式类似于数据结构中的栈; 2、堆(操作系统): ⼀般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配⽅式倒是类似于链表。
5.abstract class和interface有什么区别?1.抽象类可以有构造⽅法,接⼝中不能有构造⽅法。
2.抽象类中可以有普通成员变量,接⼝中没有普通成员变量3.抽象类中可以包含⾮抽象的普通⽅法,接⼝中的所有⽅法必须都是抽象的,不能有⾮抽象的普通⽅法。
4. 抽象类中的抽象⽅法的访问类型可以是public,protected和(默认类型,虽然eclipse下不报错,但应该也不⾏),但接⼝中的抽象⽅法只能是public类型的,并且默认即为public abstract类型。
5. 抽象类中可以包含静态⽅法,接⼝中不能包含静态⽅法6. 抽象类和接⼝中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接⼝中定义的变量只能是public static final类型,并且默认即为public static final类型。
net面试必会6题经典

net面试必会6题经典
当准备面试时,掌握一些经典的面试问题是非常重要的。
以下是一些经典的面试问题,希望能对你有所帮助:
1. 请介绍一下你自己。
这是一个常见的开场问题,面试官希望通过你的回答了解你的背景、教育经历、工作经验和个人特点。
2. 你最擅长的编程语言是什么?并解释一下该语言的优缺点。
这个问题考察了你对编程语言的熟悉程度,以及你对不同编程语言的理解和比较能力。
3. 请解释一下什么是面向对象编程(OOP)?
面向对象编程是一种常见的编程范式,面试官可能会要求你解释OOP的基本概念、特点以及在实际项目中的应用。
4. 什么是RESTful API?它的优点是什么?
RESTful API是一种常见的API设计风格,面试官可能会通过
这个问题考察你对API设计的理解和经验。
5. 请解释一下什么是数据库索引?它的作用是什么?
数据库索引是数据库中常用的性能优化手段,面试官可能会通
过这个问题考察你对数据库优化的理解和经验。
6. 你在团队中遇到过怎样的技术挑战?你是如何解决的?
这个问题考察了你在实际项目中遇到的问题和解决问题的能力,同时也展现了你在团队中的协作和沟通能力。
以上是一些经典的面试问题,希望对你有所帮助。
在准备面试时,除了回答这些问题,还要多多练习,提高自己的表达能力和思
维能力。
祝你面试顺利!。
33条C#Net经典面试题目及答案

33条C#、.Net经典面试题目及答案1,请你说说.NET中类和结构的区别?答:结构和类具有大体的语法,但是结构受到的限制比类要多。
结构不能申明有默认的构造函数,为结构的副本是又编译器创建和销毁的,所以不需要默认的构造函数和析构函数。
结构是值类型,所以对结构变量所做的改变不会影响其的原值,而类是应用类型,改变其变量的值会改变其原值。
申明结构用Struck 关键字,申明类用class关键字,向方法传递结构是时是通过值传递的,而不是通过引用。
与类不同,结构的实例化可以不使用New关键字。
类可以实现接口。
2,死锁的必要条件?怎么克服?答:系统的资源不足,进程的推进的顺序不合适,资源分配不当,一个资源每次只能被一个进程使用,一个资源请求资源时,而此时这个资源已阻塞,对已获得资源不放,进程获得资源时,未使用完前,不能强行剥夺。
3,接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类?答:接口是可以继承接口的,抽象类是可以实现接口的,抽象类可以继承实体类,但是有个条件,条件是,实体类必须要有明确的构造函数。
4,构造器Constructor是否可以被继承?是否可以被Override?答:Constructor不可以被继承,因此不能被重写(Overriding),但可以被重载(Overloading).5,当一个线程进入一个对象的方法后,其它线程是否可以进入该对象的方法?答:不可以,一个对象的方法只能由一个线程访问。
6,用最有效的方法算出等已8对于几?答:2<<3.7, C#是否可以对内存直接进行操作?答:这个问题比较难回答,也是个很大的问题。
但是可以这样问答。
C#是可以对内存进行直接操作的,虽然很少用到指针,但是C#是可以使用指针的,在用的时候需要在前边加unsafe,,在.net中使用了垃圾回收机制(GC)功能,它替代了程序员,不过在C#中不可以直接使用finalize方法,而是在析构函数中调用基类的finalize()方法。
net高级工程师面试题完整版

n e t高级工程师面试题集团标准化办公室:[VV986T-J682P28-JP266L8-68PNN].net软件工程师面试题基础题:1.简述string[]、ArrayList、List的区别。
数组:优点:o数组在内存中是连续存储的,索引速度非常快;o赋值和修改元素也很简单;不足:o两个数据之间插入数据比较麻烦;o声明数组的时候,必须指明数组的长度,数组长度过长会造成内存浪费,数组的长度过短,会造成数据溢出错误。
ArrayList:优点: framework 提供的用于数据存储和检索的专用类o大小依据存储的数据来动态扩展和收缩o继承IList,可以方便的进行数据的添加、插入和删除缺点:o允许插入不同类型的数据,都当做object类型处理o数据处理时可能出现类型不匹配的错误o存在装箱(值=》引用)拆箱的操作,会带来很大的性能损耗List:优点:o声明List集合时,需要声明集合内数据的对象类型o避免了类型安全问题和装箱拆箱的性能问题2.简述装箱和拆箱操作中的性能损耗是如何产生的。
3.简述对中的事件机制的理解。
4.在一个的三层结构系统中,以登录操作为例,简述在各层中如何组织代码。
5.简述相比DATASET,实体类在WEB项目中的优点与缺点。
6.简述GC是如何工作的。
Java采用VM(Virtual Machine)机制,由VM来管理程序的运行当然也包括对GC管理。
90年代末期.NET出现了,.NET采用了和Java类似的方法由CLR(Common Language Runtime)来管理。
Garbage Collector(垃圾收集器,在不至于混淆的情况下也成为GC)以应用程序的root 为基础,遍历应用程序在Heap上动态分配的所有对象[2],通过识别它们是否被引用来确定哪些对象是已经死亡的、哪些仍需要被使用。
已经不再被应用程序的root或者别的对象所引用的对象就是已经死亡的对象,即所谓的垃圾,需要被回收。
.net面试题及答案3篇

.net面试题及答案3篇.net面试题及答案11.JIT是什么,它是如何工作的?GC是什么,简述一下GC的工作方式?JIT:Just in time,C#或者是的代码首先被编译为IL存储在本地,当要运行这些代码的时候,CLR对IL进行第二次编译转换成机器码运行。
好处:可移植性,而且IL在加载到内存中时将受到类型安全性方面检查,这实现了更好的安全性和可靠性。
GC:垃圾回收(garbage collection),是根据程序的需要自动分配和回收内存的过程。
垃圾回收器处理的是引用对象,而且只回收堆上的内存。
这意味着假如维持对一个对象的引用,就会阻止GC重用对象使用的内存。
在.NET中,垃圾回收器采用的是mark-and-pact算法。
在一次垃圾回收周期开始的时候,它要识别对象的所有跟引用,根据这个引用可以遍历每个根引用所标识的一个树形结构,并递归确定所有引用指向的对象。
这样一来,垃圾回收器就可以识别所有可达的对象,在执行回收的时候,GC 不是枚举所有访问不到的对象,相反,通过压缩所有相邻的可达的对象来执行垃圾回收。
不可访问的对象就会被覆盖。
垃圾回收的宗旨是提高内存的利用率,它并不是用来清理文件句柄,和数据库连接字符串,端口或者其他有限的资源(终接器finalizer,不能被显示调用,不能传递任何参数,即不能被重载,只有垃圾回收器才能调用终接器,使用Using语句进行确定性终结2.类(class)和结构(struct)的区别是什么?它们对性能有影响吗?01. 值类型与引用类型结构是值类型:值类型在栈上分配地址,所有的基类型都是结构类型,例如:int 对应System.int32 结构,通过使用结构可以创建更多的值类型类是引用类型:引用类型在堆上分配地址堆栈的执行效率要比堆的执行效率高,可是堆栈的资源有限,不适合处理大的逻辑复杂的对象。
所以结构处理作为基类型对待的小对象,而类处理某个商业逻辑因为结构是值类型所以结构之间的赋值可以创建新的结构,而类是引用类型,类之间的赋值只是复制引用注:1.虽然结构与类的'类型不一样,可是他们的基类型都是对象(object),c#中所有类型的基类型都是object2.虽然结构的初始化也使用了New 操作符可是结构对象依然分配在堆栈上而不是堆上,如果不使用“新建”(new),那么在初始化所有字段之前,字段将保持未赋值状态,且对象不可用02.继承性结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确的用sealed声明,可是结构是隐式的sealed .类:完全可扩展的,除非显示的声明sealed 否则类可以继承其他类和接口,自身也能被继承注:虽然结构不能被继承可是结构能够继承接口,方法和类继承接口一样03.内部结构:结构:没有默认的构造函数,但是可以添加构造函数没有析构函数没有abstract 和sealed(因为不能继承)不能有protected 修饰符可以不使用new 初始化在结构中初始化实例字段是错误的类:有默认的构造函数有析构函数可以使用abstract 和sealed 有protected 修饰符必须使用new 初始化.net面试题及答案21.什么是元编程,.NET有哪些元编程的手段和场景?什么是反射?能否举一些反射的常用场景?有人说反射性能较差,您怎么看待这个问题?有什么办法可以提高反射的性能吗?学着做OA的时候,动态加载不同的DataProvider(Oracle和Sqlserver),方便,可以随时替换不用重新编译程序2.委托是什么?匿名方法是什么?在C#3.0中,Lambda表达式是什么?扩展方法是什么?LINQ是什么?您觉得C# 3.0中还有哪些重要的特性,它们带来了什么优势?BCL中哪些类库和这些特性有关?您*时最常用哪些?委托可以把一个方法作为参数代入另一个方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
初级.NET 开发人员- 任何使用.NET 的人都应知道的1. 描述线程与进程的区别?进程是系统所有资源分配时候的一个基本单位,拥有一个完整的虚拟空间地址,并不依赖线程而独立存在。
进程可以定义程序的一个实例,但它只是占据应用程序所使用的地址空间。
为了让进程完成一定的工作,进程必须至少占有一个线程,这个线程即为主线程,默认程序的工作都在这个主线程中完成,可以通过程序创建多个线程,使多个线程可以同时运行(多CPU 支持下),这就是多线程技术。
线程(Thread )与进程(Process )二者都定义了某种边界,不同的是进程定义的是应用程序与应用程序之间的边界,不同的进程之间不能共享代码和数据空间,而线程定义的是代码执行堆栈和执行上下文的边界。
同一进程中的不同线程共享代码和数据空间。
2. 什么是Windows 服务,它的生命周期与标准的EXE 程序有什么不同?Windows 服务是运行在windows 后台指定用户下(默认System )的应用程序,它没有标准的UI 界面,相比标准的EXE 程序,Windows 服务是在服务开始的时候创建,而在服务结束的时候销毁,而且可以设置服务是否与操作系统一起启动,一起关闭。
它支持三种方式:1 )自动方式2)手动方式3 )禁用。
自动方式下,Windows服务控制器将指导OS启动后自动启动服务并运行,而手动方式则必须手工启动服务,禁用的情况下服务将不能被启动。
另外标准的EXE 默认使用的当前登录的用户,而Windows 服务则默认使用System 用户,这在对系统资源访问的时候特别需要注意。
3. Windows 上的单个进程所能访问的最大存量是多少?它与系统的最大虚拟存一样吗?这对于系统设计有什么影响?这个需要针对硬件平台,公式为单个进程能访问的最大存量=2 的处理器位数次方/2 ,比如通常情况下,32 位处理器下,单个进程所能访问的最大存量为:2 32/2 = 2G 。
单个进程能访问的最大存量是最大虚拟存的1/2 ,因为要分配给操作系统一半虚拟存。
4. EXE 和DLL 之间的区间是什么?EXE 文件有一个入口点,比如说Main()函数,这样CLR 可以由此处执行这个EXE 文件,而DLL 不包含这样一个入口点所以不是可执行的。
DLL 文件主要包含一些程序集供其它函数调用。
5. 什么是强类型,什么是弱类型?哪种更好些?为什么? 强类型是在编译的时候就确定类型的数据,在执行时类型不能更改,而弱类型在执行的时候才会确定类型。
没有好不好,二者各有好处,强类型安全,因为它事先已经确定好了,而且效率高。
一般用于编译型编程语言,如C# 、Java 与C++ 等,弱类型相比而言不安全,在运行的时候容易出现错误,但它灵活,多用于解释型编程语言,如Javascript,VB 等。
6. PID 是什么?在做系统的故障排除时如何使用它?PID 是进程编号,在系统发现故障的时候,可以根据它寻找故障所发生的具体进程。
可通过Visual Studio 将故障进程附加到进程中进行调试。
7. 单个TCP/IP 端口上能够被多少个进程侦听?1个8. 什么是GAC ?它解决了什么问题?GAC 是Global Assembly Cache ,全局程序集缓存的简称。
它解决了几个程序共享某一个程序集的问题。
不必再将那个被共享的程序集拷贝到应用程序目录了,.NET 应用程序在加载的时候, 会首先查看全局应用程序集缓存, 如果有就可以直接使用, 没有再到应用程序 目录进行查找。
GAC 还有一个很重要的作用,所有被放入 GAC 的程序集都是强名程序集,这样可以保证 相同文件名不同版本的程序集被正确的引用,这样解决了 COM 时代的 DLL 地狱问题。
同 时强名还可以防止程序集伪造。
中级 .NET 开发人员1. 阐述面向接口、面向对象、面向方面编程的区别再根据行为规创建实现, 严格的来 因为面向对象也强调的是本末倒置原则, 也就是 而抽象不依赖于具体实现。
面向对象是对复杂问题的分解。
面向方面的编 它解决了很多面向对象无法解决的问题, 比如面向对象技术只能对业务相 而无法对和业务无关的代码模块化。
而面向方面正是解决这一问题的方案, 将应用程序中的商业逻辑与对其提供支持的通用服务进行分离 ”。
2. 什么是 Interface ?它与 Abstract Class 有什么区别?接口 (Interface) 是用来定义行为规的,不会有具体实现,而抽象类除定义行为规外,可以 有部分实现,但一个类能实现多个接口,但只能继承一个父类。
Interface 可以理解为是 种契约。
3. 什么是反射 ? 程序集包含模块,而模块又包括类型,类型下有成员(这些信息存于元数据中),反射就是 在运行时管理程序集,模块,类型的对象,它能够动态的创建类型的实例, 设置现有对象的 类型或者获取现有对象的类型, 能调用类型的方法和访问类型的字段属性。
它是在运行时创 建和使用类型实例。
反射功能的类主要在 Sytem.Type 命名空间下,使用这些类可以在运 行时创建类型实例,然后调用其中方法或访问其成员对象。
4.使用ASMX 的XML Web 服务与使用 SOAP 的.NET Remoting 的区别?Web 服务使用的 SOAP 协议,而Remoting 采用的RPC 。
Web Service 能用于不同平台, 不同语言, Remoting 只适用于 .NET 应用程序之间的通信。
效率上 .NET Remoting 高于 Web Service 。
一般情况下 Web Service 主要应用于互联网, .NET Remoting 主要应用 于局域网。
5. 类型系统是由 XMLSchema 表示的吗? CLS 是 XMLSchema 表示的吗?XmlSchema 是一个特定的 XML 文档必须满足的一套标准。
这些标准能够描述不同的数据 类型。
如 xs:decimal 是一种 XmlSchema 数据类型, 其他类型有像 xs:Boolean , xs:Date xs:int 等等。
CLS 是公共语言规 (Common Language Specification),它是任何 .NET 下语言 (C#, 等)使用的一套数据类型。
如 System.Double 是一种 CLS 数据类型。
其他的包括 System.Int32 , System.Boolean 等。
CLS 与 XMLSchema 表述的相同的意思,但其在不同。
6. 从概念上阐述前期绑定( early-binding )和后期绑定( late-binding )的区别 ?这个就像是强弱类型的比较相似,前期绑定是在编译的时候就确定了要绑定的数据, 而后期 绑定是在运行的时候才填充数据。
所以前期绑定如果失败, 会在编译时报编译错误, 而后期绑定失败只有在运行时的时候才发生。
7. 调用 Assembly.Load 算静态引用还是动态引用? 这种反射操作基本都是动态,即运行时引用。
8. 何时使用 Assembly.LoadFrom ?何时使用 Assembly.LoadFile ?面向接口更关注的是概念, 它的原则是先定义好行为规, 说,面向接口应该是面向对象中的一部分, 实现依赖于抽象, 程是一种新概念, 关的代码模块化, 它的关键思想是相比LoadFile ,用LoadFrom 加载程序集时,要求同时将此程序集所依赖的程序集加载进来。
而LoadFile 加载程序集文件时,只将传入参数的文件加载,不考虑程序集依赖,但如果有相同实现,但位置不同的文件用LoadFrom 是不能同时加载进来的,而LoadFile 却可以。
由于LoadFile 加载的是文件,所以调用它之后,可能因为缺少必要的依赖造成无法被执行。
9. 什么叫Assembly Qualified Name ?它是一个文件名吗?它有什么不同?它不是一个文件名,相比文件名,Assembly Qualified Name (程序集限定名称),更能确定一个程序集,它包含文件名,但同时包含版本,公钥,和区域。
因为同样一个名称的文件可能有不同的版本和区域,此时单独靠文件名称,可能会造成不能确定程序集的正确性。
10. Assembly.Load("foo.dll") ;这句话是否正确?错误,正确的应该是Assembly.Load("foo") 或者Assembly.LoadFrom("foo.dll")11. 做强签名的assembly 与不做强签名的assembly 有什么不同?强签名程序集可以安装到GAC 中,而不做强签名的确不能。
强名程序集可以根据强名来区分相同文件名不同版本的程序集。
12. DateTime 是否可以为null?不能,因为DateTime 为Struct 类型,而结构属于值类型,值类型不能为null ,只有引用类型才能被赋值null13. 什么叫JIT ?什么是NGEN ?它们分别有什么限制和好处?Just In Time 及时编译,它是在程序第一次运行的时候才进行编译,而NGEN 是所谓的pre-jit ,就是说在运行前事先就将程序集生成为本机镜像,并保存到全局缓存中,运用NGEN 可以提高程序集的加载和执行速度,因为它可以从本机映像中还原代码和数据结构,而不必像JIT 那样动态生成它们。
但是NGEN 不能得到JIT 编译时优化(如根据处理器) 的好处,这是其有缺陷的一方面。
14. .NET CLR 中一代的垃圾收集器是如何管理对象的生命周期的?什么叫非确定性终结?垃圾收集执行的时机不定的,这个过程对于程序员是透明的,垃圾收集器自动控制着它。
垃圾收集器的执行原理:周期性地遍历被应用当前引用的所有对象的列表。
在这个搜索过程中,凡是没有发现的被引用的对象,都将准备予以销毁(标记为0 代)。
说明了对象在什么时候终结是不确定的,我认为这就是非确定性终结。
通常来说,堆的耗尽是收集清扫的触发条件。
15. Finalize() 和Dispose() 之间的区别?Finalize() 相当于析构函数,我们不能手动调用这个函数 (但可以通过GC.SupperFinalize 方法阻止CLR 调用Finalize ),CLR 自动判断什么时候调用这个函数。
Dispose() 同样用于释放托管资源,但是我们可以在任意时刻自行调用Dispose() 方法。
总结就是Finalize 自动释放资源,Dispose() 用于手动释放资源。
16. using() 语法有用吗?什么是IDisposable ?它是如何实现确定性终结的。