文章首发于【陈树义的博客】,点击跳转到原文https://www.cnblogs.com/chanshuyi/p/how_to_earn_400_thousand_per_year.html
我 2014 年毕业,现在工作 6 年了,目前年薪已经超过了 40W。所以我来回答这个问题,应该算是比较有发言权的,能代表了一部分人的情况。能达到年薪 40W,按我了解到的,有两种可能性:一种是应届毕业生拿到大厂(BAT)的 SP Offer,另一种则是工作年限较长(三年以上)。
第一种情况,拿到 SP Offer 的人,毕竟是少数,不然怎么能叫 SP Offer 呢。而要拿到 SP Offer 的前提肯定是你非常非常优秀,而且可能毕业学校要不错。我一个中山大学硕士研究生毕业的同学,前几年毕业拿了华为的 SP Offer 也就 18K 的月薪,算上有 5 个月年终 ,那年薪也就 30W 左右吧。所以应届毕业生要拿到 40W 年薪还是蛮难的,而且也需要有不错的运气。
第二种情况,就是像楼主这样的,工作年限较长,一路升级打怪慢慢涨到 40 万年薪。下面聊聊要达到 40W 应该有什么样的水平。
我之前写过一篇文章:聊聊阿里面试的三个层次。在这篇文章里,我将阿里对面试者的能力分为了三个层次:基础知识、项目经验、项目深度。
基础知识
能拿到年薪 40W 的人了,Java 基础知识肯定是需要了熟于心的了。
对于 Java 开发岗位上来说,这些知识点包括但不限于:
-
集合 HashMap 的原理,与 Hashtable、ConcurrentHashMap 的区别?
-
Java 线程池的核心属性以及处理流程
-
Java 并发包原理、Synchronized 关键字、锁
-
线程的生命周期
-
JVM 类加载机制
-
JVM 内存模型
-
JVM 分代以及垃圾回收机制
-
Spring Bean 容器生命周期
-
Spring AOP 原理
-
Dubbo 请求流程以及原理
-
数据库 SQL 优化、数据库索引、索引原理
-
……
看到这么多的知识点,我一下子就懵逼了,这么多得看到什么时候才看得完啊?但后面我想明白了,其实你不需要全部都懂,但需要了解大部分知识点,并且在这大部分知识点中,还需要有部分是了解得非常深入的。如果达到这个水平,基本上都能通过考核。
关于这块知识,其实我们需要将其体系化,形成自己的知识体系。我在去年工作五周年的时候,写了一篇文章,梳理了一下目前我的知识体系:聊聊我的知识体系。这篇文章基本上就概括了年薪 40W 的我掌握了哪些知识点,可能无法做到非常深入,但是绝大多数都使用过并且有一定了解。这块的基础知识,至少需要掌握的是: -
集合源码
-
并发集合源码
-
并发包源码
-
阻塞队列源码
-
线程池源码
-
JVM 原理
基本上这几块东西,我面试的时候必问。如果回答不出来,不要说年薪 40W了,连 30W 都没机会。关于这几块知识点,我梳理了一些系列文章,感兴趣的同学可以翻翻看。
- 集合源码系列文章:01.集合系列 - 随笔分类 - 陈树义 - 博客园
- JVM 基础系列文章:05.JVM基础系列 - 随笔分类 - 陈树义 - 博客园
- JVM 规范系列文章:06.JVM规范系列 - 随笔分类 - 陈树义 - 博客园
文章首发于【陈树义的博客】,点击跳转到原文https://www.cnblogs.com/chanshuyi/p/how_to_earn_400_thousand_per_year.html
项目经验
如果你知识掌握了上面的基础知识,但是没有不错耐看的项目经验,大概率还是拿不到 40W 年薪的。这里说的不错耐看的项目经验,指的是复杂度较高、有一定并发量的系统开发、设计经验。
复杂度较高,可以简单粗暴地理解为项目中使用到了消息队列、缓存、微服务,这几个是最基础的。稍微复杂些的,可以用到了 netty,用到了 ElasticSearch,用到了 Canal、Otter 等。越复杂越能从某一程度上说明你的技术实力。
除了用到这些复杂些的框架,你还要知道为什么要用这些框架,解决了什么问题,他们的应用在哪些场景,优缺点是什么。如果你只是在项目里打酱油,框架都没用过,也不知道为啥要用,那这个项目对你来说没有任何意义。例如我做过一个「会员信息搜索重构项目」,其中用到了 ElasticSearch + Canal 去实现千万级的实时搜索。
另一个项目是 IM 即时通讯的开发和改造,其中用到了 RocketMQ + Netty 去实现。
如果你有过类似这样的项目经验,并且能把项目中涉及到的框架、技术都了解清楚,那么可以认为你在项目经验这块已经没问题了。
项目深度
如果你有了上面的项目经验之后,基本上你对整个项目都会有一个全面的认识,应用层面上的问题基本上不会难倒你了。但在「项目思考深度」的考核上,就不仅仅只是考核应用层面上的问题了。
还是用我做过的一个搜索项目作为例子,其中 Canal 这个开源框架暂时是没有实现集群这个功能的,那么面试官就问了:
- 你如何去改造这个项目,从而实现 Canal 的集群功能?
这个时候,你会发现你懵逼了,因为你从来没有去思考过这个问题。你所有的工作内容都是在想如何使用开源框架,而没有进一步思考这些开源框架好不好,有什么可以改进的地方。
所以,在这一个层次上考核的是你对开源框架的思考深度,这些框架到底好不好,好在哪里,不好在哪里,有什么可以改进的地方。
对于「项目思考深度」的考核同样发生在技术面试的三四轮。在这个层次上,你不仅要对项目本身理解足够深刻,还要跳出项目本身,去思考开源框架本身的问题。
总结
在我的理解力,年薪 40W 的人应该能够独立完成一个复杂系统的设计,并且作为核心开发带团队去完成系统的落地、交付。在我所在的公司里,我们有高级工程师(P5)和资深工程师(P6)之分,他们之间一个很重要的区别就是:是否能否独立完成一个复杂的项目。
如果你能够独立完成一个复杂的项目,那么你才有资格升级为 P6,而我们公司 P6 的薪资才能达到 40 万的年薪。如果只是 P5,那么大概只有25-30万。但是要成为 P6,不仅仅要能独立完成一个复杂的项目,还要求你在沟通能力、表达能力、项目管理达到一定水平。
文章首发于【陈树义的博客】,点击跳转到原文https://www.cnblogs.com/chanshuyi/p/how_to_earn_400_thousand_per_year.html
原文发表于知乎回答:搞 Java 的年薪 40W 是什么水平? - 陈树义的回答 - 知乎