问答题
1、Asp.net的身份验证方式有哪些,原理是什么?
(1)Windows 身份验证:提供有关如何将 Windows 身份验证与 Microsoft Internet 信息服务 (IIS) 身份验证结合使用来确保 ASP.NET 应用程序安全的信息。
(2)Forms 身份验证:提供有关如何使用您自己的代码创建应用程序特定的登录窗体并执行身份验证的信息。使用 Forms 身份验证的一种简便方法是使用 ASP.NET 成员资格和 ASP.NET 登录控件,它们一起提供了一种只需少量或无需代码就可以收集、验证和管理用户凭据的方法。
(3)Passport 身份验证:提供有关由 Microsoft 提供的集中身份验证服务的信息,该服务为成员站点提供单一登录和核心配置。
Windows集成验证方式,其原理是利用在IIS中设置的身份验证,注意必须禁止匿名访问。
Form表单验证方式,其原理是利用Cookie来保存用户凭证,并将未经经验证的用户指向到自定义的登录页面。
Passport验证方式,其原理是通过Micrsoft的集中身份验证服务执行。
2、如何实现一个自定义类的序列化?
.net框架序列化的实现方式与MFC,Delphi的实现方式不同。任何一个用户自定义类,只要用SerializableAttribute标示,则就已经能够进行序列化了,不用用户实现特定的Serialize/Deserialize函数。在一个类中,如果有不想序列化的Field(包括Property, Delegate,Event等),可以用NonSerializedAttribute来标示。具体实现序列化还需要用到实现了IFormatter接口的类。IFormatter接口包括Serialize()/Deserialize()函数,用以实现序列化过程。.net下实现IFormatter接口的类有BinaryFormatter和SoapFormatter,分别用于以二进制或SOAP的形式序列化对象。
3、怎样实现无对话框的文件下载?
使用Stream对象。
4、Hashtable 添加内容的方式有哪几种,有什么区别?
add和使用索引器,使用add方式不会因为key相同就覆盖,使用索引器,相同的key覆盖值。
5、解释DataSet(ds) 和 ds as DataSet 的含义?
DataSet(ds) 是定义一个ds数据集对象,ds as DataSet是将ds数据集对象实例化。
6、ASP.NET中内置对象是什么?
page、response、request、server、application、session、exception这七个对象各有各的功能。其中page是处理当前页面元素的,request是向服务器发出请求的对象,response是服务器处理完客户请求后发送给客户的应答,session是开辟一块内存区域为用户提供存储对象的。
7、C/S和B/S的区别,优缺点有哪些?
C/S又称Client/Server或客户/服务器模式。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或 SQL Server。客户端需要安装专用的客户端软件。
B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。浏览器通过Web Server 同数据库进行数据交互。
C/S的优点是能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器。对应的优点就是客户端响应速度快。缺点主要有以下几个:
只适用于局域网。而随着互联网的飞速发展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。这种方式远程访问需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。
客户端需要安装专用的客户端软件。首先涉及到安装的工作量,其次任何一台电脑出问题,如病毒、硬件损坏,都需要进行安装或维护。特别是有很多分部或专卖店的情况,不是工作量的问题,而是路程的问题。还有,系统软件升级时,每一台客户机需要重新安装,其维护和升级成本非常高。
对客户端的操作系统一般也会有限制。可能适应于Win98, 但不能用于win2000或Windows XP。或者不适用于微软新的操作系统等等,更不用说Linux、Unix等。
B/S最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件。只要有一台能上网的电脑就能使用,客户端零维护。系统的扩展非常容易,只要能上网,再由系统管理员分配一个用户名和密码,就可以使用了。甚至可以在线申请,通过公司内部的安全认证(如CA证书)后,不需要人的参与,系统可以自动分配给用户一个账号进入系统。
8、为什么要用IsPostBack?
IsPostBack指判断该webform是否为响应客户端而发的,简单来说就是判断是否是webform首次访问。IsPostBack所指一般为第二次及其以后的访问,!IsPostBack才为首次访问,结果为true|false。这一般用于cookie与session 使用时的判断、Datagrid的数据绑定等等。
例如:
if(!IsPostBack)
{
if(Session==null)
{
Response.Redirect("error.htm");
9、WEBSERVERS调用主要有哪两种方法?
wsdl、web引用、soap。
10、怎样在ASP.NET中改变DATAGRID的自动换行?
datagrid1.item(0).cells(0).wrap=false
datagrid1.item(0).cells(0).wrap=fals
这样可以使一个单元格不会换行,在“属性生成器”的“格式”中的“项目”里的“标准项目”取消“单元格内文本换行”也可以使单元格不换行。
11、DataReader和DataSet有什么区别?
DataSet用来处理数据存储中的实际数据。它表示一个数据缓存,具有类似数据库的行为。它包含表、列、关系、约束和数据。在处理(如编辑,更新)复杂数据时使用 。
DataReader用来从数据库返回只读、只进数据流。在性能要求比较高,又只要求显示,不要求编辑的情况下用。
DataSet可以离线处理,前后滚动.DataReader不能离线处理,且是只读的向前的,不过速度明显会很快。
DataSet可以存储数据库各种对象的,比如表触发器等,而DataReader只能存储游标记录。
DataSet可以更新回原来的数据库,DataReader不行。
DataSet可以FORWORD PREVIUS,而DataReader只能FW。
DataReader类似一个只能向前的游标记录集。
DataSet叫数据集,是ADO.net相对与ADO实现断开式数据库连接性的主要体现。DateReader是一个客户端的只向前游标,两者的应用领域不同!读取数据后!如果要进行比较频繁的改动,可以使用DataSet,并且DataSet也支持串行化,可与xslt结合进行web开发。
DataReader则偏向于快速读取数据,针对数据量比较大的数据可能应用的更加频繁点。
12、如何给服务器端控件增加客户端脚本?
服务器端控件名.Attributes.Add("事件", "脚本函数名")
13、抽象类和接口有什么异同?
接口和类都是类,不同的事,接口只包含方法或属性的声明,不包含具体实现方法的代码,接口可以实现多继承,而类只能是单继承,继承接口的类必须实现接口中声明的方法或属性。接口主要定义一种规范,统一调用方法,在大型项目中接口正发挥日益重要的作用。
接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念!
而类是负责功能的具体实现。
在类中也有抽象类的定义,抽象类与接口的区别在于:
抽象类是一个不完全的类,类里面有抽象的方法,属性,也可以有具体的方法和属性,需要进一步的专业化。
但接口是一个行为的规范,里面的所有东西都是抽象的。
一个类只可以继承一个基类也就是父类,但可以实现多个接口。
14、在ADO.NET中,command对象是用(ExcuteNonQuery)(ExcuteScalar)(ExcuteDataReader)方法执行命令。
15、列出ADO.NET中读写数据库的主要的几个类?它们的作用?
connection 连接对象;
command 命令对象,指示要执行的命令和存储过程;
datareader是一个向前的只读的数据流;
dataadapter是功能强大的适配器,支持增删改查的功能;
dataset是一个数据级对象,相当与内存中的一张表或多张表。
16、C#中的验证控件有几种?
有RequiredFieldValidator、RangeValidator、RegularExpressionValidator、CompareValidator、CustomValidator、ValidationSummary。
17、页面间的传值有哪几种方式?
(1)使用QueryString, 如….?id=1; response. Redirect()……;
(2)使用Session变量;
(3)使用Server.Transfer。
18、页面跳转的几个方式?
如果要让用户来决定何时转换页面以及转到哪一个页面,超级链接最适合。
如果要用程序来控制转换的目标,但转换的时机由用户决定,使用Web服务器的HyperLink控件,动态设置其NavigateUrl属性。
如果要把用户连接到另一台服务器上的资源,使用Response.Redirect。
用Response.Redirect把用户连接到非ASPX的资源,例如HTML页面。
如果要将查询字符串作为URL的一部分保留,使用Response.Redirect。
如果要将执行流程转入同一Web服务器的另一个ASPX页面,应当使用Server.Transfer而不是Response.Redirect,因为Server.Transfer能够避免不必要的网络通信,从而获得更好的性能和浏览效果。
如果要捕获一个ASPX页面的输出结果,然后将结果插入另一个ASPX页面的特定位置,则使用Server.Execute。
如果要确保HTML输出合法,请使用Response.Redirect,不要使用Server.Transfer或Server.Execute方法。
Server.Execute这种页面导航方式类似于针对ASPX页面的一次函数调用,被调用的页面能够访问发出调用页面的表单数据和查询字符串集合,所以要把被调用页面Page指令的EnableViewStateMac属性设置成False。默认情况下,被调用页面的输出追加到当前应答流。但是,Server.Execute方法有一个重载的方法,允许通过一个TextWriter对象(或者它的子对象,例如StringWriter对象)获取被调用页面的输出,而不是直接追加到输出流,这样,在原始页面中可以方便地调整被调用页面输出结果的位置。
19、不用Session,Cookies,Application 怎么向其他页面传数据?
使用QueryString、Form,使用Server.Transfer。
20、delegate是引用类型还是值类型?enum、int[]和string呢?
delegate引用类型,enum值类型,int[]引用类型,string引用类型(尽供参考)。
21、我们知道new可以调用构造函数创建一个对象,那么new还有什么别的语法吗?
隐藏基类相同签名方法,如果在C# 2.0中则还作为泛型构造函数约束。
22、base这个关键字有哪几种语法?override呢?
base两个语法,分别是调用基类构造函数和调用基类方法,override用于重写基类方法(尽供参考)。
23、请指出C#中是否有下列关键字?virtual、sealed、abstract、import、as、in、goto、final、Const、signed、String(提示,仅指出C#中没有的即可)
没有的关键字:import、final、Const、signed、String(尽供参考)。
24、在循环:for( int i = 0; i < 100; i++ ) Console.WriteLine( i );中,请指出i++的执行时机。
在Console.WriterLine( i );执行之后(尽供参考)。
25、试说明continue关键字的用处。
马上开始下一次循环,忽略循环体余下的语句(尽供参考)。
26、object是C#的关键字吗?请指出C#中有哪些类型关键字,如int、float。(提示,写得越多越好)。
是,object、int、uint、long、ulong、short、ushort、byte、sbyte、char、float、double、decimal、bool,如回答:enum、struct、class、delegate也算对(尽供参考)。
27、C#的XML文档注释中(以///开头的注释),<summary>标签用于描述什么?<param>标签呢?
<summary>用于某个元素的概要说明,<param>用于某个方法的参数概要说明(尽供参考)。
28、我们知道[]是数组和索引器的访问操作符,但它还有一个语法,是什么?
特性(Attribute)(尽供参考)。
29、C#种索引器实现过程,是否只能根据数字索引?
不是的,可以是任意类型。
30、New有种用法?
有3种,第一种是实例化,如:New Class();第二种是public new,隐藏基类的方法 ;第三种是在泛型类申明中的任何类型参数都必须有公共的无参构造函数。
31、任何把一个Array复制到Arraylist中?
Foreach (object o in Array), ArrayList.Add (0)等有好多中种方法。自己想。
32、概述反射和序列化?
反射:要给发射下一个定义还是比较难的,这里先说说我的理解。反射提供了封装程序集,模块和类型对象,可以用反射动态地创建类型的实例,将类型绑定到现有对象,或者从现有对象类型里获取类型,然后调用类型的方法或访问字段和属性。
序列化:将对象转换为另一种媒介传输的格式过程。如,序列化一个对象,用Http通过internet在客户端和服务器之间传递该对象,在另一端用反序列化从该流中重新得到对象。
33、Const和ReadOnly?
Const用来申明编程时申明常量,ReadOnly用来申明运行时常量。
34、UDP和TCP连接有和异同?
TCP是传输控制协议,提供的是面向连接的,是可靠的,字节流服务,当用户和服务器彼此进行数据交互的时候,必须在他们数据交互前要进行TCP连接之后才能传输数据。TCP提供超时重拨,检验数据功能。UDP是用户数据报协议,是一个简单的面向数据报的传输协议,是不可靠的连接。
35、进程和线程分别该怎么理解?
进程是比线程大的程序运行单元,都是由操作系统所体会的系统运行单元,一个程序中至少要有一个进程,有一个进程中,至少要有一个线程,线程的划分尺度要比进程要小,进程拥有独立的内存单元,线程是共享内存,从而极大的提高了程序的运行效率同一个进程中的多个线程可以并发执行。
36、面向对象的语言具有继承性、封装性、多态性。
37、能用foreach遍历访问的对象需要实现 IEnumerable接口或声明GetEnumerator 方法的类型。
38、c#中的三元运算符是_?:_
39、当整数a赋值给一个object对象时,整数a将会被装箱。
40、类成员有3种可访问形式。
41、委托声明的关键字是delegate
42、用sealed修饰的类有什么特点?不可被继承
43、在Asp.net中所有的自定义用户控件都必须继承自System.Web.UI.UserControl
44、在.Net中所有可序列化的类都被标记为[serializable]
45、在.Net托管代码中我们不用担心内存漏洞,这是因为有了GC
46、在.Net中,类System.Web.UI.Page 可以被继承么?可以
47. C#支持的数据类型有那些?
C#支持的数据类型有:
(1) 值类型
包括:简单类型、结构类型、枚举类型。其中,简单类型又分为:整型、布尔型、字符型、浮点型、小数型。
(2) 引用类型
包括:对象类型、类类型、接口、元数据、字符串类型、数组。
48. 值类型和引用类型有何不同?
值类型和引用类型的区别在于,值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。
49. 结构和类的区别是什么?
1) 结构是一个值类型,保存在栈上,而类是一个引用类型,保存在受管制的堆上。
2) 对结构中的数据进行操作比对类或对象中的数据进行操作速度要快。
3) 一般用结构存储多种类型的数据,当创建一个很多类或对象共用的小型对象时,使用结构效率更高。
50. 简述装箱和拆箱的过程
装箱是将值类型隐式地转换为object类型或者转换为由该值类型实现了的接口类型。装箱一个数值会为其分配一个对象实例,并把该数值拷贝到新对象中。拆箱是显式地把object类型转换成值类型,或者把值类型实现了的接口类型转换成该值类型。
51. C#中不同整型之间进行转换的原则
在整型之间进行转换时,小范围类型可以隐式转换为大范围类型,但大范围类型转换为小范围类型时需要使用显式转换
52. C#中的数组类型有何特点?
1) 数组一般用于存储同一种类型的数据,包括Object类型。
2) 数组是一种引用类型,而不是值类型。
3) C#中除了可以有一维数组、**数组外,还有交错型数组。
53. 错误和异常有什么区别,为什么要进行异常处理,用于异常处理的语句有哪些?
错误是指在执行代码过程中发生的事件,它中断或干扰代码的正常流程并创建异常对象。当错误中断流程时,该程序将尝试寻找异常处理程序(一段告诉程序如何对错误做出响应的代码),以帮助程序恢复流程。换句话说,错误是一个事件,而异常是该事件创建的对象。
当使用短语“产生异常”时,表示存在问题的方法发生错误,并创建异常对象(包含该错误的信息及发生的时间和位置)来响应该错误。导致出现错误和随后异常的因素包括用户错误、资源失败和编程逻辑失败。这些错误与代码实现特定任务的方法有关,而与该任务的目的无关。
如果不进行异常处理,即不对错误做出响应,程序的健壮性就会大打折扣,甚至无法保证正常运行,所以必须要进行异常处理。
用于异常处理的语句有:try-catch语句、try-catch-finally语句、throw语句。
54. 简要回答文件和流之间的区别和联系
文件(file)和流(stream)即有区别又有联系。文件是在各种媒质上(可移动磁盘、硬盘、CD 等)永久存储的数据的有序集合。它是一种进行数据读写操作的基本对象。通常情况下,文件按照树状目录进行组织,每个文件都有文件名、文件所在路径、创建时间、访问权限等属性。
流是字节序列的抽象概念,例如文件、输入输出设备、内部进程通信管道或者TCP/IP套接字等均可以看成流。流提供一种向后备存储器写入字节和从后备存储器读取字节的方式。
55. 什么是命名空间?命名空间和类库的关系是什么?
1) 名称空间是对类的一种逻辑上的分组,即将类按照某种关系或联系划分到不同的名称空间下。
2) 名称空间又可以包含其它的名称空间,例如System.Windows.Forms,是指System名称空间下有Windows名称空间,Windows名称空间下有Forms名称空间。
3) 所有类库都在规定的名称空间下。
56. 进程和线程分别该怎么理解?
进程是比线程大的程序运行单元,都是由操作系统所体会的系统运行单元,一个程序中至少要有一个进程,有一个进程中,至少要有一个线程,线程的划分尺度要比进程要小,进程拥有独立的内存单元,线程是共享内存,从而极大的提高了程序的运行效率同一个进程中的多个线程可以并发执行。
57. 什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
应用程序域:就是为安全性,可靠性,隔离性,和版本控制,及卸载程序提供的隔离边界。它通常由运行库宿主创建,应用程序域提供了一个更安全,用途更广的处理单元。
托管代码:使用CLR编译语言编辑器开发编写的代码就叫托管代码。
装箱和拆箱:是把值类型转换为引用类型的过程,是隐式的,相反的过程就是拆箱,是显式的。
CTS是公共类型系统,CLS是公共语言规范,CLR公共语言运行库。
强类型系统:每个变量和对象都必须具有申明类型。
58. 如何理解.net中的垃圾回收机制?
答:.NET中的垃圾回收机制是引用程序对内存的回收和释放。当每次用new关键字创建一个对象时,运行库都要从托管堆中为其分配内存,因为空间是有限的,最终垃圾回收机制是要回收不用的内存的。已释放内存,重新使用。
59. 面向对象的三大基本原则?
答:封装,继承,多态。
60. 在.NET中所有类的基类是?
答:object。
61. Heap与stack的差别?
答:Heap是堆,空间是由手动操作分配和释放的,它的存储区很大的自由存储区。
Stack是栈,是由是操作系统自动分配和释放的,栈上的空间是有限的。程序在编译期间变量和函数分配内存都是在栈上进行的,且在运行时函数调用时的参数的传递也是在栈上进行的。
62. Error(错误)和Exception(异常)有是区别?
答:error表示恢复不是不可能,但是很困难,exception表示一种实际或实现问题,它表示程序运行正常不可以发生的。
63. C#中委托是什么?事件是不是一种委托?
答:委托是一种安全的类似与函数指针,但是她比指针要安全的多,它可以把方法作为一个参数传递给另一个方法,可以理解为指向函数的引用。事件是一种消息机制,它是一种委托,委托不带方法体。
64. Override, Overload,的区别?
答:Override是重写的意思,它表示重写基类的方法,而且方法的名称,返回类型,参数类型,参数个数要与基类相同。
Overload是重载是意思,它也表示重写基类的方法,但是只要方法名相同,别的可以不同。