???每隔一段時間都要思考一下自己目前的處境瞻颂、分析自己的各種特質(zhì)脚粟、探索自己內(nèi)在的追求。不要因循茍且蘸朋。
今天早上上班打卡核无,提醒我我已經(jīng)入職一年了,是的這是我第二份工作藕坯,已經(jīng)工作快滿兩年了团南。已經(jīng)好久沒有更文了。這篇簡短的隨筆就記錄下最近的思考炼彪。
①數(shù)據(jù)量級變化吐根,你的代碼顫抖嗎?
最近做的一個需求辐马,線上發(fā)版后拷橘。只有在某個賬號下(線上賬號),點擊該功能查詢數(shù)據(jù)喜爷,才會出現(xiàn)服務(wù)器異常冗疮。
最終排查及優(yōu)化:我在程序中進(jìn)行數(shù)據(jù)拼裝,而當(dāng)前賬號的數(shù)據(jù)循環(huán)是百級套多個萬級的循環(huán)檩帐,導(dǎo)致查崩了术幔;說白了,就是代碼效率太低了湃密,沒有考慮到萬級的數(shù)量計算诅挑!那我干脆就利用SQL關(guān)聯(lián)查詢數(shù)據(jù),不在代碼中進(jìn)行循環(huán)組裝數(shù)據(jù)了泛源,以此來提高效率拔妥。后來又想到,為什么不用緩存呀达箍!存入redis中没龙。
當(dāng)數(shù)據(jù)的數(shù)量級從上升到萬級百萬級時,我們就不能局限于功能的實現(xiàn),而要更多考慮性能問題兜畸。開始可能要進(jìn)行緩存努释,當(dāng)數(shù)量級變大后碘梢,要考慮分庫分表咬摇,做集群等等
這個問題的出現(xiàn),讓我立刻聯(lián)想到在第一家公司我們幾個實習(xí)生做的一個園區(qū)管理系統(tǒng)煞躬,都沒有考慮到后期項目肛鹏,如果存在萬級,百萬級的數(shù)據(jù)處理問題恩沛,那么后期維護起來就會越來越麻煩在扰,要進(jìn)行項目優(yōu)化。
②原來如此的精髓在于你問問題的深度
近來有兩件小事雷客,讓我覺得問問題的深度決定你是否能捅破那一層窗戶紙芒珠。有一種相見恨晚的感覺!
前段時間搅裙,在研究spring源碼 (你知道我暈了多少次嗎皱卓,自己體會去吧……),然后手寫自己的一個minispring框架時部逮,發(fā)現(xiàn)娜汁,原來spring是繼承了httpservlet呀,這不就是剛開始做servlet程序的內(nèi)容嘛兄朋,說白了spring就是在servelt程序基礎(chǔ)上掐禁,封裝優(yōu)化演變?yōu)閟pring的,瞬間恍然大悟颅和!
關(guān)于servlet,早已經(jīng)模糊了傅事,于是從頭到尾找教程模仿了一遍,天呢峡扩,這個課程的內(nèi)容享完,大學(xué)的時候?qū)W過,好吧有额,我都早已經(jīng)忘了般又,只記得學(xué)過!看完才意識到servlet,可以理解為后臺處理請求的原生代碼巍佑,后面的spring 分明就是基于它而來的茴迁。
系統(tǒng)的看完servlet后,關(guān)于后面衍生出jsp,看到j(luò)sp被jsp container 先轉(zhuǎn)譯為jsp_servlet.java文件萤衰,然后再執(zhí)行編譯為.class文件堕义,然后將響應(yīng)的結(jié)果返回給瀏覽器。我們都知道編譯,但是你知道怎么轉(zhuǎn)譯嗎倦卖?tomcat是如何轉(zhuǎn)譯的洒擦?轉(zhuǎn)譯后的文件內(nèi)容是什么?
我一步一步深究下去怕膛,發(fā)下轉(zhuǎn)譯后的文件在\tomcat\work\Catalina\localhost\_\org\apache\jsp
下熟嫩,打開這個文件發(fā)現(xiàn),竟然有實現(xiàn)了httpjspbean,探究到底 httpjspbean也是繼承了servlet,說白了 jsp就是一個servlet!? 細(xì)細(xì)看這個轉(zhuǎn)譯的文件褐捻,還發(fā)現(xiàn)了單例模式的應(yīng)用掸茅,以及內(nèi)置對象的初始化……
而這,我在翻看我之前的簡書文章柠逞,發(fā)現(xiàn)之前有記過筆記昧狮,而然,當(dāng)時并不能深刻理解為什么會轉(zhuǎn)譯板壮,是如何轉(zhuǎn)譯的逗鸣?轉(zhuǎn)譯的內(nèi)容是什么?只是記住了這個請求流程绰精!為什么我在學(xué)校的時候沒有在深問一層呢撒璧?!不然也不至于云里霧里茬底,估計當(dāng)時就是不能深刻理解吧沪悲,真的是打臉,相識恨晚阱表。這種融會貫通的體驗殿如,可能就是差了種打破砂鍋問到底的精神,差了這種問問題的深度最爬,當(dāng)然涉馁,這也與實踐過程中的思考密不可分!
③……
未完待續(xù)爱致,隨筆僅作記錄烤送,改日精簡優(yōu)化!