第 1 周 - 学习总结
1 如何成为架构师
跳槽,应聘为架构师。
内部晋升,被任命为架构师。
2 架构师的主要职责
编写架构设计文档
并发编程框架
重构软件代码
设计系统架构
进行技术选型,解决技术应用中的问题
优化系统性能
模块分解与微服务架构重构
保障系统安全与高可用
大数据应用
技术创新
沟通管理
3 架构师的主要能力
编程能力
基础技术掌握能力
常用技术产品的理解与应用能力
性能优化与分析故障的能力
常用架构模式和框架的理解与应用能力
建模以及设计文档的方法和能力
业务理解与功能模块及非功能模块拆解能力
快速学习能力
沟通与领导能力
4 老师面试架构师候选人的三个方面
让面试者进行自我介绍,让面试者描述简历中一个最具有技术含量的项目,介绍应该说明项目的背景和需求,然后说明一下项目面临哪些挑战,如何解决,自己在项目当中的职责;画一下系统的架构图,流程的时序图,相关模块的组件图等。
问一些具体的技术问题,比如说分布式系统、缓存、消息队列等。
出一道 10 几行的手写代码题。
5 面试架构师的问题
子类 override 父类的方法后,想要修改抛出的异常,那么子类方法抛出的异常类应该是父类方法抛出异常类的子类还是父类?
Spring 是如何实现单例的? 和设计模式中的单例实现方式有什么不同?
淘宝这样的大规模分布式互联网应用系统使用了哪些技术方案和手段?主要解决什么问题?
知道什么是 CAP 原理?请描述某个你熟悉的 NoSQL 产品是如何解决 CAP 问题的?
如何进行性能测试,性能测试的流程是什么?性能测试的主要关注指标有哪些?
为什么在系统性能测试的时候,随着并发请求数的逐渐增加,错误响应(或者响应超时)的比例快速增加?青葱操作系统的线程和进程调度原理以及计算机内部资源使用角度进行分析。
为什么支持异步 I/O 的 Web 服务器(比如 Nginx)要比阻塞式的 Web 服务器(比如 Apache)性能好很多,前者要比后者可以处理的并发连接请求多几十甚至数百倍?请从异步 I/O 的线程阻塞特性进行分析。
给定一个 key,为什么可以在 Hash 表中快速查找到 value?
数据库索引是如何存储的?
Java 虚拟机的垃圾回收原理是什么?
什么是领域驱动设计, DDD 的优缺点是什么?
导致系统故障无法正常访问的原因有哪些?保障系统稳定高可用的方案有哪些?请列举并描述。
为什么单项散列加密可以保护用户密码安全,请细化 week2 的时序图设计,使用单项散列表保护用户密码。
Spark 为什么比 MapReduce 快?
淘宝,头条这些应用会针对不同用户推荐不同的商品和内容,他们是如何做到的?用了哪些算法?
Google 搜索结果页面是如何排序的,正好使用户最想看到的页面排在前面?
区块链是如何保证数据无法被篡改的?
什么是边缘计算?
如果你觉得系统需要重构,但是老板和团队成员都觉得没必要,你如何说服大家?
6 什么是软件架构
软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。-- 维基百科
架构设计最重要的是相关方,也就是架构是要给谁看(老板,开发,测试,维护人员都是相关方),给每个不同人看,架构文档的侧重点不同。
7 什么是软件架构师
架构师是做架构设计、对系统架构负责的那个人。
架构师是一顶帽子,而不是一把椅子;架构师是一个角色而不是一个职位。
8 4+1 架构视图
软件架构 = {元素,形式,关系/约束}
逻辑视图:设计的对象模型。
过程视图:捕捉设计的并发和同步特征。
物理视图:描述了软件到硬件的映射,反映了部署特性。
开发视图:描述了在开发环境中软件的静态组织结构。
场景视图:描述用例场景。
9 软件架构设计步骤
需求分析
概要设计
详细设计
10 软件架构设计的产出物-架构文档
如何用 UML 画架构图,如何编写一份架构文档。
10.2 UML 静态图
用例图(元素太多的话,可以细分每个元素,再拆分成子用例图。)
类图(详细设计阶段)
组件图
部署图
对象图(不常用)
包图(很少用)
10.3 UML 动态图
时序图(对象,生命线,激活状态,动作)
活动图(所有架构设计阶段都可以使用)
状态图
协作图(不常用,可以由时序图推得)
10.4 使用场景
需求分析:用例图,部署图,时序图,活动图,状态图
概要设计:框架图,部署图,组件图,时序图,活动图
详细设计:类图,时序图,活动图,状态图
10.5 编写步骤
设计概述(功能概述、非功能约束)
系统部署图和整体设计(系统部署图、各业务场景的子系统序列图)
各个子系统设计(子系统组件图、各业务场景的组件序列图、组件活动图、组件设计,包括组件的类图、业务场景下类的序列图、对象状态图)
10.6 推荐图书
《UML 精粹》
评论