net模拟面试常见问题及答案文档格式.docx
- 文档编号:16907556
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:11
- 大小:27.36KB
net模拟面试常见问题及答案文档格式.docx
《net模拟面试常见问题及答案文档格式.docx》由会员分享,可在线阅读,更多相关《net模拟面试常见问题及答案文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
3、Server.Execute
Server.Execute方法允许当前的ASPX页面执行一个同一Web服务器上的指定ASPX页面,当指定的ASPX页面执行完毕,控制流程重新返回原页面发出Server.Execute调用的位置。
这种页面导航方式类似于针对ASPX页面的一次函数调用,被调用的页面能够访问发出调用页面的表单数据和查询字符串集合,所以要把被调用页面Page指令的EnableViewStateMac属性设置成False。
4.erver.Execute("
another.aspx"
)和Server.Transfer("
)区别:
Execute是从当前页面转移到指定页面,并将执行返回到当前页面
Transfer是将执行完全转移到指定页面
总结:
在网络状态较好的情况下,Redirect(url)方法效率最高!
!
可重定向到同一台或非同一台服务器上的aspx或非aspx(html)资源
Server.Transfer方法和Server.Execute方法最灵活!
但只能转到同一Application目录下,也有可能导致不期望的结果发生
Server.Execute方法占用资源最多.
2、SQL2005的新特性是什么?
与oracle有什么区别?
一、数据库设计方面
1、字段类型。
varchar(max)\nvarchar(max)类型的引入大大的提高了编程的效率,可以使用字符串函数对CLOB类型进行操作,这是一个亮点。
但是这就引发了对varchar和char效率讨论的老问题。
到底如何分配varchar的数据,是否会出现大规模的碎片?
是否碎片会引发效率问题?
这都是需要进一步探讨的东西。
varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。
XML字段类型更好的解决了XML数据的操作。
XQuery确实不错,但是个人对其没好感。
(CSDN的开发者应该是相当的熟了!
)
2、外键的级联更能扩展
可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。
但是再开发调试阶段和OLAP环境中,外键是可以建立的。
新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。
3、索引附加字段
这是一个不错的新特性。
虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。
我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。
4、计算字段的持久化
原来的计算字段其实和虚拟字段很像。
只是管理方面好了而已,性能方面提高不多。
但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。
OLTP慎用。
OLAP可以大规模使用。
5、分区表
分区表是个亮点!
从分区表也能看出微软要做大作强SQLServer的信心。
资料很多,这里不详细说。
但是重点了解的是:
现在的SQLServer2005的表,都是默认为分区表的。
因为它要支持滑动窗口的这个特性。
这种特性对历史数据和实时数据的处理是很有帮助的。
但是需要注意的一点,也是我使用过程中发现的一个问题。
在建立function->
schema->
table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。
这一点很让我纳闷。
如果你觉得我的非分区索引无法对起子分区,
你可以提醒我一下呀!
没有任何的提醒,直接就变成了非分区表。
不知道这算不算一个bug。
大家也可以试试。
分区表效率问题肯定是大家关心的问题。
在我的试验中,如果按照分区字段进行的查询(过滤)效率会高于未分区表的相同语句。
但是如果按照非分区字段进行查询,效率会低于未分区表的相同语句。
但是随着数据量的增大,这种成本差距会逐渐减小,趋于相等。
(500万数量级只相差10%左右)
6、CLR类型
微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。
最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。
但是作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!
这是非常危险的!
只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!
其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。
但是现在有哪些系统大批使用了java存储过程?
!
连Oracle自己的应用都不用为什么?
还不是性能有问题!
否则面向对象的数据库早就实现了!
建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。
如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。
或者是要和操作系统进行Socket通讯的场景。
否则建议慎重!
7、索引视图
索引视图2k就有。
但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。
还有一大堆的环境参数和种种限制都让人对它有点却步。
8、语句和事务快照
语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。
个人感觉语句级快照大家应该应用。
事务级快照,如果是高并发系统还要慎用。
如果一个用户总是被提示修改不成功要求重试时,会杀人的!
9、数据库快照
原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。
但是比起Oracle10g的闪回技术还是细粒度不够。
可惜!
二、开发方面
1、Ranking函数集
其中最有名的应该是row_number了。
这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。
因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。
但是大家注意一点。
如下面的例子:
selectROW_NUMBER()OVER(orderbyaa)
fromtbl
orderbybb
会先执行aa的排序,然后再进行bb的排序。
可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。
如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。
2、top
可以动态传入参数,省却了动态SQL的拼写。
3、Apply
对递归类的树遍历很有帮助。
4、CTE
个人感觉这个真是太棒了!
阅读清晰,非常有时代感。
5、try/catch
代替了原来VB式的错误判断。
比Oracle高级不少。
6、pivot/unpivot
个人感觉没有case直观。
而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。
三、DBA管理方面
1、数据库级触发器
记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。
2、多加的系统视图和实时系统信息
这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。
3、优化器的改进
一直以来个人感觉SQLServer的优化器要比Oracle的聪明。
SQL2005的更是比2k聪明了不少。
(有次作试验发现有的语句在200万级时还比50万级的相同语句要快show_text的一些提示没有找到解释。
一直在奇怪。
4、profiler的新事件观察
这一点很好的加强了profiler的功能。
但是提到profiler提醒大家注意一点。
windows2003要安装sp1补丁才能启动profiler。
否则点击没有反应。
5、sqlcmd
习惯敲命令行的朋友可能会爽一些。
但是功能有限。
适合机器跑不动SQLServerManagementStudio的朋友使用。
3、ASP.NETMVC介绍
MVC把一个web应用分成了三个部分:
modelview和controller。
ASP.NETMVC框架提供了一个可以代替web窗体的基于mvc的应用。
ASP.NETMVC概述·
mvc的优点:
1.通过把项目分成modelview和controller,使得复杂项目更加容易维护。
2.没有使用viewstate和服务器表单控件,可以更方便的控制应用程序的行为
3.应用程序通过controller来控制程序请求,可以提供丰富的url重写。
4.对单元测试的支持更加出色
5.在团队开发模式下表现更出众
web窗体的优点:
1.采用事件驱动模式来控制应用程序请求,由大量服务器控件支持
2.采用页面控制机制,可以为单个页面添加事件处理函数。
3.使用viewstate和服务器端页面,使管理页面状态信息更加轻松。
4.对人数较少的想使用服务器端控件的开发团队,使用起来更加方便
5.开发起来比mvc模式要轻松简单一些
ASP.NETMVC概述mvc框架特色:
1.分离任务(输入逻辑,业务逻辑和显示逻辑),易测性和默认的测试驱动组件。
所有mvc用到的组件都是基于接口并且可以被mock对象测试到,你可以不必在进程中运行controller就可以使用测试。
使得测试更加快速和简捷。
2.可扩展的简便的框架。
mvc框架被设计用来更轻松的移植和定制功能。
你可以加入自己的视图引擎,url重写策略。
重载action方法等。
mvc也支持DependencyInjection(DI)andInversionofControl(IOC)
3.强大的url重写机制让你更方便的建立容易理解和可搜索的url。
url可以不包含任何文件扩展名,并且可以重写url使其对搜索引擎更加友好。
4.可以使用现有的页面标记、用户控件、模板页。
你可以使用嵌套模板页,嵌入表达式<
%=%>
声明服务器控件、模板,数据绑定、定位等等。
5.对现有的程序的支持,mvc让你可以使用如窗体认证和windows认证、url认证、组管理和规则、输出、数据缓存、session、profile、healthmonitoring、配置管理系统、providerarchitecture特性。
4、SQLServer三种复制的区别
1、事务复制
将复制启用后的所有发布服务器上发布的内容在修改时传给订阅服务器;
数据更改将按照其在发布服务器上发生的顺序和事务边界,应用于订阅服务器;
在发布内部可以保证事务的一致性;
2、快照复制
将数据以特定时刻的瞬时状态分发,而不监视对数据的更新;
发生同步时,将生成完整的快照,并将其发送到订阅服务器;
3、合并复制
通常从发布数据库对象和数据的快照开始,并且用触发器跟踪在发布器和订阅服务器上所做的后续更改和架构修改;
订阅服务器在连接到网络时将与发布服务器进行同步,并交换自上次同步以来发布服务器和订阅服务器之间发生更改的所有行;
5、请你谈一谈你对值类型与引用类型的理解?
1.所有对象都继承自System.Object,而所有的值类型都继承自System.ValueType。
也就是说,System.ValueType重写了System.Object的方法使得值类型的操作是基于值而不是基于引用。
2.值类型内存分配在栈上,引用类型内存分配在托管堆中。
内存分配在这两个地方的区别在于:
如果超出了值类型定义的范围,值类型分配的内存会立刻从内存中清除,即它的内存生命周期是可以预测的。
而引用类型分配在托管堆中,内存管理有垃圾处理器控制,不可预知其生命周期。
3.赋值操作
值类型赋值操作是会依次copy所有成员变量的值。
引用类型仅仅是地址重定向。
4.参数传递
默认为值传递,即参数为值类型是传递值类型的值副本,参数为引用类型时传递引用类型地址值副本。
但当参数使用out或者ref关键字是,传递的是引用本身。
但是在使用ref,需要注意一些区别:
当参数为引用类型时,不使用ref关键字,方法还是可以通过传入的引用改变其所指向的实例,但是不能改变引用本身。
当参数为引用类型时,同时使用ref关键字,方法可以通过传入的引用改变其所指向的实例,并且改变引用本身。
5.值类型是sealed的,不能继承
6.值类型不能写Finalize()方法,该方法用于堆上的内存回收。
7.装箱与拆箱
装箱-把值类型转换为引用类型。
拆箱-把引用类型转换为值类型。
作用:
可以把值类型也看作是对象。
最常使用的情况是在集合操作的时候,大多数方法接口都接收一个对象参数(object)。
当传入值类型时,.NET会自动处理装箱细节,把值类型转变为引用类型。
从集合取出时,把引用类型的值取出放回值类型变量。
缺点:
性能上有损失。
并且缺少类型安全保证。
.NET2.0推出了泛型基本上能解决这个问题。
6、private、protected、public和internal的区别?
private是完全私有的,只有在类自己里面可以调用,在类的外部和子类都不能调用,子类也不能继承父类的private的属性和方法。
protected虽然可以被外界看到,但外界却不能调用,只有自己及自己的子类可以调用(protected的属性和方法都可以被子类所继承和调用)。
private和protected的共同点:
外部都不可以访问。
private和protected的不同点:
在同一类中可视为一样,但在继承中就不同了,private在派生类中不可以被访问,而protected可以。
public对任何类和成员都完全公开,无限制访问。
internal同一应用程序集内部(在VS.NET中的一个项目中,这里的项目是指单独的项目,而不是整个解决方案)可以访问。
public和internal的区别:
public的成员可以跨程序集,但internal不能,同一程序集中具有相同的效果。
protectedinternal:
只能在同一应用程序集内本类、派生类访问。
7、ASP.NET如何进行性能优化问题?
我们将从5方面来进行ASP.NET性能优化:
一、SqlDataRead和Dataset的选择
Sqldataread优点:
读取数据非常快。
如果对返回的数据不需做大量处理的情况下,建议使用SqlDataReader,其性能要比datset好很多。
直到数据读完才可close掉于数据库的连接
(SqlDataReader读数据是快速向前的。
SqlDataReader类提供了一种读取从SQLServer数据库检索的只进数据流的方法。
它使用SQLServer的本机网络数据传输格式从数据库连接直接读取数据。
DataReader需及时显式的close。
可及时的释放对数据的连接。
Dataset是把数据读出,缓存在内存中。
对内存的占用较高。
如果对返回的数据需做大量的处理用Dataset比较好些可以减少对数据库的连接操作。
优点:
只需连接一次就可close于数据库的连接
一般情况下,读取大量数据,对返回数据不做大量处理用SqlDataReader.对返回数据大量处理用datset比较合适.对SqlDataReader和Dataset的选择取决于程序功能的实现。
二、ExecuteNonQuery和ExecuteScalar
对数据的更新不需要返回结果集,建议使用ExecuteNonQuery。
由于不返回结果集可省掉网络数据传输。
它仅仅返回受影响的行数。
如果只需更新数据用ExecuteNonQuery性能的开销比较小。
ExecuteScalar它只返回结果集中第一行的第一列。
使用ExecuteScalar方法从数据库中检索单个值(例如id号)。
与使用ExecuteReader方法,返回的数据执行生成单个值所需的操作相比,此操作需要的代码较少。
只需更新数据用ExecuteNonQuery.单个值的查询使用ExecuteScalar数据绑定的选择三、数据的绑定DataBinder
一般的绑定方法<
%#DataBinder.Eval(Container.DataItem,"
字段名"
)%>
用DataBinder.eval绑定不必关心数据来源(Dataread或dataset)。
不必关心数据的类型eval会把这个数据对象转换为一个字符串。
在底层绑定做了很多工作,使用了反射性能。
正因为使用方便了,但却影响了数据性能。
来看下<
。
当于dataset绑定时,DataItem其实式一个DataRowView(如果绑定的是一个数据读取器(dataread)它就是一个IdataRecord。
)因此直接转换成DataRowView的话,将会给性能带来很大提升。
<
%#ctype(Container.DataItem,DataRowView).Row("
对数据的绑定建议使用<
数据量大的时候可提高几百倍的速度。
使用时注意2方面:
1.需在页面添加<
%@Importnamespace="
System.Data"
%>
.2.注意字段名的大小写(要特别注意)。
如果和查询的不一致,在某些情况下会导致比<
还要慢。
如果想进一步提高速度,可采用<
%#ctype(Container.DataItem,DataRowView).Row(0)%>
的方法。
不过其可读性不高。
以上的是的写法。
在c#中:
<
@%((DataRowView)Container.DataItem)["
]%>
对查看页面每个执行过程状态最简单的办法:
其页面的trace属性为true就可查看细节。
一、使用存储过程:
1、性能方面:
存储过程提供了许多标准sql语言中所没有的高级特性。
其传递参数和执行逻辑表达式的功能,有助于应用程序设计者处理复杂任务。
另外,存储过程存储在本地服务器上,减少了执行该过程所需的网络传输宽带和执行时间。
(存储过程已经对sql语句进行了预编译,所以其执行速度比在程序里执行sql语句快很多)
2、程序结构方面:
从程序的可扩展性看,使用存储过程会对程序以后的修改带来方便。
比如数据库的结构改变了,只需修改相对应的存储结构,和程序中的调用部分即可。
这部分不属于本文探讨范围,属于程序结构设计方面。
所以不在此展开。
3、程序安全性:
使用存储过程可避免SQLInjection攻击。
二、查询语句的优化(针对sqlserver2000)
很多人只为目的写出sql语句,而不考虑sql语句的执行效率。
在这我只提供一优化表顺序的方法,(sql语句的优化和原则将会在我的sqlserver2000学习笔记中专题讨论)
对sql语句执行效率可用sqlserver2000的查询分析器来查看语句的执行过程。
优化表顺序:
一般情况下,sqlserver会对表的连接作出自动优化。
例如:
selectname,nofromAjoinBonA.id=B.idjoinConC.id=A.idwherename=’wang’
尽管A表在From中先列出,然后才是B,最后才是C。
但sqlserver可能会首先使用c表。
它的选择原则是相对于该查询限制为单行或少数几行,就可以减少在其他表中查找的总数据量。
绝大多数情况下,sqlserver会作出最优的选择,但如果你发觉某个复杂的联结查询速度比预计的要慢,就可以使用SETFORCEPLAN语句强制sqlserver按照表出现顺序使用表。
如上例加上:
SETFORCEPLANON…….SETFORCEPLANOFF表的执行顺序将会按照你所写的顺序执行。
在查询分析器中查看2种执行效率,从而选择表的连接顺序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- net 模拟 面试 常见问题 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)