正經(jīng)人誰寫日記
這周想瞎扯淡一下,聊聊近一個(gè)月的事。
感覺自己近一個(gè)月充滿了負(fù)能量,每天都在被各種Bug花樣吊打,意識(shí)已經(jīng)有點(diǎn)模糊了。
如果看過我前幾篇文章的同學(xué),可能就會(huì)知道我最近在整合系統(tǒng)。
有的同學(xué)可能不知道整合系統(tǒng)是什么樣的概念,聽著好像挺牛逼的,其實(shí)前期的工作無非就是拷貝代碼到另一個(gè)應(yīng)用下,啟動(dòng)起來,校驗(yàn)各個(gè)服務(wù)正常后,把另一個(gè)應(yīng)用給下線掉。
這個(gè)過程中會(huì)遇到非常多的問題,在開發(fā)側(cè)上可能最花時(shí)間的就是解決依賴沖突的問題。
應(yīng)用A本身是一個(gè)獨(dú)立的系統(tǒng),應(yīng)用D也是一個(gè)獨(dú)立的系統(tǒng),各自有的自己的依賴(環(huán)境)。有可能應(yīng)用A是SpringBoot搭建的,而應(yīng)用D是Spring搭建的,現(xiàn)在要把應(yīng)用A合到應(yīng)用D上。
三歪近一個(gè)月每天坐在工位上,就在排除各種的依賴。寫bug、修bug 、寫bug、修bug、寫bug、修bug.....
“臥槽,這怎么又沒啟起來啊”
“這什么鬼啊,為什么說我的 group 沒找到啊,明明有的啊”
"這牛逼啊,報(bào)錯(cuò)信息都沒,就是啟不來,這能怎么排查啊"
“求你了,趕緊給我發(fā)布成功吧?!?/p>
“靠,我這配置信息怎么沒被讀取到啊”
“完了,我繞不開這個(gè)Bug了”
“這怎么就返回302了啊,都請(qǐng)求到nginx了,怎么沒打到接口上”
“我這個(gè)問題已經(jīng)兩天了,能不能幫我看看”
這段時(shí)間修了很多Bug,上線過幾個(gè)Bug,也很可能“埋下”了許多Bug。
整合系統(tǒng)也快要結(jié)束了,回顧一下近一個(gè)月我的想法。
本來想吐槽一下自己為什么這么菜,能遇到這么多的Bug,解決起來還十分費(fèi)勁,還有這么一大堆不懂的東西。
后來感覺這好像也沒什么好寫的,我這負(fù)能量也不應(yīng)該再傳達(dá)給別人。
還不如定個(gè)小目標(biāo),成為一個(gè)我自認(rèn)為的”強(qiáng)者“應(yīng)該要有什么樣的能力。
想要成為一個(gè)強(qiáng)者
近一個(gè)月越來越發(fā)現(xiàn)自己還有很長的路要走。雖然畢業(yè)也快一年了,但總覺得自己就是一個(gè)廢物,沒有畢業(yè)一年該有的水平。
可能是身邊的人實(shí)在是太強(qiáng)了吧。
如果我認(rèn)為一個(gè)人很強(qiáng),會(huì)有幾個(gè)方面評(píng)估:
- 看到這個(gè)人寫的代碼很吊。真沒想到還能這樣封裝,還能這樣寫代碼。
- 看到這個(gè)人解決問題能力很強(qiáng)?;居惺裁碆ug去問他,很快就能有思路解決。
- 看到這個(gè)人對(duì)業(yè)務(wù)理解很深。在業(yè)務(wù)上會(huì)有自己的理解和見解,對(duì)別人的業(yè)務(wù)也能快速上手。
說白了就是編碼能力、解決問題能力、業(yè)務(wù)能力。
編碼能力
這次在整合系統(tǒng)和中間件相關(guān)遷移的時(shí)候又重新看了一下系統(tǒng)以及相關(guān)組件的代碼。
發(fā)現(xiàn)我現(xiàn)在維護(hù)的整個(gè)系統(tǒng)以及相關(guān)組件幾乎都是同一個(gè)人寫的。
認(rèn)認(rèn)真真看了一下封裝好的組件以及他的編碼風(fēng)格。
在最開始的時(shí)候會(huì)發(fā)自內(nèi)心的感嘆:”這人的代碼有點(diǎn)東西啊“
再到后來:”這人怎么這么強(qiáng)阿“
再到后來:”我靠,看不懂了看不懂了,怎么這么多層抽象啊“
最后:”我感覺我再過一年也寫不出這樣的代碼“
當(dāng)我分享給隔壁的小伙伴的時(shí)候,他說:”這人是在中間件團(tuán)隊(duì)干過的吧?“
有的人的編碼風(fēng)格給人看起來就很舒服(雖然有的時(shí)候覺得有炫技的成分)??赡軟]碰過面,沒聊過天,但一看代碼就能知道寫代碼這人是真的有東西。
你還在寫各種if else的時(shí)候,人家用Pipeline 模式將代碼優(yōu)化了一把
....
設(shè)計(jì)模式如果不了解它,可能在最開始看的時(shí)候不太好理解代碼,會(huì)感覺繞來繞去的。了解它以后,發(fā)現(xiàn)維護(hù)起來是真的舒服??!
解決問題的能力
前段時(shí)間在知乎看過一個(gè)問題,(具體記不太清了)類似的題目就是《程序員 要看這么多源碼,這些時(shí)間要怎么合理分配呢,怎么才能成為Java專家》
看到不少的大佬在回答,其中我在里邊看到了一個(gè)觀點(diǎn)。
源碼和技術(shù)都是看不完的,程序員更重要的是需要有解決問題的能力。
三歪個(gè)人是挺認(rèn)同的。
為什么說公司喜歡招有經(jīng)驗(yàn)的程序員,因?yàn)橛薪?jīng)驗(yàn)的程序員往往會(huì)遇到各種的問題,這些問題都解決過后就會(huì)有自己的一套方法論去解決,或者可以給沒遇到過的同事給分享當(dāng)初的解決方案,這可以省下很多時(shí)間。
還是最近的經(jīng)歷為例,我這邊要整合一個(gè)系統(tǒng)A到系統(tǒng)D,可能需要花費(fèi)4天。而我組內(nèi)的大佬,可能花兩天就完成了。
那這時(shí)間的差距在哪?其實(shí)就是解決問題的能力和方法論上,總不能我單純拷代碼比人家拷代碼要慢兩天吧。
方法論
在前期遷移的時(shí)候,我是先把對(duì)外提供的RPC接口層先拷貝,然后該接口所涉及到的數(shù)據(jù)訪問層再拷貝進(jìn)去。
雖然代碼是拷貝進(jìn)去了,但啟動(dòng)項(xiàng)目的時(shí)候就很難受,會(huì)有一大堆沒遇到過的問題(遷過去的服務(wù)層和數(shù)據(jù)訪問層我都不知道有沒有問題)。
我當(dāng)時(shí)的想法是:可能有的接口是沒用到的,那就不拷貝了。還在用的接口先拷,不在用的接口就不要了。這樣我后期的改動(dòng)就會(huì)少一點(diǎn)。
后來問了一下大佬是怎么做到這么快的,他說:”你可以先拷貝數(shù)據(jù)訪問層,然后先啟動(dòng)起來,一層一層去搞,那就會(huì)快很多。在前期其實(shí)不建議動(dòng)太多的代碼,后續(xù)優(yōu)化就好了?!?/p>
這么一想,的確也是。先搞掂數(shù)據(jù)訪問層,等搞服務(wù)層的時(shí)候,如果出了問題,數(shù)據(jù)訪問層就基本不用考慮了。
有經(jīng)驗(yàn)的人會(huì)有自己的一套做事或者解決問題的”套路“。
基礎(chǔ)能力
可能我遇到一個(gè)問題,然后要花1天才能準(zhǔn)確定位到所在的問題在哪。但大佬遇到問題,很快就能理清這很是出現(xiàn)在什么地方,然后解決掉。
最近我司要把MQ上云,在切換的過程中,我啟動(dòng)項(xiàng)目后發(fā)現(xiàn)Consumer不消費(fèi)了,是項(xiàng)目下的所有Consumer都不消費(fèi)。
項(xiàng)目也能正常啟動(dòng),就是Consumer不消費(fèi)??戳巳罩?,報(bào)了幾句簡單的錯(cuò)誤,大致就說Consumer已經(jīng)被shutdown了,拉取不到數(shù)據(jù)。
我排查了1天,也感覺自己沒改過什么東西。我當(dāng)時(shí)的想法是:Consumer和Consumer之間在我使用方的角度是隔離的,即便某個(gè)Consumer掛了,也不至于影響該應(yīng)用下的所有Consumer。
我就一直在找是什么問題給造成的,一度懷疑是不是依賴沖突了(畢竟我這個(gè)月幾乎都在解決各種的依賴問題)。
后來實(shí)在頂不住了,問了一下組內(nèi)的大佬,給大佬講了我現(xiàn)在遇到的問題,中間排查過的問題,以及自己認(rèn)為是哪兒存在問題。
大佬聽到后,就說:”你的Consumer 有shutdown嗎?“
我說:”有啊,但業(yè)務(wù)上就是這樣干的。shutdown應(yīng)該不會(huì)有影響吧,即便shutdown有影響,那我其他topic的Consumer 應(yīng)該也不會(huì)有影響呀。我一個(gè)Consumer一個(gè)實(shí)例的“
大佬就去看shutdown里邊的實(shí)現(xiàn)過程了,過了一會(huì)告訴我說:”這shutdown 應(yīng)該還有些問題,待會(huì)找MQ的負(fù)責(zé)人聊一下“
果真,最后還真的是shutdown處理導(dǎo)致的。
解決問題其實(shí)很考驗(yàn)程序員的水平:排依賴、快速理解代碼、系統(tǒng)運(yùn)轉(zhuǎn)的整體流程(從請(qǐng)求到域名解析到proxy 代理再到本機(jī)nginx然后才到tomcat端口)等等、猜測(cè)某個(gè)功能是如何實(shí)現(xiàn) 等等。
有的時(shí)候你問他Git的使用,他就會(huì)告訴你如何使用Git。
有的時(shí)候你問他Maven是怎么選擇某一個(gè)版本的,他就告訴你Maven的仲裁機(jī)制。
有的時(shí)候你問他數(shù)據(jù)是怎么流轉(zhuǎn),他就告訴你Storm、Flink這些是怎么實(shí)現(xiàn)的。
有的時(shí)候你問他SQL調(diào)優(yōu),他也懂
.....
業(yè)務(wù)能力
很可能大多數(shù)人都是做業(yè)務(wù),業(yè)務(wù)能力在我看來也很重要。這決定了你所負(fù)責(zé)的系統(tǒng)跟別人的系統(tǒng)的差距在哪。
他們會(huì)拉各個(gè)公司的系統(tǒng)來跟自己的對(duì)比,看看自己的系統(tǒng)有哪些不足,再結(jié)合當(dāng)下的環(huán)境把那些可行的功能給實(shí)現(xiàn)掉。在為公司創(chuàng)造價(jià)值的同時(shí),自己也能得到成長。
我的Leader曾說過:”校驗(yàn)一個(gè)人的能力,就看他能不能把自己所負(fù)責(zé)的系統(tǒng)從零再搭建起來“
”假設(shè)你換了一家公司,沒有現(xiàn)在這家公司的基礎(chǔ)架構(gòu)設(shè)施,能不能把你現(xiàn)在所負(fù)責(zé)的系統(tǒng)從零快速再搭起來“
反思
平時(shí)學(xué)學(xué)設(shè)計(jì)模式,寫寫文章什么的可還行,但真正去落地、把設(shè)計(jì)模式運(yùn)用到實(shí)際的生產(chǎn)環(huán)境中,還是差得有點(diǎn)多。
發(fā)現(xiàn)自己基礎(chǔ)解決問題的能力還有很多不足的地方,Maven的仲裁機(jī)制都是問同事的,Git回滾版本相關(guān)的使用也是問同事的....
沒有對(duì)新的功能充分校驗(yàn)和測(cè)試,就把代碼給上線了,這是非常不應(yīng)該的。
在遇到線上問題的時(shí)候,沒有保持冷靜的思考和fix操作,導(dǎo)致排查問題的時(shí)間會(huì)延長。
....
時(shí)常懷疑自己是不是專門就是寫B(tài)ug的。
時(shí)常擔(dān)心以后把系統(tǒng)交接出去,接手系統(tǒng)的同事會(huì)在背后說我在代碼里邊下毒。
時(shí)常擔(dān)心自己的改動(dòng)影響到了線上的問題,然后出了大問題。每次發(fā)布后,如果內(nèi)網(wǎng)有人找我,都要慌一慌。
大家 一起 奧利給!
各類知識(shí)點(diǎn)總結(jié)
下面的文章都有對(duì)應(yīng)的原創(chuàng)精美PDF,在持續(xù)更新中,可以來找我催更~
- 92頁的Mybatis
- 129頁的多線程
- 141頁的Servlet
- 158頁的JSP
- 76頁的集合
- 64頁的JDBC
- 105頁的數(shù)據(jù)結(jié)構(gòu)和算法
- 142頁的Spring
- 58頁的過濾器和監(jiān)聽器
- 30頁的HTTP
- 42頁的SpringMVC
- Hibernate
- AJAX
- Redis
- ......
掃碼或者微信搜Java3y 免費(fèi)領(lǐng)取原創(chuàng)思維導(dǎo)圖、精美PDF。在公眾號(hào)回復(fù)「888」領(lǐng)取,PDF內(nèi)容純手打有任何不懂歡迎來問我。
原創(chuàng)電子書
原創(chuàng)思維導(dǎo)圖

![]() |
|
我是三歪,一個(gè)想要變強(qiáng)的男人,感謝大家的在看收藏和轉(zhuǎn)發(fā),下期見。


