程序員的頓悟
這次寫一篇與代碼優(yōu)化相關(guān)的難忘經(jīng)歷 ① 第一次是產(chǎn)品覺得功能列表顯示很慢,但部門不太忙,只剩下我一個人,所以讓我優(yōu)化。作為一個工作時間不長的新人,我的心仍然很困惑。我首先定位了相關(guān)的業(yè)務(wù)代碼,發(fā)現(xiàn)有很多表需要查詢,需要查詢的數(shù)據(jù)需要處理。因此,斷點位于一些較慢的地方。果不其然,其中一種查詢數(shù)據(jù)庫的方法速度特別慢。在我的腦海中,我瘋狂地回憶起當(dāng)時記憶中的SQL優(yōu)化。取出SQL后,我發(fā)現(xiàn)查詢是針對整個表數(shù)據(jù)的,沒有使用傳遞的參數(shù),但方法傳遞的參數(shù)顯然包括在內(nèi),對吧??我一步一步地查看了SQL連接,最終發(fā)現(xiàn)查詢條件沒有連接,導(dǎo)致查詢整個表數(shù)據(jù)。此外,隨后的處理也是從整個表數(shù)據(jù)中進行過濾和處理 改裝后,速度確實更快了,但仍然沒有達到產(chǎn)品的預(yù)期。因此,使用多線程來使用不同的線程查詢不同的表,并使用CountDownLatch來控制線程,以便在執(zhí)行下一步之前完成所有數(shù)據(jù)查詢。修改后速度快多了 在使用多線程時,注意線程安全問題很重要,因為我們以前遇到過每次查詢的數(shù)據(jù)總是較少。最后,我們使用了Collections。synchronizedList(new ArrayList<>)以確保集合的安全 ② 第二次是數(shù)據(jù)量太大,無法在前端顯示,所以我們通過導(dǎo)出HTML對其進行了優(yōu)化。起初,我只需要修改后端返回到前端的結(jié)構(gòu)。由于它是一個樹結(jié)構(gòu),我們使用了遞歸。在遞歸之前,我們首先使用Java的流流根據(jù)父ID對數(shù)據(jù)進行分組。這樣,在遞歸過程中,我們可以直接根據(jù)父ID找到相應(yīng)的集合,而不必每次遍歷整個集合。 當(dāng)前端調(diào)用時,發(fā)現(xiàn)超過300000個數(shù)據(jù)卡在數(shù)據(jù)庫查詢中,無法進行我編寫的遞歸 所以我在Oracle數(shù)據(jù)庫中使用了rownum()方法,每次查詢數(shù)以萬計的項目,并進行批量查詢。為了確保數(shù)據(jù)不重復(fù),我需要按ID進行排序,這可能很慢,但可以生成。至于進一步的優(yōu)化,我將使用線程,但由于它已經(jīng)可以生成,因此沒有必要對其進行優(yōu)化。 關(guān)于優(yōu)化,到目前為止,我接觸到的基本上是數(shù)據(jù)庫方面的SQL優(yōu)化,創(chuàng)建索引,在業(yè)務(wù)中使用多線程(注意線程安全),以及通過添加服務(wù)器部署集群進行部署。至于Jvm優(yōu)化,我還沒有學(xué)會這些更高級的方法。
¥ 議價
我已閱讀并同意
《中介網(wǎng)服務(wù)協(xié)議》
推薦經(jīng)紀(jì)人
1、標(biāo)的信息為賣家提供,中介網(wǎng)不對該信息真實性或準(zhǔn)確性作保證。
2、若需查詢更多信息請聯(lián)系中介網(wǎng)經(jīng)紀(jì)人核實。
3、為了安全起見,不要輕易與賣家進行線下交易;非平臺線上中介的項目,出現(xiàn)任何后果均與中介網(wǎng)無關(guān),無論賣家以任何理由要求線下交易的,請聯(lián)系中介網(wǎng)經(jīng)紀(jì)人舉報。
詳細(xì)介紹
服務(wù)介紹
常見問答


















