软件工程
【问题】识别设计类是面向对象设计过程中的重要工作,设计类表达了类的职责,即该类所担任的任务。请用300字以内的文字说明设计类通常分为哪三种类型,每种类型的主要职责,并针对题干描述案例涉及的具体类为每种类型的设计类型举出2个实例。
1)实体类。实体类映射需求中的每个实体,保存需要存储在永久存储体中的信息,例如,
用户、商品等。
2)控制类。控制类是用于控制用例工作的类,用于对一个或几个用例所特有的控制行为进
行建模。例如,结算、备货等。
3)边界类。边界类用于封装在用例内,外流动的信息或数据流。例如,浏览器、购物车等。
【问题】在面向对象的设计过程中,活动图阐明了业务用例实现的工作流程。请用300字以内的文字给出活动图与流程图的三个主要区别。
实例化类和实例化对象活动图描述的是对象活动的顺序关系所遵循的规则,它着重表现系统的行为,而非处理过程;而流程图着重描述处理过程。
流程图一般都限于顺序进程,而活动图则可以支持并发进程。
活动图是面向对象的,而流程图是面向过程的
【问题】设计模式按照其应用模式可以分为三类:创建型、结构型和行为型,请用200字以内文字说明三者的作用。
创建型模式主要用于创建对接,为设计类实例化新对象提供指南。
结构型模式主要用于处理类或对象的组合,对类如何设计以形成更大的结构提供指南。
行为型模式主要用于描述类或对象的交互以及职责的分配,对类之间交互以及分配责任的方式提供指南。
【问题】请将项目组已经掌握的设计模式按照其作用分布归类到创建型、结构性和行为型模式中。
创建型模式:构造器模式、原型模式
结构性模式:适配器模式、外观模式、代理模式
行为型模式:命令模式、中介模式、状态模式和策略模式。
数据库设计
【问题1】商铺用户需要实时统计本商铺的货物数量和销售情况,以便于及时补货,或者为商铺调整销售策略。为此专门设计了可实时查看当天商铺中货物销售情况和存货情况的视图,商铺产品销售情况日报表(商铺编码、产品编码,日销售产品数量,库存数量,日期)。
1)数据库运行测试过程中,发现针对该视图查询性能比较差,不满足用户需求。
2)请说明数据库视图的基本概念及其优点,并说明本视图设计导致查询性能较差的原因。
视图是虚表,是从一个或几个基本表(或视图)中导出的表,在系统的数据字典中仅存放了视图的定义,不存放视图对应的数据。
视图的优点:
1)视图能简化用户的操作
2)视图机制可以使用户以不同的方式查询同一数据
3)视图对数据库重构提供了一定程度的逻辑独立性
4)视图可以对机密的数据提供安全保护
查询性能较差的原因是视图中,“日销售产品数量”需要针对订单表做统计分析,订单表中有数量庞大的历史销售记录,所以这种操作极为耗时。
【问题2】为解决该视图查询性能比较差的问题,张工建议为该数据建立单独的商品当天货物销售、存货情况的关系表。但李工认为张工的方案造成了数据不一致的问题,必须采用一定的手段来解决。
1)说明张工方案是否能够对该视图查询性能有所提升,并解释原因。
2)解释说明李工指出的数据不一致的问题产生的原因。
1)张工方案能够对该视图查询性能有所提升,因为这样做能极大的减少统计分析的数据量,
对小数据量进行统计,性能是能得以保障的
2)由于当日订单数据既存储在订单表中,又存储在单独的当天货物销售、存货情况表中,
统一数据存储了两份,一旦出现修改,未同步修改,则会造成数据不一致。
【问题3】针对李工提出的问题,常见的解决手段有应用程序实现,触发器实现和物化视图实现等,请
用300字以内的文字解释说明这三种方案。
应用程序实现:在进行订单的添加、修改、删除操作时,从应用程序中,控制对两个数据表都进行相关操作,以保障数据的一致性。
触发器实现:在应用程序中,只对订单表进行操作。但写触发器,当订单表发生变化时,把当日订单内容同步更新到当天货物销售、存货情况表中。
物化视图实现:建立“当天货物销售、存货情况”的物化视图,物化视图会把相应的数据物理存储起来,而且在订单表发生变化时,会自动更新。
【问题1】系统需要管理供应商和货物等信息,具体包括供应商姓名、地址以及货物名称、价格等,供应商可以提供0-n种货物,其也可能发生变化。请以供应商关系模式supplier(name,address,product.price)为例,解释不规范的关系模式存在哪些问题。
1)数据冗余:关系模式中多次重复记录了同一供应商的地址。
2)插入异常:如果还未确定一个供应商有哪些货物,只是想添加一个供应商的地址信息,
则会产生产品与价格均为空的记录。
3)修改异常:当修改一个供应商的地址时,需要将多条记录同时更新,若未同时更新,则
数据产生不一致。
4)删除异常:当删除一个供应商的货物时,其地址信息被一并删除。
【问题2】应用开发小组认为张工的规范化设计虽然解决了未规范化关系模式带来的问题,但实际实现功能时会造成系统性能的下降,请解释其原因。
数据库规范化的过程,实际是对数据表的不断拆分,以达到更高的规范程度。这样处理,带来的问题是:系统中大量查询不能通过单表完成,而需要将多表进行连接查询,所以表拆分得越多,查询性能也就越差。
【问题3】请解释逆规范化方法,说明其优缺点。
规范化设计后,数据库设计者希望牺牲部分规范化来提高性能,这种从规范化设计的回退方法称为反规范化技术。
逆规范化方法优点:提高统计、查询效率。
逆规范化方法缺点:增加了数据冗余,浪费存储空间,增、删、改操作的效率降低,可能导致数据不一致,可能产生添加、修改、删除异常。
【问题1】张工方案中采用了读写分离,主中复制策略。其中,读写分离设置物理上不同的主/从服务器,让主服务器负责数据的写操作,从服务器负责数据的读操作,从而有效减少数据并发操作的锁争用,但却带来了数据冗余。因此,需要采用主从复制策略保持数据的一致性。
【问题3】刘工提出的方案采用了key-value数据库+mysql数据库的混合方案,是根据数据的读写特点将数据分别部署到不同的数据库中。但是由于部分数据可能同时存在于两个数据库中,因此存在数据同步问题。请用200字以内的文字简要说明解决该数据同步问题的三种方法。
1)实时同步方案,先查缓存,查不到再从DB查询,并保存到缓存;更新缓存时先更新数
据库,再将缓存设置过程期更新缓存。
2)异步列队方式同步,可采用消息中间件处理
3)通过数据库插件完成数据同步
4)利用触发器进行缓存同步
架构设计
【问题1】请用200字以内的文字解释什么是软件架构风格,并从集成开发环境与用户交互方式、集成开发环境的扩展性、集成开发环境的数据管理三个方面说明为什么最终采用了李工的设计方案。
软件架构风格是指描述特点软件系统组织方式的惯用模式。组织方式描述了系统的组成构件和这些构件的组织方式,惯用模式则反映众多系统共有的结构和语义。
从集成开发环境与用户的交互方式,用户通常采用交互式的方式对脚本语言进行编辑、解释执行与调试。在这种情况下,采用以数据存储为中心的架构风格能够很好地支持交互式数据处理,而管道-过滤器架构风格则对用户的交互式数据处理支持有限。
从集成开发环境的扩展性来看,系统核心需求要求实现各种编辑、语法检查、解释执行等多种功能的灵活组织、配置与替换。在这种情况下,采用以数据存储为中心的架构风格,以数据格式解耦各种功
能之间的依赖关系,并可以灵活打底衣功能之间的逻辑顺序。管理-过滤器架构风格同样以数据格式解耦数据处理过程之间的依赖关系,但其在数据处理逻辑关系的灵活定义方面较差。
从集成开发环境的数据管理来看,集成开发环境需要支持脚本语言、语法树(用于检查语法错误),可视化模型、调试信息等多种数据类型,并需要支持数据格式的转换。以数据存储为中心的架构将数据存储在统一的中心存储器中,中心存储器能够表示多种数据格式,并能够为数据格式转换提供各种支持。管道-过滤器架构风格通常只能支持有限度的数据格式,并且在数据格式转换方面的灵活性较差。
【问题2】在对软件系统架构进行设计时,要对架构需求进行分析,针对特定需求选择最为合适的架构风格,因此实际的软件系统通常会混合多种软件架构风格。请对核心需求进行分析,说明为了满足需求(2)和(3),分别应采用何种架构风格,并概要说明采用相应架构风格后的架构设计过程。
未来满足需求(2),应该采用解释器架构风格。具体来说,需求:为可视化编程元素及其拖拽关系定义某种语言,并描述其语法与语义;编写解释器对该语言进行解释;生成对应的交付语言程序。
为了满足需求(3),应该采用隐士调用架构风格。具体来说,首先需要定义“断点在调试过程中命中”这一事件,并实现当断点命中后的屏幕定位函数,集成开发环境维护一个事件注册表结构,将该事件与屏幕定位函数关联起来形成注册表中的一个记录项。在调试过程中,集成开发环境负责监听各种
事件,当“断点在调试过程中命中”这一事件发生时,集成开发环境查事件注册表,到并调用屏幕定位函数,从而实现脚本语言编辑界面与调试代码的自动定位。
【问题1】分布式数据库缓存指的是在高并发环境下,为了减轻数据库压力和提高系统响应时间,在数据库系统和应用系统之间增加的独立缓存系统。
【问题2】刘工认为李工的方案数据可靠性和一致性的问题,请说明原因。为避免数据可靠性和一致性问题,刘工的方案采用Redis作为数据库缓存,请说明基本的Redis与原有关系数据库的数据同步方案。
Memcache没有持久化功能,所有掉电数据会全部丢失,而且无法直接恢复这存在可靠性问题。
Memcache不支持事务,所以操作过程中可能产生数据的不一致性。
同步方案:
读取数据时,先读取Redis中的数据,如果Redis没有,则从原始数据库中读取时,并同步更新Redis中的数据。写回时,写入到原数据库中,并同步更新至Redis中。
【问题3】请给出Redis分布式存储的2中常见方案和Redis集切片的几种常见方式。Redis分布式存储的常见方案:
1)主从模式(Master/Slave)
2)哨兵模式
3)集模式
Redis集切片的常见方式:
1)客户端分片,即在客户端就通过key和hash值对应到不同的服务器。
2)中间件实现分片。在应用软件和Redis中间,例如:Twemroxy、Coids等,由中间件实
现服务到后台Redis节点的路由分派。
3)客户端服务端协作分片。RedisCluster模式,客户端可采用一致性河西,服务端提供错
误节点的重定向服务slot好,不同的slot对应到不同服务器。
【问题1】请用200字以内的文字描述什么是“响应式web设计”,并列举2个响应式web 设计的实现方式
响应式web设计是指我们设计与开发的页面可以根据用户的行为和不同的设备环境做出相应的响应来调整页面的布局,以提供用户可感知的、流畅的阅读和操作体验。
实现方式:1、流式布局2、弹性布局(如弹性图片)3、媒体查询
【问题3】根据李工的提议,新的B2C商品交易平台引入了主从复制机制。请针对B2C商品交易平台的特点,简要叙述引入该机制的好处。
1、提升性能
交易平台要求高并发,主从复制方式一主多从,不同的用户请求可以从不同的从数据库读取数据,提高并发度。
2、可扩展性更优
如果采用单台数据库服务器,则访问量持续增加时,数据库瓶颈暴露,且无法迅速解决问题,而主从结构可以快速增加从服务器数量,以满足需求。
3、提升可用性
一主多从一台从服务器出现故障不影响整个系统正常工作。
4、相当于负载均衡
一主多从,一台从服务器出现故障不影响整个系统正常工作。
5、提升数据安全性
系统中的数据冗余存放多份,不会因为某台机器硬件故障而导致数据丢失。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。