1. 程式人生 > >經典bug以及問題收集

經典bug以及問題收集

程式設計工具問題

1. Could not read from remote repository

在IntelliJ IDEA中使用git出現錯誤資訊為: Could not read from remote repository問題,使用git push,git pull,或者是git clone一個新的project全都失敗。解決辦法如下:

在Settings->Version Control->Git中,將SSH executable設定為Native即可,如圖:

 

2. git原生代碼和github上的format不一樣

https://blog.csdn.net/echo_follow_heart/article/details/48314523

 

程式碼問題

後端

1.把不必要的資料庫操作放到了for迴圈裡面做

一個真實發生在我們的產品裡的例子:

 public ResponseEntity<List<PubCustomer>> getAllPubCustomer(String expand, String q, Integer pageSize,
            Integer pageNumber,
            String... sortBy) {

        ...

        Iterable<BP> bpCustomer = bpRepository.findAll(queryConditions, pageRequest);

        ...

        if (bpCustomer != null) {

            bpCustomer.forEach(bp -> {
                ...
                if (allExpandParamStatus.get(DEFAULT_ADDRESS) || allExpandParamStatus.get("all")) {
                    Address defauleAddress = addressRepository.findByOwnerIdAndIsDefault(bp.getPkId(), true);
                    customer.setDefaultAddress(defauleAddress);
                }
                customers.add(customer);
            });

        }
        ...
    }

問題出在forEach迴圈裡的一個方法呼叫addressRepository.findByOwnerIdAndIsDefault(), 如果拿回來了1000個客戶資訊,那麼這裡就會操作資料庫1000次

前端

1.瀏覽器開啟一個網頁的時候報錯:Caused by: SyntaxError: Unexpected identifier

這個錯誤一般都是由於javascript少寫了逗號或者括號導致的,需要仔細排查。

2.Chrome瀏覽器console不現實error log

在使用chrome瀏覽器開發前端功能的時候,如果網頁出了什麼錯,我們一般都會開啟瀏覽器的控制檯,檢視錯誤資訊,分析程式碼錯誤原因。最近在使用console的時候發現網頁上報錯了,可是開啟控制檯卻一直什麼錯誤都顯示不出來,後來試了一下無意中解決了這個問題

沒有error log的控制檯如下:

並且使用console.log也無法列印資訊,在網上搜索到的答案是更改default level,我試了一下不行,後來發現自己開啟console的時候,Default levels旁邊的filter框裡面就已經有了一個filter的資訊了,所以log資訊都沒顯示出來,將filter的內容清空之後即可:

 

資料庫

在使用mongodb資料庫查詢資料並排序時,遇到一個bug:

Error: error: {
"$err" : "Executor error: Overflow sort stage buffered data usage of 33558548 bytes exceeds internal limit of 33554432 bytes",
"code" : 17144
}
 

查閱資料之後發現這是因為mongodb排序有一個限制,即: 參與sort的資料的size最大不能超過32MB限制

在我的程式碼中,採取瞭如下措施,

  • 對查詢加入了filter
  • 發現返回的資料本身就是根據時間排序的,於是直接去掉了sort

事實上針對大多數的情況,可以採取如何兩種方式解決

  • 加入正確的索引
  • 修改預設配置,擴大記憶體

 

其他問題

1.使用windows git bash工具根據埠號關閉指定的執行中的專案?

使用netstat命令,顯示當前所有程序,獲取要關閉的埠的pid

使用

taskkill /PID 1234

就可以終止對應的程序。

終止成功的資訊如下:

SUCCESS: Sent termination signal to the process with PID 12332.

注意要在windows的cmd執行這個kill命令,在git bash裡面執行就會失敗。