常見bug收集

Table of Contents

後端

把不必要的數據庫操作放到了for循環裏面做

前端

瀏覽器打開開發好的網頁的時候報錯:Caused by: SyntaxError: Unexpected identifier

數據庫

mongodb排序問題


本篇博客主要是收集一些編程時遇到的典型的代碼方面的bug,包括前端後端以及數據庫。

後端

把不必要的數據庫操作放到了for循環裏面做

一個真實發生在我們的產品裏的例子,僞代碼如下:

 public ResponseEntity<List<PubCustomer>> getAllCustomer(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循環裏的一個方法調用了一個數據庫操作的方法findByOwnerIdAndIsDefault(), 如果拿回來了1000個客戶信息,那麼這裏就會操作數據庫1000次.

nested exception is java.lang.IllegalArgumentException: Token (spring.cloud.vault.token) must not be empty

項目爲spring boot項目,使用了vault,在啓動時報了上述錯誤。原因在於在src/main/resources目錄下只添加了application.properties而沒有添加BootStrap.properties.

Spring Cloud Configuration集成使用boostrap上下文進行配置。 在啓動應用程序上下文之前配置引導上下文,以便配置集成可以加載和初始化隨後在應用程序上下文中使用的PropertySource。

因此添加bootstrap.properties文件,並加上屬性spring.cloud.vault.token即可。

參考:https://stackoverflow.com/questions/53933508/caused-by-java-lang-illegalargumentexception-token-spring-cloud-vault-token

前端

瀏覽器打開開發好的網頁的時候報錯:Caused by: SyntaxError: Unexpected identifier

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

數據庫

mongodb排序問題

在使用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

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

  • 加入正確的索引
  • 修改默認配置,擴大內存
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章