.NET 面试题 - 初级&中级

来源:互联网 发布:网游辅助软件代理 编辑:程序博客网 时间:2024/05/17 05:14

初级.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位处理器下,单个进程所能访问的最大内存量为:232/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#,VB.NET等)使用的一套数据类型。如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,只有引用类型才能被赋值null

13. 什么叫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?它是如何实现确定性终结的。

有用。using编译后的MSIL会调用该对象的Dispose方法,释放资源。实现了IDisposable的类相当与一个契约,即说明这个类要实现Dispose()方法告诉CLR怎么释放它自身。因为Dispose()方法释放的非托管资源,所以可以手工调用它来确定性终结一个非托管资源。(托管资源都是非确定性终结,由CLR管理,没法改变)

17. tasklist /m "mscor*" 这句命令是干嘛的?

列出所有使用了以" mscor"作为开头的dll或者exe的映像名称,PID和模块信息。

18. in-proc和out-of-proc的区别

in-proc是进程内,进程内能共享代码和数据块,out-of-proc是进程外,进程外的互操作需要用进程间通讯来实现。

19. .NET里的哪一项技术能够实现out-of-proc通讯?

.Net Remoting技术或者WCF技术

20. 当你在ASP.NET中运行一个组件时,它在Windows XP, Windows 2000, Windows 2003上 分别跑在哪个进程里面?

XP: aspnet_Wp.exe、Windows 2000: aspnet_Wp.exe、Windows 2003: w3wp.exe。XP与2000是IIS5.1,2003是IIS6.0所以有了上述差别。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 初二学生字写不好怎么办 宝宝流鼻涕怎么办最简单方法 论文查重中参考文献重复率高怎么办 表格里一行字多怎么办 写作文没有拿稿纸怎么办? 纬创面试英语差怎么办 wifi只有两个人连很差怎么办 孩子写作文老是离体怎么办 高一语文阅读理解不好怎么办 80后90后中国怎么办 小学生毕业了班级家长微信群怎么办 ppt做了没保存怎么办 在中考中作文写在抄镐纸上怎么办 ppt格式刷隐藏了怎么办 ps卡住不动弹了怎么办 画图工具压缩完照片后有白边怎么办 穿滑校服就想自慰怎么办 绿地球叶子变干怎么办 有异物掉入眼中怎么办 有异物掉入眼中应怎么办 有异物掉入眼睛怎么办 空调出风口掉入异物怎么办? 超星尔雅挂科了怎么办 泰拉瑞亚神庙祭坛挖掉了怎么办 泰拉瑞亚不小心把数据删除了怎么办 足球守门员遇到单刀球怎么办 猫见到主人就跑怎么办 手机玩游戏闪屏怎么办 满身起小疙瘩很痒怎么办 出门在外忘记带备用胸罩怎么办 去泰国浮潜近视怎么办 gta5线上马丁任务卡了怎么办 双肩背包黑色的皮子褪色怎么办 lspdfr在游戏里崩溃怎么办 gta5钱超过21亿怎么办 假警察要带走我怎么办 遇到假警察拦车怎么办 大连船员体检眼力不合格怎么办 禁行如果通过了怎么办 钻戒的戒圈磨损怎么办 多肉的肉掉了怎么办