搞 Java 的年薪 40W 是什么水平?
我 2014 年畢業(yè),現(xiàn)在工作 6 年了,目前年薪已經(jīng)超過了 40W。所以我來回答這個(gè)問題,應(yīng)該算是比較有發(fā)言權(quán)的,能代表了一部分人的情況。能達(dá)到年薪 40W,按我了解到的,有兩種可能性:一種是應(yīng)屆畢業(yè)生拿到大廠(BAT)的 SP Offer,另一種則是工作年限較長(三年以上)。
第一種情況,拿到 SP Offer 的人,畢竟是少數(shù),不然怎么能叫 SP Offer 呢。而要拿到 SP Offer 的前提肯定是你非常非常優(yōu)秀,而且可能畢業(yè)學(xué)校要不錯(cuò)。我一個(gè)中山大學(xué)碩士研究生畢業(yè)的同學(xué),前幾年畢業(yè)拿了華為的 SP Offer 也就 18K 的月薪,算上有 5 個(gè)月年終 ,那年薪也就 30W 左右吧。所以應(yīng)屆畢業(yè)生要拿到 40W 年薪還是蠻難的,而且也需要有不錯(cuò)的運(yùn)氣。
第二種情況,就是像樓主這樣的,工作年限較長,一路升級打怪慢慢漲到 40 萬年薪。下面聊聊要達(dá)到 40W 應(yīng)該有什么樣的水平。
我之前寫過一篇文章: 聊聊阿里面試的三個(gè)層次(https://mp.weixin.qq.com/s/lMkaBQaHHCHaLsFPz4UQew) 。在這篇文章里,我將阿里對面試者的能力分為了三個(gè)層次:基礎(chǔ)知識、項(xiàng)目經(jīng)驗(yàn)、項(xiàng)目深度。
基礎(chǔ)知識
能拿到年薪 40W 的人了,Java 基礎(chǔ)知識肯定是需要了熟于心的了。
對于 Java 開發(fā)崗位上來說,這些知識點(diǎn)包括但不限于:
-
集合 HashMap 的原理,與 Hashtable、ConcurrentHashMap 的區(qū)別?
-
Java 線程池的核心屬性以及處理流程
-
Java 并發(fā)包原理、Synchronized 關(guān)鍵字、鎖
-
線程的生命周期
-
JVM 類加載機(jī)制
-
JVM 內(nèi)存模型
-
JVM 分代以及垃圾回收機(jī)制
-
Spring Bean 容器生命周期
-
Spring AOP 原理
-
Dubbo 請求流程以及原理
-
數(shù)據(jù)庫 SQL 優(yōu)化、數(shù)據(jù)庫索引、索引原理
-
……
看到這么多的知識點(diǎn),我一下子就懵逼了,這么多得看到什么時(shí)候才看得完啊?但后面我想明白了,其實(shí)你不需要全部都懂,但需要了解大部分知識點(diǎn),并且在這大部分知識點(diǎn)中,還需要有部分是了解得非常深入的。如果達(dá)到這個(gè)水平,基本上都能通過考核。
關(guān)于這塊知識,其實(shí)我們需要將其體系化,形成自己的知識體系。我在去年工作五周年的時(shí)候,寫了一篇文章,梳理了一下目前我的知識體系:聊聊我的知識體系。這篇文章基本上就概括了年薪 40W 的我掌握了哪些知識點(diǎn),可能無法做到非常深入,但是絕大多數(shù)都使用過并且有一定了解。這塊的基礎(chǔ)知識,至少需要掌握的是:
-
集合源碼
-
并發(fā)集合源碼
-
并發(fā)包源碼
-
阻塞隊(duì)列源碼
-
線程池源碼
-
JVM 原理
基本上這幾塊東西,我面試的時(shí)候必問。如果回答不出來,不要說年薪 40W了,連 30W 都沒機(jī)會。
項(xiàng)目經(jīng)驗(yàn)
如果你知識掌握了上面的基礎(chǔ)知識,但是沒有不錯(cuò)耐看的項(xiàng)目經(jīng)驗(yàn),大概率還是拿不到 40W 年薪的。這里說的不錯(cuò)耐看的項(xiàng)目經(jīng)驗(yàn),指的是復(fù)雜度較高、有一定并發(fā)量的系統(tǒng)開發(fā)、設(shè)計(jì)經(jīng)驗(yàn)。
復(fù)雜度較高,可以簡單粗暴地理解為項(xiàng)目中使用到了消息隊(duì)列、緩存、微服務(wù),這幾個(gè)是最基礎(chǔ)的。稍微復(fù)雜些的,可以用到了 netty,用到了 ElasticSearch,用到了 Canal、Otter 等。越復(fù)雜越能從某一程度上說明你的技術(shù)實(shí)力。
除了用到這些復(fù)雜些的框架,你還要知道為什么要用這些框架,解決了什么問題,他們的應(yīng)用在哪些場景,優(yōu)缺點(diǎn)是什么。如果你只是在項(xiàng)目里打醬油,框架都沒用過,也不知道為啥要用,那這個(gè)項(xiàng)目對你來說沒有任何意義。例如我做過一個(gè)「會員信息搜索重構(gòu)項(xiàng)目」,其中用到了 ElasticSearch + Canal 去實(shí)現(xiàn)千萬級的實(shí)時(shí)搜索。
另一個(gè)項(xiàng)目是 IM 即時(shí)通訊的開發(fā)和改造,其中用到了 RocketMQ + Netty 去實(shí)現(xiàn)。
如果你有過類似這樣的項(xiàng)目經(jīng)驗(yàn),并且能把項(xiàng)目中涉及到的框架、技術(shù)都了解清楚,那么可以認(rèn)為你在項(xiàng)目經(jīng)驗(yàn)這塊已經(jīng)沒問題了。
項(xiàng)目深度
如果你有了上面的項(xiàng)目經(jīng)驗(yàn)之后,基本上你對整個(gè)項(xiàng)目都會有一個(gè)全面的認(rèn)識,應(yīng)用層面上的問題基本上不會難倒你了。但在「項(xiàng)目思考深度」的考核上,就不僅僅只是考核應(yīng)用層面上的問題了。
還是用我做過的一個(gè)搜索項(xiàng)目作為例子,其中 Canal 這個(gè)開源框架暫時(shí)是沒有實(shí)現(xiàn)集群這個(gè)功能的,那么面試官就問了:
-
你如何去改造這個(gè)項(xiàng)目,從而實(shí)現(xiàn) Canal 的集群功能?
這個(gè)時(shí)候,你會發(fā)現(xiàn)你懵逼了,因?yàn)槟銖膩頉]有去思考過這個(gè)問題。你所有的工作內(nèi)容都是在想如何使用開源框架,而沒有進(jìn)一步思考這些開源框架好不好,有什么可以改進(jìn)的地方。
所以,在這一個(gè)層次上考核的是你對開源框架的思考深度,這些框架到底好不好,好在哪里,不好在哪里,有什么可以改進(jìn)的地方。
對于「項(xiàng)目思考深度」的考核同樣發(fā)生在技術(shù)面試的三四輪。在這個(gè)層次上,你不僅要對項(xiàng)目本身理解足夠深刻,還要跳出項(xiàng)目本身,去思考開源框架本身的問題。
總結(jié)
在我的理解力,年薪 40W 的人應(yīng)該能夠獨(dú)立完成一個(gè)復(fù)雜系統(tǒng)的設(shè)計(jì),并且作為核心開發(fā)帶團(tuán)隊(duì)去完成系統(tǒng)的落地、交付。在我所在的公司里,我們有高級工程師(P5)和資深工程師(P6)之分,他們之間一個(gè)很重要的區(qū)別就是:是否能否獨(dú)立完成一個(gè)復(fù)雜的項(xiàng)目。
如果你能夠獨(dú)立完成一個(gè)復(fù)雜的項(xiàng)目,那么你才有資格升級為 P6,而我們公司 P6 的薪資才能達(dá)到 40 萬的年薪。如果只是 P5,那么大概只有25-30萬。但是要成為 P6,不僅僅要能獨(dú)立完成一個(gè)復(fù)雜的項(xiàng)目,還要求你在溝通能力、表達(dá)能力、項(xiàng)目管理達(dá)到一定水平。