.net面试题目问答题2

[.NET(C#)]
abstract class和interface有什么区别?
答:声明方法的存在而不去实现它的类被叫做抽像类(abstract class)
它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。
不能创建abstract 类的实例。
然而可以创建一个变量,其类型是一个抽像类,并让它指向具体子类的一个实例。
不能有抽像构造函数或抽像静态方法。
Abstract 类的子类为它们父类中的所有抽像方法提供实现,否则它们也是抽像类。
取而代之,在子类中实现该方法。
知道其行为的其它类可以在类中实现这些方法。

接口(interface)是抽像类的变体。
在接口中,所有方法都是抽像的。
多继承性可通过实现这样的接口而获得。
接口中的所有方法都是抽像的,没有一个有程序体。
接口只可以定义static final成员变量。
接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。

当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。
然后,它可以在实现了该接口的类的任何对像上调用接口的方法。
由于有抽像类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。
引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

接口可以继承接口。
抽像类可以实现(implements)接口
抽像类是否可继承实体类(concrete class),但前提是实体类必须有明确的构造函数。

[.NET(C#)]
什么叫应用程序域?什么是托管代码?什么是强类型系统?
什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?

应用程序域:
应用程序域为安全性、可靠性、版本控制以及卸载程序集提供了隔离边界。
应用程序域通常由运行库宿主创建,运行库宿主负责在运行应用程序之前引导公共语言运行库。
应用程序域提供了一个更安全、用途更广的处理单元,公共语言运行库可使用该单元提供应用程序之间的隔离。
应用程序域可以理解为一种轻量级进程。起到安全的作用。占用资源小。

托管代码:
使用基于公共语言运行库的语言编译器开发的代码称为托管代码;托管代码具有许多优点,
例如:跨语言集成、跨语言异常处理、增强的安全性、版本控制和部署支持、简化的组件交互模型、调试和分析服务等



装箱和拆箱:
从值类型接口转换到引用类型:装箱。
从引用类型转换到值类型:拆箱。
装箱和拆箱使值类型能够被视为对象。
对值类型装箱将把该值类型打包到 Object 引用类型的一个实例中。
这使得值类型可以存储于垃圾回收堆中。
拆箱将从对象中提取值类型。

重载:
每个类型成员都有一个唯一的签名。
方法签名由方法名称和一个参数列表(方法的参数的顺序和类型)组成。
只要签名不同,就可以在一种类型内定义具有相同名称的多种方法。
当定义两种或多种具有相同名称的方法时,就称作重载。

CTS通用类型系统 (common type system) :
一种确定公共语言运行库如何定义、使用和管理类型的规范。

CLR公共语言运行库:
.NET Framework 提供了一个称为公共语言运行库的运行时环境.
它运行代码并提供使开发过程更轻松的服务。

CLS公共语言规范:
要和其他对象完全交互,而不管这些对象是以何种语言实现的.
对象必须只向调用方公开那些它们必须与之互用的所有语言的通用功能。
为此定义了公共语言规范 (CLS),它是许多应用程序所需的一套基本语言功能。

强类型:
C# 是强类型语言;因此每个变量和对象都必须具有声明类型。

[.NET(C#)]
值类型和引用类型的区别?
基于值类型的变量直接包含值。
将一个值类型变量赋给另一个值类型变量时,将复制包含的值。
这与引用类型变量的赋值不同,引用类型变量的赋值只复制对对象的引用,而不复制对象本身。

所有的值类型均隐式派生自 System.ValueType。
与引用类型不同,从值类型不可能派生出新的类型。但与引用类型相同的是,结构也可以实现接口。
与引用类型不同,值类型不可能包含 null 值。然而,可空类型功能允许将 null 赋给值类型。
每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。
值类型主要由两类组成:结构、枚举
结构分为以下几类:
Numeric(数值)类型、整型、浮点型、decimal、bool、用户定义的结构。
引用类型的变量又称为对象,可存储对实际数据的引用。
声明引用类型的关键字:class、interface、delegate、内置引用类型: object、string

                     值类型                    引用类型

内存分配地点      分配在栈中                   分配在堆中
效率           效率高,不需要地址转换          效率低,需要进行地址转换
内存回收        使用完后,立即回收              使用完后,不是立即回收,等待GC回收
赋值操作         进行复制,创建一个同值新对象    只是对原有对象的引用
函数参数与返回值 是对象的复制                  是原有对象的引用,并不产生新的对象
类型扩展   不易扩展    容易扩展,方便与类型扩展

[.NET(C#)]
如何理解委托
委托类似于 C++ 函数指针,但它是类型安全的。
委托允许将方法作为参数进行传递。
委托可用于定义回调方法。
委托可以链接在一起;例如,可以对一个事件调用多个方法。
方法不需要与委托签名精确匹配。有关更多信息,请参见协变和逆变。
C# 2.0 版引入了匿名方法的概念,此类方法允许将代码块作为参数传递,以代替单独定义的方法。

[.NET(C#)]
C#中的接口和类有什么异同。
异:
不能直接实例化接口。
接口不包含方法的实现。
接口、类和结构可从多个接口继承。
但是C# 只支持单继承:类只能从一个基类继承实现。
类定义可在不同的源文件之间进行拆分。

同:
接口、类和结构可从多个接口继承。
接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。
接口可以包含事件、索引器、方法和属性。
一个类可以实现多个接口。

[.NET(C#)]
ASP.net的身份验证方式有哪些
Windows 身份验证提供程序
提供有关如何将 Windows 身份验证与 Microsoft Internet 信息服务 (IIS) 身份验证
结合使用来确保 ASP.NET 应用程序安全的信息。

Forms 身份验证提供程序
提供有关如何使用您自己的代码创建应用程序特定的登录窗体并执行身份验证的信息。
使用 Forms 身份验证的一种简便方法是使用 ASP.NET 成员资格和 ASP.NET 登录控件
它们一起提供了一种只需少量或无需代码就可以收集、验证和管理用户凭据的方法。

Passport 身份验证提供程序
提供有关由 Microsoft 提供的集中身份验证服务的信息,该服务为成员站点提供单一登录和核心配置

[.NET(C#)]
活动目录的作用
Active Directory存储了有关网络对象的信息,并且让管理员和用户能够轻松地查找和使用这些信息。
Active Directory使用了一种结构化的数据存储方式,并以此作为基础对目录信息进行合乎逻辑的分层组织。

[.NET(C#)]
解释一下UDDI、WSDL的意义及其作用
UDDI:统一描述、发现和集成协议(UDDI, Universal Description, Discovery and Integration)
是一套基于Web的、分布式的、为Web服务提供的信息注册中心的实现标准规范,
同时也包含一组使企业能将自身提供的Web服务注册以使得别的企业能够发现的访问协议的实现标准。
UDDI 提供了一组基于标准的规范用于描述和发现服务,还提供了一组基于因特网的实现。

WSDL:WSDL描述Web服务的公共接口。
这是一个基于XML的关于如何与Web服务通讯和使用的服务描述;
服务 URL 和命名空间
网络服务的类型
(可能还包括 SOAP 的函数调用,正像我所说过的,WSDL 足够自如地去描述网络服务的广泛内容)
有效函数列表
每个函数的参数
每个参数的类型
每个函数的返回值及其数据类型

[.NET(C#)]
什么是SOAP,有哪些应用。
答:SOAP(Simple Object Access Protocol )简单对象访问协议
是在分散或分布式的环境中交换信息并执行远程过程调用的协议,是一个基于XML的协议。
使用SOAP,不用考虑任何特定的传输协议(最常用的还是HTTP协议)
可以允许任何类型的对象或代码,在任何平台上,以任何一直语言相互通信。
这种相互通信采用的是XML格式的消息。

SOAP也被称作XMLP,为两个程序交换信息提供了一种标准的工作机制。
在各类机构之间通过电子方式相互协作的情况下完全有必要为此制定相应的标准。

SOAP描述了把消息捆绑为XML的工作方式。
它还说明了发送消息的发送方、消息的内容和地址以及发送消息的时间。
SOAP是Web Service的基本通信协议。
SOAP规范还定义了怎样用XML来描述程序数据(Program Data),怎样执行RPC(Remote Procedure Call)。
大多数SOAP解决方案都支持RPC-style应用程序。
SOAP还支持 Document-style应用程序(SOAP消息只包含XML文本信息)。

最后SOAP规范还定义了HTTP消息是怎样传输SOAP消息的。
MSMQ、SMTP、TCP/IP都可以做SOAP的传输协议。

SOAP 是一种轻量级协议,用于在分散型、分布式环境中交换结构化信息。
SOAP 利用 XML 技术定义一种可扩展的消息处理框架,它提供了一种可通过多种底层协议进行交换的消息结构。
这种框架的设计思想是要独立于任何一种特定的编程模型和其他特定实现的语义。

SOAP 定义了一种方法以便将 XML 消息从 A 点传送到 B 点。
为此,它提供了一种基于 XML 且具有以下特性的消息处理框架:
1) 可扩展
2) 可通过多种底层网络协议使用
3) 独立于编程模型。

[.NET(C#)]
如何部署一个ASP.net页面
VS 2005和VS 2003都有发布机制。
2003可以发布然后再复制部署。
VS2005基本上可以直接部署到对应位置。

[.NET(C#)]
GC是什么? 为什么要有GC?
答:GC是垃圾收集器。
程序员不用担心内存管理,因为垃圾收集器会自动进行管理。
要请求垃圾收集,可以调用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
不过在C#中不能直接实现Finalize方法,而是在析构函数中调用基类的Finalize()方法

[.NET(C#)]
如何理解.net中的垃圾回收机制
.NET Framework 的垃圾回收器管理应用程序的内存分配和释放。
每次您使用 new 运算符创建对象时,运行库都从托管堆为该对象分配内存。
只要托管堆中有地址空间可用,运行库就会继续为新对象分配空间。
但是,内存不是无限大的。最终,垃圾回收器必须执行回收以释放一些内存。
垃圾回收器优化引擎根据正在进行的分配情况确定执行回收的最佳时间。
当垃圾回收器执行回收时,它检查托管堆中不再被应用程序使用的对象并执行必要的操作来回收它们占用的内存。

[.NET(C#)]
列举ASP.NET 页面之间传递值的几种方式。 并说出他们的优缺点。
答. 1).使用QueryString, 如....?id=1; response. Redirect()....
    2).使用Session变量
    3).使用Server.Transfer

session(viewstate) 简单,但易丢失
application   全局
cookie    简单,但可能不支持,可能被伪造
input ttype="hidden" 简单,可能被伪造
url   参数 简单,显示于地址栏,长度有限数据库 稳定,安全,但性能相对弱

[.NET(C#)]
C#中索引器的实现过程,可以用任何类型进行索引?(比如数字)

[.NET(C#)]
CTS、CLS、CLR分别作何解释?
CTS:通用语言系统。
CLS:通用语言规范。
CLR:公共语言运行库。

[.NET(C#)]
.net中读写数据库需要用到那些类?他们的作用?
DataSet: 数据存储器。
DataCommand: 执行语句命令。
DataAdapter: 数据的集合,用语填充。

[.NET(C#)]
在.net中,配件的意思是:程序集。(中间语言,源数据,资源,装配清单)

[.NET(C#)]
常用的调用WebService的方法有哪些?
答:1.使用WSDL.exe命令行工具。
    2.使用VS.NET中的Add Web Reference菜单选项

[.NET(C#)]
微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。
.net Remoting 的工作原理是:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。
WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。
remoting是.net中用来跨越machine,process,appdomain进行方法调用的技术
对于三成结构的程序,就可以使用remoting技术来构建.
它是分布应用的基础技术.相当于以前的DCOM
Web Service是一种构建应用程序的普通模型
并能在所有支持internet网通讯的操作系统上实施。
Web Service令基于组件的开发和web的结合达到最佳

[.NET(C#)]
启动一个线程是用run()还是start()?
答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态。
这意味着它可以由JVM调度并执行。
这并不意味着线程就会立即运行。
run()方法可以产生必须退出的标志来停止一个线程。

[.NET(C#)]
构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

[.NET(C#)]
abstract的method不可同时是static,不可同时是native,不可同时是synchronized

[.NET(C#)]
final, finally, finalize的区别。
final: 修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。
因此 一个类不能既被声明为 abstract的,又被声明为final的。
将变量或方法声明为final,可以保证它们在使用中不被改变。
被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。
被声明为 final的方法也同样只能使用,不能重载
finally: 在异常处理时提供 finally 块来执行任何清除操作。
如果抛出一个异常,那么相匹配的 catch 子句就会执行.
然后控制就会进入 finally 块(如果有的话)。
finalize: 方法名。
Java 技术允许使用 finalize() 方法在垃圾收集器将对像从内存中清除出去之前做必要的清理工作。
这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。
它是在 Object 类中定义的 ,因此所有的类都继承了它。
子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。
finalize() 方法是在垃圾收集器删除对像之前对这个对象调用的。

[.NET(C#)]
进程和线程的区别:
进程是系统进行资源分配和调度的单位;
线程是CPU调度和分派的单位.
一个进程可以有多个线程,这些线程共享这个进程的资源。

[.NET(C#)]
堆和栈的区别:
栈:由编译器自动分配、释放。在函数体中定义的变量通常在栈上。
堆:一般由程序员分配释放。用new、malloc等分配内存函数分配得到的就是在堆上。

[.NET(C#)]
成员变量和成员函数前加static的作用:
它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数。
分别用来反映类的状态。
比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作。

[.NET(C#)]
在c#中using和new这两个关键字有什么意义:
using 引入名称空间或者使用非托管资源
new 新建实例或者隐藏父类方法

[.NET(C#)]
XML即可扩展标记语言。
eXtensible Markup Language.标记是指计算机所能理解的信息符号
通过此种标记,计算机之间可以处理包含各种信息的文章等。
如何定义这些标记,即可以选择国际通用的标记语言
比如HTML,也可以使用象XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。
XML是从SGML中简化修改出来的。它主要用到的有XML、XSL和XPath等。

[.NET(C#)]
什么是code-Behind技术。
答:ASPX,RESX和CS三个后缀的文件,这个就是代码分离.
实现了HTML代码和服务器代码分离.方便代码编写和整理.

[.NET(C#)]
XML 与 HTML 的主要区别
1. XML是区分大小写字母的,HTML不区分。
2. 在HTML中,如果上下文清楚地显示出段落或者列表键在何处结尾,
那么你可以省略</p>或者</li>之类的结束 标记。
在XML中,绝对不能省略掉结束标记。
3. 在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为结尾。
这样分析器就知道不用 查找结束标记了。
4. 在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。
5. 在HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应的值。

[.NET(C#)]
.net的错误处理机制是什么?
答:.net错误处理机制采用try->catch->finally结构.
发生错误时,层层上抛,直到找到匹配的Catch为止。

[.NET(C#)]
Static Nested Class 和 Inner Class的不同:
Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。
而通常的内部类需要在外部类实例化后才能实例化。

[.NET(C#)]
error和exception有什么区别:
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。
不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。
也就是说,它表示如果程序运行正常,从不会发生的情况。

[.NET(C#)]
UDP连接和TCP连接的异同:
前者只管传,不管数据到不到,无须建立连接.后者保证传输的数据准确,须要连结.

[.NET(C#)]
C#中所有对象共同的基类是:System.Object.

[.NET(C#)]
System.String 和System.StringBuilder有什么区别?
System.String是不可变的字符串。String类是final类故不可以继承。
System.StringBuilder存放了一个可变的字符串,并提供一些对这个字符串修改的方法。

[.NET(C#)]
const和readonly有什么区别?
const 可以用于局部常量
readonly 实际是类的initonly字段,显然不能是局部的。

原文地址:https://www.cnblogs.com/lijun-xiao/p/3225711.html