这篇文章是我去年考架构时总结下来的案例知识点,内容是根据刷题和平时的一些积累所总结的,个人觉得非常具有参考价值,希望各位备考的同学可以在考前一个月打印出来每天早晚复习几条,最主要是加强理解,案例方面主要还是靠平时的积累,考试时即使碰到陌生的题目,也不会太慌乱。

案例解题秘籍:

1.案例题怎么选择,拿到题后,先用3分钟时间看一下这五道题,哪些是你熟悉一些的,哪些知识点不熟悉,对每个题目的每一问逐条做一个估分,如果当前题目拿不了15+,就看下一个,选题主要目标是选中的三个题目分数都有能超过15分的把握。

2.先看问题,带着问题看题干,题干和问题一般是有对应的!先做容易做的。

3.概念题如果答不上来,可以思考,这项技术的提出解决了什么问题要按条目来写,拆条目,以问题和目标为导向,拆成细小的点逐条命中

4.问答题主要从架构师的多个角度来回答,如果不知道怎么答,结合题干的描述,题干中有哪些功能和问题对得上,还有尤其是分值较大的,300字以内的问题,一定要多答两点,不要图简单,问几个问题就回答几个问题。

5.如果一点思路都没有,那么请仔细看题干,有没有线索,一般都会给提示的,所以顺势而为很重要!

6.背诵知识点时,考虑每个技术的以下方面:

    1.系统扩展性如何

    2.可修改性是否便利

    3.管理方面是否容易

    4.性能是否满足

    5.开发成本是否低

    6.可维护性如何

图片

1.架构风格相关问题

什么是架构风格?

软件架构风格类似于建筑风格,从相同类型的软件系统中抽取其架构的共性,是一种惯用模式,反映了众多系统共有的结构和语义

(1)软件架构为软件系统提供了一个结构、行为和属性的高级抽象。

(2)软件架构风格是特定应用领域的惯用模式,架构定义一个词汇表和一组约束

面向对象和解释器的差别是什么?请从性能,灵活性和可扩展性分别描述

折扣规则的可修改性:面向对象是如果修改规则代码,需要重新编译和重启服务,解释器是独立的语法规则,可对变化的规则进行解释,比如只需要修改规则脚本。

个性化折扣定义灵活性:面向对象需要通过组合模式或者策略等设计模式实现该功能,但仍然需要重新编译和重启服务。解释器可以支持灵活自定义功能,不需要重启。

系统性能:面向对象是代码层面的,一次编译后加载到内存运行,效率较高,解释器则需要需要边解释边执行,效率稍差一些。

解释器:灵活性高,扩展能力强,通过自定义规则配套解释器引擎开发,可以做到用户层面的规则完全自定义而不需要修改代码。无论是修改已有业务或者扩展新的业务都较为便利

管道过滤器:灵活性低,扩展能力弱,把数据处理职能做成过滤器,把数据传递做成管道,流程不变化是可以的,一旦流程变化需要重新修改代码。

隐式调用:灵活性一般,扩展能力一般,强调间接方式调用,如果采用事件机制,需要先完成某个动作来触发事件,通过事件与动作关联来提高灵活性,比管道过滤器强,比解释器弱

解释器和管道过滤器哪个更适合应用于集成开发环境的开发中?请从用户交互方式,扩展性方面,数据管理方面分别阐述。

集成开发环境的与用户交互方式:因为集成开发环境中,用户需要对脚本语言进行编辑、解释执行与调试,所以需要较强的交互性,管道过滤器的交互能力支持比较有限,以数据为中心的架构风格能很好的支持用户的交互。

集成开发环境的扩展性方面:因为集成开发环境需要实现各种功能的灵活组合、配置与替换,所以管道过滤器的扩展性方面比较有限,以数据为中心的架构风格因为组件之间的耦合性低,可以灵活的替换组件,可以有更好的扩展性。

集成开发环境的数据管理方面:因为集成开发环境可能会保存编译期间产生的语法树和脚本语言,管道过滤器在数据保存和转换方面支持有限,以数据为中心的架构风格可以以文件的形式存储语法树,并且可以灵活编写转换器来进行格式转换,所以数据管理方面强于管道过滤器。

2.规范化和反规范化:

常见的反规范化方法有哪些?

1.增加冗余列:已有学号列,增加姓名列

2.增加派生冗余列 :把一些价格提前计算好作为字段 

3.重新组表 :把拆分的表根据查询习惯重组

4.对表做分割:把用户表水平分割,上海的放上海,长沙的放长沙

用户查询商品信息应该采用增加冗余列的方式。

反规范化后数据不一致怎么解决?

1.触发器同步

2.应用程序同步

3.物化视图 将视图结果保存在磁盘中

4.批处理同步(文件导入)

反规范化的优点是什么?

连接操作少,检索快,统计快,查询的表变少,检索容易

图片

3.Redis数据同步

redis和mysql的数据同步方案怎么做的?

读数据:

1.查询时先查询缓存,缓存不存在则查询数据库,然后将数据新增到缓存中。

写数据:

2.新增时,先新增数据库,数据库成功后再新增缓存

3.更新和删除时,先更新或者删除数据库中的数据,再删除缓存或者修改缓存的过期时间

要实现Redis和MySQL之间的同步,常见方法有哪些?

1、实时同步方案,先查缓存,查不到再从DB查询,并保存到缓存,更新缓存时先更新数据库,再将缓存设置过期。

2、异步队列方式同步,可采用消息中间件处理

3、通过数据库插件完成数据同步。

4、利用触发器进行缓存同步。

Redis分布式存储的常见方案有哪些?

1、主从模式 (Master/Slave)

2、哨兵模式 (Sentinel)

3、集群模式 (Cluster)

Redis集群切片的常见方式有哪些?

1、客户端分片,即在客户端就通过key的hash值对应到不同的服务器。

2、中间件实现分片。在应用软件和Redis中间,例如: Twemproxy、Codis等,由中间件实现服务到后台Redis节点的路由分派。

3、客户端服务端协作分片。Redis Cluster模式,客户端可采用一致性哈希,服务端提供错误节点的重定向服务slot上。不同的slot对应到不同服务器。

什么是分布式缓存?常见的技术方案有哪些?

分布式缓存是在高并发的环境下,为了减轻数据库压力,提高系统响应事件,在应用和数据库之间增加独立缓存系统,常见的分布式缓存有redis和memcache

4.UML相关

UML状态图和活动图的区别是什么?

状态图主要描述系统在运行时的对象状态与事件的关系基于某个事件后对象的状态

活动图主要是描述系统中的各个对象的工作流程和活动,并且可以是描述并发的情况,常用的活动图比如通信图和泳道图。

两者的区别:状态图侧重于事件执行后对象状态的结果,活动图主要是侧重于行为的动作,活动图可以描述并发,活动图主要是两个对象相互交互的过程。

什么是用例图?用例图中的参与者是什么?用例之间的关系有哪些?用例图中的用例模型和分析模型分别包括哪些步骤?

用例图是静态图,展现了一组用例、参与者以及它们之间的关系。

用例图包括参与者、用例、通信关联三种元素。

用例图中的参与者是人、硬件或其它系统可以扮演的角色。

用例之间的关系有包含、扩展、泛化。

用例图用例模型包括(适合细调):

1.识别参与者; 

2.合并需求获得用例; 

3.细化用例描述; 

4.调整用例模型。

用例图分析模型包括:

1.定义概念类; 

2.识别类之间的关系; 

3.为类添加职责; 

4.建立交互图。

5.RUP中的9个核心工作流是什么?分别做了什么?

业务建模、需求、分析与设计、实现、测试、部署、配置和变更管理、项目管理、环境

业务建模:为目标组织开发一个构想,基于这个构想在用例和对象模型中定义组织过程、角色和责任。

需求:描述系统应该做什么,与开发人员和用户达成共识。

分析与设计:对需求进行需求分析,设计则是设计类、接口、包,诸如生成类图,对类进行分组,构件打包。

实现:主要是进行软件开发的工程,以组件形式实现类与对象,最后成为可执行的系统。

测试:对系统进行功能测试,主要分为功能测试和非功能测试,功能测试又分为白盒测试、黑盒测试等。非功能测试分为性能测试、可用性测试等。

部署:对软件进行打包,并部署在服务器上。

配置与变更管理:控制项目中的产物,追踪软件创建过程中的版本。

项目管理:平衡冲突,管理风险,克服各种约束并确保成功交付。

环境:提供软件开发环境、包括过程和工具。

6.被动攻击

什么是被动攻击?

攻击者不会篡改数据或损害系统,不会影响系统正常运行

重放攻击会破坏系统完整性

拒绝服务攻击会破坏系统可用性

“被攻击主机上有大量等待的TCP连接、

“网络中充斥着大量的无用的数据包,

“源地址为假”、

“高流量无用数据,造成网络拥塞”

可以看出该公司遭受的是DDos攻击(即分布式拒绝服务攻击)。

防范拒绝服务的方法是什么?

及时更新补丁,

限制IP地址访问,

关闭不必要的服务,

缩短SYN的time out时间,

限制syn的连接数目

7.普通 hash 算法和一致性哈希算法对比

普通哈希算法:将服务器IP或者主机名与服务器数量取模

普通 hash 算法的缺陷:当服务器数量发生改变,通过哈希算法算出的缓存位置发生了改变,将导致所有缓存失效,容易造成缓存雪崩,由此诞生一致性哈希算法

1.创建一个2的32次方减一的哈希环

2.将每台服务器均匀分布在哈希环上

3.将服务器IP或者主机名与2的32次方-1取模,然后得出某个值,这个值必定是0-2的32次方-1这个区间

4.通过顺时针方向找到第一个服务器的地址,将请求保存到这个服务器上。

5.为了让服务器均匀分布在哈希环上,可以创建多个虚拟节点,来映射实际的服务器,目的是让数据分布的更均匀。

6.最大的好处是当移除或者新增某一个节点是,顺时针找到相近的节点进行迁移,只会导致被移除节点的部分缓存失效,其他数据的映射关系不变,给数据迁移带来方便。良好的扩展性和容错性

8.Redis数据结构与文件持久化差别在哪儿?

磁盘更新频率:RDB的数据保存时间间隔比较久,所以磁盘更新频率较慢,AOF则是每一条指令对数据的操作都需要保存,默认时间是1秒

数据安全:AOF比RDB更安全。

数据一致性:RDB间隔一段时间存储,可能发生数据丢失和不一致,AOF是通过append模式写文件,即使发生服务器宕机,也可通过redis-check-aof 工具解决数据一致性问题

重启性能:RDB的恢复速度要比AOF快很多,AOF需要逐条恢复数据库操作指令,速度较慢。

数据文件大小:RDB因为保存的是整个数据库的快照,所以数据文件容量比AOF大。

因为该系统是7*24小时不间断服务,且需要在最短时间内重启并恢复服务,所以选择RDB的方式比较合适。

图片

图片

9.redis缓存淘汰机制

所有key中随机淘汰一个key

在过期时间的key中,删除使用频率最少的key

在过期时间的key中,删除即将要过期的key

所有key中,删除最不经常使用的key

随机删除设置了过期时间的key

缓存系统一般以key/value形式存储数据,在系统运维中发现,部分针对缓存的查询,未在缓存系统中找到对应的key,从而引发了大量对数据库服务器的查询请求,最严重时甚至导致了数据库服务器的宕机。

经过运维人员的深入分析,发现存在两种情况:(1)用户请求的key值在系统中不存在时,会查询数据库系统,加大了数据库服务器的压力;(2)系统运行期间,发生了黑客攻击,以大量系统不存在的随机key发起了查询请求,从而导致了数据库服务器的宕机。经讨研究,研发团队决定,当在数据库中也未查找到该key时,在缓存系统中为key设置空值,防止对数据库服务器发起重复查询。

请用100字以内文字说明该设置空值方案存在的问题,并给出解决思路.

存在问题:不在系统中的key值是无限的,如果均设置key值为空,会造成内存资源的极大浪费,引起性能急剧下降。

解决思路:查询缓存之前,对kev值进行过滤,只允许系统中存在的key进行后续操作(例如采用key的bitmap 进行过滤)。

10.企业应用集成有哪几个集成方式?

EAI分为四个集成:

界面集成:把各应用的界面集成起来,形成统一入口,有整体的感觉。

数据集成:应用集成和过程集成的基础,可以提供企业信息共享能力。集成前,对数据进行统一标识和分类,并进行建模,实现企业数据共享和数据分布。

控制集成(应用集成):多个应用系统进行绑定,像一个系统一样输入和产生输出数据,实现多个系统功能的叠加

过程集成(业务流程集成):为实现整体的业务目标,定义、关联管理不同的业务过程,实现信息交换、降低成本,包括过程管理、工程建模和工作流。

不同应用共同访问一个虚拟的数据库,通过全局虚拟数据库管理系统为不同应用提供全局信息服务是什么?是数据联邦

不用应用之间通过适配器来实现互相调用,是基于接口的数据集成

应用之间一对一接口集成的优缺点:

优点:开发速度快,开发比较容易实现

缺点:工作量大,维护费用高,系统升级与扩展困难,没有标准化导致管理困难、只能解决应用系统之间的数据集成问题,难以支持过程集成和应用程序之间的协调。

11.软件架构评估中,软件质量属性有哪些?

1、性能

性能(performance)是指系统的响应能力,即要经过多长时间才能对某个事件做出响应,或者在某段时间内系统所能处理的事件的个数。

2、可靠性

可靠性(reliability)是软件系统在应用或系统错误面前在意外或错误使用的情况下维持软件系统的功能特性的基本能力.

3、可用性

可用性(availability)是系统能够正常运行的时间比例。经常用两次故障之间的时间长度或在出现故障时系统能够恢复正常的速度来表示.

4、安全性

安全性(security)是指系统在向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力。安全性又可划分为机密性、完整性、不可否认性及可控性等特性。

5、可修改性

可修改性(modifiability)是指能够快速地以较高的性能价格比对系统进行变更的能力。通常以某些具体的变更为基准,通过考察这些变更的代价衡量可修改性。

6、易用性

应有十分友好的用户界面,用户乐于使用,工具应能剪裁和定制,以适应特定用户的需要

风险点:系统在架构阶段存在潜在的问题,存在问题的架构决策,将对后续带来的隐患

敏感点:为了是实现某种特定的质量属性,一个或者多个构件所具有的特性

权衡点:影响多个质量属性的特性,是多个质量属性的敏感点

可靠性和可用性的差别

可靠性是指在系统在错误或者异常时,仍然能维持系统正常使用的能力

可用性是指系统能够正常运行的时间比例

常用的架构评估方法有哪些?

问卷调查,基于场景,基于度量

SAAM:最开始只针对可修改性

1.场景开发

2.架构描述

3.单个场景的架构评估

4.多个场景的交互

5总体评估

ATAM:架构权衡分析方法

1:场景与需求收集,通过会议的形式介绍ATAM,多方人员成为评估小组,

2:架构视图和场景实现,对收集到的场景进行实现,产生架构视图

3:属性模型构造,生成质量效应树

4:对架构进行评价与折中

ATAM被分为九个步骤,分别是:

描述和介绍阶段

1、描述ATAM方法

2、描述业务动机

3、描述体系结构

调查和分析阶段

4、确定体系结构方法

5、生成质量属性效用

6、分析体系结构方法

测试阶段

7、讨论和分级场景

8、分析体系结构方法

9、描述评估结果

12.软件产品线相关

软件产品线最主要的思想是对现有产品的复用,从类和对象的复用到构件的复用,再到架构的复用,最后是产品线的复用。

问题1:基于对产品线开发的认识的不同以及开发组织背景的不同,有很多组织结构方式。请简述在SEI推荐的组织结构中所包括的4个工作小组。

市场人员 :是产品线和产品能力、客户需求之间的沟通桥梁。

核心资源组:负责架构和其他核心资源的开发。

应用组 :负责交付客户系统开发。

管理组 :负责开发过程的协调、商务计划。

问题2:软件产品线的建立有四种方式,请指出这四种方式,并以用200字以内文字简要评价

  1. 将现有产品演化为产品线:对现有产品系统进行演化,使产品线方法的实施风险降到最低,但完成产品线的核心资源的总周期比革命方式要大。

2.用软件产品线替代现有产品:开发一个不受现有产品集存在问题的限制的全新平台,总投资和周期较演化少,但重要需求的变化导致初始投资报废的风险大。

3.全新产品线的演化:前期风险小,投入小,第一个产品面世时间早。

4.全新产品线进行开发

优点:一旦核心资源完成后,新的产品线开发速度很快,总成本降低。

缺点:对新领域很难做到全面和准确

图片

问题3:请用150字以内文字,说明成功实施产品线的主要因素

在领域具备长期深厚的经验

已经形成了好的构件库

良好的产品架构

能够对人员组织、过程文档和软件资源有很好的管理

13.DSSA特定领域软件架构

目标是支持一个特定领域中多个应用的生成,低代码平台,像CRM就是二次开发

DSSA的特性有哪些?

1.严格定义的问题域和解决域,不可越界

2.具有普适性,产生架构必须适用于烟草行业的的系统或者子系统

3.对整个领域进行适度的抽象。

4.架构在该领域中需具备可重用的元素

DSSA的创建步骤:

1.定义领域范围,输出通用风控系统的用户需求。

2.定义领域数字字典:主要是编辑风控系统的数据字典

3.定义设计和是需求约:定义架构的设计方法,并设定一些必须的约束

4.产生特定领域架构:产生架构,通过文档说明模块和构件的语法和语义

5.产生、搜集可重用的构件:为DSSA增加可复用的构件,用来产生问题域中的新应用,也就是通过产生的构件对特定领域的问题进行模板化的应用开发

图片

14.解决SQL注入有哪几种方式?

1.正则表达式

2.参数化的过滤语句

3.检查用户的输入合法化

4.数据加密处理

5.存储过程

6.漏洞扫描工具

7.web防火墙

SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程字的程序员也越来越多。但是由于程序员的水平及经验也参差不文,相当大的一部分程席员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。

用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Iniection,即SQL注入。SQL注入攻击属于数据库安全攻击手段之一,可以通过数据库安全防护技术实现有效防护,数据库安全防护技术包括: 

数据库漏扫、数据库加密、数据库防火墙、数据脱敏、数据库安全审计系统。

为了抵御SQL注入攻击,可以采用如下方式: 使用正则表达式、使用参数化的过滤性语句、检查用户输入的合法性、用户相关数据加密处理、存储过程来执行所有的查询、使用专业的漏洞扫描工具等.

15.WEB分层架构总结:

MVC架构中包含哪三种元素,它们的作用分别是什么?

视图:指的用户交互的界面,主要用来显示数据和接收用户的输入。

模型:指的应用程序的主体部分,将系统中的交互元素进行抽象化,生成对象和类,通常是实体类。

控制器:指的是控制层,主要是接收用户的输入并调用不同的业务类,完成用户的需求,也可以是控制类

EJB中的Bean分三种类型分别是哪三种? 

Session Bean、Entity Bean 和 Message-Driven Bean。

Session Bean的职责是: 维护一个短暂的会话

Entity Bean 的职责是: 维护一行持久稳固的数据

Message-Driven Bean的职责是: 异步接受消息

响应式WEB设计是指:页面可以根据不同的设备进行动态调整,提供用户流畅的阅读和操作体验。

实现方式:流式布局,弹性布局、媒体布局

主从复制的优势有哪些?

1、提升性能交易平台要求高并发,主从复制方式一主多从,不同的用户请求可以从不同的从数据库读取数据,提高并发度。

2、可扩展性更优,如果采用单台数据库服务器,则访问量持续增加时,数据库瓶颈暴露,且无法迅速解决问题。而主从结构可以快速增加从服务器数量以满足需求。

3、提升可用性

一主多从,一台从服务器出现故障不影响整个系统正常工作。

4、相当于负载均衡

主多从分担任务,相当于负载均衡。

5、提升数据安全性

系统中的数据冗余存放多份,不会因为某台机器硬件故障而导致数据丢失。

数据库程序在线访问的优缺点有哪些?

数据库程序在线访问方式优点:

1、性能比ORM好。

2、可以处理复杂查询语句。

数据库程序在线访问方式缺点:

1、要求程序员懂SQL语句。

2、修改与维护相对困难。

ORM优点:

1、使用ORM可以大大降低学习和开发成本

2、程序员不用再写SQL来进行数据库操作

3、减少程序的代码量。

4、降低由于SQL代码质量差而带来的影影响.

ORM缺点:

1、不太容易处理复杂查询语句.

2、性能较直接用SQL差。本题中的场景之所以选择ORM,主要考虑的是程序员缺乏数据库开发经验,这样SQL语句质量有很大风险。同时学习成本很高。此夕应用简单,不用担心ORM对性能的影影响。

增加数据访问层的原因是什麽?

(1)由于涉及多种异构数据库平台,数据访问复杂性增加,不宜与业务逻辑混合在一起

(2)数据管理变复杂之后,需要使用的代码量增加,分单独层次有利于让逻辑更清晰。

(3)业务逻辑应以相同的方式应对异构的数据库,此时需要单独的数据访问层屏蔽差异性.1)执行业务逻辑业务组件/务构件2)数据访问接口层/DAL接口3) 工厂层/DAL工厂/数据访问工厂

16.遗留系统问题

在进行遗留系统处理时,首先要对遗留系统进行评价,请简述对遗留系统的三个方面的评价。

1、业务价值评价

在多数情况下,重要业务流程的改变意味着遗留系统现在仅仅具有外围价值,修业务价值评价的目标是判断遗留系统对企业的重要性改这种系统只需花费少许财力和物力。在其他情况下,系统的业务价值很大,需要继续运行与维护。

2、外部环境评价

系统的外部技术环境是指硬件、支撑软件和企业IT基础设施的统一体。

(1)硬件。硬件评价也可以采用概要级和详细级。概要评价把遗留系统作为一个整体,提供硬件质量估算,详细评价包括识别系统中

的每个部件。

(2)支撑软件。一般来说,支撑软件是依赖于某个硬件的,应用软件依赖于系统软件。在评价过程中,必须考虑这种依赖性.(3)企业T基础设施。在评价中必须考以下问题: 企业和使用者的类型、开发组织的技术成熟度、企业的培训过程、系统支持人员的技术水平、企业是否愿意改变等。

3、应用软件评价

应用软件评价可以分为系统级和部件级。系统级评价把整个系统看作是不可分的原子,评价时不考虑系统的任何部分:部件级评价关注系统的每个子系统,考虑每个子系统的特征,包括复杂性、数据、文档、外部依赖性、合法性、维护记录、大小和安全性等指标。

转换的策略通常有哪些?分别是什么?

有直接转化策略、并行转换策略和分段转换三种。 

1、直接转化策略,直接转换是在原有系统停止运行的某一时刻,新系统立即投入运行,中间没有过渡阶段。采用这种方式时,人力和费用最省,适用于系统不太复杂或现有系统完全不能使用的场合。但是这种方式风险高。

2、并行转换策略,并行转换就是新系统和旧系统并行工作一段时间,经过这段时间的试运行后,再用新系统正式替换现有系统。这种方式的好处就是风险很小。在转换期间还可以同时比较新旧两套系统的性能,而且能够让操作人员得到全面的培训。所以对于一些较大的信息系统,或者处理过程比较复杂,数据比较重要的系统。并行转换是一种最常用的转换方式。那么这种转换方式也有缺点,缺点就在于两套系统并行期间。要有两套人马,或者两套处理方式同时并存,在人力和费用消耗比较大,转换的周期比较长,而且难以控制新日系统当中数据的变化。所以这就要求要做好转换计划,并且要加强管理。

3、分段转换,这是直接转换和并行转换的结合,也就是分期分批、逐步转换。一般比较大的系统可以采用这种方式比较合适,风险适中,他能够保证软件平稳运行,费用也不太高,就是将大的系统分成多个子系统,每成熟一个子系统就切换一个子系统,主要是分期分批。这种分段转换的策略,它的优点就是成熟一个子系统就转换一个子系统。这种新旧转换,动比较小,用户比较容易接受。但是由于采取的是渐进的方式,会导致新1日系统的转换周期比较长。

风险最小的是并行转换

17.Web应用设计

Web应用设计的本质目的是为了解决软件系统的复杂性,所以我们在进行web设计时,首先要分析系统的复杂性,然后再进行设计。为了选择最终方案,请从性能和可用性这两个方面分别对李工和王工的方案进行比较(分一般,较强两个等级)

  1. 李工方案:因为是web集群提供统一服务,属于粗颗粒度,服务间虽然没有进行通讯,但多个服务同时访问同一个数据库,再扩充下去,数据库将成为性能瓶颈。

2.王工方案:王工进行了垂直拆分,每个服务单独访问数据库,所以应用访问数据的性能较强,但增加了服务间的通信成本,所以应用间访问性能一般。

可用性方面:单数据库可用性一般,如果出现问题将导致应用不可用,多个数据库方案可用性较好,及时中间某一个出问题也不会影响整体服务。

李工的方案采用了web服务器集群的方式,这种方式其中有个问题就是集群模式的问题,一般有三种解决方案,分别是NAT(网络地址转换模式、IP Tunnel (IP隧道)模式、DR模式。请分别简单描述这三种解决方案

Linux virtual server,是一个基于集群技术和Linux操作系统,目的是实现一个高性能、高可用的服务器,主要工作在网络层,LVS属于4层负载均衡

LVS实现负载均衡的技术一般来进有这三种,即VS/NAT、VS/TUN和VS/DR.

1、NAT:负载均衡器接收用户的请求,转发给具体服务器,服务器处理完请求返回给均衡器,均衡器再重新返回给用户

2、DR:负载均衡器接收用户的请求,转发给具体服务器,服务器处理完请求后直接返回给用户,但无需IP Tunneling协议,跨平台性好,大部分系统都可以支持。

3、TUN:负载均衡器接收用户的请求,转发给具体服务器,服务器处理完请求后直接返回给用户,需要系统支持IP Tunneling协议,难以跨平台

李工和王工的方案都存在session的问题,请至少给出三种解决方案,并分析原因

1.将session存入redis,通过无状态服务的方式

2.将session复制到多个集群中

3.将session存在数据库中

4.将session存在cookie中

三种层次架构的差别是什么?

1.MVC

MVC是一种架构思想,全称Model-View-Controller,即模型-视图-控制器,MVC是后端的开发思想,将数据从后端经过控制器层转向前端视图展示

View: 视图层 ui界面

Model: 模型 数据

Controller: 控制器 接受并处理用户请求通知Model改变,并将Model返回给View

优点:

(1)耦合性低: 视图层和业务层分离,这样允许更改视图层代码而不用重新编译模型和控制器代码,改变其中一个不会影响到其他两个,所以这种设计思想有良好的松耦合的构件

(2)重用性高: MVC模式允许各种不同样式的视图来访问同一个服务的代码,因为多个视图能共享要给模型数据

(3)生命周期成本低: MVC使开发和维护用户接口的技术含量降低

(4)部署快: 使用MVC模式开发时间相当大的缩减,,它使程序员集中精力在业务逻辑上,视图与业务逻辑分开。

(5)可维护性高:分离视图层和业务层逻辑也是WEB应用更易于维护和修改

6)有利于软件工程化管理:由于不同的层各司其职,每一层不同的应用具有某些特性有利于通过工程化、工程化管理程序代码,可以使用控制器来连接不同的模型和视图去完成客户的需求.控制器可以根据用户需求选择模型进行处理,然后选择视图处理结果显示给用户

2. MVP

MVP则在MVC基础上,限定了通信方式,即Model和View之间不直接通信,都通过Presenter通信,这个Presenter和MVC中的Controller一脉相承,代表应用中的逻辑层。Presenter负责项目中的逻辑,并且直接与View和Model通信,操作数据更新更新后手动同步到View上。

优势:

1、模型与视图完全分离,我们可以修改视图而不影响模型

2、可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部

3、我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁。

4、如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)

图片

3.MVVM

MVVM 是Mode-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自动传递给 View,即所谓的数据双向绑定

Vuejs 是一个提供了 MVVM 风格的双向数据绑定的 Javascript 库,专注于View 层。它的核心是 MVVM 中的 VM,也就是 ViewModel。ViewModel负责连接 View 和 Model,保证视图和数据的一致性,这种轻量级的架构让前端开发更加高效、便捷。

Model: 数据模型,存放用于展示的数据

View: 视图,用于界面,在前端我们可以理解为Dom操作

ViewModel: 视图模型,可实现数据的双向绑定,接View和Model的桥梁,当数据变化时,ViewModel够监听到数据的变化 (通过Data Bindings) ,自动更新视图,而当用户操作视图,ViewModel也能监听到视图的变化 (通过DOM Listeners) ,然后通知数据做改动,这就实现了数据的双向绑定

18.私有云相关

什么是私有云?私有云的优势有哪些?

私有云是为一个客户而单独构建的云平台,对数据的安全性,服务质量最有保障,可以部署在企业的防火墙内部,私有云的核心属性是专用资源

saas:软件即服务,利用b/s架构,将企业的应用和数据都置于云服务器上。

pass:平台即服务,提供一个平台,并整合了部分中间件。供企业使用。

iaas:基础设施即服务,比如阿里云,就是只提供一个基础的环境,需要安装各类软件。

云平台和普通服务器相比有哪些优势?

可用性方面:私有云依托集群的部署方式,当一台机器故障时,其他机器可以替代,不影响业务,而传统服务则可能因为故障而导致系统瘫痪。

可扩展性方面:私有云可以利用云平台的优势,利用弹性扩容机制,通过配置给与更多的资源;而传统服务器则需要升级,成本高,且需要变更。

19.面向对象建模

OOA的建模有哪两个模型?

用例建模和分析建模

OOA的5个基本步骤是什么?

确定对象和类

确定架构

确定主题

确定属性

确定方法

OOD中,类可以分为,边界类,实体类,控制类

信息工程方法中的“实体 (entity)”与面向对象方法中的“类 (class)”之间有哪些不同之处?

实体用于数据建模,而类用于面向对象建模。实体只有属性,而类有属性和操作.

在面向对象方法中通常采用用例(Use Case) 来捕获系统的功能需求。用例可以按照不同的层次来进行划分,其中的Essential Use Cases和Real Use Cases有哪些区分?请用100字以内文字解释说明上述两个问题:

Essential Use Cases 可翻译为抽象用例,Real Use Cases 可翻译为基础用例。它们是区别在于:

Essential Use Cases 用于分析阶段,Real Use Cases 用于设计阶段。Essential Use Cases 描述用例的本质属性,它与如何实现这个用例无关,独立于实现该用例的软硬件技术,Real Use Cases 描述的是用例的实现方式,表达了设计和实现该用例时所采用的方法和技术。

类之间的六种关系有哪些?

  1. 继承关系(extends)

2.实现关系(interface)

实现:类B实现接口A(可以是多个),那么类B和接口A的关系就是实现关系。

3.依赖关系

依赖:依赖关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。

4.关联关系

关联:是对象之间的拥有关系,即“has a”关系。如果B类中某个成员变量的类型是A类(接口), 称B关联于A。

UML图表示:带箭头的实线,箭头指向被关联类,实线起始端是关联类。

5.聚合关系

聚合:表示类A和类B之间是整体与部分的关系,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。通常在定义一个整体类后,再分析这个整体类的组成结构,从而找出一些成员类该整体类和成员类之间就形成了聚合关系。

聚合:两个对象之间是整体和部分的弱关系,整体和部分可以分开

UML图表示:带空心菱形的有箭头的实线,空心菱形指向整体类,箭头指向成员类。

6.组合关系

组合:也表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在,部分对象与整体对象之间具有同生共死的关系。成员类是整体类的一部分,且整体类可以控制成员类的生命周期,即成员类的存在依赖于整体类。

在面向对象系统中,类之间的整体与部分关系可分为: 聚合关系和组合关系两种类型

(1)聚合关系。其含义是"部分"可能同时属于多个“整体”,“部分"与“整体”的生命周期可以不相同。例如,汽车和车轮就是聚合关系,车子坏了,车轮还可以用;车轮坏了,可以再换一个。

(2)组合关系。与聚合关系的区别在于,组合关系中的“部分"只能属于一个“整体”,“部分"与“整体”的生命周期相同,“部分”随着“整体”的创建而创建,也随着“整体”的消亡而消亡。例如,一个公司包含多个部门,它们之间的关系就是组合关系。公司一旦倒闭,也就无所谓部门了。

UML图表示:带实心菱形的有箭头实线,实心菱形为整体,箭头指向部分。

20.数据流图和数据字典在需求分析阶段和设计阶段的作用分别是什么?

1.数据流图

描述数据处理过程的工具,从数据传递和加工的角度,以图形的方式刻画数据流从输入到输出的移动变换过程。

数据流在分析阶段的作用是建立系统的功能模型

在设计阶段的作用是为模块划分与模块之间接口设计提供依据。

2.数据字典

对于数据流图中出现的所以被命名的图形元素在数据字典中作为一个词条加以定义,使得每一个图形元素的名字都有一个确切的解释。数据字典是所有人员工作的依据,统一的标准。它可以确保数据在系统中的完整性和一致性。

3.分层细化的数据平衡原则:

首先要考虑分层数据流图中的数据平衡原则,父类和子类之间的数据流必须保持一致,包括数量和内容上一致,或者上(下)层输出等于上 (下)层的输出。然后要考虑每张数据流图的数据平衡原则。加工的输入数据流和输出数据流要平衡,保证加工的输出数据流都有对应的输入和输出数据流。避免三种常见错误:黑洞: 只进不出。奇迹:只出不进。灰洞:加工不出输出流。

1、子图与父图之间的平衡:

(1)父图与子图之间平衡是指任何一张DFD子图边界上的输入/输出数据流必须与其父图对应加工的输入/输出数据流保持一致

(2)如果父图中某个加工的一条数据流对应于子图中的几条数据流,而子图中组成这些数据流的数据项全体正好等于父图中的这条数据流,那么它们仍然是平衡的。

2、子图内部: 加工的输入和输出需要平衡。

3、需要从数据表和加工之间来查找缺失的数据流,一般是加工-加工,加工-文件,实在不行就倒着读一下。

数据流图包含哪4种元素,请简要说明4种元素的内容。

DFD主要包括数据流、加工、存储和实体这四个元素

数据流:指的是通过箭头的形式描述数据的流向,箭头标注的内容可以是信息说明。

加工:指的是数据流入后对数据的处理和转换。

存储:是指数据以表或者文件的形式存储数据。

实体:指的是数据流向的终点,描述数据的提供者或者使用者

21.实时同步方案和异步准实时方案的差别:

实时方案与异步准实时更新方案的区别在于实时方案需要同时更新缓存数据,而异步准实时更新方案则是先生成日志再逐步完成更新,但是实时同步方案最大的问题在于同步并发时的性能不可控。而题目中对性能有严格要求,要求1s内完成。所以应该选择异步准实时更新方案

22.哈希算法和一致性哈希的差别

哈希算法也叫散列算法,简单一句话概括,就是可以把任意长度的输入信息通过算法变换成固定长度的输出信息,输出信息也就是哈希值。主要特点: 1、不可逆。从哈希值不能推导出原始数据,所以Hash算法广泛应用王现代密码体系中。2、双率高。在处理比较大的原生值时,也能快速的计算出哈希值。3、无规律。原始输入信息修改一点信息,得到的哈希值也是大不相同的。

一致性哈希算法将整个哈希值组织成为一个抽象圆环,称之为哈希环。哈希函数的输出值一般在0到INT MAX(通常为1-232)之间,这些输出可以均匀地映射到哈希环上,相比普通的哈希分片,一致性哈希在处理分片中添加或删除节点时,可以有效避免大量数据的迁移。

23.布隆过滤器

布隆过滤器(Bloom Filter) 是由布隆(Burton Howard Bloom) 在1970年提出的。它实际上是由一个很长的二进制向量和一系列随机映射函数组成,布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难,但是没有识别错误的情形。直观的说,bloom算法类似一个hash set,用来判断某个元素 (key) 是否在某个集合中。和一般的hash set不同的是这个算法无需存储key的值,对于每个key,只需要k个比特位,每个存储一个标志,用来判断key是否在集合中

图片

布隆过滤器如果查不到,那么数据库一定没有,布隆过滤器如果能查到,那么数据库不一定有

24.面向对象三大模型

采用面向对象方法开发软件,通常需要建立对象模型、动态模型和功能模型,请分别介绍这3种模型,并详细说明它们之间的关联关系,针对上述模型,说明哪些模型可用于软件的需求分析?

1.三种模型简介

对象模型:对象模型是静态的,描述系统的数据结构,描述了系统中的一些实体,对象之间的关系、属性和操作。通常用类图和对象图来表示。

动态模型:动态模型主要强调对象之间是如何交互的,主要用户描述系统的控制结构,比较常用的有UML中的协作图,状态图和顺序图以及通信图这类。

功能模型:功能模型主要是描述系统的功能,通常用数据流图表示,主要是描述系统做什么

2. 综上,对象模型、动态模型和功能模型都可用于需求分析阶段。

用面向对象方法进行软件系统的分析与设计时,一项重要的工作是建立分析类图和设计类图,它们两者的差异是什么?什么是边界类、实体类和控制类?什么是接口对象、实体对象和控制对象?

分析类图从业务领域获取信息的,在描述上更多的使用了业务领域的语言和词汇。

设计类是从编程实现的角度来设计类图的,更多的考虑类编码的实现

边界类:一种用于对系统外部环境与内部运作之间的交互进行建模的类。接口对象是用来表示用户与系统之间交互方式的对象类型。如窗口、通信协议、打印机接口等。

实体类:用于对必须存储的信息和相关行为进行建模的类。实体对象是用来表示业务域的事实数据并需要持久化存储的对象类型。如事件、人员等。

控制类:对一个或几个用例所特有的控制行为进行建模的类。控制对象是用来表示业务系统中应用逻辑和业务规则的对象类型。通常控制其它对象。

25.TCP和UDP的差异:

该系统应采用TCP协议,这样才能保障用户终端和服务端之间的双向可靠通信。

TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP之所以可靠,是因为建立连接时有3次握手,通信时有回应机制,所以丢了包,能重传以保障通信可靠性。

UDP是一种面向无连接的传输层通信协议,丢了包不会重传,所以不能保障通信可靠性.

26.MQTT和AMQP:

MQTT协议是什么?

MQTT(消息队列遥测传输)是一个基于发布订阅模式的消息协议。它工作在 TCP/P协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布订阅型消息协议。MQTT协议是轻量、简单、开放和易于实现的。

AMQP协议是什么?

AMQP是一种消息队列协议,它定义了消息的格式和如何通过中间件传输消息,以及如何处理消息的路由和确认

AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。

AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。

27.仓库风格与管道过滤器

在管道-过滤器风格的软件体系结构中,每个构件都有一组输入和输出,数据输入构件,经过内部处理,然后产生数据输出。因此,这里的构件被称为过滤器,这种风格的连接件就像是数据流传输的管道,将一个过滤器的输出传到另一过滤器的输入。

在仓库(repository)风格中,有两种不同的构件:中央数据结构说明当前状态,独立构件在中央数据存储上执行。一方面,若构件控制共享数据,则仓库是一传统型数据库;另一方面,若中央数据结构的当前状态触发进程执行的选择,则仓库是一黑板系统。

通过交互方式,数据结构、控制结构和扩展方法分别对仓库风格和管道过滤器风格进行对比,如下所示:

交互方式,管道-过滤器很明显是顺序结构或循环结构,数据在管道中进行传递。而仓库结构是数据在中心位置所有的处理均是中心结点与周边结点之间的交互,从形态来看,是星型的。

数据结构:从数据结构来看,仓库风格会使用一个文件将数据保存起来,所有的操作围绕这个文件进行。而管道.过滤器则是在过滤器之间传递数据流。

控制结构:从控制结构来说仓库风格是业务功能驱动,而管道-过滤器是由数据流驱动的。

扩展方法:从扩展方法来进,管道-过滤器是通过过滤器提供标准接口与其它过滤器对接,而数据仓库风格,要共享数据,扩展功能,只要功能的操作与数据模型本身是匹配的就行了,就像我们要共享一个数据库做系统集成,此时共享同一数据库的多个应用系统所用的数据模型一定会是一致的,否则无法去共享。

个人理解:

第一个方面: 传统型数据库这个好理解吧,也就是经常使用的这种数据库,比如oracle,mysql等等数据库,所有的增删改查都是通过对数据库的访问来进行操作的。

然后另一个方面: 黑板系统由三个部分组成:黑板部分,知识源部分,控制部分。打个简单的比方:

黑板就类似于一个数据结构,这个数据结构可以记录一些状态,一般是固定的几个可以变化的状态控制部分就类似于一个监控器,监控这个数据结构的状态变化,比如监控到数据结构从0变为1了而知识源就是用来处理这个数据结构的一些操作,当数据结构有状态变化时,就会触发进行相应的处理。

28.SOA面向服务的架构总结:

什么是SOA架构,ESB在SOA中有什么作用?

SOA是面向服务架构、粗粒度、低耦合、以服务的形式进行业务处理

SOA是一种架构思想,是将系统中不同的单元通过接口和契约联系起来接口采用中立的方式定义,并独立于操作系统和硬件平台,具备提供对外服务的能力。

ESB在SOA中充当了企业服务总线的角色,屏蔽异构系统对外提供各种不同的接口,以此来达到服务间高效的互联互通

ESB主要功能:对服务请求者和消费者解耦,具备消息格式转换,消息协议转换、消息路由,服务管理、服务寻址等功能。

SOA架构图:

图片

针对银行信息系统的数据交互安全性需求,列举3种可实现信息系统安全保障的措施。

1、引入https协议或采用加密技术对数据先加密再传输

2、采用信息摘要技术对重要信息进行完整性验证

3、防火墙系统

4、安全检测

5、网络扫描

身份认证、访问控制、数据加密、数字证书

SOA的关键技术有哪些?

1.UDDI(统一描述、发现和集成):

提供了一种服务发布、定位和查找的方法,是服务的信息注册规范,定义了一种变成接口,企业可以发布自己的服务,查询特定的服务描述信息,并动态绑定到该服务上。

包含:数据模型、API、注册服务

UDDI注册服务是SOA的基础设施,对应着服务注册中心的角色。

UDDI 是一种目录服务,企业可以使用它对 Web services 进行注册和搜索

2.WSDL(web服务描述语言)

对服务描述的语言,一套基于XML的语法定义,包含服务实现定义和接口定义。

3.SOAP(简单对象访问协议)

定义服务请求者和服务提供者之间的消息传输规范。采用XML格式化消息。

通过SOAP,应用程序可以在网络进行数据交换和远程过程调用(RPC)

4.REST(表述性状态转移)网络中所有的事物都被抽象成资源,使用HTTP中的POST、PUT、GET、DELETE获取资源,操作无状态

5.BPEL

BPEL是Business Process Execution Language的缩写,意为业务过程执行语言,是一种基于XML的,用来描写业务过程的编程语言,被描写的业务过程的每个单一步骤则由Web服务来实现

SOA的实现方法:ESB和WebService

29.非功能性需求:

操作性需求 (Operational Requirements): 指系统完成任务所需的操作环境要求及如何满足系统将来可能的需求变更的要求。

性能需求(Performance Requirements) : 针对系统性能要求的指标。常见的包括: 响应时间、吞吐率

安全性需求 (Security Requirements): 防止系统崩溃和保证数据安全所需要采取的保护措施或预防措施。

文化需求 (Cultural Requirements) : 使用本系统的不同用户群体对系统提出的特有要求

这些需求进一步可拆分为:

操作性需求包括: 技术环境需求、系统集成需求、可移植性需求、维护性需求

性能需求包括:速度需求、容量需求、可靠性需求

安全性需求包括: 系统价值需求、访问控制需求、加密/认证需求、病毒控制需求

文化需求包括:多语言需求、个性化定制需求、规范性描述需求、法律需求

30.大数据技术总结:

大数据有哪两种架构:lamdba和kappa

lamdba架构有哪三层?

批处理层(Batch Layer):处理离线数据,两个核心功能:存储数据集和生成 Batch View。

加速层(Speed Layer):处理最近的增量数据流,不断更新real-time view

服务层(Serving Layer):用于响应用户的查询请求,用于合并批处理层和加速层的数据集到最终数据集

Speed Layer处理中引入的错误,在Batch Layer重新计算时都可以得到修正。

这一点也可以看成是CAP理论中的最终一致性 (Eventual Consistency) 的体现。

Lambda架构优缺点

(1)容错性好。Lambda 架构为大数据系统提供了更友好的容错能力,一旦发生错误,我们可以修复算法或从头开始重新计算视图。

(2)查询灵活度高。批处理层允许针对任何数据进行临时查询。

(3)易伸缩。所有的批处理层、加速层和服务层都很容易扩展。因为它们都是完全分布式的系统,我们可以通过增加新机器来轻松地扩大规模

(4)易扩展。添加视图是容易的,只是给主数据集添加几个新的函数

Kappa架构(流式)

Kappa架构的原理就是: 在Lambda的基础上进行了优化,删除了 Batch Layer 的架构,将数据通道以消息队列进行替代。因此对于Kappa架构来说,依旧以流处理为主,但是数据却在数据湖层面进行了存储,当需要进行离线分析或者再次计算的时候,则将数据湖的数据再次经过消息队列重播一次则可。

必要时才进行全量计算

从使用场景上来看, Kappa架构与Lambda相比,主要有两点区别:

(1)Kappa不是Lambda 的替代架构,而是其简化版本, Kappa放弃了对批处理的支持,更擅长业务本身为增量数据写入场景的分析需求,例如各种时序数据场景,天然存在时间窗口的概念,流式计算直接满足其实时计算和历史补偿任务需求;

(2)Lambda直接支持批处理,因此更适合对历史数据分析查询的场景,比如数据分析师需要按任意条件组合对历史数据进行探索性的分析,并且有一定的实时性需求,期望尽快得到分析结果,批处理可以更直接高效地满足这些需求

图片

31.Serverless

对于Serverless,我们可以把它理解为一种架构,一种理念,甚至是一种思想.

Serverless的核心目的,就是在云计算的基础上,再向前迈进一步,彻底“包揽”所有的环境工作,直接提供计算服务.

在Serverless架构下,开发者只需编写代码并上传,云平台就会自动准备好相应的计算资源,完成运算并输出结果,从而大幅简化开发运维过程。

换句话说,用户完全不用关心厨房,你把食材提供给Serverless平台,它负责把菜炒好就这么简单。

Serverless的特点

Serverless是云计算的进一步延伸,所以,它继承了云计算的最大特点-按需弹性伸缩、按需付费。

现在的互联网服务,基本上都是采用微服务架构。也就是把一整套服务,拆分为多个细分服务,由不同的服务器完成运算。Serverless的特点是,这个服务足够“细小”,变成了“函数级”的颗粒度。

从层级上来看,Serverless在传统云计算SaaS的Application(应用)层级之上,又加了一层——function(函数)。它的颗粒度更细,可以更灵活地满足用户的算力需求。

图片

Serverless架构是采用FaaS(函数即服务)和BaaS(后端服务)服务来解决问题的一种设计。

FaaS就是Function as a service(函数即服务)。每一个函数都是一个服务,函数可以由任何语言编写,直接托管在云平台,以服务形式运行,通过事件触发。

BaaS则是Backend as a service(后端即服务)。云平台提供的后端组件整合,开发者无需开发和维护后端服务,通过API/SDK的调用,便可获得例如数据存储、消息推送、账号管理等能力。

Serverless架构的最大优势,显然就是帮助用户彻底摆脱了基础设施管理这样的“杂事”,更加专注于业务开发,从而提升了效率,降低了开发和运营成本

32.MDA总结

什么是MDA?

主要是基于模型驱动架构进行开发,从PIM平台无关模型转成PSM平台相关模型,再转换成代码。中间是变换工具

可移植性方面:MDA是一个跨平台的规范,可以支持一个PIM转换到多个PSM,是先从平台无关模型转换到平台相关模型,移植的话只需要从当前平台移植到目标平台即可,所以可移植性较好。

平台互操作性方面:MDA是基于模型驱动的,标准化程度较高,平台互操作性较好。

文档和程序方面:因为MDA是通过模型的方式生成代码和文档,所以代码质量不会出现参差不齐的情况,代码风格是一致的。

图片

33.需求分析总结

需求分析主要是用来分析系统主要做什么,提炼、分析、认真审查获取到的需求,确保所有项目干系人明白其中的含义,同时找出错误、遗漏或者不足的地方。

需求分析的7个方面包括:

1.建立系统边界

2.创建用户界面原型

3.创建数据流图

4.创建数据字典

5.确定需求的优先级

6.分析系统的可行性

7.使用QFD(Quality Function Deployment,质量功能展开,用户基本,期望需求,兴奋需求

34.云原生架构的设计原则是什么?

设计原则:

服务化原则:使用微服务架构进行系统开发

弹性原则:可以根据业务自动伸缩或者扩容

韧性原则:面对异常的抵抗能力。

自动化原则:通过自动化运维工具进行部署

可观测原则:通过日志、链路追踪和度量

零信任原则:默认不信任内部或者外部的任何人/系统/设备

架构持续演进原则:业务高速迭代的情况下架构与业务的平衡。

云原生架构模式:

1、服务化架构模式:典型代表 微服务,服务拆分使维护压力大增。

2、Mesh化架构模式: 把中间件框架 (RPC、缓存、异步消息) 从业务进程中分离,由Mesh进程完成。

3、Serverless模式:非常适合于事件驱动的数据计算任务

4、存储计算分离模式:各类暂态数据 (如session) 用云服务保存。

5、分布式事务模式:解决微服务模式中多数据源事务问题。

6、可观测架构:包括Logging、Tracing、Metrics三个方面。

7、事件驱动架构:本质上是一种应用/组件间的集成架构模式

云原生架构反模式

1、庞大的单体应用

需要多人开发的业务模块,考虑通过服务化进行拆分,并让组织与架构匹配

2、单体应用“硬拆”为微服务 (服务拆分要适度)

小规模软件的服务拆分 (为拆而拆)、数据依赖(服务间数据依赖)、性能降低

3、缺乏自动化能力的微服务

手动维护大量微服务是不现实的

35.负载均衡算法主要有哪些?

静态算法是不考虑服务器动态负载的算法,包括:

(1)轮转算法: 轮流将服务请求 (任务) 调度给不同的节点(即: 服务器)

(2)加权轮转算法: 考虑不同节点处理能力的差异。

(3)源地址哈希散列算法:根据请求的源IP地址,作为散列键从静态分配的散列表找出对应的节点.

(4)目标地址哈希散列算法: 根据请求目标IP做散列找出对应节点。

(5) 随机算法: 随机分配,简单,但不可控

动态算法是考虑服务器动态负载的算法,包括:

(1)最小连接数算法:新请求分配给当前活动请求数量最少的节点,每个节点处理能力相同的情况下

(2) 加权最小连接数算法: 考虑节点处理能力不同,按最小连接数分配。

(3)加权百分比算法:考虑了节点的利用率、硬盘速率、进程个数等,使用利用率来表现剩余处理能力。

36.微服务架构的优缺点?

优点:

1、职责单一 (且专注于做一件事情)

2、适配团队和组织,易于小团队开发

3、独立性强: 独立开发、独立测试及独立部署(简单部署)、独立运行(每个服务独立在其独立进程中)

4、技术异构 (如: 每个服务使用不同数据库)

5、容错能力强: 故障被隔离在单个服务中,通过重试、平稳退化等机制实现应用层容错

6、松耦合,易扩展: 可根据需求独立扩展。

面临的问题与挑战

1、分布式环境下的数据一致性[更复杂]

2、测试的复杂性[服务间依赖测试]

3、运维的复杂性

37.WPDRRC模型包括6个环节和3大要素?

6个环节分别是:预警、保护、检测、恢复、响应、反击

3大要素包括人、技术、策略

38.区块链的三大技术分别是什么?

去中心化:由于使用分布式核算和存储,不存在中心化的硬件或管理机构,任意节点的权利和义务都是均等的,系统中的数据块由整个系统中具有维护功能的节点来共同维护。

开放性:系统是开放的,如: 区块链上的[交易信息是公开的],不过[账户身份信息是高度加密的]

自治性:区块链的自治性指的是基于协商一致的规范和协议,使系统中的参与方能够完全去信任的情况下,自动安全的验证、交换数据,而不受任何人为的千预,来确保区块链上每-笔交易的真实性和准确性,而这将把第三方之间的信任转化为对机器的信任,最终实现数据的自动管理。

安全性(信息不可算改):数据在多个结点存储了多份,篡改数据得改掉51%结点的数据,这大难。同时,还有其它安全机制,如:比特币的每笔交易,都由付款人用私钥签名,证明确实是他同意向某人付款,其它人无法伪造。

匿名性(去信任):由于节点之间的交换遵循固定的算法,其数据交互是无需信任的(区块链中的程序规则会自行判断活动是否有效》,因此交易对手无须通过公开身份的方式让对方对自己产生信任,对信用的累积非常有帮助。

1. 分布式存储技术

分布式存储是区块链的基础技术之一,它用于在多台计算机上分布、存储和管理区块链网络的数据。区块链中的数据以区块的形式存储,每个区块包含一定数量的交易记录和其他相关信息。分布式存储技术确保区块链网络上的数据是分散存储在多个节点上,而不是集中存储在单一实体或服务器上。这种分布式存储方式保障了数据的安全性和可靠性。

2. 加密算法技术

加密算法技术是区块链中保障安全性的核心。它包括公钥加密、私钥解密、哈希算法等加密技术。公钥加密和私钥解密确保了数据的安全传输和存储,只有拥有私钥的用户才能解密数据。哈希算法用于生成区块的唯一标识,保证了区块的完整性,一旦区块内容有改动,其哈希值也会改变,这样就可以及时发现和防止数据篡改。

3. 共识算法技术

共识算法是确保区块链网络中各个节点之间达成一致的关键技术。在区块链网络中,参与者(节点)需要共同决定新区块的添加,以及事务的有效性。共识算法确保了网络的一致性和安全性,避免了恶意节点的干扰。常见的共识算法有工作量证明(Proof of Work,PoW)、权益证明(Proof of Stake,PoS)、权益证明+权益抵押(Delegated Proof of Stake,DPoS)等。

39.架构开发方法 (ADM)

TOGAF中提出了一个著名的ADM架构开发的全生命周期模型。请问此模型将ADM全生命周期划分为十个阶段,分别为

准备、需求管理、架构愿景、业务架构、信息系统架构、 技术架构、机会和解决方案、迁移规划、实施治理、架构变更管理等十个阶段。

40.层次型架构风格的缺点是什么?

1.层与层之间可能难以抽象和划分

2.分层增加了系统的复杂性,使得系统变得庞大

3.不同层次之间耦合度高的系统难以实现

41.主从复制是什么?有哪些好处?分库分表和读写分离分别是什么?

1、提升性能交易平台要求高并发,主从复制方式一主多从,不同的用户请求可以从不同的从数据库读取数据,提高并发度2、可扩展性更优

如果采用单台数据库服务器,则访问量持续增加时,数据库瓶颈暴露,且无法迅速解决问题。而主从结构可以快速增加从服务器数量以满足需求。

3、提升可用性

一主多从,一台从服务器出现故障不影响整个系统正常工作。

4、相当于负载均衡

一主多从分担任务,相当于负载均衡

5、提升数据安全性

系统中的数据几余存放多份,不会因为某台机器硬件故障而导致数据丢失

主从数据库的实现方式一般有两种,第一种方式是“读写分离",第二种方式是“分库分表”。请用300字以内的文字,分别简单

介绍下“读写分离”和“分库分表”的实现方式。

读写分离:读写分离是将数据库的读操作在从库中执行,将数据库的写操作在主库中执行,多个从库是从主库中以毫秒级的速度同步数据,在压力情况下,可以部署多个从库来提高数据库的读的速度,可以通过将读和写分离来提高数据库的整体性能。

分库分表:分表是单表的数据量增长到一定规模的情况下,对表的查询和更新的性能会下降,通过对表中的数据进行水平拆分或者垂直拆分,并通过分片的方式来缩小查询范围。

分库是指按照业务的模块,将业务数据分散到不同的数据库中。

第42题:关系数据库中实体完整性、参照完整性、用户定义完整性是什么?

实体完整性指的是建立主键。保证关系中的每个元组都是可识别和唯一的。指关系数据库中所有表都必须有主键,不允许表中存在无主键值的记录,不允许存在主键值相同的记录。

参照完整性建立外键。是指多个实体或关系之间的关联关系,就是定义外键与被参照的主键之间的引用规则。外键一般要求为空或者等于其所参照的关系中的某个元组的主键值。

用户定义完整性定义字段取值范围。指关系中属性的取值范围,防止属性的值与应用语义矛盾。

第43题:商业智能AI包括哪些内容?

1. 数据预处理ETL(指数据抽取、数据转换和数据加载);

2. 建立数据仓库;

3. 数据分析。分为OLAP联机分析处理(包括数据汇总/聚集、切片、切块、下钻、上卷、旋转);和数据挖掘(包括OLTP联机事务处理、关联分析、分类、聚类);

4. 数据展现;

第44题:用户界面设计的3条黄金原则是什么?

1. 置于用户的控制之下;

2. 减少用户的记忆负担;

3. 保持界面的一致性;

第45题:结构化需求分析需要建立三个模型分别是什么?结构化设计包括哪些?

结构化需求分析阶段建立:功能模型(使用DFD)、行为模型(使用STD)、数据模型(使用E-R图)和数据字典。

结构化设计包括:架构设计、接口设计、数据设计、过程设计。

第46题:什么是软件需求?需求按层次怎么分类?需求开发和需求管理两大过程具体包括哪些内容?

软件需求是指用户对系统在功能、性能、行为、设计约束等方面的期望。

需求按层次分为业务需求、用户需求、系统需求。系统需求包括功能需求、非功能需求和设计约束。

需求开发包括:需求获取、需求分析、需求定义(生成需求规格说明书SRS)、需求验证。

需求管理包括:变更控制、版本控制、需求跟踪、需求状态跟踪。

第47题:什么是需求分析?需求分析的主要任务包括哪些?

需求分析是把杂乱无章的用户要求和期望转化为用户需求的过程。需求分析的主要任务包括:

1. 定义系统边界;

2. 创建用户界面原型;

3. 分析需求的可行性;

4. 确定需求的优先级;

5. 建立数据流图;

6. 创建数据字典;

7. 使用QFD质量功能部署,确定常规需求、期望需求和意外需求。

第48题:什么是构件?什么是连接件?什么是软件重用?构件的三个特性是什么?

构件又称组件,是一个功能相对独立的、具有可重用价值的软件单元。在面向对象方法中,一个构件由一组对象组成,包含了一些协作的类的集合。

连接件是一种架构元素,它通过对构件之间交互规则的建模来实现构件之间的连接

软件重用是使用已有的软件产品(如设计、代码、文档等)来开发新的软件系统的过程。可分为垂直式重用和水平式重用。

构件的三个特性是:

1.独立部署单元;

2.作为第三方的组装单元;

3.没有外部可见的状态。

系统构件组装分为三个不同的层次: 

定制(Customization) 

集成(Integration) 

扩展(Extension) 。

这三个层次对应于构件组装过程中的不同任务。

第49题:什么是中间件?中间件的作用和特点是什么?

中间件是一种独立的系统软件或服务程序,可以帮助分布式应用软件在不同的技术之间共享资源。

中间件的作用:

1. 负责客户机与服务器之间的连接与通信,以及客户机与应用层之间的高效通信。

2. 提供应用层不同服务之间的互操作机制,以及应用层与数据库之间的连接和控制机制。

3. 提供多层架构的应用开发和运行的平台。

4. 屏蔽硬件、操作系统、网络和数据库的差异。

5. 提供应用的负载均衡和高可用性安全机制与管理功能

6. 提供一种通用的服务去执行不同的功能,避免重复的工作和使应用之间高效协作。

第50题:关系型数据库开发的阶段包括哪些?其中逻辑数据模型设计包含哪些任务?什么是超类实体?什么是派生属性?

数据库开发包括:需求分析,概念设计,逻辑设计,物理设计,实施阶段,运行维护。

其中逻辑设计阶段包括:

1. 确定数据模型。

2. 将ER图转换成表,将ER模型转换成关系模型。

3. 确定完整性约束。

4. 确定用户视图。

超类实体:将一些子实体所共有的属性抽象为一个单独的新实体,这个新的实体就是超类实体。就相当于父类,把子类实体中共有的属性抽出来形成单独的实体

派生属性:根据其他属性计算得出的属性就是派生属性。如快递包裹费用中的总计就是派生属性。

逻辑数据模型设计过程包含哪些任务?

(1)构建系统数据模型,包含实体及实体之间的联系

(2)为每个实体添加主键属性

(3)为每个实体添加非主键属性;

(4)利用规范化技术建立系统规范化数据模型

第51题:云计算架构有哪几个层?分别是什么?

主要分为5个层次,分别为管理层、应用层、用户访问层、平台层,资源层

管理层:提供对所有层次云计算服务的管理功能

用户访问层:方便用户使用云计算服务,提供相应的访问接口。

应用层:提供软件服务,如:财务管理,客户关系管理,商业智能。saas

平台层:paas,平台即服务,提供各种中间件和数据库系统

资源层:提供虚拟化的资源,隐藏物理资源的复杂性,如服务器和存储.iaas

第52题:信息系统生命周期分为哪5个阶段,每个阶段产出物是什么?

  1. 系统规划阶段。六个步骤是:

    1.确定系统目标;

    2.确定实施方案;

    3.确定建设方案;

    4.对现有系统进行初步调查;

    5.分析子系统的组成和基本功能;

    6.进行可行性研究。产出物是可行性研究报告,系统设计任务书。

2.系统分析阶段。也称逻辑设计阶段。主要任务是回答系统“做什么”问题,指出现行系统的局限性和不足之处,确定新系统的基本目标和逻辑功能要求,提出新系统的逻辑模型。产出物是系统说明书。

3.系统设计阶段。也称物理设计阶段。主要任务是回答系统“怎么做”的问题,根据系统说明书规定功能要求,具体设计实现逻辑模型的技术方案,设计新系统的物理模型。可分为总体设计(概要设计)和详细设计两个阶段。产出物是系统设计说明书,即概要设计说明书和详细设计说明书。

4.系统实施阶段。将设计的系统付诸实施。产出物是实施进展报告,系统测试分析报告。

5.系统运行与维护阶段。

第53题:能力成熟度模型CMM和能力成熟度模型集成CMMI分别包括哪5个级别?

都包括初始级和优化级。CMM重定管,包括:可重复、已定义、已管理。

CMMI管定量,包括:已管理、已定义、定量管理。

第54题:对于NoSql,能够解决哪些问题?并且有哪些优点和缺点?

NOSQL数据库支持高并发数据访问,性能较高。

NOSQL数据库的数据存储结构松散,能够灵活支持多种类型的数据格式

NOSQL数据库能够支持海量数据的存储,且易于横向扩展。

NOSQL数据库基于分布式数据存储,不存在单点故障和性能瓶颈,系统可用性高

该系统采用NOSQL数据库时可能存在的问题有:

(1) NOSQL数据库的现有产品不够成熟,大多数产品外于初创期。

(2) NOSQL数据库并未形成一定的标准产品种类繁多,缺乏官方支持。

(3) NOSQL数据库不提供对SQL的支持学习和应用迁移成本较高。

(4) NOSQL数据库支持的特性不够丰富,现有产品提供的功能比较有限

第55题:请用200字以内的文字简要说明什么是云数据库以及云数据库的特点

云数据库是指被优化或部署到一个虚拟计算环境中的数据库,具有按需付费、按需扩展、高可用性以及存储整合等能力

云数据库的特性有:实例创建快速、支持只读实例、读写分离、故自动切换、数据备份、Binlog备份、SQL审计、访问白名单、监控

与消息通知等。

第56题:DNS负载均衡和nginx负载均衡

DNS负载均衡

在DNS服务器中给同一个主机名配置多个IP地址,每次查询时,DNS会按照预设的顺序返回不同的解析结果,这样每个客户端访问的都是不同的服务器,从而达到负载均衡的目的。

反向代理负载均衡:

将互联网上的请求通过Nginx负载均衡服务器,转发给内部网络上的多个的服务,并将结果返回给请求连接的客户端而达到负载均衡的目的。

负载均衡技术:

(1)应用层负载均衡:http 重定向、反向代理服务器; 

(2) 传输层负载均衡DNS 域名解析负载均衡、基于NAT 的负载均衡;

(3)硬件负载均F5;

(4)软件负载均:LVSNginx、HAproxy。

第57题:采用标准的数据访问机制的原因是什么?

1.可以屏蔽不同设备之间数据交互的差异,解决了系统使用数据不一致性

2.减低了数据结构与应用系统的耦合度

3.减少了应用系统的维护的工作量

第58题:信息安全模型速记

BLP下毒上写

高级军官不能向下级写文件,容易泄密

向上写,是下级向上级汇报文件

Biba上读下写

完整性就是秘书会篡改领导的文件

所以不允许向下读取

信息是否片面

就是不能找个路人甲打听消息,消息可能是假的

第59题:REST五大原则是什么?

(1)网络上的所有事物都被抽象为资源

(2)每个资源对应一个唯一的资源标识

(3)通用的连接件接口对资源进行操作

(4)对资源的各种操作不会改变资源标识

(5)所有的操作都是无状态的

第60题:PIECES框架是什么?

PIECES框架是系统非功能性需求分类的技术。

性能(Preformance):性能用于描述企业当前的运行效率,可以分析当前业务的处理速度。

信息(Information):信息和数据指标用于描述业务数据的输入、输出以及处理方面存在的各种问题。

经济(Economics):经济指标主要是从成本和收益的角度分析企业当前存在的问题。

控制(Control):提高信息系统的安全和控制水平。

效率(Efficiency):提高企业的人、财、物等的使用效率。

服务(Service):提高企业对客户、供应商、合作伙伴、顾客等的服务质量。

图片

下面开始是2023年的案例分析知识点:

61.大数据架构

大数据相关名词:

M-R:MapReduce

HDFS是放离线数据

Sqoop:Sqoop是apache旗下的一款 ”Hadoop和关系数据库之间传输数据”的工具

导入数据:将MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统

导出数据:从Hadoop的文件系统中导出数据到关系数据库

MemSQL:MemSQL是一款强大的内存数据库管理系统,它利用内存数据计算和闪存技术提供快速的实时分析和交易处理能力。其分布式架构、内存和闪存混合存储以及ACID事务支持等特点,使得MemSQL成为处理大规模数据、高并发场景下的理想选择。

大数据知识点截图和架构图:

图片

图片

图片

图片

图片

图片

图片

图片

62.系统建模语言SysML

什么是SysML?

系统建模语言(System Modeling Language,SysML)是一种专门为系统工程应用开发的标准建模语言,它是由对UML2.0的子集进行重用和扩展而来的。

SysML和Uml的差异是什么?

首先,从应用角度来看,SysML是专门为系统工程开发的,主要用于指定、分析、设计和验证复杂的系统,旨在为建模各种系统工程问题提供简单而强大的构造。而UML则更多地面向软件工程,其设计初衷是为了方便软件开发。

其次,从语言结构方面来看,SysML由图和元模型组成,其中图是语法,元模型是语义。SysML的元模型理论与UML一样,也具有4层结构,并且SysML是从UML的基础上重用扩展而来。具体来说,SysML重用了UML 2.0中的大多数包以及UML 2.0的语言机制,并扩展了一些新的功能机制,如类包、活动包等,还新增了UML中没有的包,如装配包、需求包、参数包。

在表示能力上,UML以其面向对象和可视化的特点著称,能够简洁明了地表达面向对象的各种概念,并通过模型图清晰地表示系统的逻辑模型和实现模型,适用于各种复杂系统的建模。而SysML在指定需求方面特别有效,支持工程分析的系统属性的结构、行为、分配和约束。

此外,UML是独立于开发过程和程序设计语言的,用UML建立的软件系统模型可以用多种面向对象的程序设计语言来实现。而SysML作为系统工程领域的建模语言,可能更注重于系统层面的整体性和复杂性

SysML的9种图分分别是哪9种?

1. 用例图(Use Case Diagram):用于表达系统执行的用例,以及引起用例的行为者和其中的参与者。用例图是系统在行为者的协作下所执行服务的黑盒视图。

2. 状态机图(State Machine Diagram):用于指定一种行为,主要关注模块的一系列状态,以及响应事件时,状态之间的可能转换。

3. 活动图(Activity Diagram):用于指定一种行为,主要关注控制流程,以及输入通过一系列动作转换为输出的过程。活动图一般用作一种分析工具,以理解和表达系统所需要的行为。

4. 序列图(Sequence Diagram):用于指定一种行为,主要关注模块的组成部分如何通过操作调用和异步信号交互。序列图通常用作详细设计工具,以精确地把一种行为指定为生命周期开发阶段的输入项。

5. 时间图:SysML时间图重用了UML时间图,但在UML中时间图并不常用。时间图描述的是系统的某个活动状态或属性值随时间的变化。

6. 模块定义图(Block Definition Diagram,BDD):用于表示模块和值类型之类的元素(定义能够在可操作的系统中存在的事物类型)以及那些元素之间的关系。BDD的通常用法包括显示系统层级关系树以及分类树。

7. 内部模块图(Internal Block Diagram,IBD):用于指定单个模块的内部结构。更精确的说法是,IBD会显示模块内部组成部分之间的关系,以及它们之间的接口。

7. 参数图(Parametric Diagram):用于表示一种或多种约束——特别是等式和不等式——如何与系统的属性绑定。参数图支持工程分析,包括性能、可靠性、可用性、电力、人力和成本。参数图还可以用于支持候选物理架构的优劣势研究。

9. 需求图(Requirement Diagram):用于表示基于文字的需求、需求之间7种关系。

需求之间7种关系分别是哪些?

1. 包含(十字剪头):可以理解为需求的分解,例如用户的信息管理包括基本信息管理、个性化设置等。

2. 跟踪(trace):一个需求的变化会引起另外一个需求的变化,跟踪关系是一种弱关系,它只是表达了一种基本的依赖关系,例如用户的积分管理规则的变化会引起用户使用权限的变化。

3. 继承(deriveReqt):是另一种依赖关系且依赖关系可以传递,如果基本的需求发生变更,那么下游的影响会贯穿整个继承需求关系链。

4. 改善(refine):对抽象需求的具象化处理,一般使用用例对文本的功能性需求进行改善。用例更精确,并且还带有说明。

5. 满足(satisfy):一个需求的实例会满足另外一个需求。

6. 验证(verify):将测试用例(可以是活动、交互或者状态图)与需求进行关联,表示用关联的测试用例可以验证这个需求。

7. 复制(copy)

2023年的案例原题如下:

图片

63.JWT的机制

JWT(JSON Web Token的缩写)它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证JWTToken的正确性,只要正确即通过验证。

JWT的特点
  • 紧凑:数据小,可以通过URL,POST参数,请求头发送。且数据小代表传输速度快。

  • 自包含:使用payload数据块记录用户必要且不隐私的数据,可以有效减少数据库访问次数,提高代码性能。

  • JWT一般用于处理用户身份验证或数据信息交换。

  • 用户身份验证:一旦用户登录,每个后续请求都将包含JWT,允许用户访问该令牌允许的路由,服务和资源。单点登录是当今广泛使用JWT的一项功能,因为它的开销很小,并且能够轻松地跨不同域使用。

  • 数据信息交换:JWT是一种非常方便的多方传递数据的载体,因为其可以使用数据之前确保数据的有效性和安全性。

JWT数据结构包含哪三个部分?

JWT的结构包含三个部分:Header头部,Payload负载和Signature签名。三部分之间用“.”号做分割。校验也是JWT内部自己实现的 ,并且可以将你存储时候的信息从token中取出来无须查库。

  • header

数据结构:{“alg”: “加密算法名称”, “typ” : “JWT”}

alg是加密算法定义内容,如:HMAC SHA256 或 RSA

typ是token类型,这里固定为JWT。

  • payload

在payload数据块中一般用于记录实体(通常为用户信息)或其他数据的。主要分为三个部分,分别是:已注册信息(registered claims),公开数据(public claims),私有数据(private claims)。

payload中常用信息有:iss(发行者),exp(到期时间),sub(主题),aud(受众)等。前面列举的都是已注册信息。

公开数据部分一般都会在JWT注册表中增加定义。避免和已注册信息冲突。

公开数据和私有数据可以由程序员任意定义。

注意:即使JWT有签名加密机制,但是payload内容都是明文记录,除非记录的是加密数据,否则不排除泄露隐私数据的可能。不推荐在payload中记录任何敏感数据。

  • Signature

签名信息。这是一个由开发者提供的信息。是服务器验证的传递的数据是否有效安全的标准。在生成JWT最终数据前,先使用header中定义的加密算法,将header和payload进行加密,并使用点进行连接。如:加密后的head.加密后的payload。再使用相同的加密算法,对加密后的数据和签名信息进行加密。得到最终结果。

JWT执行流程

JWT的请求流程也特别简单,首先使用账号登录获取Token,然后后面的各种请求,都带上这个Token即可。具体流程如下:

1. 客户端发起登录请求,传入账号密码;

2. 服务端使用私钥创建一个Token;

3. 服务器返回Token给客户端;

4. 客户端向服务端发送请求,在请求头中携带Token;

5. 服务器验证该Token;

6. 返回结果。

图片

Token 和JWT有什么区别呢

其实Token和JWT确实比较类似,只不过,Token需要查库验证token 是否有效,而JWT不用查库,直接在服务端进行校验,因为用户的信息及加密信息,和过期时间,都在JWT里,只要在服务端进行校验就行,并且校验也是JWT自己实现。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐