RateLimiter简单实现接口限流
1、LoadingCache简介 Guava编程工具类库下的一个基于键值对(key-value)的本地缓存工具类,通过key获取缓存中的值,并且可以设置缓存的过期时间,基于ConcurrentMap接口的实现,所以是线程安全的。 1.1 可以使用CacheBuilder来快速创建12345678910LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder() .maximumSize(10000) //缓存大小 .expireAfterWrite(10, TimeUnit.MINUTES) //缓存过期时间 .removalListener(MY_LISTENER) //缓存移除提醒 .build( new CacheLoader<Key, Graph>() { public Graph load(Key key) throws...
微信小程序之简易计算器
微信小程序之简易计算器一、介绍1.中缀表达式 中缀表达式是一种通用的算术或逻辑公式表示方法,操作符以中缀形式处于操作数的中间。中缀表达式是人们常用的算术表示方法。虽然人的大脑很容易理解与分析中缀表达式,但对计算机来说中缀表达式却是很复杂的,因此计算表达式的值时,通常需要先将中缀表达式转换为前缀或后缀表达式,然后再进行求值。对计算机来说,计算前缀或后缀表达式的值非常简单。 1.后缀表达式 从左至右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(次顶元素 op 栈顶元素),并将结果入栈;重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果。例:(1)8+4-62用后缀表达式表示为:8 4+6 2-(2)2*(3+5)-4+7/1用后缀表达式表示为:3 5+2*7 1/4-+ 例如后缀表达式“3 4 + 5 × 6 -”:(1) 从左至右扫描,将3和4压入堆栈;(2) 遇到+运算符,因此弹出4和3(4为栈顶元素,3为次顶元素,注意与前缀表达式做比较),计算出3+4的值,得7,再将7入栈;(3)...
Spring注解合集
Spring注解合集SpringMVC注解@Controller 注解 解释 @Controller 用于定义控制器类,结合Service接口方法,来处理用户请求。 @RestController 用于标注控制层组件,@ResponseBody和@Controller的合集。使用后Controller中的方法无法返回jsp或html页面。 @ResponseBody 表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用,比如返回JSON数据。 @RequestMapping 提供路由信息,负责URL到Controller中的具体函数的映射。 @RequestParam 将请求参数绑定到你控制器的方法参数上 1public String queryUserName(@RequestParam String...
Redis学习
Redis简介关系型数据库 指采用了关系模型来组织数据的数据库。 关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。 主流的关系型数据库有:Oracle,Microsoft SQL Server,MySQL,PostgreSQL,DB2, Microsoft Access, SQLite,Teradata,MariaDB(MySQL的一个分支),SAP 优点: 容易理解:关系清晰。 使用方便:通用的SQL语言操作关系型数据库非常方便。 易于维护:丰富的数据完整性,减少了数据的冗余和数据不一致的概率。 缺点 拓展性低 性能低,多表关联查询导致性能欠佳。 数据库事务必须具备ACID特性 Atomic 原子性 原子性是指事务包含的操作要么全部成功,要么全部失败回滚。 Consistency...
JAVA并发编程
Java并发编程进程与线程的概念(1)什么是进程 进程:程序由指令和数据组成, (2)什么是线程 一个进程可以有多个线程 一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给CPU执行 线程作为任务调度的最小单位,进程作为资源分配的最小单位 并发与并行的概念(1)什么是并发(Concurrent) 同一时刻多个线程轮流使用CPU,并不是同时执行的。 (1)什么是并行 同一时刻多个线程同时使用CPU,一般是多核CPU,因此是同时执行的。 创建线程的方法继承Thread类123456789101112131415161718public class Concurrent { public static void main(String[] args) { MyThread myThread = new MyThread(); myThread.setName("子线程:"); //开启线程 myThread.start(); ...
SpringBoot框架
SpringBoot什么是Springboot Springboot其实就是基于Spring框架的扩展,相当于Spring那些基于XML文件的繁琐配置,SpringBoot开发更加快速便捷,同时还使用了内嵌式的Tomcat服务容器,提供了Starters来简化项目的构建配置,同时来尽可能的自动配置Spring应用。 总结:SpringBoot就是使编码变简单、配置变简单、部署变简单、监控变简单… 起步依赖spring-boot-starter-parent 创建一个SpringBoot项目后,打开pom.xml配置文件会有如下代码 123456<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.4</version> ...
JAVA集合框架
Collection类图 List接口 有序的:有序插入,可以通过下标访问元素,元素可以重复。 ArrayList 基于数组结构实现,查询快,增加删除效率慢。 源码分析: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192//首先继承public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable /** * Default initial capacity.//默认初始容量为10 */ private static final...