dotnet面试问答题

上传人:油条 文档编号:28519847 上传时间:2018-01-17 格式:DOC 页数:10 大小:116.50KB
返回 下载 相关 举报
dotnet面试问答题_第1页
第1页 / 共10页
dotnet面试问答题_第2页
第2页 / 共10页
dotnet面试问答题_第3页
第3页 / 共10页
dotnet面试问答题_第4页
第4页 / 共10页
dotnet面试问答题_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《dotnet面试问答题》由会员分享,可在线阅读,更多相关《dotnet面试问答题(10页珍藏版)》请在金锄头文库上搜索。

1、NET 牛人应该知道些什么? (本答复不是标准答案,敬请兄弟们补充更正,不胜感激)任何一个使用.NET 的人 1) 描述线程与进程的区别? 线程(Thread)与进程(Process) 二者都定义了某种边界,不同的是进程定义的是应用程序与应用程序之间的边界,不同的进程之间不能共享代码和数据空间,而线程定义的是代码执行堆栈和执行上 下文的边界。一个进程可以包括若干个线程,同时创建多个线程来完成某项任务,便是多线程。而同一进程中的不同线程共享代码和数据空间。用一个比喻来说,如 果一个家庭代表一个进程,在家庭内部,各个成员就是线程,家庭中的每个成员都有义务对家庭的财富进行积累,同时也有权利对家庭财富

2、进行消费,当面对一个任 务的时候,家庭也可以派出几个成员来协同完成,而家庭之外的人则没有办法直接消费不属于自己家庭的财产。 2) 什么是 Windows 服务,它的生命周期与标准的 EXE 程序有什么不同 Windows 服务是运行在 windows 后台指定用户下(默认 System)的应用程序,它没有标准的 UI 界面,想比标准的 EXE 程序, Windows 服务是在服务开始的时候创建,而在服务结束的时候销毁,而且可以设置服务是否与操作系统一起启动,一起关闭。它支持三种方式:)自动方式 2)手动方式)禁用 。自动方式的时候,windows 服务将在 OS 启动后自动启动运行,而手动方式

3、则必须手工启动服务,禁用的情况下服务将不能被启动。另外标准的EXE 默认使用的当前登录的用户,而 windows 服务则默认使用 System 用户,这在对系统资源访问的时候特别需要注意。 3) Windows 单个进程所能访问的最大内存量是多少?它与系统的最大虚拟内存一样吗?这对于系统设计有什么影响? 这个需要针对硬件平台,公式为单个进程能访问的最大内存量=2 的处理器位数次方/2,比如通常情况下,32 位处理器下,单个进程所能访问的最大内存量为:2 32 /2 = 2G 。单个进程能访问的最大内存量是最大虚拟内存的 1/2,因为要分配给操作系统一半虚拟内存。 4) 什么是强类型,什么是弱类

4、型?哪种更好些?为什么? 强类型是在编译的时候就确定类型的数据,在执行时类型不能更改,而弱类型在执行的时候才会确定类型。没有好不好,二者各有好处,强类型安全,因为它事先已经确定好了,而且效率高。一般用于编译型编程语言,如c+,java,c#,pascal 等 ,弱类型相比而言不安全,在运行的时候容易出现错误,但它灵活,多用于解释型编程语言,如 javascript,vb 等 5) PID 是什么?在做系统的故障排除时如何使用它? PID 是进程编号,在系统发现故障的时候,可以根据它寻找故障所发生的具体进程,并且可通过 visual 等 ide 将故障进程附加到进程中进行调试(debug) 6

5、) 单个 TCP/IP 端口上能够被多少个进程侦听? 可以为多个,多个为端口复用 (多谢蛙蛙池塘的提醒)看下面代码端口复用7) 什么是 GAC?它解决了什么问题? Gloal Assembly Cache,全局应用程序集缓存。它解决了几个程序共享某一个程序集的问题。不必再将那个被共享的程序集拷贝到应用程序目录了,其实这道理很简单,.net 应用程序在加载的时候,会首先查看全局应用程序集缓存,如果有就可以直接使用,没有再到应用程序目录进行查找。中级.NET 开发人员 1) 阐述面向接口、面向对象、面向方面编程的区别 面 向接口更关注的是概念,它的原则是先定义好行为规范,再根据行为规范创建实现,严

6、格的来说,面向接口应该是面向对象中的一部分吧,因为面向对象也强调的是 依赖倒置原则,也就是实现依赖于抽象,而抽象不依赖于具体实现,更具比较的应该是面向接口与面向抽象对象,我的体会是面向接口更加灵活,但实现时候,稍微 有些代码冗余,而面向抽象可以结合面向接口,先定义接口,再定义抽象类,在抽象类中处理一些公共逻辑,再实现具体实现类。面向对象是对复杂问题的分解。面 向方面的编程是一种新概念,它解决了很多面向对象无法解决的问题,比如面向对象技术只能对业务相关的代码模块化,而无法对和业务无关的代码模块化。而面向 方面正是解决这一问题的方案,它的关键思想是将应用程序中的商业逻辑与对其提供支持的通用服务进行

7、分离。 2) 什么是 Interface?它与 Abstract Class 有什么区别? 接口(Interface)是用来定义行为规范的,不会有具体实现,而抽象类除定义行为规范外,可以有部分实现,但一个类能实现多个接口,但只能继承一个父类 3) 什么是反射? 程序集包含模块,而模块又包括类型,类型下有成员,反射就是管理程序集,模块,类型的对象,它能够动态的创建类型的实例,设置现有对象的类型或者获取现有对象的类型,能调用类型的方法和访问类型的字段属性。它是在运行时创建和使用类型实例 4) 使用 ASMX 的 XML Web 服务与使用 SOAP 的.NET Remoting 的区别? Web

8、服务使用的消息机制,而 Remoting 采用的 RPC. Web Service 能用于不同平台,不同语言,Remoting 只适用于.Net。效率上 Remoting 高于Xml Web Service 5) 类型系统是由 XMLSchema 表示的吗?CLS 是 XMLSchema 表示的吗?不清楚 6) 从概念上阐述前期绑定(early-binding)和后期绑定(late-binding)的区别? 这个就像是强弱类型的比较相似,前期绑定是在编译的时候就确定了要绑定的数据,而后期绑定是在运行的时候才填充数据。所以前期绑定如果失败,会在编译时报编译错误,而后期绑定失败只有在运行时的时候才

9、发生 7) 调用 Assembly.Load 算静态引用还是动态引用? 动态 8) 何时使用 Assembly.LoadFrom?何时使用 Assembly.LoadFile? 呵呵,这个比较有意思,相比 LoadFile,LoadFrom 则显得不地道,因为它娶媳妇的时候,是让人家穿上嫁妆,坐上马车,还得带着人家的妹妹来,:)用它加载的是程序集,这就要求同时将此程序集所依赖的程序集加载进来。而LoadFile 就地道的多,它是加载程序集文件的内容,只将传入参数的文件加载,不考虑程序集依赖,但如果有相同实现,但位置不同的文件用 LoadFrom 是不能同时加载进来的,而 LoadFile 却可

10、以。由于 LoadFile 加载的是文件,所以调用它之后,可能因为缺少必要的依赖造成无法被执行。 9) 什么叫 Assembly Qualified Name?它是一个文件名吗?它有什么不同? 它不是一个文件名,相比文件名,Assembly Qualified Name(程序集限定名称),更能确定一个程序集,它包含文件名,但同时包含版本,公钥,和区域。因为同样一个名称的文件可能有不同的版本和区域,此时单独靠文件名称,可能会造成不能确定程序集的正确性。 10) Assembly.Load(foo.dll); 这句话是否正确? 错误,正确的应该是 Assembly.Load(foo); 或者Ass

11、embly.LoadFrom(foo.dll); (多谢 Tristan(Guozhijian)的提示更正)11) 做强签名的 assembly 与不做强签名的 assembly 有什么不同? 强签名的程序集可以做成 com,而不做强签名的就不行,同样强签名程序集可以安装到 GAC 中,而不做强签名的确不能。 12) DateTime 是否可以为 null? 不能,因为其为 Struct 类型,而结构属于值类型,值类型不能为 null,只有引用类型才能被赋值 null 13) 什么叫 JIT?什么是 NGEN?它们分别有什么限制和好处? Just In Time 及时编译,它是在程序第一次运行

12、的时候才进行编译,而NGEN 是所谓的 pre-jit,就是说在运行前事先就将生成程序集的本机镜像,并保存到全局缓存中,适用 NGEN 可以提高程序集的加载和执行速度,因为它可以从本机映像中还原数代码和数据结构,而不必像 jit 那样动态生成它们。感觉和缓存的道理大同小异。 14) Finalize()和 Dispose()之间的区别? Finalize()用于隐式释放资源, Dispose()用于显示释放资源 (Finalize()的确相当于 C+中的析构函数(多谢 Jeffrey Zhao 提示更正)15) using() 语法有用吗?什么是 IDisposable?它是如何实现确定性终结

13、的。 有用,实现了 IDisposiable 的类在 using 中创建, using 结束后会自定调用该对象的 Dispose 方法,释放资源。不明白什么是确定性终结16) tasklist /m mscor* 这句命令是干嘛的? 列出所有使用了以 mscor作为开头的 dll 或者 exe 的进程和模块信息 17) in-proc 和 out-of-proc 的区别 in-proc 是进程内,进程内能共享代码和数据块,out-of-proc 是进程外,进程外的互操作需要用进程间通讯来实现。 18) .NET 里的哪一项技术能够实现 out-of-proc 通讯? .Net Remoting

14、 技术或者 WCF 技术 19) ASP.NET 在 Windows XP, Windows 2000, Windows 2003 上分别跑在哪个进程里面? Xp : aspnet_Wp.exe Windows 2000 : aspnet_Wp.exe (多谢 Tristan 提示更正)Windows 2003 : w3wp.exe 此文中所提到的面试题是园子中 Tony Qu 兄弟翻译过来的,特此感谢上一篇: 对一些面试题的回答 高级开发人员/架构师 1) DateTime.Parse(myString); 这行代码有什么问题? 有问题,当 myString 不能满足时间格式要求的时候,会引

15、发异常,建议使用DateTime.TryParse() ,同时,还需要注意到文化区域的设置,如果做代码规范检查,该语句也会不符合规范,就是因为缺少文化区域的设置2) PDB 是什么东西? 在调试中它应该放在哪里? PDB 是用于保存调试和项目状态信息的文件,在 debug 的时候将产生pdb 文件,调试的时候应该放在和对应应用程序集相同目录。 默认的是同一目录,ide 还可以设置全局 pdb symbol 文件的地址,这也是vs2008 能调试.net framework source code 的方法。还可以为解决方案指定 pdb 位置3) 什么叫圈复杂度(cyclomatic comple

16、xity)?为什么它很重要? 一种代码复杂度的衡量标准,中文名称叫做圈复杂度。在软件测试的概念里,圈复杂度“用来衡量一个模块判定结构的复杂程度,数量上表现为独立现行路径条数,即合理的预防错误所需测试的最少路径条数,圈复杂度大说明程序代码可能质量低且难于测试和维护,根据经验,程序的可能错误和高的圈复杂度有着很大关系”。4) 写一个标准的 lock(),在访问变量的前后创建临界区,要有双重检查2 public class Singleton3 4 private static Singleton _instance;5 6 private Singleton() 7 8 public static Singleton GetInstance() 9 if (_instance = null) 10 lock

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号