Skip to main content
 Web开发网 » 站长学院 » 浏览器插件

.NET 面试题(一)——.NET 框架基础

2021年10月11日6150百度已收录

.NET基础概念

什么是 CTS、CLS 和 CLR

公共语言运行库(C LR )是一个C LI的实现,包含了.NET运行引擎和符合C LI的类库。通用类型系统(CTS)包含在微软公司提交的CLI规范中,定义了一个可以在CLR上运行的类型规范。公共语言规范是CTS的一个子集,定义了所有面向.NET的程序需要符合的最小规范集。

开发和运行.NET程序需要的最基本环境是什么

开发.NET程序需要一个文字编辑器和一个针对编码语言的编译器。对于C#来说最常用的编译器是csc.exe。而运行.NET程序,需要的是安装.NET Framework组件。

.NET是否支持多编程语言开发

.NET支持多编程语言开发。但所有设计必须符合CLS规范以保证编程语言之间的特性差异不会产生运行时的异常。

CLR技术和COM技术的比较

CLR和COM都定义了组件间交互的规范。COM并没有定义如何描述组件间的依赖性,并且由于其严格的物理约定,造成了很多组件版本升级和控制的问题。CLR运用元数据和逻辑类型定义等机制,有效地解决了 COM遗留的一些问题。并且,相较于COM模型,笔者认为CLR更容易理解和学习。

什么是程序集和应用程序域

程序集(Assembly)是一个由类型定义、数据文件和资源文件组成的逻辑集合。每个程序集 都包含一个程序集清单,该清单通常被附加在某个文件头上,也可以设置单独建立一个文件来包含该清单。.NET 面试题(一)——.NET 框架基础  .net面试经验 第1张

应用程序域是CLR中提供代码运行范围、错误隔离和安全设置隔离的逻辑单元,功能类似于操作系统的进程。一个或多个应用程序域在一个操作系统的进程中运行。应用程序域的创建和销毁所需的开销,相对于操作系统进程较小。但和操作系统进程一样应用程序域之间的数据共享相当困难。

.NET运行机制

.NET程序被编译成什么形式的代码

.NET程序在第一次编译后,形成CLR头、元数据和中间代码。在实施运行或者部署时,将经过第二次编译,编译的结果是在CLR中可执行的机器代码。

JIT是如何工作的

JIT 引擎在编译中间代码之前,会寻找方法的本机机器代码缓存并且判断其是否可用。如果可用则直接加载。如果不可用 JIT 引擎会查找类型中的方法存根找到该中间代码并且进行编译。

简述程序集的加载机制

CLR 通过 System.Reflection.Assembly.LoadFrom 和 System.Reflection.Assemblty.Load 来主动地加载程序集。前者通过位置而后者则通过唯一标识强命名程序集的4 个元素来标识程序集。CLR的加载机制和Load方法一致,其内在策略是依次通过版本策略、CODEBASE位置、应用程序域位置和应用程序位置来查找程序集。

如何配置程序集的版本策略

CLR支持在3个级别上设定版本策略。依次是:应用程序策略、发行者策略和计算机策略。所有策略的设置都是通过修改配置文件来实现。3 个级别的策略依次会被CLR执行。而上一个策略的执行结果将被作为下一个策略的输入。发行者策略仅仅针对那些放入GAC的程序集,并且可以在应用程序策略中被指定忽略。

生成、部署和管理

如何生成强签名的程序集

生成强签名的程序集需要有公钥/私钥对。在得到了公钥/私钥对后,就可以控制编译器的输入参数来得到一个强签名的程序集。对于C#的编译器CSC.exe来说,可以用/keyfile参数来制定使 用那个公钥/私钥文件。

如何把程序集放入GAC中

GAC是一个具有特定目录结构的文件夹,所有强签名的程序集都可以被放入GAC中。可以通过.NET Framework 自带的 assembly viewer 来简单地拖动添加一个程序集到GAC中,也可以利用诸如gacutiLexe等工具使用命令行来添加。总之,任何方法归根结底,都是根据GAC的规范和 程序集本身的特性,在GAC目录下建立相应的子目录结构。

延迟签名及其作用

延迟签名就是指把对强签名程序集的私钥加密和数字签名延迟到实际发布时进行。延迟签名提高了开发测试阶段的效率,也方便了机构和项目组管理自己的私钥。

程序集的版本分哪几部分

有四个元素可以唯一标识一个强签名程序集,分别是名字、版本号、文化和公钥。程序集的版本号通常由四个部分组成,它们是:主版本号 (Major Version)、次版本号 (Minor Version)、内部版本号、(BuildVersion)修订号 (Revision Version)。默认地,版本号越大代表系统越新。一般主版本号和次版本号的定义比较明确。当系统经历一个比较大的升级,主版本号会有改动;而在一个主版本中,小功能的发布则会通过次版本号进行发布。关于内部版本号和修订号,理解的分歧会更大一点。在一般情况下,一个内部版本号代表系统内部的一次集成周期;而一个修订号,则代表集成周期中的一次编译。

评论列表暂无评论
发表评论
微信