乐趣区

关于java:成长为软件教练的三千大道之一

摘要:本文次要介绍的是沿 Java,散布式微服务架构,大数据与流计算,Linux OS 与中间件,AI,这样一套功法,来探讨从一个刚毕业的理科生,如何修炼到软件教练这个档次。以及对更高层境界的畅想。

本文次要介绍的是沿 Java,散布式微服务架构,大数据与流计算,Linux OS 与中间件,AI,这样一套功法, 来探讨从一个刚毕业的理科生,如何修炼到软件教练这个档次。 以及对更高层境界的畅想。

师傅领进门,修行在个人。我在本文中只指出路线,相当于一次将全套功法给你。但修行的路还请本人致力。不明确的中央,Google 是个金手指。我会看大家对具体哪里更感兴趣,后续将其开展讲一下,作为一个系列。大家能够留言给我。

首先第一阶段,对应炼气期。你要把握:

1,Java: 俗称 JAVASE。不仅仅指 Java 语法,还包含 JDK 的应用。这块常识十分惨重也十分重要。沉下心花几年工夫学好它。举荐学习形式:

a)《Effective Java》。让你感触下 Java 外面的弯弯绕绕,并不是语法体现的那样傻白甜。

b) SCJP 考试。当初可能改名为 OCJP 了也说不定。全方位让你理解 Java 及外面的细节。十分重要。

c)《并发编程实际》。必读刊物。多核 CPU 自带 L2 cache 却共享内存和线程,简单的锁,一行 Java 代码被编译为多行机器指令而 CPU 在任意机器指令间都可切换线程。面对这么简单的硬件环境,Java 是如何设计保障程序正确的。

2,麻利开发: 麻利开发不是靠书学的(尽管也有书),而是靠实际来感悟的。就像卖油翁,不去倒油光靠看老翁写的心得,永远不会倒油。

3,算法与数据结构:

a) Leetcode 刷题。尽管只有极少的开发会用到算法,但这是能力的体现。不要认为就是个链表反转,至多要把动静布局级别的算法搞懂。

b)《算法导论》。读读就行了。心愿你能读懂。

4,测试: 要理解测试同学如何写测试用例,如何保障 code coverage,如何做自动化。

当下面理解的七七八八后,你自然而然就会产生心灵上的感悟从而进阶至筑基期。你要把握:

1,设计模式:《设计模式》,Gang Of Four。四杆老枪的设计模式(我可没开车),教会你面对各种经典场景如何结构类群。

2,JVM 原理:《深刻了解 Java 虚拟机》。我刚工作时,大略 06 年,如果那时候有人说对 JVM 原理很懂,那就属于国内顶尖的技术人才了。当初常识的获取形式越来越不便了,比方浏览本文。你须要理解 JVM 如何应用内存,如何 GC,如何调整启动参数,如何查看各种 dump 文件等等。

3,网络编程: 书籍临时没有举荐。反正就是要搞懂 HTTP/WebSocket 与 TCPIP 与 Socket 的关系等常识。

4,分布式系统中各种中间件:

a) Dubbo。国内最出名开源我的项目。无中心化分布式架构的外围。取代了 IBM 的 SOA 产品(中心化架构造成性能瓶颈)。

b) ZooKeeper。Zookeeper 小红书。分布式系统数据一致性协调工具。单机过程,代码执行被认为是齐全牢靠的,要么执行胜利要么执行失败。而到分布式系统,网络调用偏多进去一个超时。分布式系统之所以比单过程简单那么那么多,都是这独独一个超时闹的。了解 CAP,了解分布式系统数据一致性,是分布式系统不出错的保障。你素来没看见银行转账时给你少转过一分钱吧?

c) Kafka。《Kafka 权威指南》。要了解其为什么那么快又那么牢靠又那么存储空间大。同时也是了解幂等性最不便的零碎。

d) Redis。《Redis 设计与实现》。理解了前述的常识,Redis 就是个菜。无非多了个谰言协定,一致性哈希环,跳跃表,哨兵,长久化形式而已。

e) MySQL(伪装其也是中间件好了)。《MySQL 高性能》,《MySQL 技术底细:InnoDB 存储引擎》。要理解红黑树和索引的实现形式,理解 innodb 存储引擎的工作原理,你能力更好的了解 explain sql 后进去的各种回显后果,帮忙你更好调优 sql。MyISAM 被废除了,你能够少看一本书了,偷着乐吧,少年。

f) Nginx。之所以能有多个幂等节点存在,就全靠它了。学一下它的单线程技术。明明是单线程却能做到高性能。“我就是看不上你多线程,咋啦?”唯有真正了解计算机原理能力返璞归真。

g) Netty。《Netty 权威指南》。你有没有感觉到在 2002 年后的某一年,就在短短一两年内,计算机网络忽然提速了?02 年 JDK1.4,04 年 Netty。原本计算机网络性能被阻塞在 IO 上。但 NIO 大幅度晋升了 IO 效率。Go 语言为什么曾那么火?它的 MPG 模型还是找的 IO 阻塞的茬,使得多线程并发会更快。学一下 Linux IO 模型,零拷贝技术。了解计算机原理能力做到真正性能优化。我猜想,在 JDK 反对了 NIO 之后,Tomcat 等 web 容器很快就进行了 IO 模块的更新,之后各大网站的 Tomcat 跟着降级,于是在全世界硬件资源没变的状况下,网络站点服务器的并发响应能力大幅晋升。顺便说一句为什么 Java 语言会长盛不衰。因为任何新语言的个性,比方 Go 的 MPG 模型,Reactive 模式等,很快就会被 Java 抄过来。Java 已有 AKKA 并胜利用于 Flink 等出名我的项目了。而 Go 想抄 Java 的益处,短时间很难达成。

h) Flume。一个日志收集传输零碎。

i) ProtoBuf。序列化也是性能中须要重要关注的中央。

j) Tomcat。太有名了。学学其 classloader 的设计。

5,JAVAEE 仍然有用的常识: 比方 servlet,JMX 等。哎,一个时代的闭幕。

6,编译原理与操作系统: 我假如你上大学时候就学过了。没有的话,至多操作系统要读一下。就读清华大学的本科教材吧。

7,分布式数据库体系架构: 第 4 条讲的是内存网络的分布式架构。这条要讲长久化存储的分布式架构。分库分表,异构索引,数据库主备等。《数据密集型零碎设计》,这本书很赞,堪称存储设计的通史。

8,Spirng and Mybatis: 怎么说呢,你能读懂源代码当然更好。

9,前端与 CDN: 至多要理解一下。

10,UML 建模: 教会你如何意识世界并转到计算机系统里来。《UML 用户指南》。

上个境界,是最难降职的了。多少开发们被阻在这步一辈子不得后退了。因为既要承当沉重的开发工作,又要学习那么多的常识,还要解决集体的生存,太难了。这些常识对你的晋升又只是相加,不是相乘的关系。熬过去后海阔天空。好了你当初是金丹期了,你的很多要持续学的常识,都是靠前面给你打基础的,你会发现你的晋升曲线斜率越来越抖了。你要把握:

1,架构设计方法论: 做事要有章法。《软件架构设计》。

2,畛域驱动设计: 软件是真实世界在计算机中的虚构映射。如何让软件更贴近真实世界,读一下 Eric Evans 的《畛域驱动设计》。很艰涩,不太容易懂。

3,中台: 中台这个词当初这么火,怎能不提一下。平台是啥兴许你还不分明,那就先理解一下中台。

4,高性能调优: 还是那句话,真正理解计算机及 runtime 的实质,能力做到性能调优或 Hacker。《性能之巅》。

5,稳定性建设: 对付看《逆流而上》。然而稳定性和上述的性能调优,是真正体现程度的中央。还有 Google 的《Google SRE》。

6,两地三核心容灾零碎建设: 这个目前我还不分明有什么书。如果的确没有的话,能够趁机出一本抢占市场。

7,全链路压测: 又是测试。但又不仅仅是测试。对系统的性能瓶颈节点的探查,对系统 QPS 的掌控。单单一个起压机就不容易设计。

8,大数据: 首先,你须要跨多个畛域开始理解更多的常识。其次,你会发现我对技术的介绍粒度开始越来越粗了。因为你之前打的根底 – 粗粒度之下用来撑持的细粒度常识,曾经失效了。再而后就是我会缩小举荐书籍。到了这里你应该造成本人的常识体系了,也就会找书了。离线海量数据存储与计算的 Hadoop。将 Hadoop 变的更易用些的 HIVE。在线海量数据存储的 HBase。批计算的 Spark。流计算的 Flink。自成一套 ELK,尤其赫赫有名弹性搜寻。时序数据库 Druid。

9,数据仓库: 大数据都学了,顺便也就把数仓学了呗。棘手的事而已。

10,IC:HCIE, 这个我就不班门弄斧了。

11,网络安全: 我也不懂。汗。

12,Linux OS。 可不仅仅是应用命令操作系统而已。当然,即便是这样也不容易了。

当你还要再持续降职,就波及到我也不齐全了解的境界了。

1,中间件的实现细节:作为业务侧的技术架构师,通常会把存储和网络的需要下压给中间件团队。然而他们是怎么实现的呢?细节重要的点是什么?

2,应用 Master Slave 模式,Spark 等是如何实现分布式工作合成并确保计算正确的?

3,Docker 虚拟化技术。

4,Yarn 的资源分配技术。

5,计算机网络等。

6,再扩大一下技术畛域,触角伸到 AI 畛域。那么数学根底,各种论文与算法实现。又或者应用算法来赋能某个具体的业务畛域比方 AI 赋能新批发。

7,也能够往 IOT 方向倒退。随着 5G 的倒退,这个应该也很火。继续看好。

本文分享自华为云社区《成长为软件教练的三千小道之一》,作者:华为云小月老师

点击关注,第一工夫理解华为云陈腐技术~

退出移动版