欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

兩天沒解決的問題chatgpt用了5秒搞定隱藏bug

 更新時間:2023年04月10日 17:29:52   作者:蘇世_  
這篇文章主要為大家描述了我用了兩天沒解決的問題chatgpt用了5秒搞定的全程介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

一個說難不難,說簡單竟看不出來是哪里問題的一個bug。是的 可能自己能力和經(jīng)驗(yàn)尚淺無法識別,下面你們能否用火眼金睛一眼讓bug原形畢露

(這個問題是忽然暴露出來的,無任何征兆,沒人改動過,生產(chǎn)上運(yùn)行了很長時間,故很奇怪,所以這個間諜看來很會隱藏)

隱藏的“間諜”

下面先來看代碼(偽代碼)

code

/**
 * 兩個從數(shù)據(jù)庫查詢的耗時任務(wù)
 * @param countDownLatch
 * @param all
 */
public static void testCount(CountDownLatch countDownLatch, List<String> all) {
    for (int i = 0; i < 2; i++) {
        int finalI = i;
        ThreadPoolFactory.getGeneral().execute(() -> {
            try {
                List<String> countList = new ArrayList<>();
                //這里之所以用for循環(huán),是因?yàn)椴樵儤I(yè)務(wù)需要0和1兩個狀態(tài)去查詢
                if (finalI == 0) {
                //這里其實(shí)是查詢數(shù)據(jù)庫的mapper操作,為了方便演示
                    countList.add("1");
                    countList.add("2");
                    countList.add("3");
                } else {
                //這里其實(shí)是查詢數(shù)據(jù)庫的mapper操作,為了方便演示
                    countList.add("5");
                    countList.add("6");
                    countList.add("7");
                    countList.add("8");
                }
                if (countList != null) {
                    all.addAll(countList);
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            } finally {
                countDownLatch.countDown();
            }
        });
    }
}
//線程池類
public class ThreadPoolFactory {
    private static final Logger logger = LoggerFactory.getLogger(ThreadPoolFactory.class);
    private static final ThreadFactory GENERAL_THREAD_FACTORY = new ThreadFactoryBuilder().setNameFormat("general-pool-%d").build();
    /**
     * corePoolSize:核心線程池大小
     * maximumPoolSize:最大線程池大小
     * keepAliveTime:線程最大空閑時間
     * unit:時間單位
     * workQueue:線程等待隊(duì)列  四種隊(duì)列 1.ArrayBlockingQueue:有界隊(duì)列,2.SynchronousQueue:同步隊(duì)列,3.LinkedBlockingQueue:無界隊(duì)列,4.DelayQueue:延時阻塞隊(duì)列
     * threadFactory:線程創(chuàng)建工廠
     * handler:拒絕策略 四種策略 1.ThreadPoolExecutor.AbortPolicy():2.ThreadPoolExecutor.CallerRunsPolicy():3.ThreadPoolExecutor.DiscardOldestPolicy():4.ThreadPoolExecutor.DiscardPolicy()
     */
    private static final ExecutorService GENERAL = new ThreadPoolExecutor(5, 10,
            30L, TimeUnit.MILLISECONDS,
            new LinkedBlockingQueue<>(4096), GENERAL_THREAD_FACTORY, new ThreadPoolExecutor.AbortPolicy());
    public static ExecutorService getGeneral() {
        return GENERAL;
    }
}
//main方法測試
public static void main(String[] args) throws Exception {
    List<String> all = new ArrayList<>();
    CountDownLatch countDownLatch = new CountDownLatch(2);
    testCount(countDownLatch,all);
    countDownLatch.await(10, TimeUnit.SECONDS);
    System.out.println(all);
}

對于上面CountDownLatch不了解的的可以看下我歷史的文章: 干貨!CountDownLatch的使用場景

看到這里不知道你們能否看出端倪,先說問題結(jié)果吧,最后的這個all集合為空,生產(chǎn)上的接口也是同樣的問題,我上面的代碼是和生產(chǎn)上的1:1復(fù)制的偽代碼。

我先說下我的排查思路:

1、線程池問題,我認(rèn)為是線程沒有被及時的回收,時間太長,并發(fā)數(shù)過高,導(dǎo)致線程不夠用,第一想到的是便是線程數(shù)需要增加

2、數(shù)據(jù)庫數(shù)據(jù)過多,導(dǎo)致查詢比以前慢出一個量級,最后隊(duì)列阻塞,拖垮線程(這個概率比較低,因?yàn)閿?shù)據(jù)庫查詢很快返回,并沒有需要優(yōu)化的慢sql)

3、懷疑是這個循環(huán)造成的,比如某種機(jī)制少循環(huán)或者不循環(huán),去掉for循環(huán)依然沒解決問題

驗(yàn)證第一位”間諜“

首先擴(kuò)大核心線程數(shù)和最大線程數(shù),將這倆參數(shù)擴(kuò)大為10和20

private static final ExecutorService GENERAL = new ThreadPoolExecutor(10, 20,
            30L, TimeUnit.MILLISECONDS,
            new LinkedBlockingQueue<>(4096), GENERAL_THREAD_FACTORY, new ThreadPoolExecutor.AbortPolicy());

擴(kuò)大之后,放上去能查出數(shù)據(jù)了,感覺解決了這個大問題

那句話怎么說來著,真相往往不是那么的容易發(fā)現(xiàn),最先抓到的都是小魚小蝦,果不其然,運(yùn)行了一周左右,同樣的問題又出現(xiàn)了,感覺這就是一水缸,你把水缸變大,終有蓄滿的一天。我們都知道,線程池可不是越大越好。

那么真相究竟是什呢,看到這里的小伙伴如果你已經(jīng)有了答案,可以先去評論區(qū)評論,不要看下面的答案。

借助GPT“偵探柯南”

chatgpt這里我就不多說了,這個東西如果現(xiàn)在還不了解的,那我就。。。就只能求求你趕緊去了解下吧

我把生產(chǎn)上的代碼完整的貼上去,他是這樣回答的

不得不說,一語中的,僅5秒就把我們所能想到和不能想到的都回答出來了

  • 很顯然,第二點(diǎn),第三點(diǎn)我們基本上驗(yàn)證通過了
  • 那就是第一點(diǎn)了,其實(shí)我們早就應(yīng)該想到這一點(diǎn)的,多線程環(huán)境下,線程安全問題是首位的?。?!

找出"真兇"

使用synchronized關(guān)鍵字解決線程安全

使用synchronized關(guān)鍵字來同步訪問all列表,即在多個線程訪問all列表時,使用同一個鎖來保證線程安全,避免出現(xiàn)數(shù)據(jù)不一致的問題。這樣就解決了多個線程可能會同時訪問并修改數(shù)據(jù),導(dǎo)致數(shù)據(jù)丟失或損壞的問題。

聰明的你有沒有找出“真兇”呢???

還記得我們加大線程數(shù)來解決問題嗎,我又問了一個問題

擴(kuò)大線程池的參數(shù)可能會提高程序的并發(fā)處理能力,但并不能從根本上解決問題。如果是由于數(shù)據(jù)同步問題導(dǎo)致的線程池查不到數(shù)據(jù),那么擴(kuò)大線程池只是把問題暫時推遲了而已。此外,擴(kuò)大線程池的核心線程池?cái)?shù)量也會占用更多的系統(tǒng)資源

AI已來,未來已來

再啰嗦一句,AI的強(qiáng)大這里就不再強(qiáng)調(diào)了 ,接下來我會持續(xù)利用GPT輸出很多干貨和其他AI生態(tài)的東西,都收在下方的AI專欄里,一起學(xué)習(xí),一起成長,用一句話作為結(jié)尾吧: 將來淘汰你的不是AI,而是不會用AI的人

以上就是兩天沒解決的問題chatgpt用了5秒搞定的詳細(xì)內(nèi)容,更多關(guān)于chatgpt 5秒解決問題的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java如何利用FastJSON、Gson、Jackson三種Json格式工具自定義時間序列化

    java如何利用FastJSON、Gson、Jackson三種Json格式工具自定義時間序列化

    本篇文章主要介紹了java如何利用FastJSON、Gson、Jackson三種Json格式工具自定義時間序列化,具有一定的參考價值,有興趣的可以了解一下
    2017-08-08
  • springmvc fastjson 反序列化時間格式化方法(推薦)

    springmvc fastjson 反序列化時間格式化方法(推薦)

    下面小編就為大家?guī)硪黄猻pringmvc fastjson 反序列化時間格式化方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • MyBatis中SqlSession實(shí)現(xiàn)增刪改查案例

    MyBatis中SqlSession實(shí)現(xiàn)增刪改查案例

    這篇文章主要介紹了MyBatis中SqlSession實(shí)現(xiàn)增刪改查案例,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-03-03
  • 解決Java?properties文件里面如何寫"\"的問題

    解決Java?properties文件里面如何寫"\"的問題

    由于properties使用“\”相當(dāng)于是java的轉(zhuǎn)義符,如果想要寫出\的效果,只需修改相應(yīng)的寫法即可,對java?properties文件里的"\"寫法感興趣的朋友一起看看吧
    2022-04-04
  • Spring @Primary和@Qualifier注解原理解析

    Spring @Primary和@Qualifier注解原理解析

    這篇文章主要介紹了Spring @Primary和@Qualifier注解原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • Java IO之序列化與反序列化詳解

    Java IO之序列化與反序列化詳解

    這篇文章主要為大家介紹了Java IO之序列化與反序列化,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Java黑科技:replace首個替換一秒搞定

    Java黑科技:replace首個替換一秒搞定

    要實(shí)現(xiàn)只替換第一個匹配項(xiàng),可以使用Java中的String類的replaceFirst方法,該方法接受兩個參數(shù),第一個參數(shù)是要替換的字符串或正則表達(dá)式,第二個參數(shù)是替換后的字符串,需要的朋友可以參考下
    2023-10-10
  • 使用Spring?Boot進(jìn)行單元測試詳情

    使用Spring?Boot進(jìn)行單元測試詳情

    這篇文章主要介紹了使用Spring?Boot進(jìn)行單元測試詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • Maven打包時如何指定啟動類

    Maven打包時如何指定啟動類

    這篇文章主要介紹了Maven打包時如何指定啟動類問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • SpringBoot服務(wù)開啟后通過端口訪問無反應(yīng)的解決

    SpringBoot服務(wù)開啟后通過端口訪問無反應(yīng)的解決

    這篇文章主要介紹了SpringBoot服務(wù)開啟后通過端口訪問無反應(yīng)的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10

最新評論