架构师训练营 - 第一周学习总结
1,架构方法
成为架构师的渠道有哪些?
跳槽?熬工作年限?晋升?
如何获取大厂的offer?
某几个大厂架构师职位要求、表示、解读
问题提出:
1.什么是软件架构?
2.如何写一个架构设计文档,文档中应该包含哪些内容?
3.子类override父类的方法后,想要修改抛出的异常,那么子类方法抛出的异常应该是
父类方法抛出异常类的子类还是父类?
4.spring是如何实现单例的?
5.第4个问题和设计模式中的单例实现方式有什么不同?
6.淘宝这样的大规模分布式互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?
7.什么是CAP原理?
8.请描述某个你熟悉的NoSQL产品是如何解决CAP问题的
9.如何进行性能测试,性能测试的流程是啥?性能测试主要关注的指标有哪些?
10.为什么在系统性能测试的时候,随着并发请求数的逐渐增加,错误响应(或响应超时)的
比例快速增加? 请从操作系统的线程与进程调度原理以及计算机内部资源使用角度进行分析
11.为什么支持异步I/O的web服务器(如Nginx)要比阻塞式的Web服务器(如Apache)性能要好
很多,前者要比后者可以处理的并发连接请求多几十甚至数百倍?请从异步I/O的线程阻塞特性
进行分析
12 给定一个key,为什么可以在Hash表中快速查找到value?
13 数据库索引是如何存储的?
14 Java的虚拟机的垃圾回收原理是什么?
15 你怎么理解领域驱动设计 DDD?
16 DDD的优缺点是什么?
17 导致系统故障无法正常访问的原因有哪些?
18 保障系统文档高可用的方案有哪些?
19 为什么单项散列可以保护用户密码安全?
20 请细化week的时序图设计,使用单向散列加密保护用户密码
21 Spark 为什么比MapReduce快?
22 淘宝,头条这些应用汇针对不同的用户推荐不同的商品和内容,他们是如何做到的?用了哪些算法?
23 Google搜索结果页面是如何排序的,正好使用户最想看到的页面排在前面?
24 区块链是如何保证数据无法被篡改
25 什么是边缘计算?
26 如果你觉着系统需要进行重构,但是老板和团队成员都觉着没必要,你如何说服大家?
27 成为架构师以后,如何承担起架构师的职责,如何开展架构设计工作?
架构师的主要职责:
1.编写架构设计文档
2.开发编程框架
3.重构软件代码
4.设计系统架构
5.进行技术选型,解决技术应用中的问题
6.优化系统性能
7.模块分解与微服务架构重构
8.保障系统安全与高可用
9.大数据应用
10.技术创新
11沟通管理
架构师主要能力
1.编程能力
2.基础技术掌握能力
3.常用技术产品的理解与应用能力
4.性能优化与分析故障的能力
5.常用架构模式与框架的理解与应用能力
6.建模以及设计文档的方法和能力
7.业务理解与功能模块以及非功能模块拆解能力
8.快速学习能力
9.沟通与领导能力
什么是软件架构?
1.架构是由架构元素、元素间的关系组成的
架构元素包括服务器、模块、组件、Java类 (详设)
元素间的关系:动态关系、静态关系
------------------------------------------------------------------------------------------------------------
软件建模与设计文档:
4+1视图模型:
1.逻辑视图:
相关方:客户,用户,开发组织管理者
视角:系统的功能元素,以及他们的接口、职责,交互
主要元素:系统,子系统,功能模块,子功能模块、接口
用途:开发组织划分,成本/进度评估
例子:
2.过程视图:
相关者:性能优化,开发相关人员
视角:系统运行时线程,进程的情况
主要元素:系统进程,线程以及处理队列等
例子:
3.物理视图
相关方:系统集成商,系统运维人员
视角: 系统逻辑组件到物理节点的物理部署和节点直接的物理网络配置
主要元素: 物理节点以及节点的通信
4.开发视图
相关方:开发人员、测试人员
视角:系统如何开发实现
主要元素:描述系统的曾,分区,包,框架,系统通用废物,业务通用服务,业务通用服务,类和接口,系统平台和相关基础包
用途:知道开发组织设计和开发实现
5.场景视图
相关者:用户,设计人员,开发人员
视角:概括了架构上最重要的场景(最典型或者最有风险)机器非功能性需求,通过这个场景的实现,
阐明了架构的广度或众多架构元素运行的方式
例子:
软件建模语言:如何使用UPL进行软件架构设计与建模?
什么是模型?
模型,是一个系统的完整的抽象
例子:
为什么要建模型?
1.建造传统模型
目的 : 为了证明某件事物能否工作
前提 : 建造模型的成本远远低于建造实物的成本
2.建造软件模型
目的 : 为了与他人沟通,为了保存软件设计的最终成果
前提:除非模型比代码更说明问题
何时、何处画图?
1.何时画图,
讨论、交流时、最终设计文档,
只保留少量的、重要的图
避免设计过多内容和实现细节
2.何处画图?
白板;绘图工具:Visio、Aastah;draw.IO
UML简介
Unified Modeling Language,统一建模语言;以图形方式描述软件的概念
UML图的分类-静态图
1.用例图(重点)
2.对象图
3.类图(重点)
4.组件图(重点)
5.包图
6.部署图(重点)
UML图的分类-动态图
1.协作图
2.序列图(重点)
3.活动图(重点)
4.动态图(重点)
通用的模型元素
通用的模型元素关系:
依赖;关联;继承;实现;聚合;组合,关键字,生命周期解释案例
用例建模:
用于描述系统的功能需求。
Use Case图,自顶而下不断精细化。
精细程度如何把控?
答:精确到相关方,画的图给谁看,精确到什么程度,相关方能看懂,并且得到符合预期的相应产出。
例子:
UML中的消息;
1.简单消息
2.同步消息
3.异步消息
UML时序图:
四大关键字:对象(类、服务器、)、活跃节点(节活错了,通激活)、消息线,生命线
对象流:
泳道:进一步描述完成的活动对象,并聚合一组活动;同时用到也是一种分组机制。
状态图:
状态变迁,典型案例,订单状态流程图
合作图:也称为协作图,少用
实现模型:
实现模型描述了系统实现时的一些特性,又称物理体系结构建模。包括源代码的静态结构、运行时刻的实现结构。
它包括:组件图、部署图
组件图:
部署图:
评论