阿里P7高階架構師分享8年多的Java工作經驗(跳槽漲薪必備)
很多工作了五年左右的程式員每天已經習慣了機器般的寫程式碼,如果是這樣那麼你永遠只會是個基礎程式設計師,因為你不能只會用,你要知道原理,不至於讓你自己實現一個出來,但是基本原理要知道。
到了這個階段,你要懂得JVM基本結構,要知道垃圾回收機制,常用垃圾回收演算法,JVM簡單調優引數;
資料庫也是個重頭戲,你要知道mysql事務隔離機制的實現,怎麼優化sql , 要知道springmvc流程 spring的原理 事務傳播機制,mybatis流程原理, 樂觀鎖悲觀鎖什麼情況用,你要學會考慮系統瓶頸,系統容災,單點故障, 你要懂得一致性是怎麼回事,cap理論 paxos演算法 以及zookeeper幹嘛用的,能解決什麼問題? 你要懂得soa架構,dubbo , 微服務 spring boot spring cloud 這些高階框架 嘗試用一用,谷歌,開源社群 將要取代百度成為你解決問題的主要動力和前進的方向, 你會有種一覽眾山小的感覺,你會覺得弄個百萬併發的系統其實並不難,難的是後續問題,日誌處理 運維問題, 關於運維我給不了太多建議,可以瞭解下 zabbix 之類的 可以去學習下 docker 微服務加docker將是未來的趨勢。
學到這個地步,你大概已經不用擔心工作問題,這種三五年經驗的高階程式設計師需求永遠很旺盛,注意 我說的是三五年學習實踐經驗,不是三五年一直crud經驗。這個時候你如果在北上廣,你的工資大概會接近20或者更多,一些二線城市大約15到20 你已經不用為錢太過於發愁了。但是請不要太安逸,因為上面說的那些也只是初窺門徑而已。
到了這個地步,工資已經比較難以提高了,但是大部分程式設計師是走不到這一步的……因為他們眼裡只有薪資,對程式沒有一定的熱愛,是很難堅持到這一步的。
上面所說的高階階段,只是構建一個比較大型比較穩定系統的必須而已,問題還是很多的,比如上面說的日誌處理,如何利用龐大的日誌產生商業價值?如今的淘寶京東這種系統,你去買個滑鼠它就能給你推薦個鍵盤等周邊外設, 那麼它為啥不給你推薦個內衣內褲呢? 想明白這些,你需要進一步學習, 大資料要來了。
flume 日誌處理 hadoop hive presto hdfs storm spark大資料流式計算 ,這些夠你喝一壺的了,學到這個份上,也不需要別人指點你什麼了,你能到達這個階段本身已經證明了自己的學習和技術能力。到達這個階段,你八成已經成為一個跨語言程式設計師了,因為處理資料,並不是Java擅長的,你要非用Java………那我只能說 人生苦短,何必折磨自己。 你應該已經學會了Python scala 也可能有些R語言, 這時候你會發現,語言真的只是工具而已,學個語言很快的,來來回回就是那麼些東西而已,思想最重要。
這個時候要抓緊提高自己的技術,你可以嘗試去一些知名的公司去提高你的見識面,你可以去各大知名部落格看他們的帖子。
這個時候提高技術就是為了去破那個瓶頸,更多的更高的技術可以給你創造更多的機會。程式猿在某種程度上和明星很像,一個好的電視劇和電影就可以成就一批明星,程式猿有的時候也是,一個好的專案就可以成就一群程式猿。
比如國內幾個膾炙人口的專案,像淘寶、支付寶、QQ、百度、微信等等。這每一個專案,都成就了一批程式猿。我敢說,這裡面任何一個專案,如果你是它的核心開發,光是這樣一個Title,就已經是你非常大的優勢。更何況還不止如此,Title說到底也是個名頭,更重要的是,這種專案在做的時候,對你的歷練一定也是非常給力的。
而你如果想要參與這樣的專案,除了靠運氣之外,影響力也是很重要的一個手段。比如你在分散式計算領域有一定的影響力,那麼如果有什麼好的關於分散式計算的專案,對方就很可能會邀請你。就算人家不邀請你,你自己主動去面試的時候,對方如果知道你在這個領域的影響力,也肯定會起到很大的作用,而這個作用,甚至可能會超過你現在的技術能力。
下面是一個我長期積累出來的系統學習圖譜,當然我也有一個專門的交流學習群:702895903獲取往期高階架構資料、原始碼、筆記、視訊。群裡每天都有新視訊資料更新,每天晚上大牛直播講課。
01
閱讀原始碼
程式設計師每天都和程式碼打交道。經過數年的基礎教育和職業培訓,大部分程式設計師都會「寫」程式碼,或者至少會抄程式碼和改程式碼。但是,會讀程式碼的並不在多數,會讀程式碼又真正讀懂一些大專案的原始碼的,少之又少。這也造成了很多錯誤看原始碼的方式。
那要如何正確的分析原始碼呢?
我們的目標應該放在最常用的框架上面,下面就介紹兩個:一個是Spring,另一個是大家用來覺得一直不怎麼出問題的Mybatis。

△spring原始碼

△mybatis原始碼
02
分散式架構
隨著我們的業務量越來越大和越重要,單體的架構模式已經無法對應大規模的應用場景,而且系統中決不能存在單點故障導致整體不可用,所以只有垂直或是水平拆分業務系統,使其形成一個分散式的架構,利用分散式架構來冗餘系統消除單點的故障,從而提高整個系統的可用性。同時分散式系統的模組重用度更高,速度更快,擴充套件性更高是大型的專案必不可少的環節。


03
微服務
關於微服務架構的取捨
在合適的專案,合適的團隊,採用微服務架構收益會大於成本。微服務架構有很多吸引人的地方,但在擁抱微服務之前,也需要認清它所帶來的挑戰。需要避免為了“微服務”而“微服務”。微服務架構引入策略 – 對傳統企業而言,開始時可以考慮引入部分合適的微服務架構原則對已有系統進行改造或新建微服務應用,逐步探索及積累微服務架構經驗,而非全盤實施微服務架構。

04
效能調優
我們不僅僅對專案要運籌帷幄,還要能解決一切效能問題。只有深入學習JVM底層原理,Mysql底層優化以及Tomcat調優,才能達到知其然,知其所以然的效果。除了效能優化之外,也能提供通用的常見思路以及方案選型的考慮點,幫助大家培養在方案選型時的意識、思維以及做各種權衡的能力。

05
開發工具工程化
通過一小段描述資訊來管理專案的構建,報告和文件的軟體專案管理工具。程式設計師的戰鬥,往往不是一個人的戰鬥,我們如何在一個平臺下高效的去重,進行程式碼review,對功能進行調整,debug,做到在統一的規劃下步步為營,混亂的堆程式碼的過程中找到自己的記錄。這一切都依賴於有效的工具。

06
專案實戰
要想立足於網際網路公司,且能在網際網路浪潮中不被淹沒,對於專案的開發實戰演練是不必可少的技能,也是對自身能力的一個衡量,有多少的量對等於獲得多少的回報。看似簡單的一個專案需求圖譜,其中的底層原理,實現原理又能知道多少?你搭建一個完整的B2C專案平臺到底需要多少知識?這一切都是需要我們考量的。

首先,你需要有深度的Java基礎知識:你會開始看《Java程式設計思想》、《Effective Java》。這兩本書絕非普通的基礎,而是至少擁有1~2年卓越的java開發者才有可能學完,而且這兩本書一般要讀完需要1年左右的時間。
其次,你需要看一些開源框架的原始碼,如果單單使用框架是實現業務而不去深入框架核心,架構思想,過幾年有可能會發現你脫離了框架什麼活也幹不成。
那麼我們應該學習哪些原始碼呢?那就要看哪些框架最常用了,希望下面的圖比較全。有其他建議的請加QQ群:關注我:私信回覆“架構資料”進群

再者,你在這這個階段已經不能侷限於滿足於講程式碼寫出來,此時此刻的你需要追求高質量高效能的程式碼了,你此時需要研究的知識就會如下圖所示:

是不是學習了上面做這些技術就夠了呢?相信看到這裡的碼友已經知道答案了,沒錯,你還需要知道分散式架構的知識

另外,目前企業有大小,平臺有限制,甚至對開放的方式方案都出現了獨立的方式,Facebook每個模組的功能從設計到開發再到維護,由後端到前端再到客戶端都是通過一程式設計師來進行的,這些就是所謂的全棧工程師,那麼java開發中,我們伺服器也有其自身的獨到性;那麼如何將龐大的後臺系統分部成為多個功能獨立,部署獨立,維護獨立,鬆耦合的獨立服務呢?從而減少企業的溝通成本和維護成本呢?毫無疑問,這就是微服務。

最後,如果說開發是一個戰場,那麼程式猿們就是勇猛的戰士,我們的戰鬥需要協調合作,統一排程,統一部署。那麼完美的配合自然需要優秀的開發工具,那就就是我們的團隊協作工具的學習。
