`
leonardleonard
  • 浏览: 801412 次
社区版块
存档分类
最新评论

学习.net应该知道什么

阅读更多

原文地址:http://www.hanselman.com/blog/WhatGreatNETDevelopersOughtToKnowMoreNETInterviewQuestions.aspx 作者:Scott Hanselman 译者:Tony Qu 前些日子我发了一份ASP.NET面试题 清单. 有一些访客比较保守,觉得我是没事找事,里面都是些很琐碎的问题。剩下的人则说“蛮不错的,我得去看一看其中的一些问题” 我更喜欢后者的回复,我觉得后者才是正确的态度。

当然我并不想把.NET软件开发概括为一些简单的小问题,我只是想让大家多思考。我相信一个真正优秀的ASP.NET(及WinForm)开发人员应该不仅仅会拖放控件到设计器中,也应该掌握更多的东西。一个优秀的赛车比赛选手很了解他自己的坐驾,他知道哪些可以做?哪些不能做?

所以我准备了另外一份清单——一份扩展的清单,供你使用。这是我上个星期在从博伊西去波特兰的路上写在一块板上的,并且我也考虑到了那些觉得我的清单过于琐碎的意见,试图把这个清单按节管理。如果你从来没有深入ASP.NET,你肯定不会知道所有ASP.NET问题的答案。如果你是一个独立顾问,你可能从来没有遇到过这些概念。但在我呆在科林斯的这4年中,这些问题我都遇到过。因此,是否全面理解这些问题也许与你是不是一个优秀的开发者没有关系,但在遇到问题时它的确可以帮你节省不少时间。 

 

任何一个使用.NET的人

1) 描述线程与进程的区别?

线程(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) 什么是强类型,什么是弱类型?哪种更好些?为什么?

强类型是在编译的时候就确定类型的数据,在执行时类型不能更改,而弱类型在执行的时候才会确定类型。没有好不好,二者各有好处,强类型安全,因为它事先已经确定好了,而且效率高。一般用于编译型编程语言,如c++,java,c#,pascal等,弱类型相比而言不安全,在运行的时候容易出现错误,但它灵活,多用于解释型编程语言,如javascript,vb等

5) PID是什么?在做系统的故障排除时如何使用它?

PID是进程编号,在系统发现故障的时候,可以根据它寻找故障所发生的具体进程,并且可通过visual studio.net等ide将故障进程附加到进程中进行调试(debug)

6) 单个TCP/IP端口上能够被多少个进程侦听?

可以为多个,多个为端口复用 (多谢蛙蛙池塘的提醒)看下面代码

端口复用 Socket socket1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);             Socket socket2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);             socket1.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"),8235));             socket1.Listen(10);             socket2.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);             socket2.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8235));             socket2.Listen(10);             Console.Read();

7) 什么是GAC?它解决了什么问题?

Gloal Assembly Cache,全局应用程序集缓存。它解决了几个程序共享某一个程序集的问题。不必再将那个被共享的程序集拷贝到应用程序目录了,其实这道理很简单,.net应用程序在加载的时候,会首先查看全局应用程序集缓存,如果有就可以直接使用,没有再到应用程序目录进行查找。

 

中级.NET开发人员

1) 阐述面向接口、面向对象、面向方面编程的区别

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

2) 什么是Interface?它与Abstract Class有什么区别?

接口(Interface)是用来定义行为规范的,不会有具体实现,而抽象类除定义行为规范外,可以有部分实现,但一个类能实现多个接口,但只能继承一个父类

3) 什么是反射?

程序集包含模块,而模块又包括类型,类型下有成员,反射就是管理程序集,模块,类型的对象,它能够动态的创建类型的实例,设置现有对象的类型或者获取现有对象的类型,能调用类型的方法和访问类型的字段属性。它是在运行时创建和使用类型实例

4) 使用ASMX的XML Web服务与使用SOAP的.NET Remoting的区别?

Web服务使用的消息机制,而Remoting采用的RPC. Web Service能用于不同平台,不同语言,Remoting只适用于.Net。效率上Remoting高于Xml Web Service

5) 类型系统是由XMLSchema表示的吗?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"); (多谢 Tristan(Guozhijian)的提示更正)

11) 做强签名的assembly与不做强签名的assembly有什么不同?

强签名的程序集可以做成com,而不做强签名的就不行,同样强签名程序集可以安装到GAC中,而不做强签名的确不能。

12) DateTime是否可以为null?

不能,因为其为Struct类型,而结构属于值类型,值类型不能为null,只有引用类型才能被赋值null

13) 什么叫JIT?什么是NGEN?它们分别有什么限制和好处?

Just In Time 及时编译,它是在程序第一次运行的时候才进行编译,而NGEN是所谓的pre-jit,就是说在运行前事先就将生成程序集的本机镜像,并保存到全局缓存中,适用NGEN可以提高程序集的加载和执行速度,因为它可以从本机映像中还原数代码和数据结构,而不必像jit那样动态生成它们。感觉和缓存的道理大同小异。

14) Finalize()和Dispose()之间的区别?

Finalize()用于隐式释放资源,Dispose()用于显示释放资源 (Finalize()的确相当于C++中的析构函数(多谢Jeffrey Zhao提示更正)

15) using() 语法有用吗?什么是IDisposable?它是如何实现确定性终结的。

有用,实现了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技术或者WCF技术

19) ASP.NET在Windows XP, Windows 2000, Windows 2003上分别跑在哪个进程里面?

Xp : aspnet_Wp.exe Windows 2000 : aspnet_Wp.exe Windows 2003 : w3wp.exe

分享到:
评论

相关推荐

    学习.net 《你必须知道的.NET》

    第1部分 渊源——.NET与面向对象 第1章 OO大智慧 1.1 对象的旅行 2 1.1 对象的旅行 3 本节将介绍以下内容: 4 — 面向对象的基本概念 5 — .NET基本概念评述 6 — 通用类型系统 7 1.1.1 引言 8 提起面向对象,每个...

    学习asp.net方法和步骤

    对于初学者来说,掌握ASP.NET的学习方法和步骤至关重要,以下是一份详细的ASP.NET学习指南。 1. **基础知识准备**: 在开始ASP.NET的学习之前,你需要对以下基础知识有一定的了解: - **HTML/CSS/JavaScript**:...

    28.你必须知道的.NET 深入学习 .net 知识

    28.你必须知道的.NET 帮助你更深一步的学习.net 知识,提高对.net知识的理解与驾驭能力

    你必须知道的.net第二版

    根据提供的标题“你必须知道的.NET第二版”以及描述中的信息来看,这应该是一本关于.NET框架或.NET Core平台的详细介绍和技术指南书籍。虽然提供的部分内容并没有包含实际的技术信息,但我们可以基于标题和描述来...

    你必须知道的.NET.pdf

    《你必须知道的.NET》是一本深入探讨.NET框架核心概念和技术的书籍,旨在帮助开发者们理解和掌握.NET平台的精髓。本书全面覆盖了.NET的基础知识、架构、类库以及开发实践,是.NET开发者不可或缺的参考资料。 首先,...

    .NET必须知道的学习资料关注

    标题中的".NET必须知道的学习资料关注"提示我们,这是一份与.NET框架相关的学习资源集合,可能是为了帮助开发者深入理解.NET技术栈。描述中的重复强调也进一步确认了这是关于.NET学习的重要资料。标签".net"进一步...

    你必须知道的.NET知识.pdf

    《你必须知道的.NET》这本书由微软C# MVP王涛撰写,主要涵盖了.NET的基础知识,特别是面向对象的设计和实现。作者作为一名高级软件工程师,对.NET底层架构和企业级系统应用有深入研究,同时也熟悉ASP.NET、XML和SQL ...

    学习.net之《你必须知道的.NET》

    自学.net资料,你必须知道的.net,此书没有按照语法从头至尾的讲解,而是把.net最重要的知识按照哲理的方式传授,是一本难得的好书!

    你必须知道的.NET

    【标题】:“你必须知道的.NET” 在信息技术领域,.NET是微软公司推出的一个全面的开发平台,它为创建各种应用程序提供了丰富的工具和支持。...不断学习和掌握.NET的相关知识,将使你在IT行业中更具竞争力。

    你必须知道的ASP.NET

    ASP.NET是微软公司开发的一种用于构建Web应用程序的框架,它基于.NET Framework,为开发者提供了高效、易用且功能...通过深入学习和实践,你将能够掌握ASP.NET的各种特性和最佳实践,为你的职业生涯开辟广阔的道路。

    Asp.net 学习导图

    Asp.net 学习导图 如果你还不知道怎么学习asp.net ,这个就是我看到的比较优秀的asp.net的学习框架,大家可以借鉴一下

    你必须知道的.net

    《你必须知道的.NET》是一本面向初学者的.NET技术指南,它以通俗易懂的语言深入浅出地解析了.NET框架的世界,旨在帮助读者更好地理解并应用.NET技术。这本书不仅涵盖了.NET的基础概念,还深入探讨了.NET如何在现实...

    你必须知道的.net(博客园整理)

    总的来说,《你必须知道的.NET》是一部全面而深入的.NET学习资料,无论你是初学者还是经验丰富的开发者,都能从中受益。通过阅读和实践,你可以深化对.NET的理解,提升自己的编程能力,为开发高质量的.NET应用程序...

    你必须知道的.net,.net帮助文档

    .NET是微软公司推出的一种开发平台,它为开发者提供了一整套构建各种类型应用程序的工具...学习.NET不仅可以提升你的开发效率,还能让你参与更广泛的项目,涵盖桌面应用、Web应用、移动应用以及云计算服务等多个领域。

    基于asp.net的仿百度知道

    【标题】"基于ASP.NET的仿百度知道"项目解析 在IT行业中,开发一个类似百度知道的问答系统是一项常见的挑战,而"基于ASP.NET的仿百度知道"则提供了一个这样的解决方案。这个系统模仿了百度知道的功能,为用户提供了...

    c#.NET早知道

    《C#.NET早知道》是一本专为程序员和学习者设计的指南,旨在提供全面而易懂的C#.NET编程知识。C#.NET是微软公司推出的一种面向对象的编程语言,它结合了.NET Framework的强大功能,广泛应用于Windows桌面应用、Web...

    你必须知道的.NET(第二版)

    不过,这些重复的链接暗示书中可能会提及博客或其他在线资源作为学习.NET的补充材料,鼓励读者通过多种渠道进行深入学习和交流。通常,作者推荐关注自己的博客,可能意味着博客中有与书内容相关的讨论、更新或更多...

    你必须知道的.NET书中代码

    总的来说,《你必须知道的.NET》一书及其配套的代码示例是学习.NET技术的宝贵资料,无论你是初学者还是有经验的开发者,都可以从中受益匪浅。通过深入理解和实践这些内容,你将能够熟练掌握.NET Framework,开发出...

    你必须知道的.NET.ppt

    《你必须知道的.NET》是一本面向有一定.NET基础的学习者、软件工程师和系统架构师的专业教程,同时也适合.NET初学者快速提升技能。这本书深入浅出地介绍了.NET框架的关键概念和技术,是高等教育机构和.NET技术培训的...

Global site tag (gtag.js) - Google Analytics