第一次作这个,先选一个简单的练练手,地址: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内。
四、其它的耗时的接口再作一些稍稍的优化,而后更新正式服,此时速度大有改观,速度优化目的达成。