第一次作這個,先選一個簡單的練練手,地址:https://leetcode.com/problems/two-sum/ java
要求:給一個整數組數(nums)及一個目標數字(target),要求找出數組裏面知足兩數字之和等於目標數字的腳下標mysql
原文:(Given an array of integers, return indices of the two numbers such that they add up to a specific target.算法
You may assume that each input would have exactly one solution, and you may not use the sameelement twice.spring
Example:sql
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
)數據庫
我寫的算法:數組
class Solution { public int[] twoSum(int[] nums, int target) { int length = nums.length; int[] arr = {-1,-1}; for (int i=0; i<length; i++){ for(int m=i+1; m<length;m++){ int first = nums[i]; int seconde = nums[m]; if((first + seconde - target) == 0){ arr[0] = i; arr[1] = m; return arr; } } } return arr; } }
分析思路:兩層遍歷判斷,找到符合條件的就返回springboot
收穫點:寫出本身的算法以後再去對比那些高手寫的算法(https://leetcode.com/submissions/detail/196395714/),瞭解他們解決問題的方式,有對比就是最大的收穫。服務器
閱讀文章:https://medium.com/s/the-nuance/are-spin-classes-as-healthy-as-outdoor-cycling-515db68eba09學習
點評:做者從不一樣方面對比了室內的飛輪運動(騎動感單車)與室外騎自行車對比。二者都很健康,二者也均有必定的風險,室內運動側着下半身力量,而室外則是側着訓練上半身以及平衡力。固然,在生活中選擇哪種,還得須要看人們對兩種運動的態度、自身的狀況以及條件。
學習了mysql的聯合索引並用於實踐
標題:一次應用速度優化實踐
項目背景:一個問卷評論系統,基於springboot的單體項目,服務器用的是阿里雲的ECS服務器,數據庫用的是阿里雲Mysql版本的數據庫,須要評論的問題150個,須要評論的機構大概會有5萬左右,在測試環境進行測試的時候沒問題,但在線上測試的時候就特別慢。
解決問題思路:
一、定位問題:根據實際使用狀況,上線以後天天上午8點到12點,下午2點到5點的速度訪問特別慢,不斷的有用戶反饋回來。阿里雲mysql數據庫有監控功能,進入雲數據庫查看日誌記錄,發現雲數據庫 IOPS 訪問很高,內存使用率也很高(達到90%)。
代碼方面,有兩個接口訪問次數有點多,一個問題分類接口(每一個分類十多個問題,須要知道當前用戶的問題分類填寫進度,3種狀況,0-未進行,1-填寫中,2-已完成。問題填寫的答案放在答案表,答案表數據20多萬,代碼的實現方式是遍歷問題分類數據,對該分類下面的問題以及填寫的問題數量作對比,此接口訪問數據庫須要訪問將近20次);另外一個接口:獲得某一問題分類的問題列表及當前用戶對該分類下的每一個問題的答案(問題列表下有多少個問題就須要訪問數據庫多少次)
嘗試解決方式:優化上面的問題分類接口,進入這個接口時,按照問題分類一次從數據庫裏面讀取該分類下全部問題填寫的評價答案,統計放到list裏面,而後針對每一個問題時再用list.stream().filter 作篩選,採起「以空間換時間」的概念,在正式服上以後,發現實際狀況並無緩解。同時監控這個接口的訪問狀況,發現接口的並無問題。
因爲咱們的服務器自己配置低,此時咱們纔想到升級服務器配置上來。
二、對服務器配置和帶寬同時進行升級,升級爲原來的兩倍,此時再單獨去數據庫執行sql語句,速度變快了不少,但仍是超過了500ms。
三、第三步,採用mysql聯合索引,對幾個關鍵對字段創建聯合索引(建在數據量多的表,數據少則沒有必要),單獨執行sql語句控制在60ms內。
四、其它的耗時的接口再作一些稍稍的優化,而後更新正式服,此時速度大有改觀,速度優化目的達成。