同樣是搞Java,年薪15W和50W的到底差在哪裡?該怎麼解決呢?
在這個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,想想自己程式碼中用的是否合理。
此外,還可以看些常用的開源框架,如果你用的是Spring框架等,那麼下面一個很好的知識結構:
(掃描文末二維碼,即可獲取完整腦圖)
Part.2
跳出來,主動了解技術全貌
在將基礎打牢之後,需要主動突破舒適區,不斷的去擴大自己的技術視野,做到有廣度。
這一步比較難,因為很多同學會被公司的技術和業務牽著走,比如公司當前的業務規模決定了技術上不需要分散式技術,那麼很多同學就不會去思考如果規模大了之後,如何利用分散式技術解決該問題。
如何解決這個問題?除了尋找更大規模的業務外,要時刻保持時刻跳出當前層級和環境來思考的習慣。比如,你只用了關係型資料庫,那麼有沒有想過資料一直產生,到達TB級別的時候該如何快速檢索與儲存呢?
此外,技術的全貌還包括各種技術之間的關係,你用了Dubbo,那麼Duboo和Netty是什麼關係,為什麼會用到Zookeeper呢,和Spring Cloud又是什麼關係?如果能在學習新技術的時候,將繁雜的技術關係理順,會有一覽眾山小的感覺。
在工作的2~3年時間內達到這個水平,30w的年薪就離你不遠了。如果你對高併發和分散式技術感興趣,那麼下面一幅圖會有幫助:
(掃描文末二維碼,即可獲取完整腦圖)
Part.3
不去造輪子,
前提是得知道輪子的內部結構
如果說,第二步是增加你的知識廣度,那麼造輪子就是增加你的技術深度,通過造輪子,才能真正把握技術的來龍去脈。
很多人信奉“不去造輪子”,看似價效比很高的一句話,卻不知道這句話是有前提的,那就是“你得知道輪子的內部結構”,否則就是自我麻痺。接下來需要選擇某一個或幾個方面深入研究下去,構建自己的核心競爭力。
比如,訊息佇列在高併發分散式系統中一個及其重要的元件,起到削峰填谷、系統解耦的作用。我們以消費端如何快速獲取資料來看思維是如何一步步深入的:
首先消費端要想及時獲取資料,是否需要建立一個長連線?長連線的實現方式如何?
資料是通過push還是pull方式給到消費端,各自有什麼弊端?
如果消費失敗,可能是哪些原因引起?如果是因為網路原因引起,該如何解決?
這些問題都會在你自己造輪子的過程中暴露出來,從而加深你的理解和技術深度,一個有技術深度的程式設計師才是有靈魂的。而大廠也是願意為有趣的靈魂買單的,這個時候看的就不僅僅是工資水平,更多的是在於晉升和發展前景的廣闊性。
在Java語言上有所建樹的開發者,都經歷過以上3個層次。但可惜的是,囿於外界環境和自身設限,大部分的Java開發者卻只停留在了第一個層次中,在日復一日的體力勞動中喪失了對技術細節的深入探討,也喪失了晉升和薪資談判中的籌碼。
如何過渡到第二、三個層次?除了上文談到的內容,這裡我還想給你2個切身的建議:
1、擴寬自己的眼界,學著從全域性看待問題,並且勇於挑戰別人眼中的難題
2、持續提升你的學習能力,雖然有很多人以「在公司學不到東西」為理由離職,但你要知道:公司的目的是盈利。盈利的前提下,公司會盡力培養你,但是更多的時候能力成長還是得靠自己。學習能力弱的人,在哪裡都沒用。
如果你依然覺得有些茫然,不如跟有多年Java開發經驗的資深工程師聊一聊。
11月19日-25日,網易雲課堂將會開展為期一週的Java進階免費系列直播課。由多位擁有10+年Java開發經驗的講師向你傳道高併發、分散式、大資料、高可用系統的架構設計,每天2小時,密集輸入Java開發相關知識及經驗,幫你快速實現技術和職業成長上的突破。
福利1 免費直播課程
《網易雲課堂Java進階免費系列直播課》
適聽人群:Java初、中級開發工程師
11.19-11.25 連續7天每晚8點準時直播
▼
11月19日:JDK原始碼學習有方法!J.U.C併發程式設計工具類原理剖析
11月20日:從容應對億級大資料儲存 - 分庫分表技術實戰
11月21日:架構師全方位剖析,10億級訪問量網站的負載均衡架構
11月22日:高併發流量削峰 - 系統性能瞬間提升50倍以上
11月23日:揭開JAVA熱載入神祕面紗 - Tomcat在用的熱載入方案
11月24日:輕鬆搞定資料庫讀寫分離
11月25日:5年JAVA開發,被這道Redis面試題篩下來,Redis底層探祕之旅,2年以上開發必看
報名方式:
掃描下方二維碼新增助教小姐姐微信,
通過稽核後即可免費報名
福利2 Java開發資料包
該資料包中主要包括「大資料容器資料庫架構技術文件」、「大型公司技術文摘」、「Java開發參考書籍」、「Java開發學習圖譜」等內容,全方位擴充你的知識體系。
想要參與Java進階免費系列直播課
以及獲取Java開發工程師資料包的同學,
可以長按掃描下方二維碼,
新增網易雲課堂Java課程助教小姐姐
網易雲課堂Java進階免費系列直播課報名通道
免費課程,名額有限,先到先得~~