欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    数据库程序员面试分类真题4.docx

    • 资源ID:1416119       资源大小:48.08KB        全文页数:17页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数据库程序员面试分类真题4.docx

    数据库程序员面试分类真题4筒答题1. 什么是反范式?反范式有什么优缺点?正确答案:数据库设计要严格遵守范式,这样设计出来的数据库,虽然思路很清晰,结构也很合理,但是,有时候却要在一定程度上打破范式(江南博哥)设计。因为范式越高,设计出来的表可能越多,关系可能越复杂,但是性能却不一定会很好,因为表一多,就增加了关联性。特别是在高可用的O1.TP数据库中,这一点表现得很明显,所以就引入了反范式。不满足范式的模型,就是反范式模型。反范式与范式所要求的正好相反,在反范式的设计模式中,可以允许适当的数据冗余,用这个冗余可以缩短查询获取数据的时间。反范式其本质上就是用空间来换取时间,把数据冗余在多个表中,当查询时就可以减少或者避免表之间的关联。反范式技术也可以称为反规范化技术。反范式的优点:减少了数据库咨询时表之间的连接次数,可以更好地利用索引进行筛选和排序,从而减少了I/O数据量,提高了查询效率。反范式的缺点:数据存在重复和冗余,存在部分空间浪费.另外,为了保持数据的一致性,必须维护这部分冗余数据,因此增加了维护的复杂性。所以,在进行范式设计时,要在数据一致性与查询之间找到平衡点,因为符合业务场景的设计才是好的设计。范式和反范式的对比见下衣。模型优点缺点鸟式化模数据没有冗余,更新容易当表的数量比较多,查询设计需要很多关联模型(Join)时,会导致查询性能低下需要维护冗余数据,从目前NoSQ1.的发展可以看到,对磁盘空间的消耗是11r以接受的数据冗余将带来很好的读取性能反范式化(因为不需要关联很模型多表,而且通常反范式模型很少做更新操作)考点反范式2. 常见的数据库反范式技术有哪些?正确答案:在RDBMS模型设计过程中,常常使用范式来约束模型,但在N。SQ1.模型中则大量采用反范式。常见的数据库反范式技术包括:1)增加冗余列。在多个表中保留相同的列,以减少表连接的次数。冗余法以空间换取时间,把数据冗余在多个表中,当查询时可以减少或者避免表之间的关联。2)增加派生列。表中增加可以由本表或其他表中数据计算生成的列,减少雀询时的连接操作并避免计兑或使用集合函数。3)表水平分割。根据一列或多列的值将数据放到多个独立的表中,主要用于表的规模很大、表中数据相对独立或数据需要存放到多个介质的情况。4)表垂直分割。对表按列进行分割,将主键和一部分列放到一个表中,主键与其他列放到另一个表中,在查询时减少I/O次数。例如,有学生表与课程表,假定课程表要经常被查询,而且在查询中要显示学生的姓名,则查询语句为SE1.ECTCODE,NAME,SUBJECTI-ROMCOURSEC,STUDENTSWHERES.ID=C.CODEWHERECODE=?如果这个语句被大范围、高频率地执行,那么可能会因为表关联造成定程度的影响,现在,评估到学生改名的需求是非常少的,那么,就可以把学生姓名冗余到课程表中。注意:这里并没有省略学生表,只不过是把学生姓名冗余在了课程表中,如果万一有很少的改名需求,只要保证在课程表中改名正确即可。那么,修改以后的语句11J以简化为SE1.ECTCODE,NAME,SUBJECTFROMCOURSECWHERECODE=?考点反范式3. 事务可以分为哪几类?正确答窠:从事务理论的角度来看,可以把事务分为以下几种类型:1)扁平事务(FIatTransactions)o2)带有保存点的扁平事务(FIatTransactionswithSavepoints)o3)链事务(ChainedTransactions)o4)嵌套事务(NeStedTransactions)05)分布式事务(DiStribUtedTransactions)0考点分类4. 什么是XA事务?正确答案:XA(extendedArehiteCtUre)是指由X0pen组织提出的分布式交易处理的规范。XA是一个分布式事务协议,由TUXedo提出,所以,分布式事务也称为XA事务。XA协议主要定义了事务管理器(TranSaCtionManager,TM,协调者)和资源管理器(RCSoUrCCManager,RM,参与者)之间的接口。其中,资源管理器往往由数据库实现,例如OraCIe、DB2、MySQ1.,这些商业数据库都实现了XA接口,而事务管理器作为全局的调度者,负责各个本地资源的提交和回滚。XA事务是基于两阶段提交(TWo-PhaSeCommit,2PC)协议实现的,可以保证数据的强一致性,许多分布式关系型数据管理系统都采用此协议来完成分布式。阶段一为准备阶段,即所有的参与者准备执行事务并锁住需要的资源。当参与者准备好时,向TM汇报自己已经准备好。阶段二为提交阶段。当Tv确认所有参与者都准备好后,向所有参与者发送COMMlT命令。XA事务允许不同数据库的分布式事务,只要参与在全局事务中的每个节点都支持XA事务。Oracle.MySQ1.和SQ1.Server都支持XA事务。XA事务由一个或多个资源管理器(RV)、一个事务管理器(TM)以及一个应用程序(APPliCationPrOgram)组成。1)资源管理器:提供访问事务资源的方法。通常一个数据库就是一个资源管理器。2)事务管理器:协调参与全局事务中的各个事务。需要和参与全局事务的所有资源管理器进行通信。3)应用程序:定义事务的边界。XA事务的缺点是性能不好,并且XA无法满足高并发场景。一个数据库的事务和多个数据库间的XA事务性能会相差很多。因此,要尽量避免XA事务,例如可以将数据写入本地,用高性能的消息系统分发数据,或使用数据库复制等技术。只有在其他办法都无法实现业务需求,且性能不是瓶颈时才使用XA.考点分类5. 脏读、不可重复读和幻读的区别是什么?正确答窠:当多个线程都开启事务操作数据库中的数据时,数据库系统要能进行隔离操作,以保证各个线程获取数据的准确性,所以,刻于不同的事务,采用不同的隔离级别会有不同的结果。如果不考虑事务的隔离性,那么会发生下表所示的3种问题。观*R介举«K速(DiflyRod)TM旗了啊TWHt改,但歌般的粼,当一外务疏缴融好醵,砧渺事务中多浦多政策E钻殴,这时另外T并发的$林丽读好册就会遇辆竹州到械邮T用户A翎户BHIK)O元腿SQ1.Mj吓:UPDATEACaWrSETMONEY=MoNEY+100WHERENAME=吩(AMAOB)UPDATEACCOUNTSETMONEY=MONEY-100WHERENAME=,A'当只佚厅第条SQ1.BtAieEB代看屋凡B发现留实三俄牌姓避旗),毗,舐除二条SQ1.三r,只婀事务做交,所能僚硼解.驱号B以前嫡礴户版会发现麒不可篁复*(NcorepeatabkRod)在同务中洞一个好!在TlMEI游丽某一行,在TIME2时膨注照一行用机发现这T武敷景逑发生修改,可能被更靛了(Updne).6Imi(Dctae)事务Tl花谀富臬一教凯而卑务T2立即作改了这个数第并且败学做髀Hti丽喊剧KW了础的献,nmJSii幻灯(PhiniomRod.也收除幻厘鼠蜕)胡T务中,加-醐多城怖棉由刊“蟠入(IMat)蝮作的中务败,会明S耳姬目不刚斶桑第幻觎幅料!就丽发轴Tf稣,务Tl酚-忸中肺行般僮舸研了从T修改为丁的麟,酬步务T2又险忸悔入了一他需IfiiifftWJftft屣T并改馈减电操作事务TlIIMP如就加瞬修Ii缄院舷会发SMT很施瓦K灿疗是糕务T2中触)的,或好11产拉授一反这i烧发生了麒脏读和不可重复读的区别:脏读必某一事务读取了另一个事务未提交的脏数据,而不可重复读则是在同一个事务范围内多次查询同一条数据却返回了不同的数据值,这是由于在查询间隔期间,该条数据被另i个事务修改并提交了。幻读和不可重且读的区别:幻读和不可重复读都是读取r另一个事务中已经提交的数据,不同的是不可重夏读查询的都是同一个数据项,而幻读针对的是一个数据整体(例如,数据的条数)。考点隔离级别6. 在SQ1.标准中定义的4种隔离级别分别是什么?正确答案:在SQ1.标准中定义了4种隔离级别,每一种级别都规定了一个事务中所做的修改,哪些是在事务内和事务间可见的,哪些是不可见的。较低级别的隔离通常可以执行更高的并发,系统的开销也更低。SQ1.标准定义的4种隔离级别:ReadUnCOnImitted(未提交读)、ReadComnlitted(提交读)、RepeatableReae1(可重复读)、SeriaIiZabIe(可串行化),下面分别介绍。(I)ReadUnCommitted(未提交读,读取未提交内容)在该隔离级别,所有事务都可以看到其他未提交事务的执行结果,即在未提交读级别,事务中的修改,即使没有提交,对其他事务也都是可见的,该隔离级别很少用于实际。读取未提交的数据,也被称为脏读。该隔离级别最低,并发性能高。(2)ReadlCOnImitted(提交读,读取提交内容)这是大多数数据库系统的默认隔离级别。它满足了隔离的箍单定义:一个事务只能看见已经提交事务所做的改变.换句话说,一个事务从开始直到提交之前,所做的任何修改对其他事务都是不11J见的。(3)RepeatableRead(可重复读)可重复读可以确保同一个事务,在多次读取同样的数据的时候,得到同样的结果。可重复读解决了脏读的问题,不过理论上,这会导致另一个棘手的问题:幻读。MySQ1.数据库中的InnoDB和Falcon存储引擎通过MVCC(Multi-VersionConcurrentControl,多版本并发控制)机制解决了该问题。需要注意的是,多版本只是解决不可重复读问题,而加上间隙锁(也就是它这里所谓的并发控制)才解诀了幻读问题。(4)SerialiZable(可串行化、序列化)这是最高的隔离级别,它通过强制事务排序,强制事务串行执行,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。实际应用中也很少用到这个隔离级别,只有在非常需要确保数据的一致性而且可以接受没有并发的情况下,才考虑用该级别。这是花拢代价最高但是最可靠的事务隔离级别。隔离Read级Uncommitted别在该隔离级别,所有事务都可以看到其他未提交事务的执行结果,即在未提交读级别,事务中的黑修改,即使K没有提交,对其他事务也都是可见的,该隔离级别很少用于实际。读取未提交的数据,也被称为脏ReadCommitted这是大多数数据库系统的默认隔离级别。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。换句话说,一个事务从开始直到提交之前,所做的任何修改对其他事务都是不可见的。提交RepeatableReadSerializable可重复读可以确保同一个事务,在多次读取同样的数据的时候,得到同样的结果。可重复读解决了脏读的问题,不过理论上,这会导致另一个棘手的问题:幻读。这是最高的隔离级别,它通过强制事务排序,强制事务串行执行,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个MySQ1.数据库中的级别,可能导致大InnoDB量的超时和FaICon存储引现象和锁竞争。实读。该隔离级别最低,并发性能高读是OraCle数据库默认的事务隔离级别挈通过MVCC(多版本并发控制)机制解决了该问题。需要注意的是,多版本只是解决不可重复读问题,而加上间隙锁(也就是所谓的并发控制)才解决了幻读问题。可重复读是MySQ1.数据库的默认隔离级别际应用中也很少用到这个隔高级别,只有在非常需要确保数据的一致性而且可以接受没有并发的情况下,才考虑用该级别。这是花费代价鼓高但是最可靠的事务隔离级别脏读不可重复读幻读默认级别数据库并发性能允许允许允许允许允许允许Oracle,SQ1.ServerMySQ1.最高比Read比ReadUneOInmitted低ComInitted低最低不同的隔离级别有不同的现象,并有不同的锁和并发机制,隔离级别越高,数据库的并发性能就越差,4种事隔离级别与并发性能的关系如下图所示。回考点隔离级别7. 什么是CAP定理?正确答案:CAP定理又称CAP原则,它是一个衡量系统设计的准则。CAP定理指的是在一个分布式系统中,ConSiStenCy(一致性)、AVaiIability(可用性)、PanitionT。IeranCe(分区容错性),三者不可兼得。1)C(一致性):所有节点在同一时间的数据完全一致。2)A(可用性):服务一直可用,每个请求都能接收到一个响应,无论响应成功或失败。3)P(分区容错性):分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。任何分布式系统在可用性、一致性、分区容错性方面,不能兼得,最多只能得其二。因此,任何分布式系统的设计只是在三者中的不同取舍而己。所以,就有了3个分类:CA数据库、CP数据库和AP数据库。传统的关系型数据库在功能支持上通常很宽泛,从简单的键值查询,到复杂的多表联合查询,再到事务机制的支持。而与之不同的是,NOSQ1.系统通常注重性能和扩展性,而非事务机制,因为事务就是强一致性的体现。I)CA数据库满足数据的一致性和高可用性,但没有可扩展性,不考虑分区容忍性,对应的数据库就是普通的关系型数据库RDBVS,例如OraCIe、MySQ1.的单节点,满足数据的致性和高可用性。单点数据库是符合这种架构的,例如超市收银系统、图书管理系统。2)CP数据库考虑的是一致性和分区容错性,这种数据库对分布式系统内的通信要求比较高,因为要保持数据的一致性,需要做大量的交互,例如OraCIeRAC、SybaSe集群。虽然OraCeRAC具备一点的扩展性,但当节点达到一定数目时,性能(即可用性)就会下降很快,并且节点之间的网络开销还在,需要实时同步各节点之间的数据。CP数据库通常性能不是特别高,例如火车售票系统。3) AP数据库考虑的是实用性和分区容忍性,即外部访问数据,可以更快地得到回应,例如博客系统。这时候,数据的一致性就可能得不到满足或者对一致性要求低一些,各节点之间的数据同步没有那么快,但能保证数据的最终一致性。比如一个数据,可能外部一个进程在改写这个数据,同时另一个进程在读这个数据,此时,数据显现是不致的。但是有一点,就是数据库会满足最终一致性的概念,即过程可能是不一致的,但是到某一个终点,数据就会一致起来。当前热炒的NoSQ1.大多数是典型的AP类型数据库。考点CAP定理8. CAP定理和一般事务中的ACID特性中的一致性有什么区别?正确答案:一般事务的ACID中的一致性是有关数据库规则的描述,如果数据表结构定义一个字段值是唯一的,那么一致性系统将解决所有操作中导致这个字段值非唯一性的情况,如果带有一个外键的一行记录被删除,那么其外键相关记录也应该被删除,这就是ACID一致性的含义。CAp理论的一致性是保证同一个数据在所有不同服务器上的拷贝都是相同的,这是一种逻辑保证,而不是物理上的,因为网络速度限制,在不同服务器上这种复制是需要时间的,集群通过阻止客户端杳看不同节点上还未同步的数据维持逻辑视图。考点CAP定理9. 什么是数据库三级封锁协议?正确答案:众所周知,基本的封锁类型有两种:排它锁(X锁)和共享锁(S锁)。所谓K锁是事务T对数据A加上X锁时,只允许事务T读取和修改数据A。所谓S锁是事务T对数据A加上S锁时,其他事务只能再对数据A加S锁,而不能加X锁,宜到T释放A上的S锁。若事务T对数据对象加了S锁,则T就可以对A进行读取,但不能进行更新(S锁因此又称为读锁),在T释放A上的S锁以前,其他事务可以再对A加S锁,但不能加X锁。从而可以读取A,但不能更新A。在运用X锁和S锁对数据对象加锁时,还需要约定一些规则,例如,何时申请X锁或S锁、持锁时间、何时释放等,称这些规则为封锁协议(1.oCkingProtocoDe对封锁方式规定不同的规则,就形成了各种不同的封锁协议。一般使用三级封锁协议,也称为三级加锁协议。该协议是为了保证正确的调度事务的并发操作。三级加锁协议是事务在对数据库对象加锁、解锁时必须遵守的一种规则。卜.面分别介绍这三级封锁协议。一级封锁协议:事务T在修改数据R之前必须先对其加K锁,直到事务结束才释放。事务结束包括正常结束(CowIT)和非正常结束(Ro1.1.BACK)。一级封锁协议可以防止丢失修改,并保证事务T是可恢复的。使用一级封锁协议可以解决丢失修改问题,在一级封锁协议中,如果仅仅是读数据而不对其进行修改,是不需要加锁的,它不能保证可重复读和不读“脏”数据。:级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后方可释放S锁。级封锁协议除防止了丢失修改,还可以进一步防止读“脏”数据。但在二级封锁协议中,由于读完数据后即可释放S锁,所以它不能保证可重复读。三级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。三级封锁协议除防止了丢失修改和不读“脏”数据外,还进一步防止了不可重任读。考点数据库三级封锁协议和两段锁协议10. 什么是两段锁协议?正确答案:两段锁协议是指所有事务必须严格分为两个阶段对数据项进行加锁和解锁的操作,第一阶段必须为加锁,第二阶段必须为解锁。一个事务中一旦开始释放锁,就不能再申请新锁了。两段锁协议的目的是保证并发调度的正确性。也就是说,如果所有操作数据库的事务都满足两段锁协议,那么这些事务的任何并发调度策略是可串行性的。1)在对任何数据进行读、写操作之前,要申请并获得对该数据的封锁。2)每个事务中,所有的加锁请求先于所有的解锁请求。三级封锁协议的目的是在不同程序上保证数据的一致性。三级封锁协议是从锁的隔离程度来定义,两段锁协议是从加锁、解锁顺序(会影响事务的并发调度)的角度来描述。考点数据库三级封锁协议和两段锁协议11. 什么是锁?正确答案:锁(1.OCk)机制用于管理对共享资源的并发访问,用于多用户的环境下,可以保证数据库的完整性和一致性。以商场的试衣间为例,每个试衣间都可供多个消费者使用,因此,可能出现多个消费者同时需要使用试衣间试衣服。为了避免冲突,试衣间装r锁,某一个试衣服的人在试衣间里把锁锁住,其他顾客就不能再从外面打开了,只能等待里面的顾客试完衣服,从里面把锁打开,外面的人才能进去。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制,则就有可能会读取和存储到不正确的数据,破坏数据库的完整性和一致性。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制。考点基本概念12. 什么是更新丢失?正确答案:更新丢失是指多个用户通过应用程序访问数据库时,由于查询数据并返回到页面和用户修改完毕单击保存按钮将修改后的结果保存到数据库这个时间段(即修改数据在页面上停留的时间)在不同用户之间可能存在偏差,从而最先查询数据并且最后提交数据的用户会把其他用户所做的修改覆盖掉。当两个或多个事务选择同一行数据,然后基于最初选定的值更新该行时,会发生丢失更新问题。每个事务都不知道其他事务的存在。最后的更新将市写由其他事务所做的更新,这将导致数据丢失。简单来说,更新:失就是两个事务都同时更新一行数据,一个事务对数据的更新把另一个事务对数据的更新覆忐了。这是因为系统没有执行任何的锁操作,因此并发事务并没有被隔离开来。SeriaIiZable可以防止更新丢失问题的发生。其他的三个隔离级别都有可能发生更新丢失问题。SerialiZabIe虽然可以防止更新丢失,但是效率太低,通常数据库不会用这个隔离级别,所以,需要其他的机制来防止更新丢失,例如悲观锁和乐观锁。考点基本概念13. 更新丢失可以分为哪几类?正确答案:更新丢失可以分为以下两类。第一类丢失更新:在A事务撤销时,把已经提交的B事务的更新数据覆盖了。这种错误可能造成很严重的问题,通过卜.面的账户取款转账实例就可以看出来。时间取款事务A转账事务BTl开始事务T2开始事务查询账户T3余额为100O元查询账户T4余额为1000元汇入100,元把余额日为IlOO元T6提交事务取出100元把余额改为900元T8撤销事务余额恢复TQ为100O元(丢失更新)A事务在撤销时,“不小心”将B事务已经转入账户的金额给抹去了。第二类丢失更新:在A事务提交时覆盖了B事务已经提交转账事务A取款事务B的数据,造成B事务所做操作丢失。时间Tl开始事务T2开始事务查询账户T3余额为100O元查询账户T4余额为1000元取出100TR元把余额改为900元T6提交事务汇入1001I兀T8提交事务把余额改TQ为IloO元(丢失更新)上面的例子里由于支票转账事务覆盅了取款事务对存款余额所做的更新,导致银行最后损失了100元:相反,如果转账事务先提交,那么用户账户将损失100元。考点基本概念14. 什么是乐观锁和悲观锁?正确答案:各种大型数据库所采用的锁的基本理论是一致的,但在具体实现上各有差别。乐观锁和悲观锁不是数据库中真正存在的锁,只是人们在解决更新丢失时的不同的解决方案,体现的是人们看待事务的态度。下表列出了悲观锁和乐观锁及其更新丢失的解决方案。悲观锁(PeSSimiStiC1.cck)顾名思义,很悲观。每次去读数据的时候,都认为别的事务会修改数据,所以,每次在读数据的时候都会上锁,防止其他事务读取或修改这些数据,这样导致其他事务会被阻塞,直到这乐观锁(OPtimiStiC1.ock)顾名思义,很乐观。每次去拿数据的时候都认为别人不会修改,所以,不会上锁,但是在更新的时候会判断在此期间别人有没有去更新这个数据。乐观锁一般通过增加时间戳字段来实现,认为数据不会被其他用户修改,所以,只需要修改屏幕上的信息而不需要锁应用场更新丢失解决方案数据更新比较频繁的场合试图在更新之前把行锁住,使用SE1.ECT.I'ORUPDTE,然后更新数据个事务结束数据更新不频繁、查询比较多的场合,这样可以提高吞吐量1)使用版本列的乐观锁定增加NUMBER、TIVESTAMP或DATE列,通过增加一个时间戳列,可以知道最后修改时间。每次修改行时,检查数据库中这一列的值与最初读出的值是否匹配。若匹配则修改数据且通过触发器来负贡递增NUMBER、DATE、TIMESTAMP2)使用校验和的乐观锁定用基数据本身来计算一个“虚拟的”版本列,生成散列值进行比较。数据库独立性好,从CPU使用和网络传输方面来看,资源开销量大3)使用ORA_ROWSCN的乐观锁定建立在OracleSCN的基础上,在建表时,需要启用Rowdependencies,防止整个数据块的ORkRONSCN向前推进。可以用SCNJoTIMESTAMP(ORROwSCN)将SCN转换为时间格式。将原先的悲观锁机制修改为乐观锁来控制并发,nJ以使用ORA_ROWSCN,这样可以无须增加新列。也可以通过SCZTOJ'Imestamp来获取最后修改时间考点基本概念15. 数据库以及线程发生死锁的原理是什么?正确答案:所谓死锁指的是两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,如果无外力作用,那么它们都将无法推进下去。此时,称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。举一个简单例子加以说明死锁,人多好办事,在程序里面也是如此,如果一个程序需要并行处理多个任务,那么就可以创建多个线程,但是线程多了,往往会产生冲突,当一个线程锁定了一个资源A,乂想去锁定资源B,而在另一个线程中,锁定了资源B,又想去锁定资源A以完成.自身的操作,两个线程都想得到对方的资源,不愿释放自己的资源,造成两个线程都在等待,而无法执行,此时就是死锁。考点基本概念16. 产生死锁的原因有哪些?正确答案:产生死锁的原因主要有以下3个方面:系统资源不足;进程运行推进的顺序不合适;资源分配不当。如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则,就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。考点基本概念17. 什么是活锁?什么是死锁?正确答案:如果事务Tl封锁了数据R,事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当Tl释放了R上的封锁之后系统首先批准了T2的清求,T3仍然等待。然后Tl又请求封锁R,当T2释放了R上的封锁之后系统又批准/T3的请求Tl有可能永远等待,这就是活锁的情形。活锁的含义是该等待事务等待时间太长,似乎被锁住了,实际上可能被激活。如果事务Tl封锁了数据Rl,T2封锁了数据R2,然后Tl乂请求封锁R2,因T2已封锁了R2,于是Tl等待T2释放。R2上的锁。接着T2乂申请封锁Rl,因Tl已封锁了Rl,T2也只能等待Tl释放Rl上的锁。这样就出现了TI在等待T2,而T2乂在等待门的局面,Tl和T2两个事务永远不能结束,形成死锁。考点基本概念18. 试述活锁的产生原因和解决方法。正确答案:活锁产生的原因:当一系列封锁不能按照其先后顺序执行时,就可能导致一些事务无限期等待某个封锁,从而导致活锁。避免活锁的简单方法是采用先来先服务的策略。当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中第一个事务获得锁。考点基本概念19. MVCC的含义是什么?正确答案:在多用户的系统里,假设有多个用户同时读写数据库里的一行记录,那么怎么保证数据的一致性呢?一种基本的解决方法是对这一行记录加上一把锁,将不同用户对同一行记录的读写操作完全串行化执行,由于同一时刻只有一个用户在操作,因此一致性不存在问题。但是,它存在明显的性能问题:读会阻塞写,写也会阻塞读,整个数据库系统的并发性能将大打折扣。MVCC(Multi-VersionConcurrentControl,多版本并发控制)的目标是在保证数据一致性的前提下,提供一种高并发的访问性能。在VVCC协议中,每个用户在连接数据库时看到的是一个具有一致性状态的镜像,每个事务在提交到数据库之前对其他用户均是不可见的。当事务需要更新数据时,不会直接范盖以前的数据,而是生成一个新的版本的数据,因此条数据会有多个版本存储,但是同一时刻只有最新的版本号是有效的。因此,读的时候就可以保证总是以当前时刻的版本的数据可以被读到,不论这条数据后来是否被修改或删除。大多数的MySQ1.事务型存储引擎,例如InnoDB>Falcon以及PBXT都不使用简单的行锁机制,它们都和MVCC机制来一起使用。MVCC不只使用在MySQ1.中,Oracle、PoSIgreSQ1.以及其他一些数据库系统也同样使用它。可以将MveC看成行级锁的一种妥协,它在许多情况下避免了使用锁,同时可以提供更小的开销。根据实现的不同,它可以允许非阻塞读,在写操作进行时.,只锁定需要的记录。MYCC会保存某个时间点上的数据快照,这意味着事务可以看到一个一致的数据视图,而不管它们需要运行多久。这同时也意味着不同的事务在同一个时间点看到的同一个表的数据可能是不同的。使用MVCC多版本并发控制相比锁定模型的主要优点是,在MYCC里,对检索(读)数据的锁要求与写数据的锁要求不冲突,所以,读不会阻塞写,而写也从不阻塞读。在数据库里也有表和行级别的锁定机制,用于给那些无法轻松接受MvCC行为的应用。不过,恰当地使用VVCC总会提供比锁更好的性能。20. 什么是存储过程?正确答案:存储过程是用户定义的一系列SO1.语句的集合,涉及特定表或其他对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值,并且不涉及特定用户表。存储过程用于执行特定的操作,可以接收输入参数、输出参数,返回单个或多个结果集。在创建存储过程时,既可以指定输入参数(IN),也可以指定输出参数SUT),通过在存储过程中使用输入参数,可以将数据传递到执行部分;通过使用输出参数,可以将执行结果传递到应用环境。存储过程可以使对数据库的管理、显示数据库及其用户信息的工作更加容易。考点存储过程21. 存储过程有哪些优点?正确答案:存储过程存储在数据库内,可由应用程序调用执行。存储过程允许用户声明变量并且可包含程序流、逻辑以及对数据库的查询。具体而言,存储过程的优点如下:1)存储过程增强了SQ1.语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和运算。2)存储过程可保证数据的安全性。3)通过存储过程可以使相关的动作在一起发生,从而维护数据库的完整性。4)在运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。这种已经编译好的过程可极大地改善SQ1.语句的性能。5)可以降低网络的通信量,因为不需要通过网络来传送很多SQ1.语句到数据库服务器。6)把体现企业规则的运算程序放入数据库服务器中,以便集中控制。考点存储过程22. 有如下两张表:1)用户资料表:SERV(SERVDNUMBER(10),PROD_IDNUMBER(1.0),USEl1.TYPEVRCHR2(30),TEK.M1NA1._NAMEvAKCHAR2(30),其中,SERVD为用户标识,是SERV表的主键;PRoDD为产品标识;USERjrYPE为用户类型;TERMlNAJNAME为终端类型。2)终端类型临时表:TERMINA1.(SERV_IDNUMBER(10),TERMINA1._NAMEVRCHR2(30)o在初始化情况下,SERV表的SERVD、PRoDD、USERjrYPE字段值是己知的,TERMlNAJNAME字段是空的,现在要根据:PRODD、USERJTYPE字段的值来更新NAME手段。更新条件为:D当条件满足“PRODD=IANDUSERJrYPE='A'”时,TERMINA1.NAME更新为“固话”。2)当条件满足“PRODID=IANDUSERTYPD='B'"时,TERMINA1.NAME更新为“小灵通”。3)当条件满足“PRODD=2"时,TERMlNA1._NAME更新为“宽带”。4)当条件满足“USERTYPE='C'"时,TERMlNA1._NAME更新为CDMAm5)以上条件均不满足前,TERMINAJNAME更新为“-1”。根据以上条件,完成存储过程,存储过程的名称为Spterminaj正确答案:存储过程如下:CREATEORREP1.ACEPROCEDURESPTERMINA1.ISBEGINUPDATESERVSSETS.TERMINA1.NAME=(SE1.ECTCASEWHENS.PROD_ID=1ANDS.USERjYPE='A'THEN'固话'WHENS.PROD_ID=1ANDS.USERjYPE='B'THEN'小灵通'WHENS.PR0D_ID=2THEN'宽带'WHENS.USER-TYPE=,C,THEN'CDMA'E1.SE,-l,ENDASTERMlNAkNAMEFROMTERMINA1.TWHERES.SERVJD=T.SERVD)WHEREEXISTS(SE1.ECT1FROMTERMINA1.TlWHERES.SERVID=T1.SERVID);COMMIT;ENDSPUPDATETERMINA1.NAME:考点存储过程23. 存储过程和函数的区别是什么?正确答案:存储过程和函数都是存储在数据库中的程序,可由用户直接或间接调用,它们都可以有输出参数,都是由一系列的SQ1.语句组成。具体而言,存储过程和函数的不同点如下:1)标识符不同。函数的标识符为FUNenON,存储过程为PROCEDURE。2)函数必须有返回值,且只能返回一个值,而存储过程可以有多个返回值。3)存储过程无返回值类型,不能将结果直接赋值给变量;函数有返回值类型,在调用函数时,除了用在SE1.ECT语句中,在其他情况下必须将函数的返回值赋给一个变量。4)函数nJ以在SE1.ECT语句中直接使用,而存储过程不能。例如,假设已有函数FUN_GETAVG()返回NUMBER类型绝对值,那么,SQ1.语句“SE1.ECTFUN_GETAVG(CO1._A)FROMTAB1.E”是合法的。考商存储过短24. 什么是触发器?正确答案:触发器(TriggCr)是数据库提供给程序员和DBA用来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,是用户定义在表上的一类由事件驱动的特殊过程。触发隅的执行不是由程序调用,也不是由手工启动,而是由事件来触发的,其中,事件是指用户对表的增(INSERT)、删(DE1.ETE)、改(即更新UPDATE)等操作。触发器经常被用于加强数据的完整性约束和业务规则等。触发器与存储过程的区别在于:存储过程是由用户或应用程序显式调用的,而触发器是不能被宜接调用的,而是由一个事件来触发运行,即触发器是当某个事件发生时自动地隐式运行。考点触发器25. 触发器的作用有哪些?正确答案:具体而言,触发器有如下作用:1)可维护数据库的安全性、一致性和完整性。2)可在写入数据表前,强制检验或转换数据。3)当触发器发生错误时,异常的结果会被撤销。4)部分数据库管理系统nJ以针对数据定义语言(DD1.)使用触发器,称为DD1.触发器,还可以针对视图定义替代触发器(INSTEADODo考点触发器

    注意事项

    本文(数据库程序员面试分类真题4.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开