.net模拟面试常见问题及答案_第1页
.net模拟面试常见问题及答案_第2页
.net模拟面试常见问题及答案_第3页
.net模拟面试常见问题及答案_第4页
.net模拟面试常见问题及答案_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1、 Response.Redirect(),Server.Transfer(),Server.Execute(的区另 U1 、 Response.Redirect():Response.Redirect方法导致浏览器链接到一个指定的URL当Response.Redirect()方法被调用时,它会创建一个应答,应答头中指出了状态代码302(表示目标已经改变)以及新的目标URL浏览器从服务器收到该应答,利用应答头中的信息发出一个对新 URL 的请求。 这就是说,使用 Response.Redirect 方法时重定向操作发生在客户端,总共涉及到两 次与服务器的通信(两个来回) :第一次是对原始页面

2、的请求,得到一个302 应答,第二次是请求302 应答中声明的新页面,得到重定向之后的页面。2、 Server.TransferServer.transfer 是 IIS 5.0 新增加的一个功能。它解决了 Response.Redirect 的两个重要 的缺陷:1)在 Response.Redirect 中,我们得不到任何第一页的输出2) Response.Redirect会丢失request中的所有属性,当然我们可以通过一些其他的办法,比如 session 来搞定,可是,有些页的参数是在request 中传过来的,这样的话,就不行了;3) Response.Redirect 需要 clie

3、nt 端再发起一个请求。server.transfer就很好地解决了这些问题。它是从server端直接向下一页发起请求,不需要client 再次发送请求.如果你的网页非常依赖 response.redirect, 这个小小的改变可以提高将近25%的效率。 (根据微软文档) .Server.Transfer方法把执行流程从当前的ASPX文件转到同一服务器上的另一个ASPX页面。调用 Server.Transfer时,当前的 ASPX页面终止执行,执行流程转入另一个ASPX页面,但新的 ASPX页面仍使用前一 ASPX页面创建的应答流。如果用Server.Transfer方法实现页面之间的导航,浏

4、览器中的URL不会改变,因为重定向完全在服务器端进行,浏览器根本不知道服务器已经执行了一次页面变换。默认情况下,Server.Transfer方法不会把表单数据或查询字符串从一个页面传递到另一个页面,但只要把该方法的第二个参数设置成True,就可以保留第一个页面的表单数据和查询字符串。同时,使用Server.Transfer时应注意一点:目标页面将使用原始页面创建的应 答流,这导致 ASPNET的机器验证检查(MachineAuthentication Check, MAC)认为新页面的 ViewState已被篡改。因此,如果要 保留原始页面的表单数据和查询字符串集合,必须把目标页面Page指

5、令的 EnableViewStateMac 属性设置成 Falseserver.Transfer(泊一个不足就是:当用户在 a.aspx中提交了一个表单,然后用Server.Transfer(进入b.aspx,这时如果用户刷新一下页面,浏览器便会问用户是否“重试”发送表单,如果用户点击“是” ,那么,表单中的数据被重新发送到服务器。如发送表单的作用就是为了向数据库中插入一条记录,结果导不希望发生的事同一表单被多次加入到数据库中。3、 Server.ExecuteServer.Execute方法允许当前的 ASPXM面执行一个同一 Web服务器上的指定 ASPX 页面,当指定的 ASPX页面执行

6、完毕,控制流程重新返回原页面发出Server.Execute调用的位置。这种页面导航方式类似于针对ASPX页面的一次函数调用,被调用的页面能够访问发出调用页面的表单数据和查询字符串集合,所以要把被调用页面Page 指令的EnableViewStateMac 属性设置成False。4.erver.Execute(another.aspx)和 Server.Transfer(another.aspx)区另1J: Execute 是从当前页面转移到指定页面,并将执行返回到当前页面Transfer是将执行完全转移到指定页面总结:在网络状态较玄?的情况下,Redirect(url)方法效率最高!可重定向

7、到同一台或非同一台服务器上的aspx或非aspx (html)资源Server.Transfer方法和 Server.Execute方法最灵活!但只能转到同一 Application目录下, 也有可能导致不期望的结果发生Server.Execute方法占用资源最多.2 、 SQL 2005 的新特性是什么 ? 与 oracle 有什么区别? 一、数据库设计方面1、字段类型。varchar(max)nvarchar(max) 类型的引入大大的提高了编程的效率,可以使用字符串函数对CLOB类型进行操作,这是一个亮点。但是这就引发了对 varchar和char效率讨 论的老问题。到底如何分配varc

8、har 的数据,是否会出现大规模的碎片?是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQL Server的字段类型更加简洁统一。XML 字段类型更好的解决了 XML 数据的操作。 XQuery 确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!)2、外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。但是再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了 SET NULL和SET DEFAULT1性,能够提供能好的级联设置。3、索引附加字段这是一个不错

9、的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。4、计算字段的持久化原来的计算字段其实和虚拟字段很像。 只是管理方面好了而已, 性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。5、分区表分区表是个亮点!从分区表也能看出微软要做大作强SQL Server的信心。资料很多,这里不详细说。 但是重点了解的是: 现在的 SQL Server2005 的表, 都是默认为分区表的。因为它

10、要支持滑动窗口的这个特性。 这种特性对历史数据和实时数据的处理是很有帮助 的。但是需要注意的一点,也是我使用过程中发现的一个问题。在建立 function-schema-table 后,如果在现有的分区表上建立没有显式声明的聚集索引时, 分区表会自动变为非分区表。这一点很让我纳闷。如果你觉得我的非分区索引无法对起 子分区,你可以提醒我一下呀!没有任何的提醒,直接就变成了非分区表。不知道这算不算一个 bug 。大家也可以试试。分区表效率问题肯定是大家关心的问题。在我的试验中,如果按照分区字段进行的查询(过滤)效率会高于未分区表的相同语句。但是如果按照非分区字段进行查询,效率会低于未分区表的相同语

11、句。但是随着数据量的增大,这种成本差距会逐渐减小,趋于相等。 ( 500 万数量级只相差10%左右)6、CLR类型微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜, 感觉对象数据库的一些概念可以实现了。 但是作了些试验, 发现使用 CLR 的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!其实可以做一下类比, Oracle 等数据库产品老早就支持了 java 编程, 而且提供了 java池参数作为用户配置接口。但是现在有哪些系统大批使用了 java 存储过程

12、?!连Oracle自己的应用都不用为什么?!还不是性能有问题!否则面向对象的数据库早就实现了!建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。或者是要和操作系统进行 Socket 通讯的场景。否则建议慎重!7、索引视图索引视图 2k 就有。但是 2005 对其效率作了一些改进但是schema.viewname 的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。8、语句和事务快照语句级快照和事务级快照终于为SQL Server的并发性能带来了突破。个人感觉语句级快照大家应该应用

13、。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被 提示修改不成功要求重试时,会杀人的!9、数据库快照原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g 的闪回技术还是细粒度不够。可惜!二、开发方面1、 Ranking 函数集其中最有名的应该是row_number 了。 这个终于解决了用临时表生成序列号的历史,而且SQL Server2005的row_number比Oracle的更先进。因为它把 Order by集成到了一 起,不用像 Oracle 那样还要用子查询进行封装。但是大家注意一点。如下面的例子:select ROW_NUMB

14、ER() OVER (order by aa)from tblorder by bb会先执行aa 的排序,然后再进行bb 的排序。可能有的朋友会抱怨集成的 order by , 其实如果使用 ranking 函数 ,Order by 是少不了的。如果担心Order by 会影响效率,可以为 order by 的字段建立聚集索引,查询计划会忽略 order by 操作(因为本来就是排序的嘛) 。2、 top可以动态传入参数,省却了动态SQL的拼写。3、 Apply对递归类的树遍历很有帮助。4、 CTE个人感觉这个真是太棒了!阅读清晰,非常有时代感。5、 try/catch代替了原来VB 式的错误

15、判断。比 Oracle 高级不少。6、 pivot/unpivot个人感觉没有case直观。而且默认的第三字段(还可能更多)作为 group by字段 很容易造成新手的错误。三、DBA 管理方面1、数据库级触发器记得在最开始使用 2k 的时候就要用到这个功能,可惜2k 没有,现在有了作解决方案的朋友会很高兴吧。2、多加的系统视图和实时系统信息这些东西对 DBA 挑优非常有帮助,但是感觉粒度还是不太细。3、优化器的改进一直以来个人感觉SQL Server 的优化器要比Oracle 的聪明。 SQL2005 的更是比 2k聪明了不少。 (有次作试验发现有的语句在 200 万级时还比50 万级的相同

16、语句要快show_text 的一些提示没有找到解释。一直在奇怪。 )4、 profiler 的新事件观察这一点很好的加强了 profiler 的功能。但是提到 profiler 提醒大家注意一点。windows2003 要安装 sp1 补丁才能启动profiler 。否则点击没有反应。5、 sqlcmd习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动 SQL ServerManagement Studio 的朋友使用。3、 ASP.NET MVC 介绍MVC 把一个 web 应用分成了三个部分: model view 和 controller 。 ASP.NET MVC 框架提供了

17、一 个可以代替 web 窗体的基于 mvc 的应用。ASP.NET MVC概述mvc的优点:1. 通过把项目分成model view 和 controller ,使得复杂项目更加容易维护。2. 没有使用 view state 和服务器表单控件,可以更方便的控制应用程序的行为3. 应用程序通过controller 来控制程序请求,可以提供丰富的 url 重写。4. 对单元测试的支持更加出色5. 在团队开发模式下表现更出众ASP.NET MVC概述 web窗体的优点:1. 采用事件驱动模式来控制应用程序请求,由大量服务器控件支持2. 采用页面控制机制,可以为单个页面添加事件处理函数。3. 使用 v

18、iew state 和服务器端页面,使管理页面状态信息更加轻松。4. 对人数较少的想使用服务器端控件的开发团队,使用起来更加方便5. 开发起来比mvc 模式要轻松简单一些ASP.NET MVC 概述 mvc 框架特色:1. 分离任务(输入逻辑,业务逻辑和显示逻辑),易测性和默认的测试驱动组件。所有mvc 用到的组件都是基于接口并且可以被 mock 对象测试到,你可以不必在 进程中运行controller就可以使用测试。使得测试更加快速和简捷。2. 可扩展的简便的框架。 mvc 框架被设计用来更轻松的移植和定制功能。你可以加入自己的视图引擎, url 重写策略。重载 action 方法等。 mv

19、c 也支持 Dependency Injection (DI) and Inversion of Control (IOC )3. 强大的 url 重写机制让你更方便的建立容易理解和可搜索的 url 。 url 可以不包含任何文件扩展 名,并且可以重写url 使其对搜索引擎更加友好。4. 可以使用 现有的页面标记、用户控件、模板页。你可以使用嵌套模板页,嵌入表达式 , 声明服务器控件、模板,数据绑定、定位等等。5. 对现有的 程序的支持, mvc 让你可以使用如窗体认证和windows 认证、 url 认证、组管理和规则、 输出、 数据缓存、 session 、 profile 、 healt

20、h monitoring 、 配置管理系统、 provider architecture 特性。4 、 SQL Server 三种复制的区别1、事务复制将复制启用后的所有发布服务器上发布的内容在修改时传给订阅服务器;数据更改将按照其在发布服务器上发生的顺序和事务边界,应用于订阅服务器;在发布内部可以保证事务的一致性;2、快照复制将数据以特定时刻的瞬时状态分发,而不监视对数据的更新;发生同步时,将生成完整的快照,并将其发送到订阅服务器;3、合并复制通常从发布数据库对象和数据的快照开始, 并且用触发器跟踪在发布器和订阅服务器上所做的后续更改和架构修改;订阅服务器在连接到网络时将与发布服务器进行同步

21、,并交换自上次同步以来发布服务器和订阅服务器之间发生更改的所有行;5 、 请你谈一谈你对值类型与引用类型的理解?1. 所有对象都继承自System.Object ,而所有的值类型都继承自System.ValueType。也就是说,System.ValueType重写了 System.Object的方法使得值类型的操作是基于值而 不是基于引用。2. 值类型内存分配在栈上, 引用类型内存分配在托管堆中。 内存分配在这两个地方的区别在于:如果超出了值类型定义的范围,值类型分配的内存会立刻从内存中清除,即它的内存生命周期是可以预测的。而引用类型分配在托管堆中,内存管理有垃圾处理器控制,不可预知其生命周

22、期。3. 赋值操作值类型赋值操作是会依次copy 所有成员变量的值。引用类型仅仅是地址重定向。4. 参数传递默认为值传递,即参数为值类型是传递值类型的值副本,参数为引用类型时传递引用类型地址值副本。但当参数使用 out 或者ref 关键字是,传递的是引用本身。但是在使用 ref ,需要注意一些区别:当参数为引用类型时,不使用 ref 关键字,方法还是可以通过传入的引用改变其所指向的实例,但是不能改变引用本身。 当参数为引用类型时,同时使用 ref 关键字,方法可以通过传入的引用改变其所指向的实例,并且改变引用本身。 5. 值类型是 sealed 的,不能继承6. 值类型不能写Finalize(

23、)方法,该方法用于堆上的内存回收。7. 装箱与拆箱装箱- 把值类型转换为引用类型。拆箱- 把引用类型转换为值类型。作用:可以把值类型也看作是对象。最常使用的情况是在集合操作的时候,大多数方法接口都接收一个对象参数(object)。当传入值类型时,.NET会自动处理装箱细节,把值类型转变为引用类型。从集合取出时,把引用类型的值取出放回值类型变量。缺点:性能上有损失。并且缺少类型安全保证。 .NET 2.0推出了泛型基本上能解决这个问题。6 、 private 、 protected 、 public 和 internal 的区别 ?private 是完全私有的, 只有在类自己里面可以调用, 在类

24、的外部和子类都不能调用,子类也不能继承父类的 private 的属性和方法。protected 虽然可以被外界看到, 但外界却不能调用, 只有自己及自己的子类可以调 用( protected 的属性和方法都可以被子类所继承和调用) 。private 和 protected 的共同点:外部都不可以访问。private 和 protected 的不同点: 在同一类中可视为一样, 但在继承中就不同了, private 在派生类中不可以被访问,而protected 可以。public 对任何类和成员都完全公开,无限制访问。internal同一应用程序集内部(在VS.NET中的一个项目中,这里的项目是指

25、单独的项目,而不是整个解决方案)可以访问。public 和 internal 的区别: public 的成员可以跨程序集,但internal 不能,同一程序集中具有相同的效果。protected internal :只能在同一应用程序集内本类、派生类访问。7、ASPNET如何进行性能优化问题?我们将从5方面来进行ASPNET性能优化:一、 SqlDataRead 和 Dataset 的选择Sqldataread 优点:读取数据非常快。如果对返回的数据不需做大量处理的情况下, 建议使用 SqlDataReader, 其性能要比datset 好很多。 缺点: 直到数据读完才可close掉于数据库的

26、连接(SqlDataReader 读数据是快速向前的。 SqlDataReader 类提供了一种读取从SQLServer 数据库检索的只进数据流的方法。它使用 SQL Server 的本机网络数据传输格式从数据库连接直接读取数据。DataReader需及时显式的close。可及时的释放对数据的连接。 )Dataset 是把数据读出,缓存在内存中。缺点:对内存的占用较高。如果对返回的数据需做大量的处理用 Dataset 比较好些可以减少对数据库的连接操作。优点:只需连接一次就可close 于数据库的连接一般情况下,读取大量数据,对返回数据不做大量处理用SqlDataReader对返回数据大量处理

27、用 datset比较合适.对SqlDataReader和Dataset的选择取决于程序功能的实 现。二、 ExecuteNonQuery 和 ExecuteScalar对数据的更新不需要返回结果集,建议使用ExecuteNonQuery 。由于不返回结果集可省掉网络数据传输。它仅仅返回受影响的行数。如果只需更新数据用 ExecuteNonQuery 性能的开销比较小。ExecuteScalar 它只返回结果集中第一行的第一列。使用 ExecuteScalar 方法从数据库中检索单个值 (例如 id 号) 。 与使用 ExecuteReader 方法, 返回的数据执行生成 单个值所需的操作相比,

28、此操作需要的代码较少。只需更新数据用ExecuteNonQuery.单个值的查询使用ExecuteScalar数据绑定的选择三、数据的绑定 DataBinder一 般 的 绑 定 方 法 用 DataBinder.eval 绑定不必关心数据来源(Dataread 或 dataset) 。不必关心数据的类型eval会把这个数据对象转换为一个字符串。在底层绑定做了很多工作,使用了反射性能。正因为使用方便了, 但却影响了数据性能。 来看下 。当于dataset 绑定时, DataItem 其实式一个DataRowView (如果绑定的是一个数据读取器( dataread )它就是一个IdataRec

29、ord 。 )因此直接转换成DataRowView的话,将会给性能带来很大提升。 对数据的绑定建议使用 。 数据量大的时候可提高几百倍的速度。使用时注意2 方面: 1.需在页面添加.2.注意字段名的大小写(要特别注意) 。如果和查询 的不一致,在某些情况下会导致比 还 要 慢 。 如 果 想 进 一 步 提 高 速 度 , 可 采 用 的方法。不过其可读性不高。以上的是 的写法。在 c#中:对查看页面每个执行过程状态最简单的办法:其页面的 trace 属性为 true 就可查看细节。一、使用存储过程:1、性能方面:存储过程提供了许多标准sql 语言中所没有的高级特性。其传递参数和执行逻辑表达式

30、的功能,有助于应用程序设计者处理复杂任务。另外,存储过程存储在本地服务器上,减少了执行该过程所需的网络传输宽带和执行时间。 (存储过程已经对 sql 语句进行了预编译,所以其执行速度比在程序里执行sql 语句快很多)2、程序结构方面:从程序的可扩展性看,使用存储过程会对程序以后的修改带来方便。比如数据库的结构改变了,只需修改相对应的存储结构,和程序中的调用部分即可。这部分不属于本文探讨范围,属于程序结构设计方面。所以不在此展开。3、程序安全性:使用存储过程可避免SQL Injection 攻击。二、查询语句的优化(针对 sql server2000 )很多人只为目的写出 sql 语句, 而不考

31、虑 sql 语句的执行效率。 在这我只提供一优化表顺序的方法, ( sql 语句的优化和原则将会在我的 sql server2000 学习笔记中专题讨 论)对 sql 语句执行效率可用 sql server2000 的查询分析器来查看语句的执行过程。优化表顺序: 一般情况下, sqlserver 会对表的连接作出自动优化。 例如: selectname,no from A join B on A. id=B.id join C on C.id=A.id where name= wang 尽管A表在From中先列出,然后才是B,最后才是C。但sql server可能会首先使用 c 表。它的选择原

32、则是相对于该查询限制为单行或少数几行,就可以减少在其他表中查找的总数据量。绝大多数情况下, sql server 会作出最优的选择,但如果你发觉某个复杂的联结查询速度比预计的要慢,就可以使用SET FORCEPLANNg句弓II制sql server按照表出现顺序使用表。 如上例加上:SET FORCEPLAN ON.SET FORCEPLAN OFF的 执行顺序将会按照你所写的顺序执行。在查询分析器中查看2 种执行效率,从而选择表的连接顺序。使用SET FORCEPLA睡择表联结顺序三、页面的优化( .aspx) 主要针对几个页面属性1、EnableViewState(页面的视图状态)。如果

33、无特殊要求设置为false。使用ViewState , 每个对象都必须先序列化到 ViewState 中, 然后再通过回传进行反序列化,因此使用 ViewState 是没有代价的。尽量减少使用对象,如果可能,尽量减少放入ViewState 中的对象的数目。下面情况基本上可以禁用 viewstate :( 1 )页面控件( .ascx)( 2 )页面不回传给自身。( 3 )无需对控件的事件处理。( 4 )控件没有动态的或数据绑定的属性值(或对于每个postpack 都在代码中处理)单个页面或每个页面都禁用 ViewState ,如下所示:单个页面: 每个页面: 在 web.config 中 EnableSessionState 保持默认值即可(如果页面用到 sessionstate 它才会占用资源) 。 EnableViewStateMac 如果无安全上的特殊要求,保持默认值。2、Pagelayout.页面布局模型。建议使用Flowlayout(元素不带绝对定位属性添加).Gridlayout(绝对定位属性)由于采用绝对定位,将会比 Flowlayout生产更多的代码, 主要是控件的定位信息。3、项目发布的时候切记解除页面的 Debug 状态。4、 Html 语言的优化。 我的建议是熟练掌握Ht

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论