.NET牛人应该知道些什么(2):中级.NET开发人员
本系列共六篇:
(3):高级开发人员/架构师
(4):C# 组件开发人员
(5):ASP.NET (UI)开发人员
(6):XML开发人员
1.阐述面向接口、面向对象、面向方面编程的区别
答:面向对象即将现实世界的事物看作对象,以继承的方式表达对象间的层次关系,以封装的方式来抽象对象的状态和行为,以多态的方式来实现对象的多种形态。
面向接口编程是面向对象编程的一个子集,因为面向接口,首先就是面向对象。面向接口的好处是降低耦合度。
面向方面编程(Aspect-Oriented Programming,简写为AOP),它允许开发者动态地修改静态的OO模型,构造出一个能够不断增长以满足新增需求的系统,就象现实世界中的对象会在其生命周期中不断改变自身,应用程序也可以在发展中拥有新的功能。详细AOP知识请参考张逸的blog:http://wayfarer.cnblogs.com/articles/241012.html
2.什么是Interface?它和Class有什么区别?
答:1>接口不能实例化;
2>接口中的方法没有方法体{};
3>继承接口的类一定要实现接口中定义的方法;
4>类可以实例化,可以定义自己的字段,属性,方法等等;
5>类可以继承多个接口,但只能继承一个类!
3.什么是反射?
答:程序集包含模块,而模块又包括类型,类型下有成员,反射就是管理程序集,模块,类型的对象,它能够动态的创建类型的实例,设置现有对象的类型或者获取现有对象的类型,能调用类型的方法和访问类型的字段属性。它是在运行时创建和使用类型实例
4.使用ASMX的XML Web服务和使用SOAP的.NET Remoting的区别?
答:SOAP是简单对象访问协议,Web服务正是通过WSDL来约定服务器和客户端基于xml的SOAP来通讯,而无论客户端和服务器不需要知道对方的平台、编程语言等信息。
.NET Remoting本质是为了交互更为复杂的对象,甚至需要管理远程对象的生命周期,所以客户端必须了解服务器对象的详细信息,虽然.NET Remoting支持使用SOAP,但对于客户端来说还是必须了解服务器对象的详细信息。
另外,Web Service能用于不同平台,不同语言,Remoting只适用于.Net。效率上Remoting高于Xml Web Service。
5.从概念上阐述前期绑定(early-binding)和后期绑定(late-binding)的区别?
答:前期绑定是在编译的时候就确定了要绑定的数据,而后期绑定是在运行的时候才填充数据。所以前期绑定如果失败,会在编译时报编译错误,而后期绑定失败只有在运行时的时候才发生
6.调用Assembly.Load算静态引用还是动态引用?
答:动态引用,因为Assembly.Load属性反射,反射即为动态引用。
7.何时使用Assembly.LoadFrom?何时使用Assembly.LoadFile?
答:用LoadFrom加载的是程序集,这就要求同时将此程序集所依赖的程序集加载进来,但位置不同的文件用LoadFrom是不能同时加载进来的(而LoadFile可以)。
LoadFile是加载程序集文件的内容,只将传入参数的文件加载,不考虑程序集依赖。由于LoadFile加载的是文件,所以调用它之后,可能因为缺少必要的依赖造成无法被执行。
8.什么叫Assembly Quaified Name?它是一个文件名吗?它有什么区别?
答:它不是一个文件名,相比文件名,Assembly Qualified Name(程序集限定名称),更能确定一个程序集,它包含文件名,但同时包含版本,公钥,和区域。因为同样一个名称的文件可能有不同的版本和区域,此时单独靠文件名称,可能会造成不能确定程序集的正确性。
9.Assembly.Load("foo.dll"); 这句话是否正确?
答:错误,正确的应该是Assembly.Load("foo")或Assembly.Load ("foo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8744b20f8da049e3"); 或者Assembly.LoadFrom("foo.dll");
10.做强签名的assembly和不做强签名的assembly有什么区别?
答:强签名的程序集可以确认assembly name是唯一的(因为使用了public key token)。
强签名的程序集可以做成com。
强签名程序集可以安装到GAC中。
11.DateTime是否可以为null?
答:不能,因为其为Struct类型,而结构属于值类型,值类型不能为null,只有引用类型才能被赋值null。
12.什么叫JIT?什么是NGEN?它们分别有什么限制和好处?
答:JIT(just in time,即及时编译),它是在程序第一次运行的时候才进行编译,而NGEN是所谓的pre-jit,就是说在运行前事先就将生成程序集的本机镜像,并保存到全局缓存中,适用NGEN可以提高程序集的加载和执行速度,因为它可以从本机映像中还原数代码和数据结构,而不必像jit那样动态生成它们。感觉和缓存的道理大同小异,也就是传说中的预编译。
13.Finalize()和Dispose()的间的区别?
答:Finalize自动释放资源,Dispose()用于手动释放资源。
14.using() 语法有用吗?什么是IDisposable?它是如何实现确定性终结的?
答:有用,实现了IDisposiable的类在using中创建,using结束后会自定调用该对象的Dispose方法,释放资源。简单的说调用IDisposable的Dispose方法能移除这个对象所使用资源的引用,从而达到让垃圾收集器回收资源的目的。
15.tasklist /m "mscor*" 这句命令是干嘛的?
答:列出所有使用了以" mscor"作为开头的dll或者exe的进程和模块信息。
16.in-proc和out-of-proc的区别
答:in-proc是进程内,进程内能共享代码和数据块,out-of-proc是进程外,进程外的互操作需要用进程间通讯来实现。
17.NET里的哪项技术能够实现out-of-proc通讯?
答:.Net Remoting技术或者WCF技术
18.当你在ASP.NET中运行一个组件时它在Windows XP, Windows 2000, Windows 2003上分别跑在哪个进程里面?
答:Xp : aspnet_Wp.exe
Windows 2000 : inetinfo.exe
Windows 2003 : w3wp.exe