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