极客大学 - 架构师训练营
第一周 架构方法学习总结
针对每一个视频,做了重要知识点的摘抄。也画了知识脑图。
大厂Offer招聘JD解读
工作职责和工作要求对应关系图
架构师面试题解读
什么是软件架构?如何写一个架构的设计文档,文档中应该包含那些方面的内容?
目的:考察架构师有没有自己的方法论和自己的方式去开展工作?有没有体系
答案:软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。
子类override父类方法后,想要修改抛出的异常,那么子类方法抛出的异常类应该是父类方法抛出异常类的子类还是父类?
目的:考察架构师对面向对象的理解,以及设计思路和设计方法,里氏替换原则
Spring是如何实现单例的?和设计模式中的单例实现方式有什么不同?
目的:对Spring框架的理解,以及设计模式的理解(偏Java)
淘宝这样的大规模分布式互联网应用系统使用了哪些技术方案和手段?主要解决什么问题?
目的:考察你对大型互联网应用的相关技术方法,相关的实现思路的整体认知
什么是CAP原理?请描述某个你熟悉的NoSQL产品是如何解决CAP问题的
目的:对CAP(一致性,可用性和分区容错性)的理解
如何进行性能测试,性能测试的流程是什么?性能测试的主要关注指标有哪些?
为什么在系统性能测试的时候,随着并发请求数的逐渐增加,错误相应(或者超时相应)的比例快速增加?请从操作系统的线程与进程调度原理以及计算机内部资源使用的角度进行分析。
为什么支持异步I/O的web服务器(Nginx)要比阻塞式的web服务器(比如Apache)性能好很多?前者要比后者可以处理的并发连接请求多几十甚至数百倍?请从异步I/O的线程阻塞特性进行分析。
给定一个key,为什么可以在Hash表中快速查到value?
数据库索引是如何存储的?
Java虚拟机的垃圾回收原理是什么?
你怎么理解领域驱动设计DDD?DDD的优缺点是什么?
导致系统故障无法正常访问的原因有哪些?保障系统稳定高可用的方案有哪些?请列举并简述。
如何保护数据库存储的用户密码,请用时序图用户密码加密存储与登陆验证的过程。
Spark为什么比MapReduce快?
淘宝,头条这些应用会针对不同用户推荐不同的商品和内容,他们是如何做到的?用了哪些算法?
目的:考察推荐引擎是如何实现的
Google搜索结果的页面是如何排序的?正好使用户最想看到的页面排在前面?
区块链是如何保证数据无法被篡改的?
什么是边缘计算?
如果你觉得系统需要进行重构,但是老板和团队成员都觉得没有必要,你如何说服大家?
目的:考察对问题的认知,如何发现问题,如何解决问题
架构师的主要能力
编程能力
算法/数据结构
基础技术掌握能力
操作系统/数据库/网络/虚拟机
常用技术产品的理解与应用能力
分布式消息队列/分布式缓存/分布式数据库/NoSQL
性能优化与分析故障的能力
测试,解读性能测试报告,分析测试结果和数据,如何优化
常用架构模式和框架的理解与应用能力
建模以及设计文档的方法和能力
业务理解与功能模块及非功能模块拆解能力
快速学习能力
沟通与领导能力
4+1视图 (逻辑 过程 物理 开发 + 场景)
软件的架构 = {元素, 形式, 关系/约束},由于单一的视图无法完整的表达架构,因此我们需要具备完成的视图集
Logical view - 设计对象的模型
Process view - 捕捉设计的并发和同步特征
Physical view - 描述了软件到硬件的映射,反映了部署特性
Development view - 描述了在开发环境中软件的静态组织结构
Scenarios - 描述用例场景
Note:具体做设计的时候,我们更多的是用UML
用UML进行软件架构设计与建模
模型是一个系统的完整抽象。人们对某个领域特定问题的求解以及解决方案,对它们的理解和认识都蕴含在模型中。
如果没有建模,直接堆砌代码,那么最终的代码可能会过于庞大。
UML简介
Unified Modeling Language,统一建模语言
以图形的方式来描述:某个问题领域,构思中的软件设计,描述已经完成的软件实现
UML
模型图有十种,大致可以分为两类,常用的有七种
静态图:通过描述类,对象和数据结构以及他们之间存在的关系,来描述软件要素中不变的逻辑结构
Use case
Object
Class
Component
Package
Deployment
动态图:通过描绘执行流程或者实体状态的变化方式,来展示软件实体在执行过程中的变化过程
合作图 - Collaboration:描述合作对象间的关系
时序图 - Sequence: 动态合作关系以及行为次序 (比较常用)
活动图 - Activity: 着重描述操作实现中完成的工作,是状态图的变种 (非常常用)
状态图 - State:描述对象,子系统,系统的生命周期
常用的七种
Class
Use case
Component
Deployment
Sequence
Activity
State
通用模型元素
模型元素关系
关联 Association: 连接模型元素以及链接实例
泛化 Generalization: 一般与特殊的关系,比如一般是特殊的泛化
依赖 Dependency: 一个元素以某种方式依赖于另外一种
聚合 Aggregation:整体与部分的关系
静态关系以及静态建模
Visio类图示例 (开发阶段,要落地的时候)
SipLayer:类的名字
-server: User 类的成员变量,减号代表private,加号代表public,什么都没有代表public
+logout() 类的成员方法
动态关系以及动态建模
动态模型主要描述系统的动态行为和控制结构。动态模型中,对象间的交互是通过消息传递来完成的。
UML中的消息
简单消息 (simple)
表示控制流,如何从一个对象到另一个,不描述细节,不区分同步异步
同步消息 (synchronous)
嵌套控制流,操作的执行者要到消息相应操作执行完并回送一个简单消息后,再继续执行
异步消息 (asynchronous)
异步控制流,消息发送者在消息发送后就继续执行,不等待消息处理
组件图
架构设计图例子
不同的软件设计阶段,不同的角色的架构设计图
架构设计文档
架构师真正的职责
在软件的不同阶段应该设计不同的UML模型,将不同阶段输出的UML模型图放在一个文档中,对每张模型图配以适当的文字说明,就是一篇设计文档
对于规模不大的软件系统,我们可以将概要设计文档和详细设计文档合并
设计概述简单描述业务场景要解决的核心问题领域,还需要描述设计的非功能约束,比如关于性能,可用性,维护性,安全性,甚至开发和部署成本方面的设计目标
第一周作业:食堂就餐卡系统设计
系统中每个消费者都有一张卡,在管理中心注册缴费,卡内记着消费者的身份、余额。
使用时将卡插入收款机则显示卡上金额,服务员按收款机上数字键,收款机自动计算并显示消费额及余额。
管理中心的管理员监视每一笔消费,可打印出消费情况的相关统计数据。
请设计系统用例图,组件图,组件时序图,部署图。
系统用例图
组件图
组件时序图
部署图
根据需要,多个收款机,每个收款机配备备用收款机
用户信息终端+账户信息终端
数据库以及备用数据库
管理终端+监控终端
文件+数据备份storage
评论