摘要:
背景:有个需求,后端在一个时间点要向前端发送websocket消息,前端点击确认作出应答。为防止用户错误点击或页面刷新消息丢失,需要后端在5分钟内判断应答状态,如果5分钟内没有应答,则每隔10秒向前端推送一次,5分钟内应答了或者超过了5分钟,后端结束推送。 这是一个很简单的需求,起个线程,在5分钟之 阅读全文
摘要:
一、什么是死信队列 rabbitmq.com/dlx.html 死信交换机绑定的队列就叫死信队列。什么叫死信交换机?接收死信消息的交换机叫做死信交换机。什么叫做死信消息? 消息被拒绝,又没有重新入队的消息(basic.nack | basic.reject & requeue = false) 消息 阅读全文
摘要:
volatile是java虚拟机提供的一种轻量级的同步机制,它有三个重要的特性: 保证可见性 不保证原子性 禁止指令重排 要理解这三个特性,就需要对JMM(JAVA内存模型)有一定的了解才行。 主要解决的问题: JVM中,每个线程都会存在本地内存,本地内存是公共内存的副本,各个线程的本地内存相互隔离 阅读全文
摘要:
最近在使用产品是遇见了一个奇怪的问题,在使用mysql数据库时,数据表中会一次写两条相同的记录进去,最后定位到问题是由于方法加了事务,方法中又加了锁,在多线程的情况下,多个线程在事务没提交的情况下读取到了一份数据。 一、问题复现 1、伪代码: @Transactional public Intege 阅读全文
摘要:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.d 阅读全文
摘要:
一、spring-aop各注解执行顺序 在spring4中,执行顺序是Before -> After -> AfterReturing/AfterThrowing。 在spring5中,执行顺序是Before -> AfterReturing/AfterThrowing -> After。 二、什么 阅读全文
摘要:
一、Executors 通过Executors的静态工厂方法可以创建三个线程池的包装对象: ForkJoinPool、ThreadPoolExecutor、ScheduledThreadPoolExecutor。Executors有5个核心方法: Executors.newWorkStealingP 阅读全文
摘要:
一、事务的概念 对一组操作而言,要么全部成功,要么全部失败,就叫做事务。 01 特性 原子性(Atomicity):一个事务中的所有操作,要么全部成功,要么全部失败,如果中间发生异常,则全部回滚 一致性(Consistency):在事务开始之前和事务结束以后,数据库的完整性没有被破坏 隔离性(Iso 阅读全文
摘要:
ThreadLocal初衷是在线程并发时解决变量共享问题,但由于过度设计,比如弱引用和哈希碰撞,导致理解难度大、使用成本高,反而成为了故障高发点。容易出现内存泄漏、脏数据、共享对象更新等问题。 01引用类型 强引用:Object obj = new Object();这就属于强引用。只要对象有强引用 阅读全文
摘要:
1、feign 远程调用丢失请求头的问题 原因:feign不会同步request的请求头。 解决方案:使用interceptor将用户请求的请求头设置给feign代理的请求 /** * @DESCRIPTION feign的请求拦截器,用于将用户请求头设置给feign代理后的请求,防止代理后丢失请求 阅读全文