通用类型系统(CTS)(Common Type System) 包含在微软公司提交的 CLI 规范,定义了一个能够在 CLR 上运行的类型规范。 javascript
公共语言运行库(CLR)(Common Language Runtime)是一个CLI 的一个实现,包含了.NET 运行引擎和符合 CLI 的类库。 java
公共语言规范 (Common Language Specification)是 CTS的一个子集,定义了全部面向.NET 的程序所须要符合的最小规范集。程序员
面试题 2 CLR 技术和 COM技术的比较
CLR 和 COM 都定义了组件间交互的规范。COM 并无定义如何描述组件间的依赖性,而且因为其严格的物理约定,形成了不少组件版本升级和控制的问题。CLR 运用元数据和逻辑类型定义等机制,有效地解决了 COM 遗留的一些问题。而且,相较于 COM模型,笔者认为CLR 更容易理解和学习。面试
面试题 3 JIT是如何工做的
JIT 引擎在编译中间代码以前,会寻找方法的本机机器代码缓存而且判断其是否可用,若是可用则直接加载,若是不可用,JIT 引擎会查找类型中的方法存根,找到该中间代码而且进行编译。算法
面试题 4 怎么把程序集放入 GAC 中
GAC是一个具备特定目录结构的文件夹,全部强签名的程序集均可以被放入GAC中。能够经过.NET Framework自带的assembly viewer来简单地拖动添加一个程序集到 GAC 中,也能够利用诸如 gacutil.exe等工具使用命令行来添加。总之,任何方法归根结底,都是根据 GAC 的规范和程序集自己的特性,在GAC目录下创建相应的子目录结构。数据库
面试题 5 值类型和引用类型的区别
全部继承自System.ValueType 的类型是值类型,而其余类型都是引用类型。值类型的赋值会产生一个新的数据副本,因此每一个值类型都拥有一个数据副本,而引用类型的赋值则是赋值引用。值类型的对象分配在堆栈上,而引用类型的对象分配在堆上。当比较两个值类型时,进行的是内容比较,而比较两个引用类型时,进行的是引用比较。
面试题 6 C#中string 和String 有什么区别
String 和 string 是同一个类型的两个名字,相同状况还有 Object 和 object。除了名称以外,二者没有任何区别。
面试题 7 简述.NET中堆栈和堆的特色和差别 .NET 的程序在进程内存中分配出堆栈、托管堆和非托管堆。全部的值类型对象和引用类型对象的引用都分配在堆栈上,堆栈根据对象的生存周期来依次分配和释放,堆栈根据一个指向栈尾的指针来分配内存,效率较高。
.NET 全部引用类型对象分配在托管堆上,托管堆连续分配内存,而且受.NET 的垃圾收集机制管理,受托管堆的内存分配和释放涉及复杂的内存管理,效率相对于堆栈来讲低地多。 须要分配堆内存的非托管类型将被分配在非托管堆上,非托管堆不受.NET 垃圾收集机制管理,内存块彻底由程序员手动申请和释放。编程
面试题 8 .NET中GC 的运行机制
垃圾回收是指收集释放托管堆上再也不被使用的对象内存。其过程基本包括:经过算法找到再也不被使用的对象、移动对象使全部仍被使用的对象紧靠托管堆的一边和调整各个状态变量。 垃圾回收的运行成本较高,对性能的影响较大。程序员在编写.NET 代码时,应该避免没必要要的内存分配,尽可能减小或避免使用 GC.Collect来执行垃圾回收。数组
面试题 9 简述 C#中重写、重载和隐藏的概念
重写是指用 override 关键字从新实现基类中的虚方法,在运行的过程当中,不管经过哪一个类型的引用,真正对象类型的方法将被调用。隐藏是指用 new关键字从新实现基类中的方法,在运行的过程当中经过引用的类型判断应该调用哪一个类型的方法。重载是指多个方法共享同一个名字而且拥有相同的返回值,可是却能够拥有不一样的参数列表。缓存
面试题 10 在 C#中如何声明一个类不能被继承
C#中经过关键字:sealed能够申明一个类型不可被继承,设计中应该为全部不被做为基类的类型添加sealed关键字,以免各类来自继承的易产生的错误。安全
面试题 11 Int[]是引用类型仍是值类型
数组类型是一族类型,它们都继承自 System.Array,而System.Array又继承自System.Object。全部的数组类型都是引用类型。
面试题 12 解释泛型的基本原理
泛型相似C++中的模板,容许程序员定义更通用的类型和算法,而且在具体使用时再生成具体的封闭类型。全部带泛型参数的类型都是一个开放式类型,它不能被实例化,但具有全部封闭类型的其余特性,本质上,它和封闭类型没有区别。
面试题 13 Serializable 特性有何做用
经过为类型添加Serialization特性,可使对象申明为可被序列化,也便是可被诸如BinaryFormmater等类型的对象序列化和反序列化。
面试题 14 如何自定义序列化和反序列化的过程
经过实现 ISerializable 接口中的 GetObjectData 方法能够实现自定义的序列化,而经过添加带有SerializationInfo 和StreamingContext的参数的构造方法能够自定义反序列化的过程。
面试题 15 如何使用 IFormattable 接口实现格式化输出
IFormattable接口帮助类型实现了多样式的格式化输出。IFormattable 的ToString方法接受一个表明格式的字符串参数,经过对这个参数的分析来进行格式化输出。另外,IFormattable.ToString方法接受一个IFormatProvider类型的参数,以容许类型的使用者提供格式化的方法。
面试题 16 .NET提供了哪几个定时器类型
.NET 的内建类型中有三个定时器类型,分别是:
面试题 17 在 System.Object 中定义的三个比较方法有何异同
静态方法 ReferenceEquals 实现了引用比较。静态 Equals 方法实现了比较高效地调用实例 Equals 方法的功能。实例Equals 方法是一个虚方法,默认的实现是引用比较,类型能够根据须要重写实例 Equals方法。值类型的基类ValueType 重写了Equals方法,实现了内容的比较。
面试题 18 请解释委托的基本原理
委托是一类继承自System.Delegate 的类型,每一个委托对象至少包含了一个指向某个方法的指针,该方法能够是实例方法,也能够是静态方法。委托实现了回调方法的机制,可以帮助程序员设计更加简洁优美的面向对象程序。
面试题 19 委托回调静态方法和实例方法有何区别
当委托绑定静态方法时,内部的对象成员变量:_target 将会被设置成null,而当委托绑定实例方法时,_target将会设置成指向该实例方法所属类型的一个实例对象,当委托被执行时,该对象实例将被用来调用实例方法。
面试题 20 什么是链式委托
链式委托是指一个由委托串成的链表,当链表上的一个委托被回调时,全部链表上该委托的后续委托将会被顺序执行。
面试题 21 请解释事件的基本使用方法
事件是一种使对象或类可以提供通知的成员。客户端能够经过提供事件处理程序为相应的事件添加可执行代码。事件是一种特殊的委托。
面试题 22 请解释反射的基本原理和其实现的基石
反射是一种动态分析程序集、模块、类型、字段等目标对象的机制,它的实现依托于元数据。元数据是存储在PE 文件中的数据块,它详细记录了程序集或模块内部的结构、引用的类型和程序集和清单。
面试题 23 如何利用反射来实现工厂模式
使用反射能够实现灵活性较高的工厂模式,其关键在于动态地查找产品所包含的全部零件,而不须要经过代码来逐一分析使用者的需求。反射工厂模式具备灵活性高,运行效率相对较低的特色。
面试题 24 如何以较小的内存代价保存 Type、Field 和 Method 信息
System.RuntimeTypeHandle、System.RuntimeMethodHandle 和 System.RuntimeFieldHandle 三个类型,分别包含了一个指向类型、方法和字段描述的指针,用保存指针的方式来代替保存整个类型、方法和字段的信息描述对象,能够有效地减小内存的消耗。而在实际须要用到这些信息时,又能够经过这三个句柄类型对象,分别获得System.Type、System.Reflection.MethodInfo 和System.Reflection.FieldInfo 类型对象。
面试题 25 什么是线程
线程是微软公司提出的轻量级线程的概念,一个线程拥有本身的栈和寄存器状态。一个线程能够包含多个线程,和线程由操做系统调度所不一样的是,线程内线程的调度彻底由程序员本身控制,操做系统的内核彻底不会知道线程的存在。在.NET 架构中,线程的概念不必定和操做系统的线程对应,有些状况下.NET 中的线程对应一个线程。
面试题 26 如何使用.NET的线程池
System.Threading.ThreaPool 类型封装了线程池的操做。每一个进程都拥有一个线程池,.NET 提供了线程池管理的机制,用户只须要把线程需求插入到线程池中,而没必要再理会后续的工做。全部线程池中的线程都是后台线程,他们不会阻碍程序的退出。
面试题 27 C#中的 lock 关键字有何做用
C#中的lock关键字实质是调用 Monitor.Enter 和Monitor.Exit两个方法的简化语法,功能上其实现了进入和退出某个对象的同步。一般状况下,能够经过 lock一个私有的引用成员变量来完成成员方法内的线程同步,而经过lock一个私有的静态引用成员变量来完成静态方法内的线程同步。
面试题 28 请解释 ASP.NET 以什么形式运行
ASP.NET 是做为一个ISAPI 过滤器程序来运行的,同时它是一个.NET CLR的宿主,从而实现了运行托管的服务器代码的功能。
面试题 29 GET请求和 POST 请求有何区别
HTTP协议中有两种经常使用的请求:GET 和POST。GET 请求把表单的数据显示地放在 URI 中,而且对长度和数据值编码有所限制。POST 请求把表单数据放在 HTTP请求体中,而且没有长度的限制。
面试题 30 介绍 ASP.NET的页面生存周期
若是把 ASP.NET 页面的生存周期步骤作个分类的话,能够大体分为四类:
1)初始化
初始化包含上文列出的 PreInit、Init 和 InitComplete 三个步骤,其功能包含了初始化类对象、初始化主题主页面等特性,判断是不是第一次访问页面等初始功能。
2)加载数据和页面
这一类型包含了 LoadSate、ProcessPostDate、PreLoad、Load、ProcessPostData(第二次)等步骤。 首先从页面回传的数据加载入 ViewState对象,全部的数据都会以 Base64 编码随页面传入服务器。而后开始处理回传的数据,也就是把表单中的键/值对存入对象之中。随后就开始加载页面,程序员一般会在这里作一些初始化的编程,例如在 OnLoad 事件中编写页面初始化代码。最后会再次执行ProcessPostData,以处理 Load时候新添加的数据。
说明:两次执行 ProcessPostData一般会让程序员感到困惑,事实上这两次数据处理都是必须的。第一次处理保证了在执行页面加载以前,全部的数据从页面上被读入,这样页面加载时就能够访问这些数据。而第二次ProcessPostData则是为了使页面加载时新创建的控件中的数据可以获得处理。这两次处理缺一不可。
3)触发事件
触发事件包含了 ChangedEvents和PostBackEvent步骤。这里首先会比较ViewState中的数据和页面上一次回传的数据,以为有哪些事件须要被触发,这里事件是逐一被触发的,但其顺序将没法肯定。而后会查看是否触发Post Back 事件,该事件也就是页面提交的事件。
4)保存状态并呈现页面
这里会包含SaveState、SaveStateComplete、Render步骤。首先页面会编码保存全部的 ViewState 数据,而后将其嵌入到页面的一个隐藏控件中。接着转换全部的控件标签并生成页面 HTML,而且发送回客户端。
注意:上述分类并无包含最终的 Unload 步骤,这是由于这个步骤虽然重要,但从不须要程序员关心,ASP.NET 会负责释放全部对象的资源。
面试题 31 列举几种实现页面跳转的方法
几乎在每一个 ASP.NET 的应用程序中,都会出现页面跳转的需求,而实现页面跳转也有很是多的方法:
面试题 32 如何防止 SQL注入式攻击
SQL 注入式攻击时常见的一种攻击方法,主要利用的是系统设计的弊端。程序员在设计时须要考虑到注入式攻击的问题,避免直接使用用户输入拼接 SQL 语句,适当使用加密数据进行存储,而且在合适的场合使用存储过程。
面试题 33 ADO.NET支持哪几种数据源
ADO.NET 一共支持四个类别的数据源,分别是:SQL SERVER数据库、ORACLE 数据库、OLE DB提供商和 ODBC提供商。
面试题 34 请简要叙述数据库链接池的机制
ADO.NET 对上层用户提供了数据库链接池的服务,使用完的数据库链接将被有选择的保持在数据库链接池中,以供下次使用。当用户以某个链接字符串申请数据库链接时,数据库链接池将尝试寻找在池中寻找具备相同的链接字符串的链接,并直接提供给用户。
面试题 35 一个链接字符串能够包含哪些属性
链接字符串包含了丰富的可选属性,在进行数据库操做时,程序员应该对数据库链接字符串进行再三斟酌,不一样的设置将适合不一样的实际状况。详细的链接字符串属性列表请参考表 1。
面试题 36 什么是强类型的 DataSet
强类型DataSet 是指那些固定结构的继承自 DataSet的类型,相较于DataSet而言,强类型的 DataSet具备访问方便,约束性强的特色,有利于数据访问层的隔离,也有利于把错误提早到编译阶段被发现。
面试题 37 什么是 XML
XML就是可扩展性标记语言, XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记能够用方便的方式创建,XML极其简单且易于掌握和使用。
面试题 38 XML 中的命名空间如何使用
命 名 空 间 被 用 来 模 块 化 XML 文 档 中 的 元 素 , 它 以 如 下 形 式 定 义 :
xmlns:namespace-prefix="namespace"。当解析器试图读取特定命名空间下的节点时,须要指定命名空间的名称。
面试题 39 .NET中如何验证一个 XML 文档的格式
通过 W3C 组织的推荐,XSD 已经成为了最为标准和通用的 XML 结构定义语言。在.NET 中,XmsReader支持使用XSD文件来验证XML文档是否符合特定的格式,程序员须要作的事为其设置包含了指定XSD 文件的XmlReaderSetting对象,而且遍历XML文档。
面试题 40 什么是 XSLT,XSLT有何做用
XSLT 是一种对XML文档进行格式转换的语言,其经过 XPath来从XML 文档中提取所需内容,而且依照特定语法组织新的格式。
面试题 41 如何在代码中使用 XSLT文档
.NET 中全部支持 XSL 的类型都被定义在 System.Xml.Xsl 命名空间下,可使用XslCompiledTransform来进行指定的格式转换。另外,在 BS结构系统中,客户端可使用 javascript脚本调用Microsoft.XMLDOM 类型,并进行格式转换。
面试题 42 请简述 SOAP 协议
SOAP 以 XML 形式提供了一个简单、轻量的用于在分散或分布环境中交换结构化和类型信息的机制。SOAP协议定义了交互的方式,但并未规定时限协议的环境和技术细节。读者能够参考 SOAP协议定义文档,来获取全部的协议内容。
面试题 43 如何在.NET中建立 Web Service
在.NET 中,可使用内建类型 WebService 和WebMethod特性来实现Web Service,这种方法使得程序员彻底不须要处理和通讯有关的工做,而将注意力集中在逻辑工做上。为了得到更大的灵活性,程序员也能够经过实现IHTTPRequest接口来实现定义的 asmx资源请求处理类型。更进一步的,程序员能够自定义资源文件和处理程序,来实现彻底自定义的 Web Service,只须要确保全部的返回都符合 SOAP协议。
面试题 44 如何生成 Web Service 代理类型
Web Service 代理类是指负责 SOAP 通讯的代理类型,这容许程序员经过调用本地的 Web Service 代理类型来达到访问 Web Service 服务器的目的。在.NET 中,能够经过使用 wsdl.exe 工具或者添加 Web引用来生成 Web Service 代理类型,后者能够在服务器端有所变更后方便地更新代理类型。
面试题 45 如何提升链接池内链接的重用率
为了提升数据库链接池的重用率,惟一的方法就是尽可能保证系统访问数据库所使用的链接字符串不变。例如创建跳板数据库,使全部链接都首先尝试访问跳板数据库。另外,统一使用超级用户账号能够进一步统一链接字符串,但这为系统带来了安全上的隐患。
面试题 46 ADO.NET支持哪两种方式来访问关系数据库
ADO.NET 一共支持两种数据库访问方式,分别是链接式的和脱机式的。链接式的较适合大数据量而且不能准确预测须要读取多少记录的状况,脱机式的更适合进行小数据量的读取操做。
面试题 47 什么是关系型数据库
关系型数据库是支持采用了关系模型的数据库,简单来讲,关系模型就是指二维表模型。相对于其余模型来讲,关系型数据库具备理解更容易、使用更方便、维护更简单等优势。
面试题 48 Session有哪几种存储方式,之间有何区别,如何进行设置
Session 数据一共有四种存储方式,分别为存储在 IIS进程中、状态服务器中、SQL Server数据库中和自定义程序中。除了准备必要的服务外(如 SQL Server数据库服务器),还须要配置站点的 Web.Config文件进行设置。
说明:能够在 Web.Config中设置关闭 Session数据,这样会话的数据就不能获得保存。
面试题 49 请简述 ViewState 的功能和实现机制 ViewState 用来存储页面范围内的数据,以保证用户在离开页面以前数据的持续性。实现上来讲,ViewState被保存在页面内的一个隐藏控件内,而且在提交到服务器后被提取使用。