2015架构案例(五十一)

第5题

【说明】
某信息技术公司计划开发一套在线投票系统,用于为市场调研、信息调查和销售反馈等业务提供服务。该系统计划通过大量宣传和奖品鼓励的方式快速积累用户,当用户规模扩大到一定程度时,开始联系相关企业提供信息服务,并按照信息服务种类和用户投票数量收取费用。

为了降低开发成本和提高开发效率,项目组经过讨论后决定采用轻量级Java EE开发框架设计系统应用架构。在应用架构设计中,除了满足系统主要功能需求,还需要考虑的因素包括:

(1) 项目开发采用MySQL数据库存储数据,一但将来可能移植到其它数据库平台;

(2) 系统开发过程中尽可能降低或者消除SQL语句开发的工作量;

(3) 投票系统中数据之间的关系复杂,需要支持数据对象的聚合和继承等关系。

【问题:5.1】请用300以内文字说明什么是数据持久层,使用数据持久层能够为项目开发带来哪些好处?

答案:

数据持久层可以提高系统的复用性,灵活性,将一些数据持久化存储在我们需要的数据库,比如mysql,oracle等,使用数据持久层可以提升系统可靠性,开发项目更方便,不同项目之间可以访问同一个数据持久层,可以保证数据共享,提高开发效率和系统可修改性

数据持久层采用的是分层思想,通过对象/关系映射策略与数据库访问,透明化给开发人员使用,简化开发人员的访问数据库工作,主要好处有:

  1. 分离业务和数据库层的访问,解耦。
  2. 通过对象/关系映射访问数据库。
  3. 简化数据层访问,隐式数据库连接、数据库命令和事务管理

【问题:5.2】针对在线投票系统的实际应用需求和要求,项目组应选用哪种技术实现数据持久层?请用200字以内文字说明其采用该技术的原因。

答案:

Hibernate和Mybatis都可以支持代码复用,但是Hibernate可以降低或者消除SQL语句开发的工作量,Hibernate支持移植到其他平台,支持多种类型数据库,Hibernate支持对象聚合和继承,mybatis不支持,Hibernate与该系统需要考虑的因素相吻合。

【问题:5.3】数据持久层是Web应用系统框架中重要的组成部分,主流的数据持久层技术分别基于不同的技术方案,请在表5-1中(1)-(4)处分别根据(a)~(d)所列技术的方案类别填入其序号。

  1. BMP, CMP
    (b) iBatis/MyBatis
    (c) SpringJdbcTemplate
    (d) TopLink,JDO,Hibernate

(1)C

(2)B

(3)A 答案:D

4)D 答案:A

第4题

【说明】
某软件公司拟开发一套贸易综合管理系统,包括客户关系管理子系统和商品信息管理子系统两部分。客户关系管理子系统主要管理客户信息,并根据贸易业务需要频繁向客户发送相关的电子邮件、短信等提醒信息。商品信息管理子系统主要为客户提供商品信息在线查询功能,包括商品基本信息、实时库存与价格等。

在对系统进行数据架构设计时,公司项目组的架构师王工主张采用文件系统进行数据管理,原因是目前公司客户和商品数量不大,且系统功能较为简单,采用文件系统进行数据管理简单直观,开发周期短。架构师李工则建议采用关系数据库进行数据管理,原因在于公司目前正处在高速扩张期,虽然目前的客户和商品数量不大,但随着公司快速发展,需要管理的数据必然飞速膨胀,采用关系数据库作为数据存储层,系统的扩展性更强,并能够对未来可能增加的复杂业务提供有效支持。经过讨论,项目组初步采纳了李工的意见,决定采用关系数据库存储客户数据,并针对业务特征对系统性能进行优化。

【问题:4.1】请从设计难度、数据冗余程度、数据架构、应用扩展性等4个方面对关系型数据库管理系统和文件系统两种数据存储方式进行比较,填写表4-1中(1)~(4)。

  1. 特定关系来设计难度较大
  2. 没有特定规范,非结构化数据多,数据冗余较大
  3. 以文件为中心组织、管理答案:以应用系统为中心,管理属于
  4. 数据独立于应用系统,应用系统之间共享很容易

【问题:4.2】对系统的核心业务需求进行认真分析后,公司的资深架构师张工提出一种内存数据库和关系数据库的混合存储架构,其核心思想是将需要频繁读写的数据存入内存数据库,而将相对固定不变的数据存入关系数据库。请首先分析比较内存数据库和关系数据库在数据模型、读写性能、存储容量、可靠性等方面的差异,填写表4-2中(1)~(4)的空白,并根据张工的思路指定各种业务数据的存储方式,填写表4-3中(5)~(9)中的空白。

答案:

  1. 非关系模式 答案:键值对,key-value
  2. 磁盘I/O读写,性能相对较低
  3. 基于内存存储,存储容量小
  4. 恢复机制复杂,可靠性低
  5. 内存数据库
  6. 内存数据库
  7. 关系数据库
  8. 关系数据库 答案:内存
  9. 关系数据库 答案:内存

解析:因为商品库存变动大,需要频繁修改,内存效率更高。所以采用内存数据库。

电子邮件和电话也频繁发送,所以内部数据库。

【问题:4.3】系统开发完成进行压力测试时,发现在较大数据量的情况下,部分业务查询响应时间过长,经过分析发现其主要原因是部分SQL查询语句效率低下。请判断表4-4中的SQL语句设计策略哪些可能会提升查询效率,哪些可能会降低查询效率,在(1)~(4)中填入“提升”或“降低”。

  1. 提升
  2. 降低
  3. 降低
  4. 提升

【问题:2.1】状态图和活动图是软件系统设计建模中常用的两种手段,请用200字以内文字简要说明状态图和活动图的含义及其区别。

答案:

状态图:表示对象被触发时候需要改变对象状态,强调单个对象。

活动图:强调整个系统,表示系统整个数据流如何流转

答案:

状态图:描述一个对象生存期间动态行为,通常事件来触发这个对象的动作。

活动图:表示描述系统的工作流程和并发行为。活动图在一个活动结束会进入下一个活动。

状态图侧重描述行为的结果,活动图侧重描述行为和动作,活动图可以并发行为,状态图不可以。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/133293.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为云云耀云服务器L实例评测 | 实例评测使用之硬件参数评测:华为云云耀云服务器下的 Linux 磁盘目录分析神器 ncdu

华为云云耀云服务器L实例评测 | 实例评测使用之硬件参数评测:华为云云耀云服务器下的 Linux 磁盘目录分析神器 ncdu 介绍华为云云耀云服务器 华为云云耀云服务器 (目前已经全新升级为 华为云云耀云服务器L实例) 华为云云耀云服务器…

Python3无法调用Sqlalchemy解决(mysqldb)

原因 在安装Sqlalchemy后运行程序报错 无法导入mysqldb,缺失模块 ImportError: No module named ‘MySQLdb’ 既然缺少 MySQLdb 这个模块,尝试按照正常的想法执行 pip install MySQLdbpip install mysql-python 应该能解决,但是却找不到…

Umi + React + Ant Design Pro + TS 项目搭建

新建项目目录 mkdir 【项目名称】在对应目录 D:\react\demo 中,安装 Umi 脚手架: yarn create umi接下来,安装将要用到的相关依赖 umijs/plugins: npm i umijs/plugins -Dumijs/plugins 是 Umi 的官方插件集,包含了…

第二证券:跨行转账为什么迟迟不到账?

现在,越来越多的人挑选使用跨行转账来结束日常资金生意。不过,有时候在进行跨行转账时,或许会出现迟迟不到账的状况。这种状况常常让人感到困惑和焦虑。所以,我们需求深入分析这个问题,找出原因,以便可以防…

ES相关面试问题整理

索引模板了解么 索引模板,一种复用机制,就像一些项目的开发框架如 Laravel 一样,省去了大量的重复,体力劳动。当新建一个 Elasticsearch 索引时,自动匹配模板,完成索引的基础部分搭建。 模板定义&#xf…

阿里云10M公网收费价格表(一年和1个月报价)

阿里云服务器10M带宽收费价格表,阿里云服务器上海地域10M带宽一年优惠价格5355元,10M带宽一个月525元,地域不同带宽价格不同,阿里云服务器网以华东1(上海)地域为例,5M及5M以下带宽按照23元一个月…

C++:多态

本文主要介绍c中多态的概念、多态的定义及实现、抽象类、多态的原理、单继承和多继承关系中的虚函数表。 目录 一、多态的概念 二、多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写 4.C11 override 和 final 5.重载、覆盖(重写)、隐藏(重定义)的对比 三、…

并发、并行、同步、异步、阻塞、非阻塞

一、多核、多cpu (一)多核 Multicore 核是CPU最重要的部分。负责运算。核包括控制单元、运算单元、寄存器等单元。 多核就是指单个CPU中有多个核。 (二)多cpu Multiprocessor 多cpu就是一个系统拥有多个CPU。每个CPU可能有单个核…

vue项目打包,使用externals抽离公共的第三方库

封装了一个插件,用来vue打包抽离公共的第三方库,使用unplugin进行插件开发,vite对应的功能使用了vite-plugin-externals进行二次开发 github地址 npm地址 hfex-auto-externals-plugin 自动注入插件,使用 unplugin 和 html-webpack-plugin进…

UE4和C++ 开发-C++与UMG的交互2(C++获取UMG的属性)

1、...C获取UMG的属性 1.1、第一种方法&#xff1a;通过名称获取控件。 void UMyUserWidget::NativeConstruct() {Super::NativeConstruct();//通过名字&#xff0c;获取蓝图控件中的按钮引用。CtnClic Cast<UButton>(GetWidgetFromName(TEXT("Button_44"))…

一文读懂flutter线程: 深入了解Flutter中的多线程编程

深入了解Flutter中的多线程编程 前言一、为什么需要多线程&#xff1f;二、在Flutter中创建线程三、多线程的最佳实践四、Flutter中的多线程示例五、Flutter中的多线程错误处理六、Flutter中的多线程性能优化七、安全性和隐私考虑八、跨平台性考虑 总结 前言 在移动应用开发领域…

2023软件测试面试题(亲身经历)

在职&#xff0c;5年测试经验&#xff0c;坐标广州&#xff0c;有点想666。于是进行了几场线上面试… 1、python有哪些数据类型 数字型&#xff1a;int/float/bool/complex 字符串&#xff1a;str 列表&#xff1a;list 元组&#xff1a;tuple 字典&#xff1a;dict 集合&…