???每隔一段時間都要思考一下自己目前的處境、分析自己的各種特質(zhì)、探索自己內(nèi)在的追求。不要因循茍且。
今天早上上班打卡,提醒我我已經(jīng)入職一年了,是的這是我第二份工作,已經(jīng)工作快滿兩年了。已經(jīng)好久沒有更文了。這篇簡短的隨筆就記錄下最近的思考。
①數(shù)據(jù)量級變化,你的代碼顫抖嗎?
最近做的一個需求,線上發(fā)版后。只有在某個賬號下(線上賬號),點擊該功能查詢數(shù)據(jù),才會出現(xiàn)服務(wù)器異常。
最終排查及優(yōu)化:我在程序中進行數(shù)據(jù)拼裝,而當(dāng)前賬號的數(shù)據(jù)循環(huán)是百級套多個萬級的循環(huán),導(dǎo)致查崩了;說白了,就是代碼效率太低了,沒有考慮到萬級的數(shù)量計算!那我干脆就利用SQL關(guān)聯(lián)查詢數(shù)據(jù),不在代碼中進行循環(huán)組裝數(shù)據(jù)了,以此來提高效率。后來又想到,為什么不用緩存呀!存入redis中。
當(dāng)數(shù)據(jù)的數(shù)量級從上升到萬級百萬級時,我們就不能局限于功能的實現(xiàn),而要更多考慮性能問題。開始可能要進行緩存,當(dāng)數(shù)量級變大后,要考慮分庫分表,做集群等等
這個問題的出現(xiàn),讓我立刻聯(lián)想到在第一家公司我們幾個實習(xí)生做的一個園區(qū)管理系統(tǒng),都沒有考慮到后期項目,如果存在萬級,百萬級的數(shù)據(jù)處理問題,那么后期維護起來就會越來越麻煩,要進行項目優(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!? 細細看這個轉(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)化!