![](https://img3.dns4.cn/pic/260831/p11/20200526131206_0076_zs_sy.jpg)
软件培训点击了解更多
到了上世纪80年代初期,软件和IT行业进入了大发展,软件趋向大型化、高复杂度,软件的质量越来越重要。这个时候,一些软件测试的基础理论和实用技术开始形成,并且人们开始为软件开发设计了各种流程和管理方法,软件开发的方式也逐渐由混乱无序的开发过程过渡到结构化的开发过程,以结构化分析与设计、结构化评审、结构化程序设计以及结构化测试为特征。如果面试官给了你一个非常好的愿景和目标,至少说明这家企业是个有思想、有抱负的企业。采用自动比较技术,还可以自动完成测试用例执行结果的判断,从而避免人工比对存在的疏漏问题。设计良好的自动化测试,在某些情况下可以实现“夜间测试”和“无人测试”。在大多数情况下,软件测试自动化可以减少开支,增加有限时间内可执行的测试,在执行相同数量测试时节约测试时间。软件测试是使用人工操作或者软件自动运行的方式来检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别的过程。而测试工具的选择和推广也越来越受到重视。分析之前依我个人的理解来说限流的话应该灵活到可以针对每一个接口来做。比如说一个类里面有5个接口,那么我的限流插件就应该能针对每一个接口就行不同的限流方案。所以呢,既然针对的每个接口所以就需要一个可以标示这个接口的key(我取的是类名方法名入参)。但是如果数字是3的倍数的话则打印“Fizz”,如果数字是5的倍数则打印“Buzz”。分布式限流强烈推荐使用redislua或者nginxlua来实现。这里用2个限流条件来做示例讲一下常见的限流算法:接口1它10秒钟很大允许访问100次接口2它10秒钟很大允许每个人访问100次。计数器算法这个算法可以说是限流算法中简单的一种算法了。核心思想计数器算法的意思呢就是当接口在一个时间单位中被访问时,我就记下来访问次数,直到它访问的次数到达上限。涉及变量接口(key)时间单位(expire)允许访问多少次(limit)访问次数(value)条件一当一个请求过来时,我们就会得到这个key。123456789if(存在key){value;if(valuegt;=limit){不能访问}}else{添加key,value为1设置key过期时间为expire}条件二既然条件一已经实现了,那条件二会复杂么?相比于条件一来说就是同一个key对应了多个用户。那么我们只需要把key加上用户的信息就可以了。比如说key_用户1、key_用户2。漏桶算法核心思想漏桶算法的意思呢就是一个接口在一个时间单位中允许被访问次数是动态变化的(假如一分钟允许访问60次,那么从开始计时时不管有没有被访问第59秒只允许访问59次,30秒只允许30次)。为什么这样呢,因为有另外一个线程在进行递减操作递减间隔时间(interval)递减步长(step)剩余可访问次数(value)key的访问时间(lastUpdateTime)当前时间(nowTime)(注意nowTime的取值应为应用取得的时间而不是redis或者nginx取得的时间)条件一线程一:12345678if(存在key){value--;if(valuelt;=0){不能访问}}else{添加key,设置value为limit})