一、前言
1.1 背景
最近 CSDN 開展了猿創(chuàng)征文,希望博主寫文章講述自己在某個領(lǐng)域的技術(shù)成長歷程。
之前也曾想找個機會寫篇文章,記錄下自己的成長歷程。
因此,借著這個機會寫下這篇文章。
在回顧自己的成長歷程的同時,希望對一些同學(xué)的學(xué)習(xí)和工作也會有一些啟發(fā)和幫助。
1.2 主要內(nèi)容
閱讀本文,你可以了解到以下內(nèi)容:
我當初做出一些重要選擇,如棄理從文、棄文從工的原因。
我的校招和社招的經(jīng)歷,以及曾經(jīng)作為求職者和面試官的一些經(jīng)歷和經(jīng)驗。
分享豬場、有贊和螞蟻工作感受。
自己的寫作經(jīng)歷和經(jīng)驗。
自己的比賽經(jīng)歷和經(jīng)驗。
自己的工作經(jīng)歷和經(jīng)驗,如如何快速熟悉新項目、如何更好地做好項目,如何更好地學(xué)習(xí)源碼等。
工作之外參加的各種活動。
二、棄理從文 - 青春無悔
高中的時候,是班級里公認的 “數(shù)學(xué)小王子” 很多題目都可以給出多種解法。英語也不錯,
當時偏理科的分數(shù)挺高(數(shù)學(xué)、物理、生物),偏文科的分數(shù)(英語、地理、歷史)也不錯。
后來文理分科時,大多數(shù)同學(xué)包括我的班主任都認為我毫無爭議地會選擇理科。
然而,當時暗戀一個女生,她雖然不能說非常漂亮,但是寫字非常好看,而且有些科目(如地理、英語)成績非常好,后面得知她選了文科。
當時總感覺如果選了理科,以后就再難相見(現(xiàn)在想想挺可笑的)。為了有更大的概率分到一個班級或者臨近的班級,毅然決然地選擇了文科。
最后,沒有分在一個班級,也不在一層樓,尷尬。
偶爾會在同一天上體育課,萬千人中一眼就可以認出她,眼里只有她,就像手機相機里的人像模式,然后默默地看著,或許這就是喜歡吧。
后來問她要了一份她手寫的英語字帖,復(fù)印了很多份,反復(fù)臨摹,導(dǎo)致我的英語字體非?!靶銡狻睅缀鹾退囊荒R粯樱聢D是我以前寫的一份英文材料。
雖然沒有在一起,后面寫英文字依然可以想起她,或許這就是青春吧。
她的每一個字條,送的每一張照片都珍藏起來。
后面交集越來越少,而且總覺得她挺優(yōu)秀,自己長相也不出眾,家境也非常普通,配不上人家,高考后也不在一個學(xué)校,就漸行漸遠。
其實,有時候太喜歡一個人,就會覺得自己配不上人家;喜歡一個人也未必在一起才叫完美,有時候知道她過得好,也會感到非常滿足。
青春或許會有很多遺憾,但無須后悔。恰是這些遺憾,才讓青春更值得懷念。
所以,沒錯,棄理從文,因為曾經(jīng)喜歡的一個女生。
三、棄文從工 - 熱愛可抵漫長歲月
3.1 專業(yè)選擇
當時家里還沒有電腦,高中時家長也不允許去網(wǎng)吧,他們見到別人用電腦都是看電影、打游戲,認為“玩電腦" 的都是壞孩子。
高考完偷偷跑去網(wǎng)吧,發(fā)現(xiàn)網(wǎng)吧同學(xué)是看電影、打游戲,自己也和朋友一起打過游戲,可惜技術(shù)很菜就不太喜歡玩游戲。
在網(wǎng)吧里,更喜歡做一些與眾不同的事情,如聽聽一些傷心情歌,為電腦換壁紙、練練金山打字通等。
也聽說過一些黑客的事跡,感覺他們很酷。
大學(xué)選專業(yè)的時候挺想選計算機的,但由于對計算機的誤解,還是沒有選擇計算機專業(yè)。
由于自己的英語成績比較好,最后選擇了英語專業(yè)。
3.2 冥冥中的緣分
我們英語專業(yè)的宿舍之前恰是計算機學(xué)院的宿舍,剛搬入的時候看到有“齊魯軟件設(shè)計大賽作品” 的光盤。
大學(xué)開學(xué)不久,各種社團納新,計算機學(xué)院的 IT 精英協(xié)會會長帶著一些部長來宣傳,現(xiàn)場演示如何“破解”電腦密碼,宣傳有能力進入教務(wù)系統(tǒng)修改成績,會長拿了山東省的軟件比賽一等獎(當時我們學(xué)校一年最多只有一個該比賽的省級一等獎)等,非常羨慕和崇拜。
后面在日常學(xué)習(xí)之余,經(jīng)常去圖書館看計算機相關(guān)的圖書,選修計算機相關(guān)的課程等。
印象最深的是,《計算機入侵與防御》當時老師演示過某鴿子入侵軟件,可以操作別人電腦,挺受震撼。
選修了 《Java 基礎(chǔ)》,選擇這個課的大多數(shù)都是計算機學(xué)院的同學(xué),他們認為過于簡單,很多人并不會認真完成作業(yè),但由于我比較感興趣每次都會非常認真完成。
買了電腦之后也自學(xué)了 CMD ,易語言和 C 語言等。
大學(xué)期間使用阿里的某個產(chǎn)品,其中有一個活動叫“寫給十年后的自己”。
當時寫的其中一個愿望就是“十年之后能夠進入阿里巴巴”,最后也算如愿了。
3.3 巧遇恩師
有一次 Java 選修課的老師生病了,讓我后來的恩師陳老師代課一天。
當時有很多疑問,請教了該老師,有一個問題沒能當場解決,就加了 QQ 后面交流。
陳老師發(fā)現(xiàn)我對計算機有極其濃厚的興趣,決定免費指導(dǎo)我。
現(xiàn)在想想挺佩服老師的魄力的,一個英語專業(yè)的學(xué)生,能不能學(xué)好編程真地很難說。
從此,Java 的學(xué)習(xí)逐步走上了正軌。
老師會介紹大概需要學(xué)哪些內(nèi)容,怎么學(xué),遇到問題請教也會幫及時解決。
當時買的電腦配置很低,只有一個 1G 內(nèi)存條,使用 Eclipse 都很卡,老師送了我?guī)讉€內(nèi)存條并幫裝好。
暑假沒地方住宿,老師將自己學(xué)校附近買的教師公寓的房子免費讓我住。
當然,老師對我的幫助遠不止這些。
工作以后,逢年過節(jié)有時間都會去看望老師,和老師聚一聚、聊一聊,送老師一些公司的公仔等。
3.4 廢寢忘食
白天有很多英語課程,如英語語法、英語聽力、英語閱讀、英語寫作、英語翻譯、英語口語,還有第二外語日語課等。
記得當時晚上放學(xué)吃完飯會第一時間沖回宿舍,打開電腦,看著傳智播客畢向東老師的視頻,邊看邊敲代碼。經(jīng)常不知不覺,就到了晚上十二點甚至凌晨一點。
對于一些可上可不上的課,都會選擇不上,回宿舍學(xué)編程。
暑假在老師的教師公寓寫代碼,開始的時候還是毛坯房(和下圖差不多),整棟樓房還沒怎么有人入住,平均兩三層樓才入住一戶。好在有電、有電梯。
當時自己拿被子席子鋪在地上睡,有些膽小,晚上怕黑就一直開著燈學(xué)到天微亮,再睡。
遇到問題先自己分析,解決不了就百度,再解決不了的就去技術(shù)群里請教一些大佬。
有時候遇到問題卡住了,在技術(shù)群里請教大家,會有一些大佬給一些建議,幫助解決了不少問題。
這也是我為什么經(jīng)常將遇到的問題的解決方案持續(xù)分享在博客里的重要原因。
有時候一篇文章,一個回答,可能就能夠幫助某個像我當時那樣的學(xué)生少走很多彎路。
3.5 質(zhì)疑
中間也有一些質(zhì)疑的聲音,有一個高中同學(xué)得知我學(xué)計算機,噴我 “計算機學(xué)院的學(xué)生那么多,你一個英語專業(yè)的學(xué)生學(xué)啥計算機,再怎么學(xué)也比不上人家啊,有什么意義呢?浪費時間!” 諸如此類。
自己也有過些許的自我懷疑,自己真得能學(xué)好計算機嗎?其實自己也不知道。
但是計算機讓我感受到更“實用”,能夠感受到“快樂”。或許這就是所謂的“不為了什么”的堅持。
比如電腦中毒了,知道怎么殺毒。同學(xué)電腦系統(tǒng)壞了,也經(jīng)常找我給裝系統(tǒng)。英語課的時候老師的 U盤經(jīng)常中毒,真實文件被隱藏導(dǎo)致無法打開 PPT講課,我主動請纓,一頓 CMD 指令將隱藏的文件恢復(fù)并打開。自學(xué)安卓開發(fā),開發(fā)一個簡單的短信發(fā)送軟件,使用女友的照片當背景,能夠發(fā)出短信就非常興奮。
也曾和自己的另外一個恩師邵老師對此問題有過交流,他挺支持我去學(xué)計算機的,很多人畢業(yè)都沒有找自己專業(yè)的工作,這也讓我更加堅定了信心。
3.6 牛刀小試
后來,通過計算機學(xué)院的同學(xué)得知有“齊魯軟件設(shè)計大賽”(現(xiàn)在改名為“山東省大學(xué)生軟件設(shè)計大賽”),就機緣巧合得報名參加了。
當時我作為隊長,和計算機專業(yè)的 3 名同學(xué)組成一組報名參賽。
學(xué)校給參與這個比賽的同學(xué)安排了專門的實驗室,大多數(shù)團隊要么不來,要么就晚來早回,大多數(shù)團隊都在比賽快結(jié)束一周內(nèi)才開始來實驗室搞比賽。
中間還發(fā)生了一件令我印象頗深的事情,負責值班的同學(xué)沒見過我,詢問情況發(fā)現(xiàn)我是英語專業(yè),雖然解釋了我已報名參賽,但依然不允許我進實驗室。最后團隊其他同學(xué)找學(xué)院的老師協(xié)調(diào)才被允許進入實驗室。
這個比賽的作品從創(chuàng)意到核心代碼的編寫、測試,大多數(shù)都是我自己完成,后面也是我去濟南山東建筑大學(xué)答辯,最終得了當年我們學(xué)校在該比賽中唯一的省級一等獎。而這個比賽恰是入學(xué)的時候宿舍光盤中涉及的比賽,也恰是入學(xué)社團納新時 IT 精英協(xié)會會長拿到的獎項。
3.7 跨專業(yè)考研
雖然編程也學(xué)了不少,也有一些比賽獲獎,但內(nèi)心總不夠自信,也對就業(yè)有些擔憂。
計算機相關(guān)崗位的要求大都是“計算機及相關(guān)專業(yè)”,而且也想接受正規(guī)的計算機專業(yè)學(xué)習(xí)。
因此,決定跨專業(yè)考研。
跨專業(yè)考研的優(yōu)勢在于英語好一些,最大的難點在于數(shù)學(xué),因為英語專業(yè)不開數(shù)學(xué)課程,需要花很大的經(jīng)歷學(xué)數(shù)學(xué),還有沒上過計算機的專業(yè)課。
主要通過看新東方的視頻和線下的考研培訓(xùn)班來學(xué)習(xí),最終考到了杭州電子科技大學(xué)軟件工程專業(yè)的碩士,完成了英語專業(yè)到軟件專業(yè)的轉(zhuǎn)變,正式成為一名全日制的計算機學(xué)院的學(xué)生。
幸運的是,大學(xué)里雖然花了大量的時間來學(xué)習(xí)編程,但專業(yè)課學(xué)的還可以,通過了英語專業(yè)四級和英語專業(yè)八級(當時我本科學(xué)校英語專業(yè)的班級大概只有不到一半的同學(xué)通過英語專業(yè)八級)。研究生階段每年都能拿到一等獎學(xué)金,綜合成績一直在年級 TOP 5。
所以,棄文從工,是因為非常癡迷編程,軟件更“實用”,也能給自己帶來一定的成就感。
四、我的比賽之路
4.1 比賽經(jīng)歷
本科主要參加了山東省大學(xué)生軟件比賽(省級一等獎),研究生參加過“挑戰(zhàn)杯” 國賽(全國三等獎)、“全國研究生移動終端應(yīng)用設(shè)計創(chuàng)新大賽”(全國二等獎)、“全國研究生智慧城市技術(shù)與創(chuàng)意設(shè)計大賽” (全國三等獎)等。
參加智慧城市大賽的時候還有幸在北京大學(xué)宿舍住了兩晚,在北大和清華校園里轉(zhuǎn)了很多次,印象頗深。
其中一個印象:北大的食堂飯菜好便宜。
4.2 比賽經(jīng)驗
下面是結(jié)合我自己和身邊朋友的參賽經(jīng)驗,總結(jié)出來的,希望對大家有幫助。
4.2.1 讀懂要求
很多同學(xué)參賽的時候沒有認真讀取比賽的要求,最后因為偏題導(dǎo)致淘汰或者因為忽視評分規(guī)則而被打低分。
因此,參加比賽一定要讀懂“題意”,這是一個非常重要的前提。
4.2.2 分析歷屆優(yōu)秀作品的特點
重點分析歷屆一等獎、特等獎作品的特點。
比如對于一些軟件比賽來說,尤其是本科的軟件比賽,一等獎和特等獎的作品都有一些共性:
(1)創(chuàng)意通常符合當下的大的時代背景,如節(jié)能減排、環(huán)境保護、萬物互聯(lián)、共同富裕等。
(2)有一定的創(chuàng)新性,算法創(chuàng)新、玩法創(chuàng)新、商業(yè)模式創(chuàng)新等
(3)代碼可讀性強、健壯性強、拓展性強
(4)文檔詳盡,設(shè)計文檔、測試文檔等非常專業(yè)而且詳盡
(5)配套的 PPT 非常結(jié)構(gòu)化
(6) 配套的視頻制作精良,能夠凸顯自己的設(shè)計亮點和技術(shù)深度
4.2.3 選好隊友,強強聯(lián)合
很多比賽會存在“蹭獎”的現(xiàn)象,一個團隊里就那么一兩個人最上心,其他同學(xué)要么水平不行,要么不用心。
大家參加比賽盡量選擇好隊友,避免上述情況的發(fā)生。
如果有機會可以選擇實力和自己相當甚至比自己更優(yōu)秀的同學(xué)合作。
這樣不僅獲獎的概率更大一些,而且參賽體驗也會好很多。
4.2.4 常見問題準備充分
你的作品的主要創(chuàng)新是什么?
你的作品已經(jīng)得到了哪些認可或驗證?
你的作品的盈利模式是什么?
你的作品亮點有哪些?
你的作品有哪些不夠完善的地方?未來的改進方向是什么?
如果 XXX 該怎么辦?(想出至少 5 個 “意外”情況)
4.2.5 PPT 反復(fù)打磨,答辯反復(fù)練習(xí)
PPT 要反復(fù)修復(fù),不斷練習(xí)。
多一些圖,少一些字;內(nèi)容要非常結(jié)構(gòu)化,重點突出;臺下反復(fù)試講,卡準時間,銜接流暢。
有機會可以找老師給組織一下模擬答辯,感受答辯的氛圍。
4.2.6 態(tài)度要端正、時間要保障
很多同學(xué)參賽的態(tài)度不端正,只是想蹭獎,需要付出的時候找不到人,領(lǐng)獎的時候很積極。
很多同學(xué)的創(chuàng)意不錯,但是沒有投入足夠的時間,最后沒做出來或者做的非常粗糙。
五、我的寫作之路
5.1 為什么要寫作?
5.1.1 恩師推薦
最初是前面講到的陳老師推薦我寫技術(shù)博客。推薦可以寫一些學(xué)習(xí)心得,可以記錄一些問題解決的方法,可以寫寫對某個知識點的理解等,一直堅持到現(xiàn)在。
5.1.2 程序員精神
前面其實也有講到,自己在學(xué)習(xí) Java 過程中,網(wǎng)上的一些文章和少數(shù)靠譜的技術(shù)群對我?guī)椭Υ蟮摹?br> 因此,我更愿意將自己遇到的一些坑總結(jié)到博客中,幫助別人少走一些彎路。有時候自己的同學(xué)、同事解決某個問題搜到我的博客,告訴我,我也會非常開心。有時候有網(wǎng)友在文章下留言,卡了好幾個小時看到我的博客解決了,也會讓我有些欣慰。
5.1.3 以教為學(xué)
很多時候能夠通過通俗易懂的語言教會別人,才代表自己真正理解了知識。寫作時會查一些參考資料,理解也會更加深入一些。
有時候?qū)懳恼虏粔驀乐?,看有些朋友的評論,會發(fā)現(xiàn)自己對某個知識點的理解不夠深入,可以查漏補缺。
5.1.4 記錄成長歷程
有時候翻翻自己的博客就大概知道每個時期都在學(xué)什么,博客是很好的成長見證。
5.1.5 認識更多朋友
很多不錯的朋友是通過 CSDN 博客認識的。
5.2 主要作品
現(xiàn)在是 CSDN 、阿里云開發(fā)者社區(qū)、 51CTO 博客的專家博主。
寫過 《解鎖大廠思維:剖析《阿里巴巴 Java 開發(fā)手冊》》、《再讀經(jīng)典:《Effective Java》 獨家解析》 ,兩個技術(shù)專欄。
主要從方法論的角度講述《阿里巴巴 Java 開發(fā)手冊》、《Effective Java》一些規(guī)定背后的底層原理。
寫過 《Java 校招求職如何拿大廠 Offer》專欄,幫助校招生了解校招的底層邏輯,抓住校招復(fù)習(xí)的重點,分享一些面試技巧等。
寫過《性能優(yōu)化方法論》技術(shù)電子書(直接搜 “性能優(yōu)化方法論 藏經(jīng)閣” 即可)。該書分享自己對性能優(yōu)化方面的思考;講述技術(shù)層面和非技術(shù)層面的優(yōu)化思想;技術(shù)層面如升軟件、提硬件;空間換時間、提高資源利用率、串行轉(zhuǎn)并行、利用時空局部性等;講述性能優(yōu)化在常見技術(shù)中的應(yīng)用。非技術(shù)層面如砍需求、提升用戶體驗等。
在阿里內(nèi)部的 ATA 技術(shù)博客上也發(fā)表了不少技術(shù)文章。
5.3 寫作經(jīng)驗
5.3.1 文章要結(jié)構(gòu)化
文章要能夠按照一定的順序來寫,以便讀者更容易理解。
可以按照時間順序、空間順序和邏輯順序來寫。
如可以采用 3W 的方式來寫,即先寫某某知識點是什么? 然后再講為什么?最后講怎么做。
參考文章:
《結(jié)構(gòu)化思維,讓你的工作有條不紊》
《我對“結(jié)構(gòu)化思維”的理解》
5.3.2 文章要差異化
現(xiàn)在網(wǎng)上的文章千篇一律,如果我們寫的文章和別人幾乎一樣,我們寫文章的意義在哪里?
可以是詼諧幽默的語言風格;可以是精美而又恰到好處的配圖;可以是自己對該問題的獨到解讀等。
5.3.3 重視排版
有些同學(xué)的文章排版非常混亂,看著就不想讀下去。
有些同學(xué)文章開頭帶上思維導(dǎo)圖,文章中間會有適當?shù)呐鋱D,文章結(jié)尾是引導(dǎo)關(guān)注、點贊的圖片等。
5.3.4 深入原理、授人以漁
大家寫文章的時候,不要只人云亦云,也不要只講現(xiàn)象不講原理。
寫文章,盡量能講清楚原理,能夠讓讀到的人知道根本愿意,能夠舉一反三解決一類問題。
5.3.5 專題化
盡量可以講透一個主題或者一個系列,能夠讓讀者通過看你的文章系統(tǒng)化掌握某個技術(shù)。
5.3.6 功夫在平時
我不太喜歡為了寫文章而寫文章。
大家平時在學(xué)習(xí)和工作中,解決了某個疑難雜癥,就可以講自己的分析思路和解決過程寫下來。
在平時的工作中,看到一些 BUG 或者 故障,某個問題好的解決方案,就可以將這些經(jīng)驗積累下來。
平時有一些想寫的話題,可以作為素材的內(nèi)容積累下來,等寫的時候就會文思泉涌。
六、我的求職之路
6.1 校招與社招
這些年,經(jīng)歷過校招和社招。
校招拿到了美團、網(wǎng)易等 Offer,社招進有贊和螞蟻集團。
校招本質(zhì)上是選擇聰明的、學(xué)習(xí)能力強的,溝通表達能力強的同學(xué)。
校招重點看學(xué)校、名企實習(xí)經(jīng)歷、大型比賽獲獎、高水平的論文等。
對于非名校的學(xué)生,如果想進大廠,最好是有不錯的實習(xí)經(jīng)歷或者大型比賽的獲獎。
校招重點考察專業(yè)基礎(chǔ)。
校招會的問題要回答全面又有深度,不會的問題有思路則回答出自己的想法,沒思路則直接說不會。
更多詳細內(nèi)容可參加我的 CSDN 校招專欄:《Java 校招求職如何拿大廠 Offer》
社招重點看工作經(jīng)驗,通常會選擇技術(shù)能力強,項目經(jīng)驗豐富,懂原理,能夠快速做項目和解決問題而且溝通能力強的同學(xué)。
社招準備好項目相關(guān)問題,常見的中間件的原理都要懂,清楚自己的亮點和不足。
6.2 求職者與面試官
當過求職者,也當過一段時間的面試官。
求職者和面試官的心態(tài)是完全不一樣的。
之前也做過一段時間的面試官,面試官都是按照公司的面試標準來挑選候選人。
拿到簡歷后對簡歷進行圈注,主要看學(xué)校、公司,看技術(shù)棧和項目經(jīng)驗,會問一些基礎(chǔ)問題確?;A(chǔ)足夠扎實,也會問一些中間件的原理,還會問項目的亮點、難點,一些地方是如何設(shè)計的,為何這么設(shè)計,有何局限性等。
有些常見的問題回答不上來,通常會被打上“基礎(chǔ)不夠扎實”的標簽;如果有些功能只會用,不懂原理,則容易被打為“技術(shù)深度不夠”的標簽。項目中很多設(shè)計講述不清楚,很多設(shè)計不能給出令人信服的理由,容易被打上“經(jīng)驗不足的標簽”。
6.3 豬場、有贊、螞蟻
接下來談?wù)勗谪i場、有贊和螞蟻的感受。
豬場,印象最深的就是 APP 做的比較精致,餐廳免費而且選擇眾多,吃的挺好。但工作只配臺式機,不配 MacBookPro,大家都是自己購買。
有贊,電商相關(guān)的技術(shù)非常成熟,微服務(wù)、中臺搞得都挺不錯?!凹彝ト铡?(即周三不加班, 6點就可以跑路,通常大多數(shù)團隊周五也是晚上6點就可以跑路)也是一大特色。 Java 程序員會發(fā) MacBookPro 攜帶起來非常方便。
PS: 本人還有幸被選作有贊校招官網(wǎng)的“學(xué)長代表”。
螞蟻, Java 程序員會發(fā) MacBookPro, 也可以選擇 M1 芯片的機型。和阿里一樣,螞蟻對數(shù)據(jù)安全管控很嚴。
印象比較深的是技術(shù)氛圍很好,有 ATA 技術(shù)論壇,螞蟻自己的技術(shù)社區(qū)等;有各種技術(shù)分享的直播和視頻教程;有各種代碼評優(yōu)比賽,各種代碼重構(gòu)比賽等;重視單元測試和代碼審查;有各種自研的工具和平臺;螞蟻有很多自己設(shè)計的公仔非常漂亮,節(jié)假日有各種定制化的禮品。
七、我的工作心得
7.1 工作能力
7.1.1 關(guān)于做項目
關(guān)于更好地熟悉項目
實習(xí)、校招、社招初入公司需要上手項目,那么如何更好地上手新項目呢?
(1)看需求文檔、技術(shù)方案和提測文檔等。如果有相關(guān)的文檔,一定先了解清楚,對后面理解項目的邏輯有極大地幫助。
(2)從功能入口往下捋。熟悉功能。找到要需要修改項目對應(yīng)的 UI 界面,可能是 WEB 頁面,可能是移動 APP 界面,也可能是小程序界面,觸發(fā)相關(guān)功能,通過查看核心日志、遠程 DEBUG 等方式熟悉核心邏輯。
(3)請教身邊的同學(xué)。有些地方確實不太熟悉,可以請教之前參與過的人員或者對應(yīng)的測試同學(xué)。平時可以適當分享一些零食,請一些奶茶之類的,后面請教就比較容易。
如何更好地做項目,減少出錯的概率?
(1)以終為始,思考業(yè)務(wù)價值。做項目前要深入熟悉需求,更要思考項目的價值,以終為始去思考問題,可能會發(fā)現(xiàn)有些設(shè)計可以優(yōu)化,做項目就更容易有的放矢。
(2)磨刀不誤砍柴工。做項目一定要重視設(shè)計,設(shè)計方案時先總體后局部,充分各種異常情況,充分考慮拓展性,這就會降低返工的概率。
(3)編碼時要努力遵循各種經(jīng)典的設(shè)計原則,如高內(nèi)聚、弱耦合;降低復(fù)雜度的原則。設(shè)計模式的六大原則等,靈活運用設(shè)計模式來解決問題。
(4)提高單測覆蓋率,充分自測。一定要充分自測,做好自測記錄,不僅要覆蓋正常的用例,還要覆蓋各種異常用例。重視代碼審查,盡量在編碼階段發(fā)現(xiàn)隱藏的 BUG。
(5)重視錯誤日志。在自測或測試人員對我們的功能進行測試時,一定要多看錯誤和 WARN 日志,有些場景即使出錯頁面表現(xiàn)也會“符合預(yù)期”。
(6)多和 Master 分支比較。通過和 master 比較,可以避免誤修改,可以做好代碼審查,可以更好地評估改動點。
(7)做好代碼審查??梢詮墓δ?、性能、可讀性、可拓展性和可維護性等角度對自己的代碼進行自我審查,當收到其他同學(xué)的審查建議時辯證地采納。 詳情可參考:《CodeReview 的正確姿勢》
(8)做好發(fā)布計劃。發(fā)布所需要的各種配置,服務(wù)之間的依賴關(guān)系,發(fā)布和回滾的順序等都要寫清楚。
7.1.2 關(guān)于源碼學(xué)習(xí)
【1】很多人讀源碼收獲并不大,原因有哪些?
- 缺乏整體思維,迷失在細節(jié)中(如調(diào)試源碼時跳來跳去,最后跳暈了)
- 缺乏思考(學(xué)而不思則罔,思而不學(xué)則殆!)
- 不知道讀源碼究竟讀什么(如源碼的設(shè)計思想)
- 角度單一(如從解決問題角度、性能優(yōu)化角度、設(shè)計模式角度、每次提交、單元測試、注釋等)
- 方法單一(如不懂的高級的調(diào)試技巧,不懂的時序圖插件)
- 缺乏輸出(不會輸出成文章,不能講給別人聽)
【2】讀源碼究竟讀什么?
讀目的:該框架是為了解決什么問題?比同類框架相比的優(yōu)劣是什么?這對理解框架非常重要。
**讀注釋:**很多人讀源碼會忽略注釋。建議大家讀源碼時一定要重視注釋。因為優(yōu)秀的開源項目,通常某個類、某個函數(shù)的目的、核心邏輯、核心參數(shù)的解釋,異常的發(fā)生場景等都會寫到注釋中,這對我們學(xué)習(xí)源碼,分析問題有極大的幫助。
**讀邏輯:**這里所謂的邏輯是指語句或者子函數(shù)的順序問題。我們要重視作者編碼的順序,了解為什么先寫 A 再寫 B,背后的原因是什么。
**讀思想:**所謂思想是指源碼背后體現(xiàn)出了哪些設(shè)計原則,比如是不是和設(shè)計模式的六大原則相符?是不是符合高內(nèi)聚低耦合?是不是體現(xiàn)某種性能優(yōu)化思想?
讀原理:讀核心實現(xiàn)步驟,而不是記憶每行代碼。核心原理和步驟最重要。
讀編碼風格:一般來說優(yōu)秀的源碼的代碼風格都比較優(yōu)雅。我們可以通過源碼來學(xué)習(xí)編碼規(guī)范。
讀編程技巧:作者是否采用了某種設(shè)計模式,某種編程技巧實現(xiàn)了意料之外的效果。
讀設(shè)計方案:讀源碼不僅包含具體的代碼,更重要的是設(shè)計方案。比如我們下載一個秒殺系統(tǒng) / 商城系統(tǒng)的代碼,我們可以學(xué)習(xí)密碼加密的方案,學(xué)習(xí)分布式事務(wù)處理的方案,學(xué)習(xí)冪等的設(shè)計方案,超賣問題的解決方案等。因為掌握這些方案之后對提升我們自己的工作經(jīng)驗非常有幫助,我們工作中做技術(shù)方案時可以參考這些優(yōu)秀項目的方案。
【3】讀源碼也存在很多誤區(qū):
- 開始就嘗試大型開源項框架,容易信心受挫,導(dǎo)致放棄。
- 讀源碼沒有規(guī)劃,隨心所欲。
- 直接看源碼的解析,直接看源碼的寫法,缺乏關(guān)鍵的前置步驟,即先自己思考再對照源碼。
【4】如何讀源碼效果更好?
- 先會用再讀源碼。如果用都不會用,讀源碼就成為空談。至少寫一些 DEMO,如果寫 DEMO 需要花費很多時間,可以去 GitHub 上搜一些實例快速上手。
- 先易后難,循序漸進。
- 先看架構(gòu)再讀源碼??梢韵韧ㄟ^框架的官方文檔了解其整體架構(gòu),了解其核心原理,然后再去看具體的源代碼。
- 查看核心類的函數(shù)列表。
- 先看整體再看具體細節(jié)。如學(xué)習(xí) Spring 生命周期,重點學(xué)習(xí)
org.springframework.context.support.AbstractApplicationContext
的核心函數(shù)refresh
,把握好整體再去研究細節(jié)。 - 要以設(shè)計者的角度來學(xué)源碼。從設(shè)計者的角度讀源碼是一條極其重要的思想。體現(xiàn)了**“先猜想后驗證”**的思想。學(xué)習(xí)源碼時不管是框架的整體架構(gòu)、某個具體的類還是某個函數(shù)都要設(shè)想如果自己是作者,該怎么設(shè)計框架、如何編寫某個類、某個函數(shù)的代碼。然后再和最終的源碼進行對比,發(fā)現(xiàn)自己的設(shè)想和對方的差異,這樣對源碼的印象更加深刻,對作者的意圖領(lǐng)會的會更加到位。
- 從設(shè)計模式的角度學(xué)源碼。
【5】有哪些好的閱讀源碼的技巧?
- 通過注釋學(xué)習(xí)源碼。優(yōu)秀的開源項目注釋非常清晰,對我們了解用法和理解設(shè)計理念有極大地幫助。
- 通過單元測試來學(xué)習(xí)源碼。優(yōu)秀的開源項目通常單測覆蓋率極高。我們想學(xué)習(xí)某個類,可以通過運行單測,調(diào)試單測來學(xué)習(xí),效果會很好。
- 從入口開始學(xué)習(xí)源碼。
- 借助 IDEA 插件來學(xué)習(xí)源碼??梢越柚鶕?jù)代碼生成類圖、時序圖等,更好地學(xué)習(xí)源碼。
- 根據(jù) issues 學(xué)習(xí)源碼。源碼通常比較龐雜,可以從小處著手,每個 issue 通常只專注一個問題,可以查看已經(jīng)解決的 issues ,了解問題的原因和解決方法。
- 根據(jù)提交記錄來學(xué)源碼??梢钥催@次提交做了什么,通過哪些方式添加了新的特性或者修復(fù)了什么問題。
- 跟著專欄來學(xué)習(xí)源碼。有些源碼解讀專欄質(zhì)量很高,循序漸進,跟著專欄學(xué)更系統(tǒng),
篇幅有限,如果想對閱讀源碼有更全面地了解,可參考的一篇 GitChat :《你真的知道該怎么讀源碼嗎?》
7.1.3 一些問題的看法
【1】關(guān)于新技術(shù)
有些同學(xué)想讓我講講對新技術(shù)的看法。
很多底層原理都是通的,我們?nèi)绻軌蛴性鷮嵉膶I(yè)基礎(chǔ),如操作系統(tǒng)、數(shù)據(jù)結(jié)構(gòu)和算法、計算機網(wǎng)絡(luò)、數(shù)據(jù)庫等非常扎實。各種中間件原理、常見的框架源碼讀得都恨透。學(xué)習(xí)新技術(shù)會容易很多。
新技術(shù)要去評估是否需要學(xué),即使不去深入學(xué)習(xí)也大概知道它解決什么問題,大概的原理是什么,當工作上確實需要掌握時,快速上手學(xué)習(xí)即可。
【2】關(guān)于 DDD
DDD 整體上來說是通過增加領(lǐng)域?qū)?,降低耦合的一種解決方案。
其中 DDD 包括戰(zhàn)略和戰(zhàn)術(shù)兩部分,戰(zhàn)略即各種概念的理解,領(lǐng)域模型的劃分。戰(zhàn)術(shù)則更側(cè)重于領(lǐng)域模型的落地。
由于 DDD 涉及的概念眾多,落地時也會遇到各種問題,不同人的對一些問題的處理也會有些差異,上手成本略高。
由于篇幅原因,里面具體的概念和實踐這里先不作過多展開。
想了解更詳細地內(nèi)容可以看相關(guān)圖書和專欄。如《領(lǐng)域驅(qū)動設(shè)計》、《實現(xiàn)領(lǐng)域驅(qū)動設(shè)計》(張逸)、《解構(gòu)領(lǐng)域驅(qū)動設(shè)計》、《領(lǐng)域驅(qū)動設(shè)計精粹》、《領(lǐng)域驅(qū)動設(shè)計實踐》專欄(張逸)等。
7.1.4 其他能力
排查問題的能力。如采用二分法定位是前段還是后端的問題;恢復(fù) master 代碼,判斷是之前的問題還是新引入的問題;采用源碼分析、代碼調(diào)試、日志分析、Arthas 等方式定位問題。
還要掌握做 PPT 的能力。要能夠通過結(jié)構(gòu)化的方式設(shè)計好 PPT 的骨架,能夠重點突出、結(jié)論先行,多一些圖形少一些文字,將亮點、重點、難點都說清楚,體現(xiàn)出自己的思考和價值。
還要掌握良好的溝通能力,可以看《非暴力溝通》。
還要掌握好項目管理能力。及時識別項目的風險點并解決。
7.2 工作之外
7.2.1 DIY 班
之前參加參加過《阿里巴巴 Java 開發(fā)手冊》、《碼出高效》作者,孤盡老師的 DIY 班。
DIY 班的含義:
其一,Deeply Inspire Yourself
深度激發(fā)自己
其二,Do It Yourself
實踐出真知
DIY 班前幾次作業(yè)孤盡老師就強調(diào)大家要重視 “快速學(xué)習(xí)的能力”、 “學(xué)習(xí)如何學(xué)習(xí)的能力”、“舉一反三的能力”。
孤盡老師提到學(xué)習(xí)的四部曲:記憶、理解、表達和融合。
DIY 收獲很大,其中一個就是學(xué)技術(shù)要深入原理,知其所以然。
詳情參見:《我眼中的Java大牛之孤盡老師》
7.2.2 編碼比賽
公司內(nèi)部會有很多代碼重構(gòu)、發(fā)現(xiàn)代碼 BUG 的各種比賽。
當過選手也當過出題人。
這類比賽有時間都會積極參加,能夠提高自己代碼的健壯性,有些比賽也能拿到不錯的結(jié)果。
作為選手會認真尋找每道題隱藏的 BUG ,作為出題人則會精心每個考察點,希望能夠通過題目的設(shè)計幫助大家在工作中避免遇到類似的問題。
7.2.3 智囊團
公司內(nèi)部的很多重要的技術(shù)課程,有時候也會招募智囊團,有時間也會積極參加。
當智囊團能更早學(xué)習(xí)課程,有更多地和大佬交流的機會。
7.2.4 代碼評優(yōu)
參加過公司第一季代碼評優(yōu),并獲得 TOP50。
也當過第二季代碼評優(yōu)的大眾評審對其他同學(xué)的代碼進行打分,并被評為優(yōu)秀大眾評審。
比較認可:“寫代碼是個良心活”,“優(yōu)秀的代碼都有一些共性”。
7.2.5 講師
也會參加一些講師能力的課程培訓(xùn),學(xué)習(xí)一些講課技巧。
現(xiàn)在已經(jīng)是成為一名預(yù)備講師,后面爭取早日成為一名正式的講師。
7.2.6 金光閃閃
由于在指導(dǎo)新人和技術(shù)分享方面做的相對較好,也獲得了兩個公司的“金光閃閃” 獎項。
八、總結(jié)
熱愛可抵歲月漫長,溫柔可擋艱難時光。
熱愛編程就會詳盡一切辦法去努力提升,就更容易不知疲倦。
希望本文對大家的學(xué)習(xí)和工作能夠有一些幫助。
有任何疑問歡迎評論區(qū)和我交流。
我近期也會對文章進一步進行優(yōu)化修改。
創(chuàng)作不易,如果本文對你有幫助,歡迎點贊、收藏加關(guān)注,你的支持和鼓勵,是我創(chuàng)作的最大動力。
本文正在參加 CSDN 猿創(chuàng)征文,如果本文對你有幫助,可以點贊、評論來支持我,感謝。文章來源:http://www.zghlxwxcb.cn/news/detail-566959.html
歡迎大家加入我的 CSDN 社區(qū):Java 工程師成神之路文章來源地址http://www.zghlxwxcb.cn/news/detail-566959.html
到了這里,關(guān)于猿創(chuàng)征文|棄文從工,從小白到螞蟻工程師,我的 Java 成長之路的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!