最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

Java 工程师的成长路线图是什么?

  • 2019-03-05
  • 本文字数:2663 字

    阅读完需:约 9 分钟

Java工程师的成长路线图是什么?

大家好,我是极客时间《Java核心技术36讲》作者、前 Oracle 首席工程师杨晓峰,今天,我想借自己的经历,跟大家分享 Java 工程师从新手进阶到专家的路线图是什么?有哪些阶段?每一阶段又该掌握哪些技能?


我经常能听到一些同学困惑,“面试造火箭,天天拧螺丝”,每天进行重复的业务开发,似乎自己的能力被日常工作限制,无法突破提高自己的能力水平。


我想说,难道懂得如何造火箭,还能没有实际价值吗?它的价值在于,当真的出现不可预测的、具有挑战性的任务时,你能不能 Hold 住。


举个真实的例子,前段时间周末,我被着急拉去优化一个 Go 语言开发的系统,马上要上线了但实际吞吐量与需求有数量级差距。对,你没看错,不是 Java 应用,而且我对 Go 的了解基本就是 HelloWorld 水平。下面我简单介绍一下,如何利用基础知识,快速定位问题,并通过两个代码量有限地修改,实现吞吐量的数量级提高。


  • 初始的表现是,非常低的负载下,CPU 利用率就已经超过 80%。首先,通过第 33 讲的类似过程,定位问题在于低效实现导致的高 CPU 占用问题,利用 Go Profiling 发现热点代码,据此快速查出一个最频繁操作的算法复杂度是 nlogn。

  • 修改为 logn 复杂度算法后,系统又表现出了新的特征,随着负载压力的提高,CPU 利用率无法超过 60%,内存、I/O 也还有很大余量,吞吐量虽然已经有数量级提高,但还是达不到设计目标。

  • 进一步分析发现在某共享模块,竟然有可观的同步开销,原来不必要的共享以及其实现内部采用的一些线程安全手段,限制了系统的扩展性。将该模块修改为非共享实例后,CPU/内存等计算资源就得到了充分利用,吞吐量基本达到理论峰值。


这个问题本身难度并不是很高,使用的也是基础知识和技能,但也能说明掌握扎实的“基本功”,可以让你剥开问题的表象,感受到技术本质的价值所在。


但是,我发现很多技术人不具备这种“解决问题”的能力,我觉得主要是以下 2 个原因:


  • 第一,“知其然不知其所以然”。做了多年技术,开发了很多业务应用,但似乎并未思考过种种技术选择背后的逻辑。

  • 第二,知识碎片化,不成系统。无法完整、清晰地描述自己所开发的系统,或者使用的相关技术。


我去年在极客时间推出的《Java核心技术36讲》专栏,就是希望可以让你可以透过问题看到本质,提高“解决问题”能力。在专栏里,我从 Java 核心知识点和能力出发,精选出 36 道 Java 面试题。每期针对 1 道题目,不仅会给出典型回答和考点分析,还会剖析 Java 核心知识点,将其讲清讲透,让你彻底领悟题目背后所考察的能力,帮你梳理复习 Java 知识体系。不管你是在准备面试、还是想进阶 Java,你都可以通过这个专栏,提升 Java 技能。


“德雷福斯模型”是一个常见的能力、水平划分方法,我们可以试着把 Java 工程师划分为新手、高级新手、胜任者、精通者和专家。


那如何找到自己所处的能力水平,通过学习和实践实现进阶呢?

一、新手

如果你是新手阶段,全面、扎实地掌握语言的基本要素是当务之急。在这个阶段我认为是有无限可能的,因此我并不建议完全用《Java 核心技术 36 讲》专栏作为 Java 语言入门的课程,而是更应该找到更基础的、系统的 Java 书籍或者课程。


你可以在正规的指导下飞速进步,并培养出良好的编码习惯。然后可以再结合专栏,看看 Java 技术领域典型的、长期的热点话题,了解业界通常从哪些角度判断你的能力和水平。


你可以从专栏的基础模块,看到 Java 领域长期的热点话题(十年前面试就会问,一直问到今天),比如:

二、高级新手

工作了几年,整天忙于业务代码,很容易困惑下一步的方向在哪里,相当多的程序员长期停留在高级新手的阶段。一个常见的表现就是发展成为了“面向搜索引擎”编程工程师,擅长快速利用开源项目或者以往成果,完成一些“OK”的工程任务。这本无可厚非,职业路线很多,未必每个人都想成为底层专家。


但是,如果想在技术领域更进一步,一定要避免下面两个问题。


  • 面对没见过的、一定规模的或者较高标准的问题时无所适从,具体表现为“领导,你看这样行吗?”。没做过互联网高并发应用,难道就不能对并发编程有相对深入的思考吗?比如,习惯了使用 Executors,你有没有思考过不同的线程池到底适合什么场景?当前的实现在未来业务量增长下可能出现什么问题?

  • 无法独立提供有说服力的、有深度的分析、设计和实现,比如业务系统运行一段时间就变慢,调整 Heap 大小,似乎仍然 OOM。目前团队处理的方式就是重启服务器,有没有想过去发掘真正的原因,真正去解决它?


我建议不要满足于这些表面的特征,要学会用白盒的视角看待技术内部,系统性的思路掌握普遍规律。即使未来你不在一线编码,或者未来不再使用 Java,同样的思维习惯和积累也是很有帮助的。

三、胜任者

那如何才能算是摆脱了高级新手的阶段呢?或者换句话说,如何成长为团队的核心成员?这取决于你能背多大的锅、填多大的坑,比如你已经可以:


  • 独立负责做 GC 调优,即使没有历史经验,也能给出有说服力的方案。

  • 在 JVM 领域有充足的技术经验和知识储备。

  • 全面评估评估后台变慢等问题的复杂度、风险点、解决的可能性。

  • 对于所谓本质的思考和理解,能听懂深入的抽象观点。


并且,除了 Java/JVM,还要掌握更完整的技能树,例如分布式系统设计、数据库隔离级别选型等。


其实,《Java核心技术36讲》专栏的内容也是为了提醒胜任者,在实际工作中往往不会界限分明,团队核心往往要能够 Hold 住不同技术领域、切换不同角色,比如架构设计、核心代码开发、紧急线上问题攻关等。


掌握将“OK”的事情做到“excellent”程度的能力,不断地进行高效实践、领域的扩展和精深,我们就可以达到并超过胜任者,逐步成为精通者和专家。

四、精通者和专家

如果你已经精通 Java 语言或者是特定领域的专家了,那这个专栏对你的帮助可能体现在不同角度,可以当作特定领域的、不同视角吧。例如,在这个阶段,精通者或专家能够:


  • 提炼并发工具类的一般性指导方法。

  • 告诉团队如何写出安全的 Java 代码,防范看似安全下隐藏的风险。

  • 借鉴 Java/JVM 中的一些技术,从基础能力上提高自身平台的能力。例如,PHP 7 中引入的 JIT,带来了极大的性能提升,第 35 讲中对 JIT 的介绍,就有了新的用武之地。

  • 如何通过 Container-Aware 技术,提高 Kubernetes 集群中 JVM 负载的可靠性。

  • 创造某一类问题的解决方法。例如,似乎 Java 工程师动不动就是 Happen-Before,除了耍酷,能不能从更高的高度看待:JMM 是如何实现了编译器工程师、JVM 工程师、Java 开发者甚至不同厂商之间的一致性规范?如何创造性地避免了早期 C++内存模型在不同厂商之间的混乱?

专栏读者评价

专栏订阅量稳居极客时间 Top 3,好评多多,部分如下:



2019-03-05 18:146276

评论 2 条评论

发布
用户头像
确实略软,没啥实质的东西
2019-03-06 09:25
回复
用户头像
软文
2019-03-06 08:34
回复
没有更多了
发现更多内容

爆款阿里P5到P7晋升之路,九大源码文档助我超神果然努力幸运并存

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

细说JavaScript正则表达式(RegExp)

devpoint

正则表达式 regex JavaScrip 8月日更

我为什么不建议大家等公司倒闭之后,再找工作!

非著名程序员

面试 认知提升 招聘管理 8月日更

缓存知识总结

十二万伏特皮卡丘

秒杀系统设计-超卖问题

泽睿

秒杀 秒杀系统

震惊!300多页美团百亿级系统架构设计实录首公开

Java 编程 架构 面试 架构师

Alibaba22届校招启动!连夜整理一份七大专题Java架构速成笔记

Java~~~

Java 架构 面试 阿里 校招

这份阿里P8级别内部疯传的“Linux私房菜”让你一次吃个饱

Java 编程 程序员 IT 计算机

一夜标星过百万,轻松霸榜GitHub的手绘图解HTTP笔记,竟来源阿里

Java~~~

Java 架构 面试 网络 HTTP

MySQL 系列教程之(二)Windows 安装 MySQL5.7.17

若尘

MySQL 8月日更

MySQL 系列教程之(三) MySQL 基本概念和操作

若尘

MySQL 8月日更

大专的我狂刷29天“阿里内部面试笔记”最终直接斩获十七个Offer

Java 程序员 架构 面试 IT

一切努力似乎都徒劳?|靠谱点评

无量靠谱

【LeetCode】股票的最大利润Java题解

Albert

算法 LeetCode 8月日更

终于拿到了阿里2021年度九大Java技术文档——面试题+文档+白皮书

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

前方高能!Alibaba最新出版的JDK源码剖析手册(究极奥义版)开源

Java~~~

Java 架构 jdk 面试 架构师

腾讯跟阿里两位王者之间的对比

Linux服务器开发

腾讯 阿里 C/C++ Linux服务器开发 Linux后台开发

FastApi-14-文件上传-2

Python研究所

FastApi 8月日更

Alibaba12年技术老兵整理的“MySQL 学习笔记”带你轻松拿捏MySQL

Java~~~

Java MySQL 数据库 架构 面试

马士兵老师亲自总结3000+道Java面试题,刷完吊打架构师面试官

Java 程序员 架构 面试 计算机

网络攻防学习笔记 Day105

穿过生命散发芬芳

态势感知 网络攻防 8月日更

DAPP钱包开发模式详细介绍

Geek_23f0c3

dapp 钱包系统开发 DAPP智能合约交易系统开发

Java的四种引用类型

W🌥

Java JVM 8月日更

校友名片小程序设计方案

CC同学

小程序云开发 校友小程序

netty系列之:使用UDP协议

程序那些事

Java Netty nio udp 程序那些事

解除限制!Alibaba不在低调,P8大神纯手撸300页Java高并发手册

Java~~~

Java 架构 面试 高并发 架构师

上线仅仅三小时,豆瓣评分均9.0的“四本程序员必刷书籍”火了

Java 编程 面试 IT 计算机

网络安全证书合集系列

网络安全学海

网络安全 证书 信息安全 渗透测试 安全漏洞

被boss直聘转发过多而“封杀”的2021年全套java高级面试题有多牛

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

猎杀时刻!阿里高工总结698页Spring学习笔记,疯狂狩猎大厂offer

Java~~~

Java spring 架构 面试 微服务

“硬钢字节”阿里大牛分享内部数据结构与算法(诛仙版)源码笔记

Java~~~

Java 架构 面试 算法 数据结构与算法

Java工程师的成长路线图是什么?_语言 & 开发_杨晓峰_InfoQ精选文章