.NET Framework面试题及答案1-22

时间:2021-05-09 19:08:44

2018/8/4

今天家里就我一个,想去健身,天气太热作罢。 继续面试系列。。。

推荐书单:CLR via C#

1) .Net的优点有哪些?

  1、良好的设计

  2、面向对象的编程

  3、支持多语言<c#,VB.NET,F#,Managed C++>,支持的语言都编译成中间语言(IL)

  4、代码共享、高安全性

  5、支持动态网页、支持Web 服务、GUI应用程序、组件库、数据库存储过程

  6、跨平台 .NET Core

2) 什么是 .Net Framework ?

   .NET framework 是 Microsoft提供的编程框架。开发者可以使用.Net Framework 开发应用,安装运行应用程序在不同的操作平台上。  

3) 什么是微软中间语言 (Microsoft Intermediate Language) ?

  程序在.Net 上编译时,代码会被转换为微软中间语言<MS-IL>,由JIT完成。代码在调用时得到编译,而不是在启动时编译整个代码,代码仅仅会被编译一次,且将一直存在直到应用程序退出。因此性能较好。

4) 什么是公共语言运行时(Common Language Runtime) ?

  CLR是.Net Framework 运行时的环境。CLR的核心功能包括:内存管理、程序集加载、安全性、异常处理、线程同步等,可由面向CLR的所有语言使用。将微软中间语言转换为平台特定代码。跨平台,支持三大平台。

5) 什么是通用类型系统 (Common Type System ) ?

  CTS用于描述类型的规范和行为,以便可以实现语言的互操作性。

  1、CTS规范规定一个类型可以包含零个或者多个成员。 例如:字段Field、方法Method、属性Property、事件Event

  2、指定类型的可见性规则及类成员的访问规则。例如:public、private、等。

  3、定义类型继承、虚方法、对象生存周期等。

6) 什么是公共语言规范(Common Language Specification) ?

  CLS范配合CTS实现语言的互操作性。CLS定义了一组标准,针对.NET的编译器都支持这些标准。例如:VB.Net 不区分大小写,C#区分大小写。

7) 什么是垃圾回收器(Garbage Collector) ?

  GC用于内存管理。应用程序调用new操作符创建对象时,可能没有足够的空间分配该对象,发现空间不够或者内存中对象不在使用时,垃圾回收器清除内存中不在使用的对象。

  号外:微软的COM(Component Object Mode)使用引用计数,堆上的每个对象都维护着一个计数字段,计数字段变为0时,对象就可以从内存中删除。GC的假设:对象越新,生存期越短,反之越长。回收堆的一部分,速度快于回收整个堆。

8) 如何调用垃圾回收?

  使用“GC.Collect(); “

9) 什么是托管代码 (Managed Code) ?

  托管代码就是由CLR运行和管理的代码。

10) 什么是程序集 (Assembly) ?

  程序集是一个或者多个类型定义文件及资源文件的集合。程序集定义了可重用的类型,有版本标记,可以关联安全信息。

11) 什么是程序集清单 (Assembly Manifest) ?

  程序集清单是一个元数据的表集合,主要包括程序集的组成部分的文件名称,成绩的版本,语言文化,发布者等 

12) 程序集有哪些类型 ?

  共享程序集、私有程序集

13) 什么是命名空间(NameSpace) ?

  NameSpace是一个逻辑分组,每一个类都有一个命名空间。 

14) 什么是全局程序集缓存 (Global Assembly Cache) ?

  放在公用公认目录下供多个应用程序使用的程序集。CLR在检测到对该程序集的使用时必须知道检查该目录。这个公认目录就是GAC。

15) 如何添加和移除程序集到 GAC?

  开发和测试时在GAC中安装程序集的常用工具是GACUtil.exe.

  用法: Gacutil <命令> [<选项>]

  1、添加 Gacutil  -i  A.DLL

  2、移除 Gacutil -u A.DLL

  号外:之前论坛中有人鄙视Windows程序员较多使用图形界面,没有命令行帅气。命令行没有多么高大上,工具而已。图形界面方便万千大众,当然做运维开发等命令行还是方便高效。

16) 什么是反射(Reflection)?

  Reflection是动态加载一个类,创建对象并在运行时调用方法。可用于读取元数据,在运行时查查找程序集,模块,类型信息。

  号外:高效的.NET ORM  Dapper 使用到反射。

17) 什么是延时签名(Delay signing)?

  Delay signing也称部分签名<partial signing>。延时签名允许只使用公钥生成程序集,暂不用私钥。

18) 什么是 Value types 和 Reference types ?

  .Net中有两种数据类型:值类型存储在堆栈stack、引用类型存储在托管堆heap。 
 
19) 系统异常 (System exceptions) 和应用程序异常 (Application exceptions)有何不同?

  System exceptions由CLR抛出,application exceptions用户可以自定义。 

20) 如何预防DLL被反编译(decompiled)?

  源代码保护,可以使用加密的win32包装器。但不能绝对保证不被反编译。 

21) 什么是本机代码生成器(Ngen.exe) ?

  使用Ngen.exe 将IL代码编译成本机代码。由于代码在安装时已经编译好,所以CLR的JIT编译器不需要在运行时编译IL代码,有助于提升应用程序性能。 

22) 什么是代码对象模型 (CodeDom) ?

  Code Document Object Model 是代码生成器,可以减少人的代码工作量。一般企业开发中三层结构都会用到代码生成器。 

 

  号外:模型驱动开发(Model-driven development)是一个炙手可热的概念,使用UML或者类UML建模语言建模,然后根据一系列转换可生成平台无关的业务系统。目前看到的很多局部MDD,真正意义上的MDD目前还未出现或者我不知道。