【软考系统架构设计师】2015年下系统架构师案例分析历年真题

【软考系统架构设计师】2015年下系统架构师案例分析历年真题

2015年下系统架构师案例分析历年真题

    • 【软考系统架构设计师】2015年下系统架构师案例分析历年真题
      • 2015年系统架构师案例分析真题第一题(质量属性)
      • 2015年系统架构师案例分析真题第二题(系统设计)
      • 2015年系统架构师案例分析真题第三题(可靠性设计)
      • 2015年系统架构师案例分析真题第四题(数据库设计)
      • 2015年系统架构师案例分析真题第五题(Web架构设计)

2015年系统架构师案例分析真题第一题(质量属性)

某软件公司拟为某市级公安机关开发一套特种车辆管理与监控系统,以提高特种车辆管理的效率和准确性。在系统需求分析与架构设计阶段,用户提出的部分需求和关键质量属性场景如下:
(a)系统用户分为管理员、分管领导和普通民警等三类;
(b)正常负载情况下,系统必须在0.5秒内对用户的车辆查询请求进行响应;
(c)系统能够抵御99.999%的黑客攻击;
(d)系统的用户名必须以字母开头,长度不少于5个字符;
(e)对查询请求处理时间的要求将影响系统的数据传输协议和处理过程的设计;
(f)网络失效后,系统需要在2分钟内发现并启用备用网络系统;
(g)在系统升级时,需要保证在1个月内添加一个新的消息处理中间件;
(h)查询过程中涉及到的车辆实时视频传输必须保证20帧/秒的速率,且画面具有600*480的分辨率;
(i)更改系统加密的级别将对安全性和性能产生影响;
(j)系统主站点断电后,需要在3秒内将请求重定向到备用站点;
(k)假设每秒中用户查询请求的数量是10个,处理请求的时间为30毫秒,则“在1秒内完成用户的查询请求”这一要求是可以实现的;
(l)对用户信息数据的授权访问必须保证99.999%的安全性;
(m)目前对“车辆信息实时监控”业务逻辑的描述尚未达成共识,这可能导致部分业务功能模块的重复,影响系统的可修改性;
(n)更改系统的Web界面接口必须在1周内完成;
(o)系统需要提供远程调试接口,并支持系统的远程调试。
在对系统需求和质量属性场景进行分析的基础上,系统的架构师给出了三个候选的架构设计方案。公司目前正在组织系统开发的相关人员对系统架构进行评估。
【问题1】
在架构评估过程中,质量属性效用树(utility tree)是对系统质量属性进行识别和优先级排序的重要工具。请给出合适的质量属性,填入图1-1中(1)、(2)空白处;并选择题干描述中的(a)~(o),将恰当的序号填入(3)~(6)空白处,完成该系统的效用树。
【软考系统架构设计师】2015年下系统架构师案例分析历年真题_第1张图片
【问题2】
在架构评估过程中,需要正确识别系统的架构风险、敏感点和权衡点,并进行合理的架构决策。请用300字以内的文字给出系统架构风险、敏感点和权衡点的定义,并从题干描述中的(a)~(o)各选出1个属于系统架构风险、敏感点和权衡点的描述。

  • 【问题1我的解答】
No 场景 分类信息
a 系统用户分为管理员、分管领导和普通民警等三类 非功能需求
b 正常负载情况下,系统必须在0.5秒内对用户的车辆查询请求进行响应 性能
c 系统能够抵御99.999%的黑客攻击 安全性
d 系统的用户名必须以字母开头,长度不少于5个字符 非功能需求
e 对查询请求处理时间的要求将影响系统的数据传输协议和处理过程的设计 敏感点
f 网络失效后,系统需要在2分钟内发现并启用备用网络系统 可用性
g 在系统升级时,需要保证在1个月内添加一个新的消息处理中间件 可修改性
h 查询过程中涉及到的车辆实时视频传输必须保证20帧/秒的速率,且画面具有600*480的分辨率 性能
i 更改系统加密的级别将对安全性和性能产生影响 权衡点
j 系统主站点断电后,需要在3秒内将请求重定向到备用站点 可用性
k 假设每秒中用户查询请求的数量是10个,处理请求的时间为30毫秒,则“在1秒内完成用户的查询请求”这一要求是可以实现的 非风险点
l 对用户信息数据的授权访问必须保证99.999%的安全性 安全性
m 目前对“车辆信息实时监控”业务逻辑的描述尚未达成共识,这可能导致部分业务功能模块的重复,影响系统的可修改性 风险点
n 更改系统的Web界面接口必须在1周内完成 可修改性
o 系统需要提供远程调试接口,并支持系统的远程调试 可测试性

1)安全性
2)可修改性
3)h
4)l
5)j
6)n

  • 【问题1标准答案】
    同上。
    质量属性效用树是对质量属性进行分类、权衡、分析的架构分析工具,主要关注系统的性能、可用性、可修改性和安全性四个方面。根据对相关质量属性的定义和含义, 其中“正常负载情况下,系统必须在0.5秒内对用户的车辆查询请求进行响应”和“查询过程中涉及到的车辆实时视频传输必须保证画面具有600×480的分辨率,20帧/秒的速率”,这描述的是系统的性能属性;“网络失效后,系统需要在2分钟内发现错误并启用备用系统”和“系统主站点断电后,需要在3秒内将请求重定向到备用站点描述的则是系统的可用性;“在系统升级时,需要保证在20人月内添加一个新的消息处理中间件”和“更改系统的Web界面接口必须在4人周内完成”描述的是系统的可修改性;“车辆信息查询功能必须保证99.999%的安全性”和“用户信息数据库授权必须保证99.999%可用”描述的是系统的安全性。
  • 【问题2我的解答】
特征 场景 解释说明
权衡点 i 影响多个质量属性的敏感点
风险点 m 错误的架构决策对系统可能造成的负面的影响
敏感点 e 一个或一组构件的特征,用来满足系统某个质量属性
  • 【问题2标准答案】
  1. 系统架构风险是指架构设计中潜在的、存在问题的架构决策所带来的隐患。
  2. 敏感点是指为了实现某种特定的质量属性,一个或多个系统组件所具有的特性。权衡点是指影响多个质量属性,并对多个质量属性来说都是敏感点的系统属性。
  3. 题干描述中,(m)描述的是系统架构风险;(e)描述的是敏感点;(i)描述的是权衡点。

2015年系统架构师案例分析真题第二题(系统设计)

某公司拟研制一款高空监视无人直升机,该无人机采用遥控一自主复合型控制实现垂直升降。该直升机飞行控制系统由机上部分和地面部分组成,机上部分主要包括无线电传输设备、飞控计算机、导航设备等,地面部分包括遥控操纵设备、无线电传输设备以及地面综合控制计算机等。其主要工作原理是地面综合控制计算机负责发送相应指令,飞控计算机按照预定程序实现相应功能。经过需求分析,对该无人直升机控制系统纵向控制基本功能整理如下:
(a)飞控计算机加电后,应完成系统初始化,飞机进入准备起飞状态;
(b)在准备起飞状态中等待地面综合控制计算机发送起飞指令,飞控计算机接收到起飞指令后,进入垂直起飞状态;
(c)垂直起飞过程中如果飞控计算机发现飞机飞行异常,飞行控制系统应转入无线电遥控飞行状态,地面综合控制计算机发送遥控指令;
(d)垂直起飞达到预定起飞高度后,飞机应进入高度保持状态;
(e)飞控计算机在收到地面综合控制计算机发送的目标高度后,飞机应进入垂直升降状态,接近目标高度;垂直升降过程中出现飞机飞行异常,控制系统应转入无线电遥控飞行;
(f)飞机到达目标高度后,应进入高度保持状态,完成相应的任务;
(g)飞机在接到地面综合控制计算机发送的任务执行结束指令后,进入飞机降落状态;
(h)飞机降落过程中如果出现飞机飞行异常,控制系统应转入无线电遥控飞行;
(i)飞机降落到指定着陆高度后,进入飞机着陆状态,应按照预定着陆算法,进行着陆;
(j)无线电遥控飞行中,地面综合控制计算机发送着陆指令,飞机进入着陆状态,应按照预定着陆算法,进行着陆。
【问题1】
状态图和活动图是软件系统设计建模中常用的两种手段,请用200字以内文字简要说明状态图和活动图的含义及其区别。
【问题2】
根据题干中描述的基本功能需求,架构师王工通过对需求的分析和总结给出了无人直升机控制系统纵向控制状态图(图2-1)。请根据题干描述,提炼出相应状态及条件,并完善图2-1所示状态图中的(1)~(5),将答案填写在答题纸中。
【软考系统架构设计师】2015年下系统架构师案例分析历年真题_第2张图片
【问题3】
根据题目中描述的基本功能需求,架构师王工给出了无人直升机控制系统纵向控制的顶层活动图(图2-2)。请根据题干描述,完善图2-2活动图的(1)-(9),将答案填写在答题纸中。
【软考系统架构设计师】2015年下系统架构师案例分析历年真题_第3张图片

  • 【问题1我的解答】
  1. 状态图用来描述的是系统内部状态的迁移;
  2. 活动图用来描述系统进程之间的处理流程和处理的先后顺序;
  3. 状态图和活动图都是UML中的动态图,两者表达的侧重点是不一样的。状态图侧重系统内部的状态变化以及变化的条件和前提;而活动图更加侧重活动之间的先后顺序,以及各活动之间并发性等。
  • 【问题1标准答案】
  1. 状态图主要用于描述一个对象在其生存期间的动态行为,表现一个对象所经历的状态序列,引起状态转移的事件(event),以及因状态转移而伴随的动作(action)。
  2. 活动图可以用于描述系统的工作流程和并发行为。活动图其实可看作状态图的特殊形式,活动图中一个活动结束后将立即进入下一个活动(在状态图中状态的转移可能需要事件的触发)。
  3. 两者最大的区别是:状态图侧重于描述行为的结果***,而活动图侧重描述行为的动作*。其次活动图可描述并发行为,而状态图不能。
    【问题2我的解答】
  • 【问题2标准答案】
    1)垂直起飞状态
    2)飞机飞行异常
    3)高度保持状态
    4)垂直升降状态
    5)无线电遥控飞行状态
  • 【问题3我的解答】
  • 【问题3标准答案】
  1. 地面综合控制计算机
  2. 下传起飞就绪信息
  3. 垂直起飞
  4. 高度保持
  5. 发送目标高度
  6. 垂直升降
  7. 发送任务结束指令
  8. 飞机降落
  9. 无线电遥控飞行

2015年系统架构师案例分析真题第三题(可靠性设计)

某宇航公司长期从事宇航装备的研制工作,嵌入式系统的可靠性分析与设计已成为该公司产品研制中的核心工作,随着宇航装备的综合化技术发展,嵌入式软件规模发生了巨大变化,代码规模已从原来的几十万扩展到上百万,从而带来了由于软件失效而引起系统可靠性降低的隐患。公司领导非常重视软件可靠性工作,决定抽调王工程师等5人组建可靠性研究团队,专门研究提高本公司宇航装备的系统可靠性和软件可靠性问题,并要求在三个月内,给出本公司在系统和软件设计方面如何考虑可靠性设计的方法和规范。可靠性研究团队很快拿出了系统及硬件的可靠性提高方案,但对于软件可靠性问题始终没有研究出一种普遍认同的方法。
【问题1】
请用200字以内文字说明系统可靠性的定义及包含的4个子特性,并简要指出提高系统可靠性一般采用哪些技术?
【问题2】
王工带领的可靠性研究团队之所以没能快速取得软件可靠性问题的技术突破,其核心原因是他们没有搞懂高可靠性软件应具备的特点。软件可靠性一般致力于系统性地减少和消除对软件程序性能有不利影响的系统故障。除非祓修改,否则软件系统不会随着时间的推移而发生退化。请根据你对软件可靠性的理解,给出表3-1所列出的硬件可靠性特征对应的软件可靠性特征之间的差异或相似之处,将答案写在答题纸上。
表3-1硬件和软件可靠性对比
【软考系统架构设计师】2015年下系统架构师案例分析历年真题_第4张图片
【问题3】
王工带领的可靠性研究团队在分析了大量相关资料基础上,提出软件的质量和可靠性必须在开发过程构建到软件中,也就是说,为了提高软件的可靠性,必须在需求分析、设计阶段开展软件可靠性筹划和设计。研究团队针对本公司承担的飞行控制系统制定出了一套飞控软件的可靠性设计要求。飞行控制系统是一种双余度同构型系统,输入采用了独立的两路数据通道,在系统内完成输入数据的交叉对比、表决‘制导率计算,输出数据的交叉对比、表决、一输出等功能,系统的监控模块实现对系统失效或失步的检测与宠位。其软件的可靠性设计包括恢复块方法和N版本程序设计方法。请根据恢复块方法工作原理完成图3-1,在(1)~(4)中填入恰当的内容。并比较恢复块方法与N版本程序设计方法,将比较结果(5)~(8)填入表3-2中。
【软考系统架构设计师】2015年下系统架构师案例分析历年真题_第5张图片表3-2 恢复块方法与N版本程序设计的比较
【软考系统架构设计师】2015年下系统架构师案例分析历年真题_第6张图片

  • 【问题1我的解答】
    系统可靠性是指系统在规定的时间内特定的环境下能够保持正常运行,不出错的概率。
    系统可靠性包括四个子特征:容错性,纠错性,避错性;
    提高可靠性的技术:
    容错技术:N版本程序设计,恢复块设计,防卫式编程;
    使用结构冗余,时间冗余,数据冗余等一系列的冗余技术都可以提高系统可靠性;
    避错技术:使用简单化设计同样也可以提高系统可靠性。
  • 【问题1标准答案】
  1. 系统可靠性定义:系统在规定的时间内及规定的环境条件下,完成规定功能的能力,就是系统无故障运行的概率。
  2. 系统可靠性包括:成熟性、容错性、易恢复性和可靠性的依从性4个子特性。
  3. 提高可靠性的技术:
    (1)N版本程序设计
    (2) 恢复块方法
    (3) 防卫式程序设计
    (4)双机热备或集群系统
    (5)冗余设计
  • 【问题2我的解答】
序号 硬件可靠性 软件可靠性
1 失效率服从浴缸曲线,老化状态类似于软件调试状态 1)软件不存在老化状态,失效率不会随着使用时间而变化
2 即使不适用,材料劣化也会导致失效 2)软件不存在材料劣化,不会有该方面失效
3 硬件维修会恢复到原始状态 3)软件系统通过重新启动的方式初始化内存
4 硬件失效之前会有报警 4)软件失效往往以Bug出现,除非加入可靠性机制,不然不会报警
  • 【问题2标准答案】
  1. 不考虑软件演化的情况下,失效率在统计上是非增的
  2. 如果不使用该软件,永远不会发生失效
  3. 软件维护会创建新的软件代码
  4. 软件失效之前很少会有警告
  • 【问题3我的解答】
    1)主块
    2)验证测试程序
    3)系统继续执行
    4)向后恢复(恢复到出错前)
    5)重复计算后表决
    6)向后恢复
    7)一般
    8)好

  • 【问题3标准答案】
    (1)主块
    (2)验证测试
    (3)输出正确结果
    (4)异常处理
    (5)表决
    (6)后向恢复
    (7)差
    (8)好

  • 【心得体会】

  1. 此题考查的是系统可靠性设计的经典试题。第一问和第三问考查的都是概念;第二问稍稍有点难度,因为有了软件与硬件的可靠性比较。
  2. 首先第一问什么是可靠性的概念,在规定时间规定的环境中,完成指定的功能不会出现失效也就是无故障运行的概率。这个概念一定要记,论文中也可以用到。
    四个子特征完全靠蒙了。其中易恢复性,容错性都可以头脑风暴到,还有两个特征记住吧分别是可靠性中的依存性和成熟性,成熟的代码框架,成熟的管理体制下代码的可靠度自然高了。
  3. 提高可靠性的技术有:N版本,冗余技术,恢复块,防卫式编程,双机热备双机互备,集群技术等。除了最后一个都回答到了。
  4. 第三空也比较简单,考查了N版本和恢复块的比较。错了第三小空和第四小空;恢复块中需要运行验证测试程序,验证测试不合格的情况下,我回答了恢复策略,而标准答案是有错误要做异常处理;验证测试合格后标准答案是输出正确的结果,而我写了继续运行系统。或许只是看待问题角度不同吧。
  5. 最后第二空,没有经验只能依靠凭空想象回答。软件的失效是非增的,软件不使用也不会失效;软件的维修可能需要加入新的代码;软件失效前不同与硬件,很少会报警。

2015年系统架构师案例分析真题第四题(数据库设计)

某软件公司拟开发一套贸易综合管理系统,包括客户关系管理子系统和商品信息管理子系统两部分。客户关系管理子系统主要管理客户信息,并根据贸易业务需要频繁向客户发送相关的电子邮件、短信等提醒信息。商品信息管理子系统主要为客户提供商品信息在线查询功能,包括商品基本信息、实时库存与价格等。
在对系统进行数据架构设计时,公司项目组的架构师王工主张采用文件系统进行数据管理,原因是目前公司客户和商品数量不大,且系统功能较为简单,采用文件系统进行数据管理简单直观,开发周期短。架构师李工则建议采用关系数据库进行数据管理,原因在于公司目前正处在高速扩张期,虽然目前的客户和商品数量不大,但随着公司快速发展,需要管理的数据必然飞速膨胀,采用关系数据库作为数据存储层,系统的扩展性更强,并能够对未来可能增加的复杂业务提供有效支持。经过讨论,项目组初步采纳了李工的意见,决定采用关系数据库存储客户数据,并针对业务特征对系统性能进行优化。
【问题1】
请从设计难度、数据冗余程度、数据架构、应用扩展性等4个方面对关系型数据库管理系统和文件系统两种数据存储方式进行比较,填写表4-1中(1)~(4)。
表4-1 关系型数据库管理系统和文件系统存储方式比较
【软考系统架构设计师】2015年下系统架构师案例分析历年真题_第7张图片
【问题2】
对系统的核心业务需求进行认真分析后,公司的资深架构师张工提出一种内存数据库和关系数据库的混合存储架构,其核心思想是将需要频繁读写的数据存入内存数据库,而将相对固定不变的数据存入关系数据库。请首先分析比较内存数据库和关系数据库在数据模型、读写性能、存储容量、可靠性等方面的差异,填写表4-2中(1)~(4)的空白,并根据张工的思路指定各种业务数据的存储方式,填写表4-3中(5)~(9)中的空白。
【软考系统架构设计师】2015年下系统架构师案例分析历年真题_第8张图片
【问题3】
系统开发完成进行压力测试时,发现在较大数据量的情况下,部分业务查询响应时间过长,经过分析发现其主要原因是部分SQL查询语句效率低下。请判断表4-4中的SQL语句设计策略哪些可能会提升查询效率,哪些可能会降低查询效率,在(1)~(4)中填入“提升”或“降低”。
表4-4 SQL设计策略对性能的影响
【软考系统架构设计师】2015年下系统架构师案例分析历年真题_第9张图片

  • 【问题1我的解答】
- 设计难度 数据冗余程度 数据架构 应用扩展性
关系数据库 1)针对通用应用系统设计,难度大于文件系统 遵守数据库范式,数据冗余较少 以数据库为中心组织,管理数据 4)符合通用应用系统要求,益于在不同应用系统之间共享
文件系统 针对特定应用系统设计,难度较小 2)冗余较大 3)以某文件为中心管理数据 符合特定应用系统要求的文件数据很难在不同的应用系统之间共享
  • 【问题1标准答案】
  1. 数据结构需要符合关系模式,设计难度较大
  2. 可能在多个文件中复制相同的数据属性,数据冗余较大
  3. 以应用系统为中心组织、管理数据
  4. 数据独立于应用系统,很容易在不同的应用系统之间共享数据
  • 【问题2我的解答】
- 主要数据模型 读写性能 存储容量 可靠性
内存数据库 1)键值对 内存直接读写,性能相对较高 3)基于内存存储,存储容量受限 4)是否命中内存数据库取决于算法,可靠性一般
关系数据库 关系模式 2)性能较低,需要操作文件,关系数据表还需要连接等操作 基于磁盘存储,存储容量大 内建恢复机制,可靠性较高
  • 业务数据存储方式
业务数据 存储方式
客户基本信息 关系数据库
客户电子邮件 5)内存数据库
客户联系电话 6)关系数据库
商品基本信息 7)关系数据库
商品库存信息 8)关系数据库
商品价格信息 9)关系数据库
  • 【问题2标准答案】
    1)Key-Value模式(键-值对模式)
    2)外存读写,性能相对较低
    3)基于内存存储, 存储容量受限
    4)恢复机制复杂, 可靠性较低
    5)内存数据库
    6)内存数据库
    7)关系数据库
    8)内存数据库
    9)内存数据库
  1. 内存数据库型数据库是将数据放在内存中直接操作的数据库,使用内存型数据库将极大地提高应用的性能,同时通过数据缓存、快速算法、并行操作等的改进,使内存型数据库相对于传统的关系型数据库数据处理性能提高10倍以上,同时内存型数据库的应用受到内存大小,数据恢复要求的限制。
  2. 根据贸易综合管理系统的需求描述,需要频繁向客户发送相关的电子邮件、短信等提醒信息,并实时更新商品库存信息和商品价格信息,因此混合存储架构中,将客户电子邮件、客户联系电话、商品库存信息、商品价格信息等数据存入内存数据库:客户基本信息,商品基本信息相对稳定、访问频率较低,存入关系型数据库。
  • 【问题3我的解答】
SQL语句设计策略 查询性能影响情况
查询时不要返回不需要的行与列 提升
需要进行多表连接查询时,尽量采用子查询结构 降低
尽量采用NOTIN,Link,Not Exist等操作 降低
尽量避免使用Distinct关键字 提升
  • 【问题3标准答案】
  • SQL语句设计时,影响查询效率的设计原则是:
    •查询时尽量不要返回不需要的行、列;
    •需要进行多表连接査询时,尽量使用连接查询,避免使用子查询结构;
    •尽量避免采用NOTIN、NOTEXIST、LIKE等使用全表查询的操作;
    •尽量避免使用DISTINCT关键字。

2015年系统架构师案例分析真题第五题(Web架构设计)

某信息技术公司计划开发一套在线投票系统,用于为市场调研、信息调查和销售反馈等业务提供服务。该系统计划通过大量宣传和奖品鼓励的方式快速积累用户,当用户规模扩大到一定程度时,开始联系相关企业提供信息服务,并按照信息服务种类和用户投票数量收取费用。
为了降低开发成本和提高开发效率,项目组经过讨论后决定采用轻量级Java EE开发框架设计系统应用架构。在应用架构设计中,除了满足系统主要功能需求,还需要考虑的因素包括:
(1)项目开发采用MySQL数据库存储数据,一但将来可能移植到其它数据库平台;
(2)系统开发过程中尽可能降低或者消除SQL语句开发的工作量;
(3)投票系统中数据之间的关系复杂,需要支持数据对象的聚合和继承等关系。
项目组基于MVC模式设计出了投票系统的架构,包括表示层、业务逻辑层、数据持久层和数据层。在具体讨论数据持久层采用哪种技术方案时,老王建议采用成熟的Hibernate框架,小李则认为iBatis更加灵活,更适合作为投票系统数据持久层开发技术。
【问题1】
请用300以内文字说明什么是数据持久层,使用数据持久层能够为项目开发带来哪些好处?
【问题2】
针对在线投票系统的实际应用需求和要求,项目组应选用哪种技术实现数据持久层?请用200字以内文字说明其采用该技术的原因。
【问题3】
数据持久层是Web应用系统框架中重要的组成部分,主流的数据持久层技术分别基于不同的技术方案,请在表5-1中(1)-(4)处分别根据(a)~(d)所列技术的方案类别填入其序号。
表5-1 数据持久层技术分类
【软考系统架构设计师】2015年下系统架构师案例分析历年真题_第10张图片
(a) BMP,CMP
(b) iBatis/MyBatis
(c) SpringJdbcTemplate
(d) TopLink,JDO,Hibernate

  • 【问题1我的解答】
  • 对数据库各种操作进行统一处理和封装的一个层次,它一般在数据架构层之上,它屏蔽了数据库的使用细节
    1)降低数据库访问复杂度,让不熟悉数据库的人可以轻松使用数据库
    2)可在上层不知晓的前提下,更换底层数据库层,可移植性高了
  • 【问题1标准答案】
  • 数据持久层是根据分层思想,通过建立逻辑数据操作接口,采取一定的对象/关系映射策略,隐藏数据库访问代码细节,向业务开发人员提供透明的对象持久化操作机制。能够为项目开发带来的好处:
  1. 分离业务逻辑层和数据层,降低两者之间的耦合;
  2. 通过对象/关系映射向业务逻辑提供面向对象的数据访问;
  3. 简化数据层访问,隐藏数据库连接、数据读写命令和事务管理细节。
  • 【问题2我的解答】

  • 采用老王提出来的Hibernate。Hibernate比较成熟的数据持久层框架。支持关系对象映射,可以更好的支持数据库层复杂的数据关系。

  • 【问题2标准答案】

  • 项目组应该采用Hibernate框架。原因:

  1. Hibernate支持多种不同类型数据库,满足项目组数据库移植需求;
  2. Hibernate相对于iBatis减少了SQL语句开发的工作量;
  3. iBatis生成的PO是扁平化的,无法像Hibernate—样支持对象的继承和聚合等立体化关系
  • 【问题3我的解答】
技术方案 实现技术
JDBC封装 1)(c) SpringJdbcTemplate
SQL Mapping 2)b) iBatis/MyBatis
O/R Mapping 3)a) BMP,CMP
Entity Bean 4)d) TopLink,JDO,Hibernate
  • 【问题3标准答案】
    1)(c)
    2)(b)
    3)(d)
    4)(a)

  • 【知识扩展】

  1. iBatis 是Apache 的一个开源项目,一个O/R Mapping 解决方案,iBatis 最大的特点就是小巧,上手很快。如果不需要太多复杂的功能,iBatis 是能够满足你的要求又足够灵活的最简单的解决方案,现在的iBatis已经改名为Mybatis 了。
  2. EJB有两种主要类型BMP(Bean managed persistence )和CMP(Container managed persistence ),这两种类型各有优缺点。
  3. BMP是在Bean中完成对数据库JDBC的各种调用,也就是说,在你的实体bean(entity bean)中,明确写入了SQL语句,如“insert … ”或“select …”,并且使用Datasource获得一个数据库资源以及连接(connection)从而对数据库直接进行增加删除修改。
  4. CMP是由EJB容器自动完成对数据库的操作,你所有做的,就是在实体bean重写入SetXXX或getXXX方法,然后在ejb-jar.xml中定义cmp-field就可以。
    Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过Hibernate 提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟练掌握, Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的SQL 并调用JDBC 接口加以执行。
  5. iBATIS 的着力点,则在于POJO 与SQL之间的映射关系。然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。相对Hibernate“O/R”而言,iBATIS 是一种“Sql Mapping”的ORM实现。
  6. Hibernate的调优方案
    制定合理的缓存策略;
    尽量使用延迟加载特性;
    采用合理的Session管理机制;
    使用批量抓取,设定合理的批处理参数(batch_size);
    进行合理的O/R映射设计
  7. Mybatis调优方案
    MyBatis在Session方面和Hibernate的Session生命周期是一致的,同样需要合理的Session管理机制。MyBatis同样具有二级缓存机制。 MyBatis可以进行详细的SQL优化设计。
  8. SQL优化方面
    Hibernate的查询会将表中的所有字段查询出来,这一点会有性能消耗。Hibernate也可以自己写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。而Mybatis的SQL是手动编写的,所以可以按需求指定查询的字段。
    Hibernate SQL语句的调优需要将SQL打印出来,而Hibernate的SQL被很多人嫌弃因为太丑了。MyBatis的SQL是自己手动写的所以调整方便。但Hibernate具有自己的日志统计。Mybatis本身不带日志统计,使用Log4j进行日志记录。
  9. 扩展性方面
    Hibernate与具体数据库的关联只需在XML文件中配置即可,所有的SQL语句与具体使用的数据库无关,移植性很好。MyBatis项目中所有的SQL语句都是依赖所用的数据库的,所以不同数据库类型的支持不好。
  10. 对象管理
    Hibernate 是完整的对象/关系映射解决方案,它提供了对象状态管理(state management)的功能,使开发者不再需要理会底层数据库系统的细节。也就是说,相对于常见的 JDBC/SQL 持久层方案中需要管理 SQL 语句,Hibernate采用了更自然的面向对象的视角来持久化 Java应用中的数据。
  11. 换句话说,使用 Hibernate 的开发者应该总是关注对象的状态(state),不必考虑 SQL 语句的执行。这部分细节已经由 Hibernate 掌管妥当,只有开发者在进行系统性能调优的时候才需要进行了解。
    而MyBatis在这一块没有文档说明,用户需要对对象自己进行详细的管理
  12. 对象管理
    Hibernate是完整的对象/关系映射解决方案,它提供了对象状态管理(state management)的功能,使开发者不再需要理会底层数据库系统的细节。也就是说,相对于常见的 JDBC/SQL 持久层方案中需要管理 SQL 语句,Hibernate采用了更自然的面向对象的视角来持久化 Java 应用中的数据。
    换句话说,使用 Hibernate 的开发者应该总是关注对象的状态(state),不必考虑 SQL 语句的执行。这部分细节已经由 Hibernate 掌管妥当,只有开发者在进行系统性能调优的时候才需要进行了解。
    而MyBatis在这一块没有文档说明,用户需要对对象自己进行详细的管理
  • 【心得体会】
  1. 此题是一道考查数据持久层的经典案例题了。鉴于论文也考过数据持久层,所以要格外重视。
  2. 数据持久层就是分层思想的运用,所以第一问只要回答了分层架构风格的特征就可以了;
  3. 第二题考查了Hibernate和iBatis之间的比较,两个持久层框架特点如果都能够说出来的话,那么此题也不在话下;最后一问考查了多种持久化框架的特点。

你可能感兴趣的:(#,系统架构设计师---历年真题,系统架构,java,开发语言)