1. 程式人生 > 實用技巧 >Elasticsearch的來源。(一)

Elasticsearch的來源。(一)

第02組 每週小結 (1/3)

基本情況

衝刺情況彙報

過去一週完成了哪些任務?文字/口頭描述

前端:

  • 修復喜歡標籤/忌口標籤/菜品/篩選/視窗頁面 android手機樣式錯誤
  • 首頁食堂擁擠上劃重新整理
  • 部分樣式修改

後端

  • 做oos觸發器,設定定時頻寬升級

  • 修復[視窗星級]的bug

  • 修復[熱門模組]後臺崩潰的bug

  • 修復部分視窗收藏無法取消的問題

  • 修復[管理員模組]相關持久層刪除級聯的問題(新增觸發器)

  • 儘可能地美化[管理員模組]的UI

展示GitHub當日程式碼/文件簽入記錄

前端

後端

做了哪些優化和迭代

前端

  • 修復喜歡標籤/忌口標籤/菜品/篩選頁面 android手機樣式錯誤
  • 首頁食堂擁擠上劃重新整理
  • 部分樣式修改

後端

  • 做oos觸發器,設定定時頻寬升級,做網路IO的優化

  • 熱門排序演算法的更新

  • 更改管理員相關持久層的級聯刪除

  • 優化[管理員模組]的頁面

通過自動化測試測出的bug(如沒有可不填)

解決了哪些Bug,又是如何解決的(需要寫詳細)

前端

android 端小程式多個頁面的 flex 佈局錯誤,子元件會撐開父元件已經設為"flex: 1 1 0;"的父元件,是android 端小程式渲染使用了微信自己的瀏覽器引擎 x5 導致的,然後給父元件設定了 maxHeight 就解決了.

後端

  • 修復[視窗星級]的bug

這個bug是在進入視窗頁面時,星級非常大,我們滿的明明就是5,但竟然出現了大於20的情況,後來發現是方法呼叫錯誤,持久層注入後,呼叫的是計算視窗標籤總數,而並非星級計算

原來版本

windowEntry.setStar((double) dishTagMapper.countTagNumByWindowId(windowId));

修改後

windowEntry.setStar(dishCommentMapper.getAvgStarsByWindowId(windowId));

這是粗心大意造成的

  • 修復[熱門模組]後臺崩潰的bug

之前並不覺得熱門的排序會出現什麼問題,因為也確實正常運行了,但隨著資料量的增大,在沒有改動程式碼的情況下,熱門崩潰了!查了一下後臺日誌,是因為報了這個錯:

java.lang.IllegalArgumentException: Comparison method violates its general contract

後來經過一番研究和學習,發現是因為我們sort()的比較器寫的有問題,出現了ab,bc,但是a<c的情況,這非常致命,TimSort就不知道要怎麼排序。想到我們比較時候用的是double資料型別,存在精度問題,在把double換成BigDecimal定點數之後,問題就迎刃而解了

  • 修復部分視窗收藏無法取消的問題

由使用者反饋桃李園餐廳的收藏無法取消,我們就馬上進行了修改

原來版本(updateMarkedWindow()方法中的部分程式碼片段)

for(Window window : windowList){
    if(window.getWindowId()==windowId){
        userMapper.removeMarkWindow(userId,windowId);
        flag = 0;
        break;
    }
}

修改後

for (Window window : windowList) {
    if (window.getWindowId().equals(windowId)) {
        userMapper.removeMarkWindow(userId, windowId);
        flag = 0;
        break;
    }
}

由於我們的windowId欄位用的是Integer,是一個物件型別,就可能會存在問題,應該要用jdk提供的equals()方法,而非直接進行等值比較,儘管有拆箱裝箱機制,也萬萬不可把物件拿來做等值比較,很可能比的是地址,而非物件的值,這是致命問題

  • 修復[管理員模組]相關持久層刪除級聯的問題(新增觸發器)
create trigger delete_dish before delete on dish
    for each row
    begin
        delete from dish_stars where dish_stars.dish_id = OLD.dish_id;
        delete from dish_comment where dish_comment.dish_id = OLD.dish_id;
        delete from dish_tag where dish_tag.dish_id = OLD.dish_id;
        delete from dish_stars where dish_stars.dish_id = OLD.dish_id;
        delete from user_like_dish where user_like_dish.dish_id = OLD.dish_id;
    end;
    
create trigger delete_window before delete on window
    for each row
    begin
        delete from window_stars where window_stars.window_id = OLD.window_id;
        delete from dish where dish.window_id = OLD.window_id;
    end;

接下來的計劃還剩下哪些任務?

前端

後端

  • 做標籤的優化排序

  • 做食堂擁擠程度的視覺化

  • 做安全相關的事項

遇到了哪些困難?

目前最大的困難可能是在IO方面的,後端程式的IO做的不是很好,加之頻寬也不給力,就存在一些速度問題,導致使用者體驗不佳

團隊有哪些收穫和疑問

收穫:得到了很多debug能力

疑問:自動化測試整不明白

成果展示

展示組內最新成果

展示本週自動化測試的結果

由於微信小程式單元化測試比較麻煩,我們採取了autojs+人工測試的辦法,通過不停的點選按鈕,跳轉頁面測試我們小程式的穩定性。現在測試出來的bug已在上面給過了。

展示自動化持續整合(加分項,對應自動化測試)