软件工程师笔试题1Word文件下载.docx
《软件工程师笔试题1Word文件下载.docx》由会员分享,可在线阅读,更多相关《软件工程师笔试题1Word文件下载.docx(55页珍藏版)》请在冰豆网上搜索。
获奖名单:
获奖日期date,
获奖人员char(4)
编写SQL语句,找出“作者”库中没有出现在“获奖名单”库中所有作者信息的SQL语句(提示:
使用not
in、notexists以及外关联三种方法,并说明哪种方法最优。
5、Oracle数据库表存在伪列rowid,请利用rowid编写一个SQL语句,从以下记录中找到唯一记录,并将其
flag列更新为Y
No
name
sex
flag
1
张三
1
N
6、Oracle中,需要在查询语句中把空值(NULL)输出为0,如何处理?
7、见第四题“获奖名单”表,写出SQL语句,查询出在上一个月获奖的人员。
8、见第四题“图书”表,在表上对图书名称、出版社代码、作者代号创建了组合索引,请问在执行如下
语句时会不会利用到索引。
Select*from图书where图书名称=’xxxx’
Select*from图书where图书名称=’xxxx’and出版社代码=’bb’
Select*from图书where图书名称=’xxxx’and作者代号=’ddd’
Select*from图书where出版社代码=’yyy’
9、编写一个简单的Oracle存储过程,输出参数必须有一个是结果集。
专家对本试卷的分析:
第一,这张笔试卷从题目的考点上来看,属于基础知识类的;
第二,从难度上分析属于中等;
第三,从题目的设置上来看,该公司的主要用意是考察笔试者的工作经验和项目经验,尽管是基础
知识,但是只要没做过开发工作,想回答上来并不容易;
第四,通篇只有第4题最后一问涉及到了“优化”的问题,因此判断该公司这张试题主要是面对开
发职位的。
请问在ASP中能否使用一条SQL语句同时操作两个表
有两表Tab1,Tab2;
1和2中有两相同字段“代码”,‘名称’,现欲用Tab1中的“代码”和Tab2中‘代码’相关联查询得到‘名称’来填充Tab1中的“名称”字段,在查询分析器中该如何写此语句?
update
tab1
set
名称=tab2.名称
from
tab1,tab2
where
tab1.代码=tab2.代码
update
table1
名称=b.名称
a
inner
join
table2
b
on
a.代码=b.代码
1.磁盘柜上有14块73G的磁盘,数据库为200G大小包括日志文件,如何设置磁盘(要说明这14磁盘是怎么用的)?
2.有两服务器群集,分别为node1和node2现在要打win200系统补丁,打完后,要重新启动,如何打补丁,不能影响用户使用(要用群集的术语详细说明)。
3.有一个A数据库,分别复制到B和C
B要求每次数据更新也同时更新,C每天更新一次就行,如何制定复制策略!
4.有一个order表,有90个字段,20个索引,15个复合索引,其中有3个索引字段超过10个,如何进行优化
5.有一个数据库200G大小,每天增加50M允许用户随时访问,制定备份策略(详细说明)。
6.管理50台数据库,日常工作是检查数据库作业是否完成,你该如何完成这项检查工作?
7.自定义函数和存储过程的区别是什么,什么情况下只能用自定义函数,什么情况下只能用存储过程
8.SQL2005的新特性是什么?
与oracle有什么区别?
9.DBA的品质应该有哪些,你有哪些,有什么欠缺的?
10。
如果想配置SQLMail应该在服务器安装哪些软件!
参考答案:
这个问题应该是考察硬件知识和数据库物理部署。
首先需要知道这些磁盘是否要用于存放数据库备份文件和数据库性能(读/写)要求。
来决定raid的级别。
1)、如果偏重于性能考虑,而且不用存放数据库备份文件的话,考虑使用raid0+1,这样可使用的磁盘容量为:
14*73*50%=511G。
2)、如果读/写性能要求不高,而且还比较抠门的话,可以考虑raid5,这样可使用的磁盘容量为:
13*73=949G。
至于如何使用应该是说数据库物理文件的部署。
注意说出将tempdb,datafile,logfile分开存放以减少I/O竞争即可。
其实现在的条带化磁盘一般都会自动将文件分存,人为的分布已经越来越不重要了。
这个具体操作有点忘了。
大致是:
首先看哪个节点正在使用,通过节点IP(私有)访问另一个空闲节点,为其打上补丁,然后在群集管理器中停止该节点(也可以用命令行方式),重新启动。
等到启动完毕,将切换使用节点,为另一个节点打补丁。
然后重新启动。
这个应该考察的是复制知识。
a->
b
1)、如果使用SQLServer复制功能,那么让a->
b使用事务性复制方式(同步复制)。
2)、如果表不多,也可以自己写触发器,利用linkserver+distributetransaction。
c
b使用快照复制方式,在某一时间点进行一次性复制。
2)、也可以自己写bat,将a备份后,通过ftp传输备份介质,恢复c。
(比较麻烦,不推荐)
这个问题问的比较没水平。
你不详细说明这个表的使用方式(读写类的,还是几乎是静态表),就问人家怎么优化?
!
还不如问问索引的分布访问原理更好。
看得出他就想让你说:
那三个索引超过10个,B树遍例效率很低,适当减少字段数目。
如果是SQL2005,可以将选择性不好的字段放在“索引附加字段”中,以保证索引覆盖。
而且SQLServer由于有锁升级的毛病,可以考虑拆开表。
这种情况可以采用增量备份方式。
每周日做一次全备份,周一到周六作增量备份(由于数据量较少,可以考虑每30分钟增量备份一次)。
这样可以尽量减少性能消耗,而且如果transactionlog丢失的情况下,可以保证最多丢失30分钟数据。
这个比较简单。
在每台机器上建立linkserver,然后在DBA管理服务器上做个分布式视图,每次查询该视图,各个机器上的作业情况一目了然。
分布式视图写法:
createviewvw_job
as
select'
机器一'
asMName,*fromlinkserver1..sysjobactivity
unionall
机器二'
asMName,*fromlinkserver2..sysjobactivity
机器三'
asMName,*fromlinkserver3..sysjobactivity
这个应该是考察存储过程编写经验。
一般自定义函数主要用于其他sql中的调用,如:
selectyourfunc(...)fromtable
这种情况下,一般只能通过函数实现。
存储过程的功能要远远强于函数,例如动态执行sql(sp_executesql)的使用和一些特殊的功能,自定义函数中是不支持的,只能用存储过程实现。
SQL2005的新特性一般都是和Oracle学的。
下面是当时被leimin逼着写的,你可以做个参考:
一、数据库设计方面
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的闪回技术还是细粒度不够。
可惜!
10、Mirror
Mirror可以算是SQLServer的Dataguard了。
但是能不能被大伙用起来就不知道了。
二、开发方面
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的朋友使用。
四、遗憾
1、登陆的控制
始终遗憾SQLServer的登陆无法分配CPU/内存占用等指标数。
如果你的SQLServer给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的系统带来很大的负担。
而SQLServer如果能像Oracle一样可以为登陆分配如:
5%的cpu,10%的内存。
就可以解决这个漏洞。
2、数据库物理框架没有变动
undo和redo都放在数据库得transaction中,个人感觉是个败笔。
如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。
但是同样会为索引视图等应用带来麻烦。
看看行级和事务级的快照数据放在tempdb中,就能感觉到目前架构的尴尬。
3、还是没有逻辑备份
备份方面可能还是一个老大难的问题。
不能单独备份几个表总是感觉不爽。
灵活备份的问题不知道什么时候才能解决。
4、SSIS(DTS)太复杂了
SQLServer的异构移植功能个人感觉最好了。
(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。
以前的DTS轻盈简单。
但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。
看看论坛中询问SSIS的贴子就知道。
做的功能太强大了,往往会有很多用户不会用了。
与oracle有什么区别?
这个问题相当变态!
不同点我能给他讲一天!
首先名字就不一样嘛!
:
略
需要哪些软件?
安个outlookexpress就可以了。
sqlserver提供接口存储过程,非常简单。
2007-09-2710:
16|Crying
SQL经典面试题及答案2007年07月27日星期五上午08:
421.一道SQL语句面试题,关于groupby
表内容:
2005-05-09胜
2005-05-09负
2005-05-10胜
2005-05-10负
如果要生成下列结果,该如何写sql语句?
胜负
2005-05-0922
2005-05-1012
------------------------------------------
createtable#tmp(rqvarchar(10),shengfunchar
(1))
insertinto#tmpvalues('
2005-05-09'
'
胜'
)
负'
2005-05-10'
1)selectrq,sum(casewhenshengfu='
then1else0end)'
sum(casewhenshengfu='
from#tmpgroupbyrq
2)selectN.rq,N.勝,M.負from(
selectrq,勝=count(*)from#tmpwhereshengfu='
groupbyrq)Ninnerjoin
(selectrq,負=count(*)from#tmpwhereshengfu='
groupbyrq)MonN.rq=M.rq
3)selecta.col001,a.a1胜,b.b1负from
(selectcol001,count(col001)a1fromtemp1wherecol002='
groupbycol001)a,
(selectcol001,count(col001)b1fromtemp1wherecol002='
groupbycol001)b
wherea.col001=b.col001
2.请教一个面试中遇到的SQL语句的查询问题
表中有ABC三列,用SQL语句实现:
当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。
select(casewhena>
bthenaelsebend),
(casewhenb>
cthenbeslecend)
fromtable_name
3.面试题:
一个日期判断的sql语句?
请取出tb_send表中日期(SendTime字段)为当天的所有记录?
(SendTime字段为datetime型,包含日期与时间)
--