.NET牛人应该知道些什么

本文深入探讨了.NET开发中的核心概念和技术,包括线程与进程的区别、GAC的作用、面向接口编程与面向对象编程的区别等,旨在帮助.NET开发者提高技术水平。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:http://www.hanselman.com/blog/WhatGreatNETDevelopersOughtToKnowMoreNETInterviewQuestions.aspx

作者:Scott Hanselman

这是我网上找到的,看完以后忽然发现很多自己都不太了解。于是乎赶紧google!并把搜到的一些答案写了出来,以便温故而知新! 

参考答案:http://download.youkuaiyun.com/source/3000365

任何一个使用.NET的人

  • 描述线程与进程的区别? 1、相同点: (a)二者都具有ID,一组寄存器,状态,优先级以及所要遵循的调度策略。 (b) 每个进程都有一个进程控制块,线程也拥有一个线程控制块。 (c) 线程和子进程共享父进程中的资源;线程和子进程独立于它们的父进程,竞争使用处理器资源;线程和子进程的创建者可以在线程和子进程上实行某些控制,比如,创建者可以取消、挂起、继续和修改线程和子进程的优先级;线程和子进程可以改变其属性并创建新的资源。 2、不同点: (a) 线程是进程的一部分, 一个没有线程的进程是可以被看作单线程的,如果一个进程内拥有多个进程,进程的执行过程不是一条线(线程)的,而是多条线(线程)共同完成的。 (b) 启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。 (c)系统在运行的时候会为每个进程分配不同的内存区域,但是不会为线程分配内存(线程所使用的资源是它所属的进程的资源),线程组只能共享资源。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便。而一个线程的数据可以直接为其他线程所用,这不仅快捷,而且方便。 (d) 与进程的控制表PCB相似,线程也有自己的控制表TCB,但是TCB中所保存的线程状态比PCB表中少多了。 (e) 进程是系统所有资源分配时候的一个基本单位,拥有一个完整的虚拟空间地址,并不依赖线程而独立存在。
  • Windows上的单个进程所能访问的最大内存量是多少?它与系统的最大虚拟内存一样吗?这对于系统设计有什么影响?这个需要针对硬件平台,公式为单个进程能访问的最大内存量=2的处理器位数次方/2,比如通常情况下,32位处理器下,单个进程所能访问的 最大内存量为:2^32 /2 = 2G 。单个进程能访问的最大内存量是最大虚拟内存的1/2,因为要分配给操作系统一半虚拟内存。 Windows使用一个系统:虚拟寻址系统。该系统把程序可用的内存地址映射到硬件内存中的实际地址上,这些任务完全有Windows后台管理,其实际结 果是32位处理器上的每个进程都可以使用4GB的内存------无论计算机上有多少硬盘空间(在64位处理器上这个数值会更大)。这个4GB内存实际上 包含了程序的所有部分------包括可执行代码,代码加载的所有dll,以及程序运行时使用的所有变量的内容。这个4GB内存称为虚拟地址空间,或虚拟 内存。
  • EXE和DLL之间的区别是什么?EXE里含有程序的执行入口,比如说Main()函数。EXE文件可以调用其他DLL文件里的函数等功能。 DLL在某种程度上可以看成是库吧,具有一定的功能,DLL一般是封装了一些共享的例程和资源,它通常是一个可以被其它应用程序调用的程序模块。一般扩展名为dll;它与EXE有些类似,但动态链接库不能被直接执行,只能被其它EXE或者动态链接库调用。 在.NET中,可以通过创建类库的方式创建动态链接库。 现在的Windows中,exe 和 dll 都是基于PE格式,exe 是通常的可执行文件,包含数据和代码,而 dll 是动态链接文件,也有可能是纯资源文件,只包含数据,不含程序代码。ddl 的目的之一就是提供能被许多不同的应用程序所使用的函数和资源。dll 中的函数和资源为软件开发提供了复用。它们是在运行时由磁盘物理映像载入被调用者的内存空间或共享内存空间执行。  
  • 什么是强类型,什么是弱类型?哪种更好些?为什么? 强类型是在编译的时候就确定类型的数据,在执行时类型不能更改,而弱类型在执行的时候才会确定类型。 没有好不好,二者各有好处,强类型安全,因为它事先已经确定好了,而且效率高。一般用于编译型编程 语言,如c++,java,c#,pascal等,弱类型相比而言不安全,在运行的时候容易出现错误,但它灵活,多用 于解释型编程语言,如javascript,vb等
  • PID是什么?在做系统的故障排除时如何使用它? PID 是进程编号,在系统发现故障的时候,可以根据它寻找故障所发生的具体进程,并且可通过visual studio.net等ide将故障进程附加到进程中进行调试(debug)
  • 单个TCP/IP端口上能够侦听多少个进程? 只有一个。如果你需要创建另一个TCP/IP监听,你必须建立另一个不同的端口  
  • 什么是GAC?它解决了什么问题?Gloal Assembly Cache,全局应用程序集缓存。它解决了几个程序共享某一个程序集的问题。不必再将那 个被共享的程序集拷贝到应用程序目录了,其实这道理很简单,.net应用程序在加载的时候,会首先查看 全局应用程序集缓存,如果有就可以直接使用,没有再到应用程序目录进行查找。    

中级.NET开发人员

  • 阐述面向接口、面向对象、面向方面编程的区别
  • 什么是Interface?它与Class有什么区别?
  • 什么是反射?
  • 使用ASMX的XML Web服务与使用SOAP的.NET Remoting的区别?
  • 类型系统是由XMLSchema表示的吗?CLS是XMLSchema表示的吗?
  • 从概念上阐述前期绑定(early-binding)和后期绑定(late-binding)的区别?
  • 调用Assembly.Load算静态引用还是动态引用?
  • 何时使用Assembly.LoadFrom?何时使用Assembly.LoadFile?
  • 什么叫Assembly Qualified Name?它是一个文件名吗?它有什么不同?
  • Assembly.Load("foo.dll"); 这句话是否正确?
  • 做强签名的assembly与不做强签名的assembly有什么不同?
  • DateTime是否可以为null?
  • 什么叫JIT?什么是NGEN?它们分别有什么限制和好处?
  • .NET CLR中一代的垃圾收集器是如何管理对象的生命周期的?什么叫非确定性终结?
  • Finalize()和Dispose()之间的区别?
  • using() 语法有用吗?什么是IDisposable?它是如何实现确定性终结的。
  • tasklist /m "mscor*" 这句命令是干嘛的?
  • in-proc和out-of-proc的区别
  • .NET里的哪一项技术能够实现out-of-proc通讯?
  • 当你在ASP.NET中运行一个组件时,它在Windows XP, Windows 2000, Windows 2003上分别跑在哪个进程里面?

高级开发人员/架构师

  • DateTime.Parse(myString); 这行代码有什么问题?
  • PDB是什么东西? 在调试中它应该放在哪里?
  • 什么叫圈复杂度(cyclomatic complexity)?为什么它很重要?
  • 写一个标准的lock(),在访问变量的前后创建临界区,要有"双重检查",
  • 什么叫FullTrust?放入GAC的assembly是否是FullTrust的?
  • 代码加上需要安全权限的特性有什么好处?
  • gacutil /l | find /i "Corillian" 这句命令的作用是什么?
  • sn -t foo.dll 这句命令是干嘛的?
  • DCOM需要防火墙打开哪些端口?端口135是干嘛用的?
  • 对比OOP和SOA,它们的目的分别是什么?
  • XmlSerializer是如何工作的?使用这个类的进程需要什么ACL权限?
  • 为什么不提倡catch(Exception)?
  • Debug.Write和Trace.Write有什么不同?何时应该使用哪一个?
  • Debug Build和Release Build的区别,是否会有明显的速度变化?请说明理由。
  • JIT是以assembly为单位发生还是以方法为单位发生?这对于工作区有何影响?
  • 对比抽象基类和接口的使用
  • a.Equals(b)和a == b一样吗?
  • 在对象比较中,对象一致和对象相等分别是指什么?
  • 在.NET中如何实现深拷贝(deep copy)?
  • 请解释一下IClonable
  • 什么叫装箱?
  • string是值类型还是引用类型?
  • XmlSerializer使用的针对属性的模式有什么好处?解决了什么问题?
  • 为什么不应该在.NET中使用out参数?它究竟好不好?
  • 特性能够放到某个方法的参数上?如果可以,这有什么用?

C# 组件开发人员

  • 什么时候使用override?什么时候使用new? 什么叫shadowing?
  • 解释virtual、sealed、override和abstract的区别
  • Foo.Bar, Version=2.0.205.0, Culture=neutral, PublicKeyToken=593777ae2d274679d 解释这个字符串每个部分的重要性和作用
  • 解释public、protected、private和internal的区别
  • 使用Primary Interop Assembly (PIA)有什么好处?
  • NUnit是通过什么机制获知需要测试哪些方法的?
  • catch(Exception e){throw e;}和catch(Exception e){throw;}的区别
  • typeof(foo)和myFoo.GetType()的区别?
  • public class c{ public c(string a) : this() {;}; public c() {;} } 解释第一个构造函数中发生了什么? 这个构造函数有什么用?
  • this是干嘛用的?能够用在static方法中?

ASP.NET (UI)开发人员

  • 阐述一个基于浏览器的Form POST如何变成一个服务器端的事件,如Button1_OnClick。
  • 什么是PostBack?
  • 什么是ViewState? 它是否被编码过? 是否被加密过?谁会使用ViewState?
  • <machinekey>元素是干嘛用的?它用于哪两项ASP.NET技术?
  • 说出ASP.NET 1.1中的3种Session State提供程序以及它们的优缺点?
  • 什么叫Web Gardening? 在设计中如何使用它?
  • 假设有一个ASP.NET应用程序,那么单独一个进程中允许多少应用程序对象?那两个进程呢?启用了Web Gardening的2个进程呢?这对设计有何影响?
  • ASP.NET会重用多个请求之间的线程吗?是否每个HttpRequest都有自己的线程?你是否应该用ASP.NET的Thread Local存储?
  • [ThreadStatic]属性在ASP.NET中有用吗?它有没有副作用?是好是坏?
  • 如何使用HttpHandler简化现有的为.aspx页面提供验证图片的设计
  • HttpModule订阅的是什么类型的事件? 这对于实现有何影响?如果不打算重新编译ASP.NE应用程序,应该怎么做?
  • 说出表示任意一个终端(URL)的方式,以及ASP.NET中把请求路由到那个终点的方式
  • 解释cookie的工作原理。给出一个滥用Cookie的例子。
  • 解释HttpRequest.ValidateInput()的重要性?
  • 哪些数据是通过HTTP Header传递的?
  • 对比HTTP动词GET和POST? 什么是HEAD?
  • 说出至少6个HTTP状态码以及它们的含义
  • if-not-modified-since的工作原理是什么? 用ASP.NET如何实现它?
  • 解释 <@OutputCache%>和如何使用VaryByParam、VaryByHeader.
  • VaryByCustom是如何工作的?
  • 如何通过q=? (除了q=5)来实现ASP.NET HTML输出缓冲和缓冲过期(比如http://localhost/page.aspx?q=5)?

XML开发人员

  • XML命名空间的作用?
  • 何时适合使用DOM?何时不适合?有没有尺度限制?
  • 什么是WS-I基本配置?它重要在哪里?
  • 写一个小XML文档,其中使用的是默认的命名空间,以及一个合法的(前缀)命名空间,其中要有分别属性这两个命名空间的元素
  • 元素和特性的基本区别在哪里?
  • 格式完好的XML和有效的XML有什么区别?
  • .NET中如何验证XML?
  • myXmlDocument.SelectNodes("//mynode"); 为什么这句代码不好?什么时候它是好的?
  • 拉式解析(XmlReader)与事件读取器(Sax)的区别
  • XPathDocument和XmlDocument的区别? 在何种情况下应该用哪一个?
  • “XML片断”与“XML文档”有什么区别
  • 什么叫格式规范的XML?
  • XML InfoSet规范与Xml DOM有什么不同? InfoSet是要解决什么问题?
  • 比较DTD和XSD,它们的相似点与区别分别是什么?哪个更好些?为什么?
  • System.Xml支持DTD吗?如果支持,如何使用?
  • XML Schema能够表示为对象图?对象图能够表示为XML Schema?

转载于:https://www.cnblogs.com/intcry/archive/2011/01/24/2014540.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值