
Java
文章平均质量分 78
有个有趣的灵魂
这个作者很懒,什么都没留下…
展开
-
分布式锁外有事务传入导致丢失更新的解决方案
在RR事务隔离级别下,当分布式锁外有事务时,高并发请求可能会出现先开启事务的线程后获得锁的场景。这种情况下先拿到锁的事务版本号更大,后拿到锁的事务版本号更小,那么后拿到锁的将无法查询到先拿到锁的线程提交的数据,导致将其数据覆盖。原创 2022-09-02 17:17:33 · 2351 阅读 · 2 评论 -
Spring Boot实现扩展字段功能
前言 接口接收的Json在反序列化的过程中,有时候会遇到一些无法识别的属性(unrecognized properties),通常我们只要在Json处理类库上设置为忽略即可,但有时候作为中间服务,上下游服务希望提供一个透传功能。本文分享Jackson、Fastjson两个Json处理类库下,实现扩展字段收集透传功能。 Fastjson扩展字段实现 使用Fastjson类库,核心思路是通过自定义参数解析器来实现1.自定义注解/*** * 自定义注解标记对扩展字段的处理 */@..原创 2020-07-31 18:07:50 · 2207 阅读 · 0 评论 -
java基础——LinkedBlockingQueue源码学习
目录类图记录方法说明核心源码解析总结 类图记录 方法说明 核心方法功能描述 方法定义 功能 private void signalNotEmpty() 队列不为空,唤醒一个take线程 private void signalNotFull() 队列不满,唤醒一个put线程 private void enqueue(...原创 2019-12-20 19:38:50 · 469 阅读 · 0 评论 -
jdk8 ::双冒号操作符(方法引用)
为什么: java8引入函数式接口之后,如果要在满足函数式接口编程的要求,需要对原来的方法进行改造,定义函数式接口,为了解决这个改造的问题,引入了"::"双冒号操作符。在Java8中,我们可以直接通过方法引用来简写lambda表达式中已经存在的方法,这种特性叫做方法引用(Method Reference)。 是什么 方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法。方...原创 2019-11-19 21:52:11 · 653 阅读 · 0 评论 -
java并发编程--ThreadLocal
什么是ThreadLocal 1.先看一下jdk文档的定义This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (via its {@code get} or {@co...原创 2019-10-18 18:19:06 · 249 阅读 · 0 评论 -
java实现跨域访问(CORS)及验证
老生常谈之跨域 1.什么是跨域问题:因为浏览器的同源策略规定某域下的客户端在没明确授权的情况下,不能读写另一个域的资源。而在实际开发中,前后端常常是相互分离的,并且前后端的项目部署也常常不在一个服务器内或者在一个服务器的不同端口下。前端想要获取后端的数据,就必须发起请求,如果不做一些处理,就会受到浏览器同源策略的约束。后端可以收到请求并返回数据,但是前端无法收到数据。同源怎么理解:...原创 2019-09-27 14:53:03 · 1485 阅读 · 0 评论 -
Cloneable
Cloneable接口:是一个标记型接口,内部没有任何方法或属性的定义,这个标记仅针对Object类的clone()方法,如果没有实现这个接口去调用clone()方法,会抛出CloneNotSupportedException。 浅拷贝与深拷贝 (1)浅拷贝:只拷贝对象和对象基本类型变量,引用类型变量指向同一个地址(2)深拷贝:拷贝对象、对象基本类型变量,引用类型变量...原创 2019-09-18 14:28:36 · 235 阅读 · 0 评论 -
final关键词
final是java中的一个关键词,是域、方法和类的修饰符,通常的作用是来表述被修饰的内容是无法改变的。 final数据 作用:一个恒定不变的编译时常量可以减轻运行时的负担,或者我们还可以定义一个运行时被初始化再也无法被改变的值。(1)修饰成员变量,只能在变量定义时或构造函数中初始化,否则编译不通过。 //基本类型的成员变量必须只能在定义时初始化,但并不意味着编译时...原创 2019-09-30 23:32:15 · 155 阅读 · 0 评论 -
Builder模式
先上uml图应用场景一:解决多构造函数的问题 如Person对象,在不同的场景需要使用到的参数不同,使用Set属性方式不优雅,如果属性值过多代码也会显得非常的冗余。另一种实现方式是在构造函数中初始化属性,如果场景复杂,那么构造器也需要增加很多,使用起来非常不方便,使用Builder则会灵活很多。public class Person { private Stri...原创 2019-10-08 16:46:51 · 135 阅读 · 0 评论 -
多线程与事务回滚
使用Callable接口获取并发任务结果,实现对线程异常的感知并重新抛出运行时异常实现事务回滚。原创 2016-05-10 14:43:08 · 12015 阅读 · 0 评论