面试(2)

又面临找工作了,记下些之前没有记住的问题,希望能找到一个自己满意的工作,加油。

一些基础问题的了解:

应用程序域 :

应用程序域 (application domain) (AppDomain) 一种边界,它由公共语言运行库围绕同一应用程序范围内创建的对象建立(即,从应用程序入口点开始,沿着对象激活的序列的任何位置)。应用程序域有助于将在一个应用程序中创建的对象与在其他应用程序中创建的对象隔离,以使运行时行为可以预知。在一个单独的进程中可以存在多个应用程序域。

以前的类似应用程序域是通过进程来实现,即要达到这种效果,需要多个线程来实现。

CLR 

CLR常用简写词语,CLR是公共语言运行时,Common Language Runtime)和Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集),并保证应用和底层操作系统之间必要的分离。

CTS:

公共类型系统(又叫通用系统类型) Common Type System

CLS

     公用语言规范,可以保证C#组件与其他语言组件间的互操作性. Common Language Specification

受管制的代码

 

最简单的说呢,受托管的代码不能直接写内存,是安全的,而非托管代码是非安全代码,可以使用指针操作内存。

什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?

答案:应用程序域:一种边界,它有公共语言运行库围绕同一应用程序范围内创建的对象建立(即,从应用程序入口点开始,沿着对象激活的序列的任何位置)。应用程序域有助于将在一个应用程序中建立的对象在其他应用程序中创建的对象隔离,以使运行时行为可以预知。在一个单独的进程中可以存在多个应用程序域。以前使用进程边界来隔离在同一台计算机上运行的应用程序。每一个应程序被加载到单独的进程中,这样就将该应用程序与同一台计算机上运行的其他应用程序相隔离。隔离这些应用程序的原因在于内存地址是与进程相关的;在目标进程中,不能通过任何有意义的方式使用一个进程传递到另一个进程的内存指针。此外,您不能在两个进程间进行直接调用。您必须代之以使用代理,它提供一顶程度的饿间接性。托管代码必须先通过一个验证过程,然后才能运行(除非管理员已授权跳过该验证)。次验证过程以下内容:这些代码是否会尝试访问无效的内存地址?是否会尝试执行某些导致进程(该代码运行时所在的进程)无法正常进行的其他操作?通过次验证测试的代码将被人是类型安全的。由于公共语言运行库嫩能够够验证代码是否为类型安全的代码,所以它可以提供与进程边界一样大的隔离级别,而其性能开销在则要低得多。应用程序域提供安全而通用的处理单元,公共语言运行库可使用它来提供应用程序之间的隔离。您可以在具有同等隔离级别(存在于单独的进程中)的但个进程中运行几个应用程序域,而不会造成进程间切换等方面的额外开销。在一个进程内运行多个应用程序的能力显著增强了服务器的可伸缩性。隔离应用程序对于应用程序安全也是十分重要。例如,您可以在单个浏览器进程中运行几个Web应用程序的控件,同时使这些控件不能访问彼此的饿数据和资源。
应用程序域所提供的隔离具有以下优点:在一个应用程序中出现的错误不会影响其他以内功用程序。因为类型安全的代码不会导致内存错误,所以使用应用程序宇可以确保在一个域中运行的代码不会影响进程中的其他应用程序。能够在不停止整个进程的情况下停止单个应用程序。使用应用程序域使您可以卸载在单个应用程序中运行的代码。注意 不能卸载单个程序集或类型。只能卸载整个域。在一个应用程序中运行的代码不能直接访问其他应用程序中代码或资源。为了强制实施此隔离,公共语言运行库禁止在不同应用程序域中的对象之间进行直接调用。要在个域之间传递对象,可以复制这些对象,或通过代理访问这些对象。如果复制对象,那么对该对象的调用为本地调用。也就是说,调用方和被引用的对象位于同一应用程序域中。如果通过代理访问对象,那么对该对象的调用为远程调用。在此情况下,调用方和被引用的对象位于不同的应用程序域中。域间调用所采用远程调用结构与两个进程间的调用或两台计算机间的调用结构相同。代码行为的作用范围由它行为所在的应用程序决定。换言之,应用程序域将提供应用程序版本策略等配置设置、它所访问的任意远程程序集的位置,以及加载到该域中的程序集的位置信息。受管制的代码:在CLR虚拟机中运行的代码。强类型语言:如c/c++就是各种变量在各自的饿作用域使用之前都要由开发者定义类型,并交由编译器分配内存空间。装箱,就是把值转为引用类型。反之应用转为值

什么是重载?CTS、CLS和CLR分别做何解释

答案:重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。
CTS:类似于COM定义的标准二进制格式,.net定义了一个称为通用类型系统 Common Type System (CTS)的类型标准。这个类型不但实现COM的变量兼容,而且还定义了通过用户自定义类型的方式进行类型扩展。任何类型的方式进行类型扩展。任何以.net平台作为目标的语言必须建立它的数据类型与CTS的类型间的影射。所有,net语言共享这一类型系统,实现他们之间无缝的互操作。该方案还提供了语言之间的继承性。
CLS:.net通过定义公共语言规范(CLS:Common Language Specification),限制了由这些不同引发的互操作性问题。CLS指定了一种以.net平台为目标的语言所必须支持的最小特征,以及该语言与其他.net语言之间实现互操作性所需要的完备特征。CLS是CTS的饿一个饿子集。之间和就意味着一种语言特征可能符合CTS标准,但又超出CLS的范畴。
CLR: 公共语言运行库Common Language Runtime(CLR).CLR是CTS的实现,也就是说,CLR是应用程序的执行引擎和功能齐全的类库,该类库严格按照CTS规范实现。作为程序执行引擎,CLR负责安全地载入和运行用户程序代码,包括对不同对象的垃圾挥手和安全检查。CLR监控之下运行的代码,称为托管代码(managed code)。

原文地址:https://www.cnblogs.com/30763402/p/2086445.html