﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-凌晨一点</title><link>http://www.cnblogs.com/qiangzi/</link><description>Good Good Study,Day Day Up!</description><language>zh-cn</language><lastBuildDate>Wed, 20 Aug 2008 08:43:06 GMT</lastBuildDate><pubDate>Wed, 20 Aug 2008 08:43:06 GMT</pubDate><ttl>60</ttl><item><title>.NET牛人应该知道些什么?[转载]</title><link>http://www.cnblogs.com/qiangzi/archive/2008/06/11/1217314.html</link><dc:creator>A&amp;Qiang</dc:creator><author>A&amp;Qiang</author><pubDate>Wed, 11 Jun 2008 05:04:00 GMT</pubDate><guid>http://www.cnblogs.com/qiangzi/archive/2008/06/11/1217314.html</guid><wfw:comment>http://www.cnblogs.com/qiangzi/comments/1217314.html</wfw:comment><comments>http://www.cnblogs.com/qiangzi/archive/2008/06/11/1217314.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/qiangzi/comments/commentRss/1217314.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/qiangzi/services/trackbacks/1217314.html</trackback:ping><description><![CDATA[<p>任何一个使用.NET的人</p>
<p>1) 描述线程与进程的区别？</p>
<p>线程(Thread)与进程（Process）二者都定义了某种边界，不同的是进程定义的是应用程序与应用程序之间的边界，不同的进程之间不能共享代码和数据空间，而线程定义的是代码执行堆栈和执行上下文的边界。一个进程可以包括若干个线程，同时创建多个线程来完成某项任务，便是多线程。而同一进程中的不同线程共享代码和数据空间。用一个比喻来说，如果一个家庭代表一个进程，在家庭内部，各个成员就是线程，家庭中的每个成员都有义务对家庭的财富进行积累，同时也有权利对家庭财富进行消费，当面对一个任务的时候，家庭也可以派出几个成员来协同完成，而家庭之外的人则没有办法直接消费不属于自己家庭的财产。</p>
<p>2) 什么是Windows服务，它的生命周期与标准的EXE程序有什么不同</p>
<p>Windows服务是运行在windows后台指定用户下（默认System）的应用程序，它没有标准的UI界面，想比标准的EXE程序，Windows服务是在服务开始的时候创建，而在服务结束的时候销毁，而且可以设置服务是否与操作系统一起启动，一起关闭。它支持三种方式：１）自动方式 2）手动方式　３）禁用 。自动方式的时候，windows服务将在OS启动后自动启动运行，而手动方式则必须手工启动服务，禁用的情况下服务将不能被启动。另外标准的EXE默认使用的当前登录的用户，而windows服务则默认使用System用户，这在对系统资源访问的时候特别需要注意。</p>
<p>3) Windows单个进程所能访问的最大内存量是多少？它与系统的最大虚拟内存一样吗？这对于系统设计有什么影响？</p>
<p>这个需要针对硬件平台，公式为单个进程能访问的最大内存量=2的处理器位数次方/2，比如通常情况下，32位处理器下，单个进程所能访问的最大内存量为:232 /2 = 2G 。单个进程能访问的最大内存量是最大虚拟内存的1/2，因为要分配给操作系统一半虚拟内存。</p>
<p>4) 什么是强类型，什么是弱类型？哪种更好些？为什么?</p>
<p>强类型是在编译的时候就确定类型的数据，在执行时类型不能更改，而弱类型在执行的时候才会确定类型。没有好不好，二者各有好处，强类型安全，因为它事先已经确定好了，而且效率高。一般用于编译型编程语言，如c++,java,c#,pascal等,弱类型相比而言不安全，在运行的时候容易出现错误，但它灵活，多用于解释型编程语言，如javascript,vb等</p>
<p>5) PID是什么？在做系统的故障排除时如何使用它？</p>
<p>PID是进程编号，在系统发现故障的时候，可以根据它寻找故障所发生的具体进程，并且可通过visual studio.net等ide将故障进程附加到进程中进行调试(debug)</p>
<p>6) 单个TCP/IP端口上能够被多少个进程侦听？</p>
<p>可以为多个，多个为端口复用 <br />
看下面代码</p>
<p><br />
端口复用<br />
Socket socket1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Socket socket2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; socket1.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"),8235));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; socket1.Listen(10);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; socket2.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; socket2.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8235));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; socket2.Listen(10);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.Read();<br />
</p>
<p>7) 什么是GAC？它解决了什么问题?</p>
<p>Gloal Assembly Cache，全局应用程序集缓存。它解决了几个程序共享某一个程序集的问题。不必再将那个被共享的程序集拷贝到应用程序目录了，其实这道理很简单，.net应用程序在加载的时候，会首先查看全局应用程序集缓存，如果有就可以直接使用，没有再到应用程序目录进行查找。</p>
<p>&nbsp;</p>
<p><br />
中级.NET开发人员</p>
<p>1) 阐述面向接口、面向对象、面向方面编程的区别</p>
<p>面向接口更关注的是概念，它的原则是先定义好行为规范，再根据行为规范创建实现，严格的来说，面向接口应该是面向对象中的一部分吧，因为面向对象也强调的是依赖倒置原则，也就是实现依赖于抽象，而抽象不依赖于具体实现，更具比较的应该是面向接口与面向抽象对象，我的体会是面向接口更加灵活，但实现时候，稍微有些代码冗余，而面向抽象可以结合面向接口，先定义接口，再定义抽象类，在抽象类中处理一些公共逻辑，再实现具体实现类。面向对象是对复杂问题的分解。面向方面的编程是一种新概念，它解决了很多面向对象无法解决的问题，比如面向对象技术只能对业务相关的代码模块化，而无法对和业务无关的代码模块化。而面向方面正是解决这一问题的方案，它的关键思想是"将应用程序中的商业逻辑与对其提供支持的通用服务进行分离"。</p>
<p>2) 什么是Interface？它与Abstract Class有什么区别？</p>
<p>接口(Interface)是用来定义行为规范的，不会有具体实现，而抽象类除定义行为规范外，可以有部分实现，但一个类能实现多个接口，但只能继承一个父类</p>
<p>3) 什么是反射?</p>
<p>程序集包含模块，而模块又包括类型，类型下有成员，反射就是管理程序集，模块，类型的对象，它能够动态的创建类型的实例，设置现有对象的类型或者获取现有对象的类型，能调用类型的方法和访问类型的字段属性。它是在运行时创建和使用类型实例</p>
<p>4) 使用ASMX的XML Web服务与使用SOAP的.NET Remoting的区别?</p>
<p>Web服务使用的消息机制，而Remoting采用的RPC. Web Service能用于不同平台，不同语言，Remoting只适用于.Net。效率上Remoting高于Xml Web Service</p>
<p>5) 类型系统是由XMLSchema表示的吗？CLS是XMLSchema表示的吗？</p>
<p>不清楚</p>
<p>6) 从概念上阐述前期绑定（early-binding）和后期绑定（late-binding）的区别?</p>
<p>这个就像是强弱类型的比较相似，前期绑定是在编译的时候就确定了要绑定的数据，而后期绑定是在运行的时候才填充数据。所以前期绑定如果失败，会在编译时报编译错误，而后期绑定失败只有在运行时的时候才发生</p>
<p>7) 调用Assembly.Load算静态引用还是动态引用？</p>
<p>动态</p>
<p>8) 何时使用Assembly.LoadFrom？何时使用Assembly.LoadFile？</p>
<p>呵呵，这个比较有意思,相比LoadFile，LoadFrom则显得不地道，因为它娶媳妇的时候，是让人家穿上嫁妆，坐上马车，还得带着人家的妹妹来，：）用它加载的是程序集，这就要求同时将此程序集所依赖的程序集加载进来。而LoadFile就地道的多，它是加载程序集文件的内容，只将传入参数的文件加载，不考虑程序集依赖，但如果有相同实现，但位置不同的文件用LoadFrom是不能同时加载进来的，而LoadFile却可以。由于LoadFile加载的是文件，所以调用它之后，可能因为缺少必要的依赖造成无法被执行。</p>
<p>9) 什么叫Assembly Qualified Name？它是一个文件名吗？它有什么不同？</p>
<p>它不是一个文件名，相比文件名，Assembly Qualified Name（程序集限定名称），更能确定一个程序集，它包含文件名，但同时包含版本，公钥，和区域。因为同样一个名称的文件可能有不同的版本和区域，此时单独靠文件名称，可能会造成不能确定程序集的正确性。</p>
<p>10) Assembly.Load("foo.dll"); 这句话是否正确？</p>
<p>错误，正确的应该是Assembly.Load("foo"); 或者Assembly.LoadFrom("foo.dll"); </p>
<p>11) 做强签名的assembly与不做强签名的assembly有什么不同？</p>
<p>强签名的程序集可以做成com，而不做强签名的就不行，同样强签名程序集可以安装到GAC中，而不做强签名的确不能。</p>
<p>12) DateTime是否可以为null?</p>
<p>不能，因为其为Struct类型，而结构属于值类型，值类型不能为null,只有引用类型才能被赋值null</p>
<p>13) 什么叫JIT？什么是NGEN？它们分别有什么限制和好处？</p>
<p>Just In Time 及时编译，它是在程序第一次运行的时候才进行编译，而NGEN是所谓的pre-jit，就是说在运行前事先就将生成程序集的本机镜像，并保存到全局缓存中，适用NGEN可以提高程序集的加载和执行速度，因为它可以从本机映像中还原数代码和数据结构，而不必像jit那样动态生成它们。感觉和缓存的道理大同小异。</p>
<p>14) Finalize()和Dispose()之间的区别?</p>
<p>Finalize（）用于隐式释放资源，Dispose()用于显示释放资源 （Finalize()的确相当于C++中的析构函数</p>
<p>15) using() 语法有用吗？什么是IDisposable？它是如何实现确定性终结的。</p>
<p>有用，实现了IDisposiable的类在using中创建，using结束后会自定调用该对象的Dispose方法，释放资源。不明白什么是确定性终结</p>
<p>16) tasklist /m "mscor*" 这句命令是干嘛的？</p>
<p>列出所有使用了以" mscor"作为开头的dll或者exe的进程和模块信息</p>
<p>17) in-proc和out-of-proc的区别</p>
<p>in-proc是进程内，进程内能共享代码和数据块，out-of-proc是进程外，进程外的互操作需要用进程间通讯来实现。</p>
<p>18) .NET里的哪一项技术能够实现out-of-proc通讯？</p>
<p>.Net Remoting技术或者WCF技术</p>
<p>19) ASP.NET在Windows XP, Windows 2000, Windows 2003上分别跑在哪个进程里面？</p>
<p>Xp : aspnet_Wp.exe <br />
Windows 2000 : aspnet_Wp.exe <br />
Windows 2003 : w3wp.exe</p>
<img src ="http://www.cnblogs.com/qiangzi/aggbug/1217314.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41802/" target="_blank">[新闻]微软Office 14即将展开Alpha测试</a>]]></description></item><item><title>开始新的征程!</title><link>http://www.cnblogs.com/qiangzi/archive/2008/05/07/1187513.html</link><dc:creator>A&amp;Qiang</dc:creator><author>A&amp;Qiang</author><pubDate>Wed, 07 May 2008 14:36:00 GMT</pubDate><guid>http://www.cnblogs.com/qiangzi/archive/2008/05/07/1187513.html</guid><wfw:comment>http://www.cnblogs.com/qiangzi/comments/1187513.html</wfw:comment><comments>http://www.cnblogs.com/qiangzi/archive/2008/05/07/1187513.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/qiangzi/comments/commentRss/1187513.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/qiangzi/services/trackbacks/1187513.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;每次来到博客园都心潮澎湃，因为每次都能看到各位大师的杰作，也总想将自己所知道的知识和大家共享，可基于文章的编写水平有限，一直没有实施，今天，再一次来到这里，又激起心中的那份渴望。<br />
&nbsp;&nbsp;&nbsp;&nbsp;万事开头难，为了锻炼一下自己的写作水平，也为了能够和大家一起走进.Net的海洋，探讨.Net的知识，和大家做朋友，从今天开始就用自己笨拙的笔来勾画自己的思想和见解，同时也肯请园子里的朋友给我鼓励和支持。在你们的支持下，我相信我一定能够走的很远! 
<img src ="http://www.cnblogs.com/qiangzi/aggbug/1187513.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41801/" target="_blank">[新闻]《星际争霸2》新图</a>]]></description></item></channel></rss>