1. 程式人生 > >四年努力,夢歸阿裏,和大家聊聊成長感悟

四年努力,夢歸阿裏,和大家聊聊成長感悟

除開 epoll 層次 公眾號 未來 冪等性 鎖機制 blank 最好

原文地址https://www.cnblogs.com/xrq730/p/9159586.html,原文作者博客園----五月的倉頡,轉載請註明出處,謝謝

前言

阿裏面試成功已經過去一個月了,入職也已經過去十多天了,趁著周末寫點東西和大家進行一下分享,本文會寫到以下的內容:

  • 個人一路走來的經歷
  • 未來的一些思考
  • 我自己理解五年這個時間節點一名優秀程序員應當具備的技術素質
  • 小廣告時間

那這次加入的BU是菜鳥,一個非常有發展前景的公司。

從校園出發,走向阿裏

工作五年,標題卻是"四年努力",實際上確實是這樣,2013年從母校杭州師範大學畢業之後,我和很多剛畢業的同學一樣,會沒有目標、找不到方向、不知道未來到底要做什麽,所以大約有一年的時間是很迷茫的,工作也就那樣吧,得過且過。

大約一年過後,也就14年樣子,那個時候公司還在西湖科技園,也許是自己的上進心作祟、也許是母校學長馬雲情懷作祟,有一段時間每天沿著石祥路回家,就想著這輩子我一定要憑借著自己的努力進入阿裏,而且這種想法每天每天越來越強烈。

就像我公眾號裏面寫的,4年前其實並沒有現在這麽多面試經或者程序員成長經,雖然有心,但是並不知道朝哪個方向去努力。於是想了一個辦法:花了一個禮拜時間,把51job、獵聘這些那時候比較有名的招聘網站裏面的Java崗位通通看了一遍,把每個崗位描述都寫下來,並進行整理和總結,列了一份比較大的提綱,作為自己的學習目標。

在這之後,開啟了算是比較瘋狂的2015年吧,那一整年只有一個關鍵字----學習。一整年除了幾個極重要的人,幾乎沒有和同事、朋友出去玩過,八九點下了班回去就開始學習到十一二點、工作中比較空余的時間學習、雙休日學習、各種大小長假學習,反正各種能利用到的時間都用來學習了,各種JDK源碼、多線程、Java虛擬機這些都看了個遍,前前後後看過的書不下10本,像虛擬機這本書我好像有說過幾次,PDF+實體書看了不下五遍,這個博客也是從15年開始寫的。

學習是寂寞、枯燥的,這段時間裏其實有太多次想要放棄,但每次也都熬了過來,可以分享給大家一個感悟:花一年自己逼自己一下,讓一切優異的品質成為你的習慣。像我現在,就感覺努力、上進、鉆研、好奇心這些已經是骨子裏的東西了,研究一個技術點,不整理成一篇博文,我都不認為自己掌握了這個技術點。

至於工作,經過15年這一年的學習,由於個人水平的長進,16年到18年間,在工作中領導也願意給我機會,會寫一些底層的東西、會做一些系統性的設計、也有機會帶幾個人的小團隊,在這一過程中,慢慢發現基本功並不能說明所有問題,因為必然會遇到沒碰到過的東西、會遇到一些更復雜的問題,然後通過查資料、研究、尋找解決方案、解決問題進一步提升自己的能力。

個人技術成長,工作中成長(實際解決問題能力)一定是缺一不可的,就像前幾天我們大部門老大分享的:什麽是好的技術,能解決實際問題的技術就是好的技術。

18年年中,對的時間遇到一個對的部門、對的領導、對的團隊,夢想照進現實

希望我分享的個人成長經歷,能對看到的人有一些鼓勵、有一些感觸,如果讓我總結一下,那麽希望告訴大家兩點:

  • 相信你自己,我這樣學校一般又不聰明的人都能走到今天這一步,那麽大多數人一定都能走到我這一步,而且能走得比我更遠、更好
  • 世界上沒有什麽是努力辦不到的,如果有,那麽就更努力一些吧

五年之後,何去何從

在之前寫過的一篇文章《面試感悟----一名3年工作經驗的程序員應該具備的技能》一文中,有一段專門寫了對程序員的幾個階段的理解,當時是工作三年寫的,一轉眼兩年過去了,我自己也差不多工作五年了,在這個節點上,結合自己的認識,說一下第五年開始,一個程序員應該朝哪個方向努力。

首先,前五年,如果一個程序員大致能做到一下幾點(後面還會詳談):

  • 具有紮實的基本功
  • 能快速完成領導交給你的代碼開發任務
  • 能在遇到問題的時候有正確的解決思路
  • 能對公司的新人進行一定輔導,包括但不限於技術點分享、代碼評審、需求分析、表結構設計等

那麽,從第五年開始,我認為可以、也應當朝更高的層次進行邁進,前一個層次如果更多是偏重個人,那麽這個層次我認為更多應該偏重團隊,簡單羅列一下大致上應該有:

  • 系統設計能力,或許在之前給一個功能,能從DB設計-->服務端開發-->前端開發一棧把事情都做好,那麽之後,在領導給出具體一塊大業務,比如想做一個淘寶商場的會員模塊,能充分分析出整個功能並把功能拆分成一個一個的點、能對每一個點之間的交互畫出交互圖、能梳理清楚數據庫的ER關系圖、能把工作合理分配給同事進行開發
  • 帶領團隊能力,大致就是把控整體開發節奏,保證在約定時間點前進行交付,不出現延期的情況
  • 大而博不如小而美,會10門技術、每門技術掌握到6分,不如會5門技術、2門技術掌握到8分,我感覺整個行業什麽都會一點的人比較多,把一門技術進行深入研究的比較少,畢竟掌握也許只需要1星期,深耕或許需要1個月甚至更久。在五年這個節點,我認為選擇一到兩個自己感興趣的方向進行深入研究會是一個比較好的選擇

這是我自己的思考,也是我在第五年開始對自己的要求,希望這一些思考也能給大家帶來一些啟發。

五年節點,我理解的優秀程序員應當具備的技術素質

網上有很多所謂的Java程序員面試經,其實看下來的感覺就是沒多大用,面試是沒有套路的,每一個面試官問的東西也都不一樣,如果根據那些面試問題去學習和準備,那真的是只見樹木不見森林,對個人提升沒有太大提高。

那麽,在五年這個階段,一個優秀的程序員應當具備怎樣的技術素質呢?按照我個人的理解,主要就是基本功+項目

為什麽之前說針對面試題進行學習和準備作用不大,因為我認為我們關註的不應當是題,而是題背後的一個一個的方向,這也就是我認為的基本功。那從基本功的角度來說,羅列一下我能想到的,包括但不限於以下內容:

  • 工作相關使用到的JDK類及其相關源碼、機制
  • 設計模式,設計模式在工作中用到了哪些,具體使用場景
  • 並發類的相關知識,線程安全、鎖機制、信號量、閉鎖、柵欄、線程池等
  • 框架相關,Spring相關機制、Spring MVC相關機制、MyBatis相關機制、使用的細節點、框架實現原理等
  • JVM,內存布局、垃圾識別算法、垃圾回收算法、垃圾收集器、類加載機制、內存模型、出現內存問題時定位問題的方法等
  • 數據庫的基本數據類型、索引機制、各引擎區別、鎖機制、慢SQL定位及優化等
  • 緩存機制,這裏的機制指的是緩存加載、緩存擊穿、緩存雪崩這些機制及其相關應對方案,用過Redis、MemCache的最好理解一下它們的原理或者緩存提供的一些高級功能,集群如何實現
  • 分布式的一些知識,比如CAP理論、數據一致性的幾種解決方案、分布式事務如何處理、分庫分表怎麽做、現有的相關解決方案等
  • NIO的作用,epoll模型是否知道一些,Netty的相關機制、Netty相比原生NIO的優點、半包拆包、斷線重連解決方案等
  • Web相關,Get與Post的區別、轉發與重定向的區別、跨域問題如何解決、如何保證接口冪等性等
  • 網絡層相關,三次握手和四次握手、全連接隊列和半連接隊列、負載均衡算法等
  • 其他中間件,MQ作用和使用場景、服務化治理框架的作用和使用場景、配置中心的作用和使用場景等
  • 數據結構,數組、鏈表、棧、隊列、樹等優缺點,在什麽場景下使用什麽數據結構
  • Linux相關知識,基本命令的使用,排查日誌、定位問題,項目或者第三方組件的基本運維等

坦白講,以上的這些東西全都掌握也不可能,哪怕面試官肯定也有很多不會的,但這就是基本功,能多掌握一點多掌握一點,技多不壓身,至於別人如何評價你,就留給別人去評價吧,做好自己能做好的就行了。我在之前寫過的文章中反復強調深度+廣度,深度優先、廣度次之,有了深度+廣度,在開發過程中我們可以盡快完成需求,在遇到問題情況下我們可以第一時間找到應對方案。

在三年的時間點,能掌握上述的知識點我認為已經是非常非常優秀的了,但這兩年的經歷讓我意識到的是,到了五年的時間點,如果只是具備這些硬性技能,還是不夠,這兩年更多的應當是在項目上進行積累,也就是前面說的項目,大致上應該有:

  • 獨立完成復雜業務,或者完成一個已有項目中的大功能點,這就需要有根據業務對功能進行分解、分析的能力
  • 獨立排查復雜問題,在項目運行過程中,一定不可能安然無事,除開業務性的問題,CPU 100%是否能獨立排查、內存溢出是否能獨立排查、應用死鎖或者DB死鎖能否獨立排查、API調用時間長能否獨立排查,以上問題排查完畢能否及時解決
  • 帶領團隊的能力,可能這時候帶領的是1~2個人的小團隊,即使一個小團隊,也能考驗帶團隊、任務合理分配的能力

可能上面的要求有點高,可能工作中未必有這樣的機會,但是不要抱怨,機會永遠留給有能力、有準備的人,我們首先想的不應該是等待別人交給你一件有挑戰性的事情,你在做這件事情的情況下去提升自己,而應當是先提升自己的素質,然後讓別人放心把有挑戰性的事情交給你來做。

回到我之前寫的,為什麽16年到18年間,領導願意給我機會去進行嘗試,首先就是因為個人水平的提升。

廣告時間

阿裏內部有自己多個維度的評價標準,絕不是只有具備我上面寫的那些技術素質才能進入阿裏,因此不必太過在意上面寫的這些,那只是根據我個人理解,提供給大家一個建議性的技術成長方向而已。

最後是簡短的廣告時間,我所在的菜鳥國際物流技術部門持續招人,如果你滿足以下兩個條件之一:

  • 有兩年或者兩年以上工作經驗,對自己的技術有一定信心
  • 19屆應屆畢業生且是比較好的院校

那麽,歡迎以以下三種方式跟我進行聯系:

  • 加我個人微信LBJ_Mayday進行咨詢
  • 發送簡歷到我的個人郵箱[email protected]
  • 在我的博客文章(百度搜索五月的倉頡即可)下進行留言

通過我內推進行面試的,可以極大提升面試效率及第一時間得知面試結果。在我的部門中,你將會看到:

  • 處於一家極具發展前景的公司中,中國互聯網前10年看電商、後10年看物流,螞蟻已經融資140億美元了,菜鳥還會遠嗎
  • 技術牛逼、帶領團隊經驗及實戰經驗豐富的主管,為你的成長指引光明的道路
  • 又美麗、氣質又好的各位HR姐姐
  • 輕松、熱情的團隊氛圍,每月至少一次的團隊活動,工作生活兩不誤
  • 豐厚的福利待遇,目前通過社招進入的還可以享受到股權激勵

最後,非常重要的一點:不要害怕面試。通過面試才能發現不足,才能知道未來在技術道路上還需要在哪些方面進行提高,在面試的結尾,你也可以詢問面試官自己有什麽不足,面試官一定會給到你最誠懇的建議!

期待和每一個優秀的你一起共事。

最後的最後

小廣告打完,最後的最後,我想的是,無論進入了BAT還是進入了FLAG,都絕不是技術道路的終點,不是可以高枕無憂地躺在過去的功勞簿上、無憂無慮過完下輩子的資本,相反,必須更努力,才能在一群同樣優秀的人中脫穎而出。

博客和公眾號還會盡量更新,不過以後更多會在公司內部系統寫一些文章,博客和公眾號會寫一些工作中遇到的比較有意思的、或者比較值得分享的問題,有問題也可以在我博客下面進行留言,老規矩,基本做到有問必回。

工作再忙,這點時間總是有的。

回答別人一個問題,對自己也是一種提高。

四年努力,夢歸阿裏,和大家聊聊成長感悟