全栈
本文主要是看过极客时间“左耳朵耗子”《左耳听风》课程的一篇总结,由于这个课程涵盖的知识面积非常广,所以没有像原课程名字那样富有诗意,姑且这篇总结就叫做全栈开发吧。我这里会将原文内容提炼,有些精华领悟了就没有在这里码字,喜欢的话大家可以去购买课程。
管理
技术领导力
具有技术领导力的工程师所具有的特质:能够发现并简单优雅地解决问题,了解不同方案的优缺点,代码高性能、可复用、可扩展、易维护,能够用正确方式管理团队,发挥每个人潜力以及提高团队效能,并具有创新能力。
为了具备以上特质需要有扎实的基础技术,非同一般的学习能力,坚持做正确的事,不断提高对自己的要求标准。以上几点中,要做到做正确的事可以包括:提高效率,自动化,掌握前沿技术,知识密集型,技术驱动。同时,我认为坚持做正确的事也是最难的,它受到太多外在因素的影响。
对于一个普通的开发人员来说,写代码的过程中,你明明发现有个地方需要重构优化,但是你做了得不到任何利益,不做的话也没有人说你,你愿意花自己的时间加班做这个工作么,我想几十个人里才能挑出一个人愿意这样做的,受益的看起来是公司,其实是你自己。
对于一个管理者,谁都知道代码审核作用很大,但是有几个公司能做到真正的代码审核,不忙的时候什么都可以做,只要一忙起来神马都是浮云,然后进入恶性循环。
领导
让大家追随 Leader 的素质包括:赢得他人的信任,开放的心态,以身示范,保持热情和冲动,抓住事物本质,描绘令人向往的方向,为他人创造机会。
分布式技术
高性能:缓存、负载均衡、异步调用(消息队列)、数据镜像(读写分离)、数据分区
高可用:拆分、冗余、限流降级、多活、监控及 DevOps
高可用
可用性 = 平均故障前时间/(平均故障前时间 + 平均修复时间)
系统可用性% | 右对齐 | 宕机时间/月 | 宕机时间/周 | 宕机时间/天 |
---|---|---|---|---|
90% | 36.5天 | 72小时 | 16.8小时 | 2.4小时 |
99% | 3.65天 | 7.2小时 | 1.68小时 | 14.4分 |
99.9% | 8.76小时 | 43.8分 | 10.1分 | 1.44分 |
99.99% | 52.56分 | 4.38分 | 1.01分 | 8.66秒 |
99.999% | 5.26分 | 25.9分 | 6.05秒 | 0.87秒 |
故障分类:网络问题、性能问题、安全问题、运维问题、管理问题、硬件问题等
“补偿事务”
基于 CAP 理论,分布式不能做到 C(一致性) A(可用性) P(分区容错)三者同时保证,分布式的话必须保证 P,CP 和 AP 的结合时,大多数应用场景都是需要 CP,保证数据一致性。
CAP 理论后又出现了 ACID(“酸”,A 原子性、C 一致性、I 隔离性、D 持久性) 和 BASE(”碱” BA 基本可用、S 软状态、E 最终一致),二者的差别是“酸”强调一致性(C),“碱”强调可用性 (A)
“限流设计”
回顾到这里的时候,正好读到刘超的《趣谈网络协议-云中网络的QoS》讲到网络流量控制技术,再看看限流技术两者惊人相似。实现方式包括队列算法、漏斗算法、令牌桶算法。
“数据库扩展”
数据库扩展的方式有读写分离(CQRS)、分库分表(Sharding),
CQRS(Command and Query Responsibility Segregation 命令与查询职责分离),也就是将命令(写操作,包括增删改)与查询(读操作)做好区分。
分库分表在之前的文章 Architeture 中也有提及,这篇文章提及分片策略,主要通过多租户 ID 来分(如商家ID)、数据种类(如商品库类目)、范围(订单时间)、哈希算法(主键 id % 3 之类)。
高效学习
系统学习模板
- 技术出现的背景、要解决的问题
- 技术优势、劣势
- 技术适用场景
- 技术组成部分和关键点
- 技术的底层原理和关键实现
- 已有的实现和它之间的对比
学习到的知识要能做到举一反三,做到这点需要联想能力,联想到其他事物的应用;抽象能力,找到通用模型;自省能力,即思辨,利用批判性思维进行思考。
推荐书籍
基础知识
《深入理解计算机系统》《计算机的构造和解释》
《算法导论》《算法》《算法图解》《编程珠玑》
《设计模式》《Head First 设计模式》
《领域驱动设计》《Unix 编程艺术》《架构整洁之道》
《设计模式》《重构》《代码整洁之道》《修改代码的艺术》《程序员的职业素养》
《UNIX 环境高级编程》《Windows 核心编程》《鸟哥的 Linux 私房菜》
《UNIX 网络编程》《TCP/IP 详解》
《C 程序设计语言(第 2 版)》《Effective C++》《More Effective C++》
《Java 核心技术(卷1)》《Spring in Action》《Spring Boot 实战》《Effectvie Java》《Java 并发编程实战》《Java 性能权威指南》《深入理解 Java 虚拟机》《Java 编程思想》《精通 Spring 4.x》
《MySQL 必知必会》《高性能 MySQL》《MySQL技术内幕:InnoDB存储引擎》《数据库的索引设计与优化》
《HTML 5 权威指南》
《别让我思考》《简约至上》《认知与设计:理解 UI 设计准则》
《完美软件:对软件测试的各种幻想》《Google 的软件测试之道》
《程序员修炼之道》《人月神话》
《技术领导之路》《卓有成效的管理者》
非技术类
《重来》《清醒思考的艺术》《简单逻辑学》《沟通的艺术》