做者:原子彈大俠,阿里巴巴高級技術專家程序員
目錄
數據庫
一、解決生產環境裏的突發故障 緩存
二、對棘手的線上性能問題進行優化 安全
三、鍛造區別於普通碼農的核心競爭力 性能優化
四、打磨架構設計能力 架構
五、你憑什麼成爲 top1%? 併發
本文我們不談技術,來聊一個也許比技術更爲重要的問題:框架
爲何精讀知名開源項目源碼,能幫咱們進階top1%的Java工程師?分佈式
相反,若是職業生涯中,對任何開源項目源碼都漠不關心,對本身技術成長又有什麼「致命」影響?微服務
爲了說清楚這個問題,咱們來用一個實際工做場景舉例和引入。
假設如今你是一個普通的Java工程師,而後在一個團隊裏,平時大家開發系統都有一套成熟的框架和技術體系,好比說微服務框架用Dubbo,而後另外涉及到了Redis緩存、RocketMQ做爲消息系統、數據庫中間件。
平時正常開發都沒多大問題,就是基於Dubbo寫一些服務,而後在裏面填充業務邏輯就OK。
也許有時候架構設計會用到Redis,也可能會用到RocketMQ,也會用到數據庫中間件來作分庫分表的事情,這都沒問題,按需引入。
可是事情卻沒有想象中通常順利,數據庫中間件在進行分庫分表操做時,不時出現一些詭異的狀況。
什麼狀況呢?明明SQL執行成功了,結果數據就是沒進入數據庫;明明數據庫裏有數據,可是SQL執行以後,卻查不出來數據。
這個時候就很麻煩了,你們確定都知道,數據庫層面有問題,對業務是影響很是大的。
那誰能解決這個問題?
答案是:你公司必須得有一個精通數據庫中間件源碼的專家,不然這種數據庫問題基本上無解。
或者就算解決了,那也是瞎貓碰上死耗子,而你運氣,不會每次都這麼好吧!
爲何說基本無解呢?由於這種生產問題,涉及到了一箇中間件底層的執行機制。
那麼你必須深刻研究過源碼,將出問題時候的數據庫現場和SQL還原出來,在本地調試,而後一點點看源碼執行的過程,到底爲何會出問題。只有這樣才能解決這種生產問題。
因此可以讀本身系統中用到的開源項目的源碼,很是重要。若是你能作到這一點,就能夠在混亂的生產故障中,自告奮勇,解決線上問題。
而且這種重大生產故障現場,你若是屢次出鏡,怎能不獲得領導的青睞?而你的職業發展之路,天然的會平坦順暢不少!
再來看一個場景,如今大家的系統用到了Elasticsearch,結果剛開始覺得分佈式系統確定能夠存儲大量的數據,而後高性能的檢索。
前面半句沒問題,存儲大量數據是確定能夠作到的,可是後面半句有問題,高性能的檢索,還真的不必定。
Elasticsearch如今很是的火,不少公司都在用,並且一會兒會往裏面放入大量的數據。
可是問題就在於這裏,放入大量數據以後,不少公司發現ES搜索性能特別的差,常常出現要好幾秒,甚至幾十秒,幾分鐘才能查出來的狀況。
因此對這種性能問題,若是隻是網上查查博客,胡亂調節一下參數,這兒試一下,那兒試一下,其實沒多大用處。即便調好了,也就是前面說的,瞎貓碰上死耗子。
最主要的,仍是要真正的分析性能問題的瓶頸,也就是要深刻分析ES的源碼,你須要搞明白經過 ES執行一個搜索時,底層到底怎麼執行的,性能瓶頸到底在哪裏,而後才能針對性的去進行性能的優化。
假設如今ES致使你公司的APP用戶搜索的速度特別慢,被大量用戶投訴,此時CEO施壓給技術團隊,技術團隊急的團團轉。
此時要是你自告奮勇,經過源碼分析,解決了這個問題,優化了性能,憑藉一己之力力挽狂瀾,carry全場,那毫無疑問你一會兒就能脫穎而出。
領導都喜歡能打仗的技術骨幹,中間力量,有問題直接派你上去就能搞定,這個時候升職、加薪必定會把好機會都留給你。
如今假如你要出去找工做,而後同一個職位有好多人競爭,這些人都有如下一些共同的屬性:
5年以上的工做經驗,或大或小的公司都待過,項目經驗都還能夠
常見的技術棧掌握的都還能夠,Java、併發、IO、ES、MQ、緩存、大數據量,等等
或多或少都帶過一兩我的,獨立負責過一些項目
說句題外話,其實中國的IT、互聯網發展到今天,人才儲備能夠說很充足了,畢竟每一年都有大量的計算機專業的畢業生,還有不少的培訓機構在輸送大量的人才,這些初級人才通過多年發展以後,基本上都具有以上特徵。
所以如今好的職位,競爭是極其激烈的。若是在去年下半年或者今年上半年跳槽過的朋友,應該多少會有一些體會!
那麼在這種激烈的競爭中,你憑什麼力壓羣雄,拿下一個大廠的職位呢?
答案是兩個:
一、是否對你用過的技術進行過深刻挖掘。
正如前面提到的,你須要沉下心來,閱讀幾個優秀開源項目的源碼。
更進一步,能將裏面優秀的設計思想融會貫通,運用於本身的實際工做中。
二、是否具有那種有技術挑戰的項目經驗。
大部分人的項目經驗,都沒什麼技術挑戰,都是一些增刪改查的東西,不少技術只不過簡單用用罷了,也沒解決什麼技術挑戰。
可是若是你的項目裏從源碼級別解決過大量的生產環境的故障,從源碼級別作過複雜的性能優化,你的優點是否是大不少?
四、提高本身的架構設計能力
不少人都不知道本身如何提高本身的架構設計能力,其實答案很簡單
像RocketMQ、Elasticsearch、Redis等等,不少中間件系統,都有很是優秀的架構設計。
他們爲了解決高併發、高可用、高性能、可伸縮、可擴展、安全性的問題,都在架構裏使用了很是多的複雜機制。
若是能把這些開源系統的架構設計思想給研究透徹,那麼自己就是在學習如何進行復雜的架構設計。
而後若是本身有機會能夠獨當一面,負責一個較爲複雜的系統的架構設計的時候,就徹底能夠參考你看過的開源項目的一些核心機制來設計。
可是若是你連這些優秀的開源項目的源碼都沒看過,那可能還真的沒有人放心讓你來設計架構。
由於你對架構設計的一些知識積累仍是太少,若是純粹憑藉本身的想法來設計架構,對一些優秀的開源項目一無所知,那麼是很難設計出來好的架構的。
其實學習不少的技術,作不少的項目,是一件很容易的事情。
咱們花點錢買一些書,參加一些培訓課程,就能夠學不少的技術怎麼來使用。本身就一直工做,工做個七八年,也能積累不少項目經驗。
可是真正能讓你完成蛻變,進階top1%程序員的關鍵,實際上是你在源碼上的研究。
閱讀世界級大牛開發的優秀開源項目,參悟其優秀的設計思想,提高的,是你的內功修爲。
同時,你經過閱讀源碼積累的大量寶貴的解決線上問題的經驗,會成爲你最寶貴的技術財富。
So,那就行動起來唄!開始你的第一個開源項目,有誰想一直作CRUD工程師呢?
做者簡介:
原子彈大俠,阿里巴巴高級技術專家
經歷過每日百億流量的互聯網系統架構,尤爲對上億用戶場景下的高併發系統架構設計以及性能優化相關領域有深刻的研究。
END
長按下圖二維碼,即刻關注【狸貓技術窩】 阿里、京東、美團、字節跳動 頂尖技術專家坐鎮 爲IT人打造一個 「有溫度」 的技術窩!