1. 程式人生 > >同樣是Java開發,為什麼別人年薪五十萬而你卻只有15萬?

同樣是Java開發,為什麼別人年薪五十萬而你卻只有15萬?

在這個IT系統動輒就是上億流量的時代,Java作為大資料時代應用最廣泛的語言,誕生了一批又一批的新技術,包括HBase、Hadoop、MQ、Netty、SpringCloud等等 。

一些獨角獸公司以及騰訊、阿里、百度、網易等知名大廠對Java人才的需求量連年升級,有2年工作經驗的優秀程式設計師能輕鬆達到30w+的水平,但與此同時對人才的要求也越來越高

比如,大廠的面試官經常會以如下句式來詢問:

聊一聊你對JVM的原理,如何減少Full GC的情況?

針對高併發場景,如何優化,都採用了什麼技術?

相比關係型資料庫,NoSQL的優勢在哪裡,你們在什麼場景下會用到?

可以看到,對於社招同學而言(特別是有2~5年工作經驗的同學),不僅僅會問一些程式語言、設計模式等基礎問題,還要對一些專案有深入的實戰經驗。

但現實卻是,很多同學在技術生涯最初幾年都會沉浸在業務開發中,忽視了對系統知識的梳理和技術視野的擴充套件。日復一日,導致很多同學就以為這就是技術的全部,同時在重複的體力勞動中也喪失了對技術細節的深入探討。

每個程式設計師都追求“成就感”,而獲得成就感最好的方式就是自己在技術上的突破。

技術的突破需要依賴業務場景的需求和自身刻意的規劃學習,二者缺一不可,但前者是機會,往往不是自己能完全把控的,如果在自己工作中沒有實踐場景,最好的辦法就是系統的學習與梳理,為自己制定一個不同時間段的發展道路,待機會來臨時就能一展身手。

以工作前5年的規劃為例,至少需要突破三個層次:

Part.1

對程式碼精益求精

最開始工作的時候,我們會抱怨業務需求對技術沒挑戰,覺得在學校學到的這麼多知識卻沒有用武之地。

實質上這是忽略了技術開發的本質,技術開發是一個工程專案,而工程專案的落地最重要的就是細節控制,也就是程式碼的品質,比如:

程式碼是否遵循了規約?介面設計的是否隨意?測試用例是否都通過?

滿屏的if-else是否可以用合理的設計模式來替代?有沒有遵循SOLID原則,KISS原則?

有沒有考慮用更合理的資料結構和演算法改變程式碼的複雜性,提升執行的效能?

程式碼出bug的概率有多大,能否降低?

這是程式設計師的立足之本,基本是工作1年左右要達到的。在這一階段看書是比較好的提升方式,比如:《Java程式設計思想》、《effective java》等。但要注意的是,在看書的過程中一定要思考能否運用書中的經驗來改善自己寫的程式碼,運用到實處,比如看到final和static,想想自己程式碼中用的是否合理。

Part.2

跳出來,主動了解技術全貌

在將基礎打牢之後,需要主動突破舒適區,不斷的去擴大自己的技術視野,做到有廣度。

這一步比較難,因為很多同學會被公司的技術和業務牽著走,比如公司當前的業務規模決定了技術上不需要分散式技術,那麼很多同學就不會去思考如果規模大了之後,如何利用分散式技術解決該問題。

如何解決這個問題?除了尋找更大規模的業務外,要時刻保持時刻跳出當前層級和環境來思考的習慣。比如,你只用了關係型資料庫,那麼有沒有想過資料一直產生,到達TB級別的時候該如何快速檢索與儲存呢?

此外,技術的全貌還包括各種技術之間的關係,你用了Dubbo,那麼Duboo和Netty是什麼關係,為什麼會用到Zookeeper呢,和Spring Cloud又是什麼關係?如果能在學習新技術的時候,將繁雜的技術關係理順,會有一覽眾山小的感覺。

在工作的2~3年時間內達到這個水平,30w的年薪就離你不遠了。

Part.3

不去造輪子,

提是得知道輪子的內部結構

如果說,第二步是增加你的知識廣度,那麼造輪子就是增加你的技術深度,通過造輪子,才能真正把握技術的來龍去脈。

很多人信奉“不去造輪子”,看似價效比很高的一句話,卻不知道這句話是有前提的,那就是“你得知道輪子的內部結構”,否則就是自我麻痺。接下來需要選擇某一個或幾個方面深入研究下去,構建自己的核心競爭力。

比如,訊息佇列在高併發分散式系統中一個及其重要的元件,起到削峰填谷、系統解耦的作用。我們以消費端如何快速獲取資料來看思維是如何一步步深入的:

首先消費端要想及時獲取資料,是否需要建立一個長連線?長連線的實現方式如何?

資料是通過push還是pull方式給到消費端,各自有什麼弊端?

如果消費失敗,可能是哪些原因引起?如果是因為網路原因引起,該如何解決?

這些問題都會在你自己造輪子的過程中暴露出來,從而加深你的理解和技術深度,一個有技術深度的程式設計師才是有靈魂的。而大廠也是願意為有趣的靈魂買單的,這個時候看的就不僅僅是工資水平,更多的是在於晉升和發展前景的廣闊性。

 

在Java語言上有所建樹的開發者,都經歷過以上3個層次。但可惜的是,囿於外界環境和自身設限,大部分的Java開發者卻只停留在了第一個層次中,在日復一日的體力勞動中喪失了對技術細節的深入探討,也喪失了晉升和薪資談判中的籌碼。

如何過渡到第二、三個層次?除了上文談到的內容,這裡我還想給你2個切身的建議:

1、擴寬自己的眼界,學著從全域性看待問題,並且勇於挑戰別人眼中的難題

2、持續提升你的學習能力,雖然有很多人以「在公司學不到東西」為理由離職,但你要知道:公司的目的是盈利。盈利的前提下,公司會盡力培養你,但是更多的時候能力成長還是得靠自己。學習能力弱的人,在哪裡都沒用。

如果你依然覺得有些茫然,不知從何下手學習 我給你推薦一份Java架構進階路線圖,裡面涵蓋當前網際網路最火技術,你可以按照路線圖自己一步一步學習也可以加入Java填坑之路:860113481跟著大牛學習~

架構築基篇

效能優化如何理解

常用工具調優

linux基礎與進階

開源框架篇

Sprng5框架

AOP原始碼解析

Mybatis

IOC原始碼解析

Spring MVC

高效能架構篇

分散式架構思維

分散式協調和分流

高可靠資料儲存

快取和NoSQL

非同步與訊息中介軟體

分散式解決方案實戰

微服務架構篇

SpringBoot

SpringCloud

Docker虛擬技術

Dubbo應用及原始碼解讀

團隊協作開發篇

Git

Maven

Sonar

Jenkins

B2C商城專案實戰篇

系統設計

使用者管理子系統

搜尋子系統

訂單子系統

商品管理子系統

支付系統

後臺系統

分散式排程系統


歡迎工作一到五年的Java工程師朋友們加入Java填坑之路:860113481
群內提供免費的Java架構學習資料(裡面有高可用、高併發、高效能及分散式、Jvm效能調優、Spring原始碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!