首頁 > 軟體

搞 Java 的年薪 40W 是什麼水平?

2020-09-23 08:30:41

文章首發於【陳樹義的部落格】,點選跳轉到原文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 都沒機會。關於這幾塊知識點,我梳理了一些系列文章,感興趣的同學可以翻翻看。

文章首發於【陳樹義的部落格】,點選跳轉到原文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 是什麼水平? - 陳樹義的回答 - 知乎


IT145.com E-mail:sddin#qq.com