- 博客(6)
- 收藏
- 关注
原创 java中的静态代理和动态代理
1. 代理模式代理模式是一种比较好的理解的设计模式。简单来说就是我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。代理模式的主要作用是扩展目标对象的功能,比如说在目标对象的某个方法执行前后你可以增加一些自定义的操作。举个例子:你的找了一小红来帮你问话,小红就看作是代理我的代理对象,代理的行为(方法)是问话。代理模式有静态代理和动态代理两种实现方式,我们 先来看一下静态代理模式的实现。...
2020-10-27 11:09:36 327
原创 在spring boot中使用Guava基于令牌桶实现限流(简单易用)
限流说详细了,名堂也多。这种算法那种算法,这种策略那种策略的。没有绝对的银弹。都要结合实际的场景来实现。最简单的,使用Google的Guava,几行代码。就可以优雅的对一个接口完成限流。令牌桶算法在springboot中使用Guava基于令牌桶实现限流通俗的理解就是,有一个固定大小的水桶,水龙头一直按照一定的频率往里面滴水。水满了,就不滴了。客户端每次进行请求之前,都要先尝试从水桶里面起码取出“一滴水”,才能处理业务。因为桶的大小固定,水龙头滴水频率固定。从而也就保证了数据接口的访问流量。
2020-10-24 19:33:46 3490 2
原创 二进制,位运算,以及java中的基本数据类型的存储
目录JDK自带的进制转换位运算java中的整数类型大数类 BigIntegerjava中的浮点类型精确小数 BigDecimaljava中的字符型和布尔型char类型的存储和计算boolean 类型的存储JDK自带的进制转换java中可以直接声明二进制、八进制、十进制、十六进制例如:二级制: int bin = 0b1100010;八进制: int oct = 0142;十进制: int dec = 98;十六进制: int hex = 0x
2020-10-20 14:23:48 982
原创 彻底吃透java8函数式编程
Lamda表达式箭头左边是参数列表,右边是函数体。方法引用 : class::method静态方法引用: User::combine 参数方法引用: String::indexOf 实例方法引用: user::getUserName 构造器引用: User::newjava函数式接口有且仅有一个未实现的非静态方法的接口叫做“函数式接口”interface IProducer<T>{ T produce();}// ()=>User.bu...
2020-10-13 14:28:27 399 2
原创 java并发包之ExecutorCompletionService、Exchanger、Phaser使用
ExecutorCompletionService类当我们通过Executor提交一组并发执行的任务,并且希望在每一个任务完成后能立即得到结果,有两种方式可以采取:方式一:通过一个list来保存一组future,然后在循环中轮训这组future,直到每个future都已完成。如果我们不希望出现因为排在前面的任务阻塞导致后面先完成的任务的结果没有及时获取的情况,那么在调用get方式时,需要将超时时间设置为0static class Task implements Callable<St.
2020-10-10 13:46:49 300
原创 idea快捷键指南:让你开发效率蹭蹭蹭的上涨
没有写使用说明的就表示没有特别的注意事项直接用就可以了。 Ctrl+Shift+A 说明:IDEA 把所有的可以执行的操作都定义为action,也就是一个动作。它定义的快捷键相当多,所以使用此快捷键,你不需要记住快捷键,你只需要输入你想要的操作的英文,就可以迅速找到你想要执行的操作。 说明:勾选Include non-project items后,搜索范围将包括依赖的jar包 下文的快捷键全是基于windows平台的,当然Mac也有相对应的快捷键...
2020-10-09 18:28:45 300
SpringBoot项目整合WebSocket+netty实现前后端双向通信(同时支持前端webSocket和socket协议)
2023-07-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人