歡迎光臨我的個人博客:https://www.jelliclecat.cn/
0. 2018
從2018年4月1日正式開始工作三痰,到現(xiàn)在已經(jīng)有14個月了吧寺,14個月前窜管,自己還是一個java小白,那個時候稚机,java語法還只會流程控制語句幕帆,面向?qū)ο笏季S一點(diǎn)沒有,OOP更是談不上赖条,對于框架失乾,到是聽過大名鼎鼎的spring,但也只會使用@Autowired和@Service纬乍。實(shí)習(xí)第一個星期碱茁,leader讓我做一個BookManager系統(tǒng),使用的框架是Spring仿贬、paoding-rose(web)纽竣、paoding-jade(持久層),paoding框架是原人人網(wǎng)的框架茧泪,以后有機(jī)會詳細(xì)介紹一下蜓氨,個人認(rèn)為paoding-jade算是一款非常簡單易用的持久層框架。最開始雖然啥也不會队伟,但是依葫蘆畫瓢的水平還是有的穴吹,大致看看leader寫的幾個樣例,自己照著寫一下嗜侮,debug一下,最后三天的時間差不多搞定了缠借。短短三天宜猜,我依稀覺得自己跨入了一道門檻。這三天時間绅喉,安裝intellij叫乌、nginx、mysql革屠、maven等等環(huán)境,并動手寫了一個小項(xiàng)目那婉,從數(shù)據(jù)庫的crud到velocity的模板渲染党瓮,算是入門了吧!對于基礎(chǔ)薄弱的自己呛谜,實(shí)習(xí)期的表現(xiàn)應(yīng)該還是基本合格的吧枪萄,這也得益于大學(xué)寫了不少C++。但是合格與優(yōu)秀之間差了十萬八千里地礼仗,當(dāng)然逻悠,這是之后感覺到的童谒,畢竟菜雞對自己的菜的認(rèn)識也是有限的沪羔。
隨著業(yè)務(wù)項(xiàng)目的慢慢深入,也隨著自己漸漸進(jìn)入"java研發(fā)工程師"這樣一個角色琅豆,對自己的不足也認(rèn)識得越來越清晰篓吁。雖然框架基本會用了,開發(fā)新的業(yè)務(wù)也沒有問題冻押,但是要問一句我是誰盛嘿,那無疑是靈魂的拷問,crud + html填空稿茉,誰上都行,我的價值在哪里呢恃慧?我覺得我的水平應(yīng)當(dāng)遠(yuǎn)不限于此米苹。
在2018年6月份,我clone了spring的framework良瞧,最后證明训唱,走出這一步的意義不關(guān)乎于我對spring的理解谎替,而在于我走上了技術(shù)探尋的道路谁鳍。讀源碼無疑是枯燥的醋闭,煎熬的沙热,并且后來發(fā)現(xiàn)摊册,還是需要技術(shù)的颊艳。無疑,才接觸java不到3個月的我白修,是看不懂spring的源碼的重斑,一個模塊也看不懂,但這無疑也是一件好事卤恳,因?yàn)樗屛易兊?不舒適"寒矿。
"不舒適"的好處就是告訴你,你很菜拆融,這句話你的同事不會說,你的爸爸媽媽會告訴你你很棒镜豹,你的朋友會羨慕你高工資,你的女朋友會讓你relax泰讽,但是優(yōu)秀的源碼會告訴你昔期,你就是個菜雞,連我在干嘛都不知道累澡。從那時候開始般贼,我發(fā)現(xiàn)優(yōu)秀的源碼和書籍十分的重要,他們會時刻告訴你你有多菜蕊梧,你有多少東西不知道腮介。
大躍進(jìn)式的學(xué)習(xí)是無效的,如果連OOP思維萌芽都沒有,連java一些基礎(chǔ)語法和特性都沒有辦法完全理解惕味,連java基礎(chǔ)類庫的全部用法都不能掌握玉锌,拿什么東西去看spring呢,浪費(fèi)時間罷了主守。這時候才能開始體會到大牛們常常掛在嘴邊的那句,基礎(chǔ)最重要救湖。
大概7月到11月的時間涎才,開始回頭看一些經(jīng)典的書籍力九,《java編程思想》跌前,《設(shè)計模式》是這段時間重點(diǎn)學(xué)習(xí)的兩本書籍陡舅。對《java編程思想》這本書的評價總是褒貶不一,現(xiàn)在來說灾炭,這本書絕對不是入門書籍摊灭,以前我記得有老師教我們,"看計算機(jī)的書有不懂的沒關(guān)系帚呼,看到后面自然就懂了",這句話同樣不適用于《java編程思想》眷蜈,如果前面有地方?jīng)]有搞懂沈自,我保證,看到后面不懂的只會變多忌怎,而不是變少酪夷。這本書是一本宏觀的雜談,沒有很規(guī)整的基礎(chǔ)知識點(diǎn)的羅列鸥印,沒有由淺入深的節(jié)奏坦报,它不會語重心長、鄭重其事的講解這些知識潜的,而是以一種更高層次的態(tài)度平等的去闡述java的各種特性字管∈韪溃《java編程思想》適合已經(jīng)具備一定java基礎(chǔ)的人去彌補(bǔ)自己的不足浑塞,適合在初學(xué)java的時候反復(fù)觀看∽煤荆《設(shè)計模式》我看的是head first的版本歇由,這本書非常棒,目前來說糊昙,是對我提升最大的一本書谢谦,它使我開始轉(zhuǎn)變java的編程思維,當(dāng)然是變成OOP的思維没咙,里面講述了如何使用設(shè)計模式去增強(qiáng)復(fù)用以及提升系統(tǒng)的擴(kuò)展性和穩(wěn)定性千劈,里面講述了幾點(diǎn)設(shè)計原則,這些原則應(yīng)該算是OOP的精華涡驮,就像牛頓三定律在力學(xué)的地位一樣喜滨。在學(xué)習(xí)完這兩本書籍之后,完成了一個小的分頁模塊,里面使用了一些OOP的思維即碗,使用了接口和繼承,使用了模板方法模式和工廠模式内舟。讓我對OOP有了更深刻的理解初橘。
當(dāng)然充岛,java相關(guān)的知識不是一個計算機(jī)從業(yè)者需要唯一關(guān)心的崔梗,很多計算機(jī)的基礎(chǔ)理論會極大的豐富你解決問題的思維垒在。去年五月份,我在一個獨(dú)立工程里面使用了流水線模型场躯,完成了一個高性能高可靠性的異步任務(wù)系統(tǒng)。由于需求的特殊伞鲫,每一個task必須獨(dú)占系統(tǒng)的所有資源签舞,用來公平的對task的性能做評估,所以核心步驟必須是單線程的撒会,這就像極了CPU师妙,CPU不也是采用流水線架構(gòu)來提升單核吞吐量的嗎,受這點(diǎn)的啟發(fā)怔檩,除了獨(dú)占系統(tǒng)的那部分時間外蓄诽,其他的工作例如前期的task初始化、遠(yuǎn)程獲取乙埃、垃圾清理等等步驟都可以使用不同的流水線去完成锯岖,不同流水線之間使用一個線程安全的隊列去同步,這樣遇伞,即避免了多線程并發(fā)帶來的系統(tǒng)復(fù)雜度飆升捶牢,也極大的提升了系統(tǒng)的吞吐量巍耗,由于系統(tǒng)天生線程安全炬太,又極大保證了系統(tǒng)的穩(wěn)定性》膳瑁現(xiàn)在看來,這并不是一個了不起的工作吓歇,但是重點(diǎn)是,在我還不會java并發(fā)技術(shù)時女气,傳統(tǒng)的一些計算機(jī)思維和算法仍然能夠給予我極大的幫助测柠。這個例子表明,活躍的思維和汲取靈感的能力也非常重要谒主,要隨時避免思維僵化赃阀。
2018年大概10月期間,接到一個調(diào)研數(shù)據(jù)平臺的任務(wù)观游,與其說是調(diào)研驮俗,不如說是學(xué)習(xí)。java的家族之大搪柑,生態(tài)之活躍完全超乎我的想象索烹,調(diào)研持續(xù)了1周,從Hadoop到Hbase再到Sqoop倚喂,從自己編譯Hadoop到部署一個小的集群做MR計算瓣戚,完全顛覆了我的視野端圈,原來java可以干這么多事情舱权。
在這期間仑嗅,我還看了《Spring In Action》英文版,不得不說鸵贬,這對于我的英文閱讀水平有非常大的提升脖捻,讀英文書籍確實(shí)比那些翻譯稀爛的中文技術(shù)書要舒服得多,當(dāng)然嗜浮,通過這本書使我對Spring也有了一個更全面的了解摩疑。
2018年12月和2019年2月,可以算作"失去的三個月"吉殃,這三個月里面片排,似乎是誤入了歧途。最近盛起的機(jī)器學(xué)習(xí)大潮沖昏了我的頭腦迫卢,大學(xué)期間冶共,我就十分癡迷于神經(jīng)網(wǎng)絡(luò)算法,那種癡迷就像是發(fā)現(xiàn)了神跡一般捅僵。機(jī)器學(xué)習(xí)的盛起讓我動搖了家卖,我把公司的《深度學(xué)習(xí)》帶回了家上荡,從家里寄來了《機(jī)器學(xué)習(xí)》和《統(tǒng)計學(xué)習(xí)方法》,在原本屬于java的時間里面叁征,研究起了機(jī)器學(xué)習(xí)逛薇、python、吳恩達(dá)的課程啤呼,甚至一度萌生了考研究生的念頭呢袱。這期間的我是迷失的,拿不定方向的醇锚,一方面是算法坯临,一方面是工程。等頭腦漸漸清醒的時候赶促,發(fā)現(xiàn)自己不可能是那個可以用算法改變世界的人挟炬,機(jī)器學(xué)習(xí)在現(xiàn)階段也要落地到具體工程上⌒鲎遥回頭望向好久沒有精進(jìn)的java粥喜,還好它還在等我,魅力不減當(dāng)年额湘。當(dāng)然,這段經(jīng)歷也不是全然沒有幫助嗡官,首先它幫助我明確了目標(biāo)毯焕,其次它提供了一種更加數(shù)學(xué)的和更加形式化的方式去看待計算機(jī)問題。
2019年3月到現(xiàn)在婆咸,重振旗鼓之后,算是踏踏實(shí)實(shí)的去好好學(xué)習(xí)了一下java,期間也深入看了不少框架物遇。比起60W行的spring和5W行的mybatis,我仔仔細(xì)細(xì)的閱讀完了paoding-jade框架乃沙,這個框架很小巧诗舰,完全基于spring對jdbc的支持和動態(tài)代理完成的一個持久層框架,框架一共不到5K行蜀铲,麻雀雖小五臟俱全属百,核心思路就是使用動態(tài)代理,創(chuàng)建各種interface的代理類厌丑,然后解析注解里面的sql語句渔呵,扔進(jìn)spring的JdbcTemplate執(zhí)行,最后將結(jié)果使用自定義的RowMapper去解析耕驰。大致用法和Mybatis的注解用法差不多录豺,但是簡潔很多,比如對"in"的支持和一些動態(tài)表達(dá)式的支持等等厚骗。之后又閱讀了部分paoding-rose框架,個人感覺這個框架過分強(qiáng)調(diào)了模型而在某種程度上忽略了功能领舰,感覺比較臃腫,所以放棄了舍咖,但是核心思路看到了锉桑,debug也不成問題,我覺得到這個程度就可以了攻柠,rose基于filter去攔截請求而不是servlet的思路讓我覺得非常新穎后裸,"約定大于配置"的信條也非常前衛(wèi)(應(yīng)該是來自于ruby on rails)。除了這些框架以外浪谴,我還看了Jedis的部分源碼因苹,Jedis算是一個簡單粗暴的框架,里面主要封裝了和redis的通信梁呈,以及pool蘸秘,比較深入的用法還沒有來得及研究。Spring仔細(xì)閱讀了bean部分的代碼還有很多其他代碼寻咒。哦,對了毛秘,WebMagic這個爬蟲框架也完全閱讀過了阻课,并做了一些自己的擴(kuò)展。仔細(xì)的閱讀完了ThreadPoolExecutor的源碼和BlockingQueue的源碼抹恳,對并發(fā)的技術(shù)提升不少署驻。自己嘗試寫了一個封裝阿里云TableStoreSDK的持久層框架健霹,用jade的思路糖埋,It works窃这,很開心,對Class祟敛、動態(tài)代理以及反射技術(shù)掌握了很多朴上。
2018年由于業(yè)務(wù)需要痪宰,還學(xué)習(xí)了一段時間的Ruby,這個語言真的花里胡哨的衣撬,語法糖巨多扮饶,個人不太喜歡,但是做到了基本能讀懂它在干什么扛点。也學(xué)習(xí)了Python岂丘,感覺python是不能夠做工程的,給人的感覺沒有java嚴(yán)謹(jǐn)铜邮,寫寫腳本那真的非常棒寨蹋。node.js對我算是一次顛覆,它在對那種高并發(fā)的輕量請求比java來的容易的多秸苗,因?yàn)樗腔诋惒绞录?qū)動的語言运褪,而且啟動快萤晴,去年有一個小服務(wù)我就是用node.js做的胁后。之后有空可以看看Golang,了解一些其他語言的理念也是很棒的事情屯断。
目前在看dubbo框架侣诺,這個框架真是一想之美,又勾勾又丟丟趴久。我想我們的架構(gòu)離進(jìn)一步的微服務(wù)化也不遠(yuǎn)了搔确。
硬要做一個總結(jié)的話,踏實(shí)不足浮躁有余座硕,很多東西掌握得都還非常的表面涕蜂,比如Spring框架的閱讀,還有很多代碼下載了都只是瞟了一眼蜘拉,要弄清工作有鹿、學(xué)習(xí)、女朋友印颤、身體這四者的關(guān)系也著實(shí)不容易〖士矗總之2018年到現(xiàn)在有失去的矢否,有得到的,更多的應(yīng)該還是得到的赖欣。要說不滿意的地方屑彻,那就是學(xué)習(xí)效率和學(xué)習(xí)深度社牲。
1. 2019
其實(shí)現(xiàn)在已經(jīng)過去5個月了悴了,但是考慮到2018年四月才入職,算了湃交,就不在意這些細(xì)節(jié)了,爭取明年的總結(jié)時間提到1月份息罗。
那2019的計劃當(dāng)然也是剩下的7個月里的計劃才沧。
接下來的7個月里面,java的進(jìn)一步掌握就是我要攻克的重點(diǎn)弊添。
- java集合源碼全部閱讀录淡,JUC源碼閱讀,弄懂nio刨裆。
- 看源碼一定要寫demo然后去debug
- netty
- spring-bean spring-mvc spring-context
- Dubbo SOFA
- tomcat
- Apollo zk
- RocketMQ
- 一致性算法 raft
- 工資upup
野心不可謂不大彬檀,也許無法全部完成,但是盡力吧窍帝!
最后,送上一句"莫那·魯?shù)?的話共勉:"站在十年之后看今天的自己"疯坤。
歡迎光臨我的個人博客:https://www.jelliclecat.cn/