1、概述反射和序列化
反射:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性
序列化:序列化是将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间
传输该对象。在另一端,反序列化将从该流重新构造对象。
2.如何把一个array复制到arrayList里
方法一、使用foreach循环,将array数组中的数据逐步放入ArrayList的对象中;
方法二、使用Copy方法,进行数据的复制;
方法三、使用ArrayList的adpater的方法 ,将整个Array对象封装到ArrayList对象中。
// author:renfuming
public static voidMain(string[] renargs)
{
int[] arrayInt=new int[]{1,2,3,4};
ArrayList arrlistInt=new ArrayList();
//方法一
foreach(int a in arrayInt)
{
arrlistInt.Add(a);
}
Console.WriteLine(arrlistInt[2].ToString());//输出3
//方法二:
ArrayList arrlistInt2=new ArrayList();
arrlistInt2=ArrayList.Adapter(arrayInt);
Console.WriteLine(arrlistInt2[2].ToString());//输出3
//逆向转换
Array resultArr=(int[])arrlistInt2.ToArray(typeof(int));
Console.WriteLine(resultArr.GetValue(2));//输出3
}
3.datagrid.datasouse可以连接什么数据源
[dataset,datatable,dataview,IList]等接口类型的对象
4. new有几种用法
第一种:new Class(),新建一个类的对象,但是此类必须的又可访问的构造函数
第二种:显式覆盖基类的方法:public new Menthod(){}
5.概述o/r mapping 的原理
利用反射,配置 将类于数据库表映射
O/RMapping:存在的时间已经很长,我认为它的最主要的作用是关系型数据库的反设计——关系型数据库的设计就是要把现实中的对象和对象间关系设计成实体和实体间的关系映射。而O/RMapping恰好相反,它是把实体和实体间的关系映射还原成对象和对象间的关系。
6.类成员有( )种可访问形式
可访问性:public ,protected ,private,internal
Public 可以在任何地方访问;
Protected 只能在类内部和其子类中使用
Private 只能在类内部使用;
Internal 在程序集内部使用;
7.用sealed修饰的类有什么特点
sealed 修饰符用于防止所修饰的类派生出其它类。如果一个密封类被指定为其他类的基类,则会发生编译时错误。
密封类不能同时为抽象类。
sealed 修饰符主要用于防止非有意的派生,并且它还能促使某些运行时优化。具体说来,由于密封类永远不会有任何派生类,所以对密封类的
实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。
8.列举ADO.NET中的四个核心对象,并简单描述
connection,command,dataReader,DataAdapter…
其上对于各种对象,连接不同的数据库将会有不同的对象变体
Connection: 数据库的连接需要此对象
Command:执行数据表变化的命令
dataReader:从数据源中读取只进且只读的数据流
dataAdapter:用数据源填充DataSet并解析。
9.执行下面代码后:
String strTemp =”yyaccpx 某某某”;
Int i= System.Text.Encoding.Default.GetBytes(strTemp).Length;
Int j = strTemp.Length;
结果:i=(14 ) ; j=(11 )
i=(14 ) ; j=(11 ) 中文在内存中占两个字节
但是只算是一个字符
10.C#中,string str = null 与 string str =””,请尽量用文字说明区别。(要点:说明详细的内存空间分配)
string str =”” 在栈中存取地址,在堆中存放对象的值
而String str=null;仅仅在内存栈中分配了空间
11.详述.NET里class和struct的异同!
class:放在属于引用类型,故其存放于内存的堆中
Struct属于值类型,其存放于栈中,作为参数传递的时候属于值传递
类与结构有很多相似之处:结构可以实现接口,并且可以具有与类相同的成员类型。然而,结构在几个重要方面不同于类:结构为值类型而不
是引用类型,并且结构不支持继承。结构的值存储在“在堆栈上”或“内联”。细心的程序员有时可以通过聪明地使用结构来增强性能。
12.概述.NET里对 remoting 和 webservice 两项技术的理解和实际中的应用。
其实现的原理并没有本质的区别,在应用开发层面上有以下区别:
1、Remoting可以灵活的定义其所基于的协议,如果定义为HTTP,则与Web Service就没有什么区别了,一般都喜欢定义为TCP,这样
比Web Service稍为高效一些
2、Remoting不是标准,而Web Service是标准;
3、Remoting一般需要通过一个WinForm或是Windows服务进行启动,而Web Service则需要IIS进行启动。
4、在VS.net开发环境中,专门对Web Service的调用进行了封装,用起来比Remoting方便
我建议还是采用Web Service好些,对于开发来说更容易控制
Remoting一般用在C/S的系统中,Web Service是用在B/S系统中
后者还是各语言的通用接口
相同之处就是都基于XML
5、在使用webService时,为了保证服务的安全性,我们一般在服务器端设置Windows身份认证,或者是采用证书服务进行认证,使用证书服务,使用签名证书和加密证书对,我们可以确保数据传输的有效性和安全性;
为了能清楚地描述Web Service 和Remoting之间得区别,我打算从他们的体系结构上来说起:
Web Service大体上分为5个层次:
1. Http传输信道
2. XML的数据格式
3. SOAP封装格式
4. WSDL的描述方式
5. UDDI
总体上来讲,.NET 下的 Web Service结构比较简单,也比较容易理解和应用:
一般来讲在.NET结构下的WebService应用都是基于.net framework以及IIS的架构之下,所以部署(Dispose)起来相对比较容易点.
从实现的角度来讲,
首先WebService必须把暴露给客户端的方法所在的类继承于:System.Web.Services.WebService这个基类
其次所暴露的方法前面必须有[WebMethod]或者[WebMethodAttribute]
WebService的运行机理
首先客户端从服务器的到WebService的WSDL,同时在客户端声称一个代理类(Proxy Class)
这个代理类负责与WebService服务器进行Request 和Response
当一个数据(XML格式的)被封装成SOAP格式的数据流发送到服务器端的时候,就会生成一个进程对象并且把接收到这个Request的
SOAP包进行解析,然后对事物进行处理,处理结束以后再对这个计算结果进行SOAP包装,然后把这个包作为一个Response发送给客户
端的代理类(Proxy Class),同样地,这个代理类也对这个SOAP包进行解析处理,继而进行后续操作。
这就是WebService的一个运行过程。
下面对.net Remoting进行概括的阐述:
.net Remoting 是在DCOM等基础上发展起来的一种技术,它的主要目的是实现跨平台、跨语言、穿透企业防火墙,这也是他的基本特
点,与WebService有所不同的是,它支持HTTP以及TCP信道,而且它不仅能传输XML格式的SOAP包,也可以传输传统意义上的二进制流
,这使得它变得效率更高也更加灵活。而且它不依赖于IIS,用户可以自己开发(Development)并部署(Dispose)自己喜欢的宿主服务
器,所以从这些方面上来讲WebService其实上是.net Remoting的一种特例。
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>
<add verb=”*” path=”SendTopic.aspx” type=”wyzBBS.Servers.SendRootHandler”/>
<add verb=”*” path=”SelectTopic.aspx” type=”wyzBBS.Servers.SelectTopicHandler”/>
</httpHandlers>
16.值类型和引用类型的区别?
C# 支持两种类型:“值类型”和“引用类型”。
值类型(如 char、int 和 float)、枚举类型和结构类型。
引用类型包括类 (Class) 类型、接口类型、委托类型和数组类型。
值类型与引用类型的区别在于值类型的变量直接包含其数据,而引用类型的变量则存储对象引用。对于引用类型,两个变量可能引用同一个对
象,因此对一个变量的操作可能影响另一个变量所引用的对象。对于值类型,每个变量都有自己的数据副本,对一个变量的操作不可能影响另一个变量
17.了解程序集强签名吗?
用强名称来给程序集签名即谓之程序集强签名!
通过签发具有强签名的程序集合,可以确保名称的全局唯一性!因为强名称是依赖于唯一的密钥对来确保名称的唯一性,其他人不会生成与你
相同的程序集名称。
强名称保护程序集的版本沿袭,因为强名称的唯一性能够确保没有其他人能够生成你的程序集的后续版本
强名称提供可靠的完整性检查,通过.NET Framework安全检查后,可以确保程序集内容在生成后未被更改过!
要注意的是,具有强名称的程序集引用其他程序集,如果这个程序集没有强名称,那么将不具有强名称的程序集所带来的好处,并依旧会产生DLL冲
突!因此具有强名称的程序集只能引用其他具有强名称的程序集。
18. C#中接口和类有什么区别?
接口是负责功能的定义,项目中通过接口来规范类、操作类以及抽象类的概念!
而类是负责功能的具体实现!
在类中也有抽象类的定义,抽象类与接口的区别在于:
抽象类是一个不完全的类,类里面有抽象的方法,属性,也可以有具体的方法和属性,需要进一步的专业化。
但接口是一个行为的规范,里面的所有东西都是抽象的!
一个类只可以继承一个基类也就是父类,但可以实现多个接口
19.View State 的作用和实现方式?
设置是否要保存控件的状态,其功能的实质是利用隐藏表单域实现
如果设为false且在Page_Load中没有重新绑定数据的话,只要页面一刷新,控件的内容就没了 如果设为true,则页面会保存控件的内容
在一些不需要保存状态的页面中最好把它设为false,为什设为true会增加服务器的负担 隐藏域
20.在ASP.net中可以利用哪些对象存储状态?几种维持状态的对象应用场合以及优缺点?
主要用Application,session,viewstate,cookie,cache。
Application:应用程序级别的共享变量,优点是应用程序一开启该站点都能访问此变量。缺点:所有对此进行写入操作要加锁,由此共享变
量锁带来的内存开销只有此应用程序关闭才能结束。
Session:维护用户个人的状态信息,优点:个人所从事活动,如登录信息,购物车信息等较安全而且又服务器维护较稳定。缺点:维持http连接的sessionID仍然有缺陷,同时为每个用户维护状态信息,服务器内存开销很大。
Viewsate:如19题所说,在一些场合能体现它的特点,但同时带来的缺点:影响整个页面的速度以及隐藏字段未加密。
Cookie:优点是将状态信息维护在客户端的一个文本文件,不需要耗用服务器的内存,是目前各大网站主要采用的方式。 缺点:由于其将状态信息存贮在客户端,很可能由别人破解此文件而获得此人的个人隐私和机密信息。其受限大小为4K.
Cache:优点是提供的此功能很强大,如文件缓存依赖、API依赖、数据库依赖以用于存贮数据变化而更换缓存状态数据。提供存储周期从httpcontext到httpruntime。缺点:耗用服务器内存。
21.简单说说 ASP.NET 中基于表单的身份验证方式的用法?
配置文件提供对站点那些目录的保护以及登录页面,当访问该目录的文件时,如果用户未认证通过,将转入登录页面, 用户输入用户名和密码,将此参数传入认证模块authentication,该模块负责认证,如果通过将isauthentication设置为true,并返回用户的identity对象,此
时页面将转入初始请求页,如果未通过,将不允许访问此目录。
22.是否了解 URL Rewrite?请简要说明其原理和在 ASP.NET 中的实现方式?
一般放在httpmodule中applicatioin_request事情中,当每次http请求,将此URL定位到重写的url函数中并返回重写后的URL地址。主要用于当我们站点板块移动时由于链接仍然指向旧地址,故可以重定向到新的地址,当然查询参数也可以重写。url-mapping配置
23. 在超过10万条记录的页面显示时,你如何处理分页,有多少种替代方案?
一般根据页面选择的第几页PageIndex,以及服务端配置文件配置的每页行数PageSize,通过传入参数传入存贮过程,由其返回相应行数pagesize的记录。即每一页数据都由服务端返回。可以利用缓存Cache,将数据一次加载,在结合asp.net2.0中数据库缓存方式,跟踪数据库表的信息的变化,自动更新缓存信息
对于数据分页,也可以利用gridview数据邦定控件的自动分页的方式
24. DataReader和DataSet的异同?
Daatareader和Datatset都是通过从数据源取数据。不同点:Datareader提供只进行流的方式读取数据。Dataset提供一种容器里面主要由表以及表关系,由适配器来提供从数据源取得数据填充到此容器的表中。
DataReader和DataSet最大的区别在于,DataReader使用时始终占用SqlConnection,在线操作数据库..任何对SqlConnection的操作都会引发DataReader的异常..因为DataReader每次只在内存中加载一条数据,所以占用的内存是很小的..因为DataReader的特殊性和高性能.所以DataReader是只进的..你读了第一条后就不能再去读取第一条了..
DataSet则是将数据一次性加载在内存中.抛弃数据库连接..读取完毕即放弃数据库连接..因为DataSet将数据全部加载在内存中.所以比较消
耗内存…但是确比DataReader要灵活..可以动态的添加行,列,数据.对数据库进行回传更新操作
25. 你会利用那些工具进行数据库的性能分析及其优化?说说你觉得优化数据库需要注意的方面。比如:如何设计优化查询为主、插入更新为主的表。
我主要通过执行计划、索引优化、客户统计和服务器跟踪工具来检测从SQL到索引、硬盘IO和时间等信息。 对于查询为主的表,首先对数
据量的大小有一定的估计,当达到一定程度应采用水平分区,有的根据主键有的根据时间段来区分。由于此表往往插入更新不是太快,可对适
当字段采用索引并且填充因子可以尽量大。以及SQL优化等。 对于插入更新为主的表,我觉得健壮性更重要,只要根据标准外部采用存贮过程就可以了。
26. 数据库某表主键自增,是很常见的情形。在ASP. Net或C#程序中,要求向该表插入一条记录,并马上从该表查出这条记录。不能使用时间戳,请问你如何实现?
插入一条记录会返回@@identity,通过它得到该记录的主键,再select一下就可以了
27.Xhtml的三种DOCTYPE分别有什么含义?请说明。简单说明各个情况下,那些标签可以使用,那些不可以使用?
XHTML 1.0 提供了三种DTD声明可供选择:W3C规范
过渡的(Transitional):要求非常宽松的DTD,它允许你继续使用HTML4.01的标识(但是要符合xhtml的写法)。完整代码如下:
<!DOCTYPE
html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
严格的(Strict):要求严格的DTD,你不能使用任何表现层的标识和属性,例如<br>。完整代码如下:
<!DOCTYPE html PUBLIC
“-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>
框架的(Frameset):专门针对框架页面设计使用的DTD,如果你的页面中包含有框架,需要采用这种DTD。完整代码如下:
<!DOCTYPE html
PUBLIC “-//W3C//DTD XHTML 1.0 Frameset//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd”>
28.请举例说明XHtml代码规范,越多越好。
1.所有的标签都必须要有一个相应的结束标签, 如果是单独不成对的标签,在标签最后加”/”来关闭它。
2.所有标签的元素和属性的名字都必须使用小写
3.所有的XML标记都必须合理嵌套
4.所有的属性必须用引号””括起来
5.把所有<和&特殊符号用编码表示
如:(<),编码为& l t ; (&),编码为& a m p;
6.给所有属性赋一个值
7.不要在注释内容中使“–”, “–”只能发生在XHTML注释的开头和结束有效。
29. 客户端与浏览器:如果让你做一个TreeView控件,你的思路
我会采用javascript来做,主要采用htc。 数据通过XML.
通过htc操作XML并定义一些方法如:load、addnode、deletenode、updatenode、selectednode等方法。一些属性如对图标、节点位置、节
点前复选框等属性,也会提供一些默认事件(如修改节点前后刷新等)。
30.谈谈论坛聊天室IM和各种网站程序的交互与刷新思路的差异与共同点。
IM交互式信息通信 ajax刷新思路,对于集中刷新方式,应该有部分和全部刷新的区别