极客大学架构师训练营 听课总结 -- 第一课
说明
架构师训练营会讲啥? 第一课还没开始之前,笔者猜会是从全局视角先整体概括。比如提供一个思维导图,涉及到的全部课程内容。类似演讲的总-- 分 – 总。
讲课老师 – 李智慧
1. 看书、上课等学习第一课的门道
读书的时候,看一本书的目录就可以看出作者的思路是什么。老师上第一课也是一样的道理,要告诉同学们: 要解决的问题是什么? 是如何解决的。
架构师不一定技术很牛,但是没有技术是不行的。
架构师最主要的靠悟性。悟性悟到了,就类似一层窗户纸,一捅就破,一点就通。
- 面对的问题、困难是什么?
- 解决的方法是什么?
- 真实的场景是什么?
- 用什么的思维方式去解决问题?
2. 架构师的核心输出是什么
掌握的能力:架构方案、架构设计
学了很多内容,任命为架构师,才能去做架构师。
成为架构师的途径有哪些?
- 跳槽,应聘为架构师。
- 内部晋升,任命为架构师。
3. 架构师的主要职责
- 编写架构设计文档
- 并发编程框架
- 重构软件代码
- 设计系统架构
- 进行技术选型,解决技术应用中的问题。
- 优化系统性能
- 模块分解与微服务架构重构
- 保障系统安全与高可用
- 大数据应用
- 技术创新
- 沟通管理
从招聘要求拆解架构师能力
架构师要求的能力
-
整体架构设计。
-
核心组件代码的实现、核心服务的实现。
-
定位系统瓶颈、提高系统性能、稳定性以及业务扩展性。如何去证明已经解决问题。
-
主导跨部门协作和负责功能的调研。跨部门最重要的关注点是什么?利益相关方的诉求是什么?边界是什么?如何平衡相关利益?如何沟通?就算架构设计比较清晰,如何满足更多利益方的需求,如何落地也是一种能力。
-
具备海量数据和大规模分布式系统的设计和开发经验。能通过学习获取到经验吗?通过学习可以提高经验,对成长是有帮助,有一些小技巧。比如,学习训练营以后,重新看以前的设计,是否有提高。比如,以前公司没有的功能,自身通过思考,设计出整个架构,也可以是应用的一种。
-
从设计到实现始终对齐业内一流产品水准。阿里巴巴平台架构组、Intel大数据开源组的PPT是怎么设计的?进步的空间在哪里?
-
对多种数据库中间件、消息中间件以及其他大规模数据选型。
-
领域模型、微服务架构
-
消息中间件、分布式事务等互联网应用架构
-
对Spring、MyBatis等常用开源框架应用经验丰富。框架的原则是什么? 能否设计出这个框架?设计框架关注点是什么?
-
数据结构有深刻的理解和优秀的编码能力、算法设计能力。
-
良好的沟通表达能力和团队协作能力。
4. 越多面的知识约牢固
老师讲的是一层面,自身的经验是一层面,自身的思考也是一层面,跟别人交流,多渠道学习。
面越多就越立体,面越多,知识才会越牢固。
这个很像GPS,要3颗以上的卫星校准会更准确。卫星信号越多,定位约准确。
5. 软件架构
如何写一个架构设计文档,文档中应该包含哪些方面的内容?
6. 如何面试别人?
面试的套路,不断的层层深入,要知道候选人的知识广度和深度?
- 自我介绍
- 讲一个你觉得最有技术含量的项目?考点:项目经验,强调业务背景,围绕问题这些点,是如何解决的?画一些时序图,流程图,组件图。要看语言组织能力,是否有条理性,方法是否成体系?提供的建议都能否定掉,那么就加分了。
- 具体的技术技能问题
- 手写代码,纸笔写一下10来行代码。
7. 面试的问题
这里要请教读者您,帮忙留言,笔者会补充并留名您的答案。
-
子类override父类的方法后,想要修改抛出的异常,那么子类方法抛出的异常类应该是父类方法抛出异常类的子类还是父类?
-
Spring 是如何实现单例的? 和设计模式中的单例实现方式有什么不同?
-
淘宝这样的大规模分布式互联网应用系统使用了哪些技术方案和手段?
主要解决什么问题? -
知道什么是CAP原理?请描述某个你熟悉的 NoSQL 产品是如何解决 CAP 问题的?
-
如何进行性能测试,性能测试的流程是什么?性能测试的主要关注指标有哪些?
-
为什么在系统性能测试的时候,随着并发请求数的逐渐增加,错误响应(或者响应超时)的比例快速增加?青葱操作系统的线程和进程调度原理以及计算机内部资源使用角度进行分析。
-
为什么支持异步I/O 的Web 服务器(比如 Nginx)要比阻塞式的 Web 服务器(比如Apache)性能好很多,前者要比后者可以处理的并发连接请求多几十甚至数百倍?请从异步 I/O 的线程阻塞特性进行分析。
-
给定一个key,为什么可以在Hash表中快速查找到 value?
-
数据库索引是如何存储的?
-
Java虚拟机的垃圾回收原理是什么?
-
什么是领域驱动设计, DDD的优缺点是什么?
-
导致系统故障无法正常访问的原因有哪些?保障系统稳定高可用的方案有哪些?请列举并描述。
-
为什么单项散列加密可以保护用户密码安全,请细化 week2 的时序图设计,使用单项散列表保护用户密码。
-
Spark为什么比MapReduce 快?
-
淘宝,头条这些应用会针对不同用户推荐不同的商品和内容,他们是如何做到的?用了哪些算法?
-
Google 搜索结果页面是如何排序的,正好使用户最想看到的页面排在前面?
-
区块链是如何保证数据无法被篡改的?
-
什么是边缘计算?
-
如果你觉得系统需要重构,但是老板和团队成员都觉得没必要,你如何说服大家?
8. 什么是软件架构
软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。
– 维基百科
架构类图,架构对象图
架构设计最重要的是,架构是给谁看的,要考虑到相关方的利益。老板,开发,测试,维护人员这些都是相关方,给每个不同的对象看,架构文档是不一样的。
架构元素:服务器,
元素间的关系:静态关系、动态关系
架构:
系统:
架构文档:
相关方
架构视图
关注点
9. 什么是架构师
架构师是做架构设计、对系统架构负责的那个人。
架构师是一顶帽子,而不是一把椅子;架构师是一个角色而不是一个职位。
主要你是做架构,那你就是架构师。如果你的公司,项目经理分配活了以后,程序员就开始开发。这就是个机会,那么你可以尝试画画架构图,分享给同事。多做架构的事情,你就是架构师了。