·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> Asp.net面试题
Asp.net核心技术思想
1、概述反射和序列化
反射:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性
序列化:序列化是将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用HTTP通过Internet在客户端和服务器之间
传输该对象。在另一端,反序列化将从该流重新构造对象。
2.如何把一个array复制到arrayList里
方法一、使用foreach循环,将array数组中的数据逐步放入ArrayList的对象中;
方法二、使用Copy方法,进行数据的复制;
方法三、使用ArrayList的adpater的方法,将整个Array对象封装到ArrayList对象中。
//author:renfuming
publicstaticvoidMain(string[]renargs)
{
int[]arrayInt=newint[]{1,2,3,4};
ArrayListarrlistInt=newArrayList();
//方法一
foreach(intainarrayInt)
{
arrlistInt.Add(a);
}
Console.WriteLine(arrlistInt[2].ToString());//输出3
//方法二:
ArrayListarrlistInt2=newArrayList();
arrlistInt2=ArrayList.Adapter(arrayInt);
Console.WriteLine(arrlistInt2[2].ToString());//输出3
//逆向转换
ArrayresultArr=(int[])arrlistInt2.ToArray(typeof(int));
Console.WriteLine(resultArr.GetValue(2));//输出3
}
3.datagrid.datasouse可以连接什么数据源
[dataset,datatable,dataview,IList]等接口类型的对象
4.new有几种用法
第一种:newClass(),新建一个类的对象,但是此类必须的又可访问的构造函数
第二种:显式覆盖基类的方法:publicnewMenthod(){}
5.概述o/rmapping的原理
利用反射,配置将类于数据库表映射
O/RMapping(有学习曲线,没有工具支持会相当大):存在的时间已经很长,我认为它的最主要的作用是关系型数据库的反设计——关系型数据库的设计就是要把现实中的对象和对象间关系设计成实体和实体间的关系映射。而O/RMapping恰好相反,它是把实体和实体间的关系映射还原回对象和对象间的关系。
6.类成员有()种可访问形式
可访问性:public,PRotected,private,internal
可能还有其他的访问形式,具体的情况视编码需要而定
7.用sealed修饰的类有什么特点
sealed修饰符用于防止从所修饰的类派生出其它类。如果一个密封类被指定为其他类的基类,则会发生编译时错误。
密封类不能同时为抽象类。
sealed修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。具体说来,由于密封类永远不会有任何派生类,所以对密封类的
实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。
8.列举ADO.NET中的五个主要对象,并简单描述
connection,command,dataReader,transaction,dataset...
其上对于各种对象,连接不同的数据库将会有不同的对象变体
Connection:数据库的连接需要此对象
Command:执行数据表变化的命令
dataReader和dataset主要是对数据库的表信息进行两种不同方式的读取,具体的读取得区别,后面将会有讲解
9.执行下面代码后:
StringstrTemp="yyaccpx某某某";
IntiSystem.Text.Encoding.Default.GetBytes(strTemp).Length;
Intj=strTemp.Length;
结果:i=(14);j=(11)
i=(14);j=(11)中文在内存中占两个字节
但是只算是一个字符
10.C#中,stringstr=null与stringstr="",请尽量用文字说明区别。(要点:说明详细的内存空间分配)
stringstr=""在栈中存取地址,在堆中存放对象的值
而Stringstr=null;仅仅在内存栈中分配了空间
11.详述.NET里class和struct的异同!
class:放在属于引用类型,故其存放于内存的堆中
Struct属于值类型,其存放于栈中,作为参数传递的时候属于值传递
类与结构有很多相似之处:结构可以实现接口,并且可以具有与类相同的成员类型。然而,结构在几个重要方面不同于类:结构为值类型而不
是引用类型,并且结构不支持继承。结构的值存储在“在堆栈上”或“内联”。细心的程序员有时可以通过聪明地使用结构来增强性能。
12.概述.NET里对remoting和webservice两项技术的理解和实际中的应用。
其实现的原理并没有本质的区别,在应用开发层面上有以下区别:
1、Remoting可以灵活的定义其所基于的协议,如果定义为HTTP,则与WebService就没有什么区别了,一般都喜欢定义为TCP,这样
比WebService稍为高效一些
2、Remoting不是标准,而WebService是标准;
3、Remoting一般需要通过一个WinForm或是Windows服务进行启动,而WebService则需要IIS进行启动。
4、在VS.net开发环境中,专门对WebService的调用进行了封装,用起来比Remoting方便
我建议还是采用WebService好些,对于开发来说更容易控制
Remoting一般用在C/S的系统中,WebService是用在B/S系统中
后者还是各语言的通用接口
相同之处就是都基于xml
为了能清楚地描述WebService和Remoting之间得区别,我打算从他们的体系结构上来说起:
WebService大体上分为5个层次:
1.Http传输信道
2.XML的数据格式
3.SOAP封装格式
4.WSDL的描述方式
5.UDDI
总体上来讲,.NET下的WebService结构比较简单,也比较容易理解和应用:
一般来讲在.NET结构下的WebService应用都是基于.netframework以及IIS的架构之下,所以部署(Dispose)起来相对比较容易点.
从实现的角度来讲,
首先WebService必须把暴露给客户端的方法所在的类继承于:System.Web.Services.WebService这个基类
其次所暴露的方法前面必须有[WebMethod]或者[WebMethodAttribute]
WebService的运行机理
首先客户端从服务器的到WebService的WSDL,同时在客户端声称一个代理类(ProxyClass)
这个代理类负责与WebService服务器进行Request和Response
当一个数据(XML格式的)被封装成SOAP格式的数据流发送到服务器端的时候,就会生成一个进程对象并且把接收到这个Request的
SOAP包进行解析,然后对事物进行处理,处理结束以后再对这个计算结果进行SOAP包装,然后把这个包作为一个Response发送给客户
端的代理类(ProxyClass),同样地,这个代理类也对这个SOAP包进行解析处理,继而进行后续操作。
这就是WebService的一个运行过程。
下面对.netRemoting进行概括的阐述:
.netRemoting是在DCOM等基础上发展起来的一种技术,它的主要目的是实现跨平台、跨语言、穿透企业防火墙,这也是他的基本特
点,与WebService有所不同的是,它支持HTTP以及TCP信道,而且它不仅能传输XML格式的SOAP包,也可以传输传统意义上的二进制流
,这使得它变得效率更高也更加灵活。而且它不依赖于IIS,用户可以自己开发(Development)并部署(Dispose)自己喜欢的宿主服务
器,所以从这些方面上来讲WebService其实上是.netRemoting的一种特例。
ASP.NETWeb服务基础结构通过将SOAP消息映射到方法调用,为Web服务提供了简单的API。通过提供一种非常简单的编程模型(基于将SOAP消息交换映射到方法调用),它实现了此机制。ASP.NETWeb服务的客户端不需要了解用于创建它们的平台、对象模型或编程语言。而服务也不需要了解向它们发送消息的客户端。唯一的要求是:双方都要认可正在创建和使用的SOAP消息的格式,该格式是由使用WSDL和XML架构(XSD)表示的Web服务合约定义来定义的。
.NETRemoting为分布式对象提供了一个基础结构。它使用既灵活又可扩展的管线向远程进程提供.NET的完全对象语义。ASP.NETWeb服务基于消息传递提供非常简单的编程模型,而.NETRemoting提供较为复杂的功能,包括支持通过值或引用传递对象、回调,以及多对象激活和生命周期管理策略等。要使用.NETRemoting,客户端需要了解所有这些详细信息,简而言之,需要使用.NET建立客户端。.NETRemoting管线还支持SOAP消息,但必须注意这并没有改变其对客户端的要求。如果Remoting端点提供.NET专用的对象语义,不管是否通过SOAP,客户端必须理解它们。
13.什么是code-behind技术
对于每一个Aspx文件可以相对应一个CS文件类,aspx继承自对应的CodeBehind类,在编译时,CodeBhind类编译到webui工程对应的dll中,而aspx页面中的内含代码和aspx一起编译到temporary.dll中,被客户端浏览器访问。
14.概述三层结构体系
webUI层:封装基本的页面布局形式,即表示层
Dataaccess(DAO)层:数据访问层,利用各种相关的技术,与底层数据库进行交互
Business层:业务逻辑层,封装整个程序的业务逻辑代码,主要与DAO层相关联
Model层:封装程序领域对象,该层可以在上面的三层之间进行很好的交互
这只是基本的三层架构设计,如果利用设计模式,则可以在此基础上进行灵活的变化
15.asp.net如何实现MVC模式,举例说明!
在Asp.net中实现MVC模式,相对于java没有那么快捷,但是仍是可以实现的
且由于代码隐藏和事件驱动得引入,意义不时很大,具体的实现,可以利用HttpHandler,如此,则应在Web.config文件中配置相关的节点
//Author:renfuming
<httpHandlers>
<addverb="*"path="SendTopic.aspx"type="wyzBBS.Servers.SendRootHandler"/>
<addverb="*"path="SelectTopic.aspx"type="wyzBBS.Servers.SelectTopicHandler"/>
<addverb="*"path="Question.aspx"type="wyzBBS.Servers.QuestionHandler"/>
<addverb="POST,GET"path="Ajaxpro/*.ashx"type="AjaxPro.AjaxHandlerFactory,AjaxPro"/>
</httpHandlers>
16.值类型和引用类型的区别?
C#支持两种类型:“值类型”和“引用类型”。
值类型(如char、int和float)、枚举类型和结构类型。
引用类型包括类(Class)类型、接口类型、委托类型和数组类型。
值类型与引用类型的区别在于值类型的变量直接包含其数据,而引用类型的变量则存储对象引用。对于引用类型,两个变量可能引用同一个对
象,因此对一个变量的操作可能影响另一个变量所引用的对象。对于值类型,每个变量都有自己的数据副本,对一个变量的操作不可能影响另一个变量
17.了解程序集强签名吗?
用强名称来给程序集签名即谓之程序集强签名!
通过签发具有强签名的程序集合,可以确保名称的全局唯一性!因为强名称是依赖于唯一的密钥对来确保名称的唯一性,其他人不