- 博客(24)
- 收藏
- 关注
转载 DeferredResult使用详解
DeferredResult字面意思是"延迟结果",它允许Spring MVC收到请求后,立即释放(归还)容器线程,以便容器可以接收更多的外部请求,提升吞吐量,与此同时,DeferredResult将陷入阻塞,直到我们主动将结果set到DeferredResult,最后,DeferredResult会重新申请容器线程,并将本次请求返回给客户端。浏览器向A系统发起请求,该请求需要等到B系统(如MQ)给A推送数据时,A才会立刻向浏览器返回数据,如果指定时间内B未给A推送数据,则返回超时。
2024-05-05 16:33:52 192
原创 日常问题总结
解决方式:可以用 @TransactionalEventListener选择在事务提交之后再执行。@Transactional修饰的方法内有@Async会导致事务失效。建档方法内部使用一个事务,事件监听器异步执行导致事务失效。
2024-04-11 10:34:16 153
原创 微服务问题
服务雪崩:因服务提供者的不可用导致服务调用者的不可用,并将不可用逐渐扩大的过程。最底层的服务挂掉,导致上层的服务得不到响应线程池被打满导致这个服务被拖垮,然后它上层的服务也会因为这个原因被拖垮,导致整个请求链路都不可用。服务熔断,当服务器A调用某个服务B不可用时,A为了保证自己不受影响及时切断与B的通讯。进行服务降级,提前想好一种兜底的措施,后期可以进行补救直到服务B恢复。
2024-02-26 16:23:59 910 1
原创 多线程之四大函数式接口、Stream流式计算、ForkJoin、异步回调
函数式接口: 只有一个方法的接口@FunctionalInterface修饰Function 函数型接口, 有一个输入参数,有一个输出断定型接口:有一个输入参数,返回值只能是 布尔值!Consumer 消费型接口Supplier 供给型接口。
2024-02-10 19:03:06 373 1
原创 多线程常用辅助类
集合类不安全List并发下 ArrayList 是不安全的解决方式:1. List<String> list = new Vector<>();//源码中用synchronized关键字实现2. List<String> list = Collections.synchronizedList(new ArrayList<>());3. List<String> list = new CopyOnWriteArrayList<&
2024-02-08 18:05:32 429
原创 数据库死锁问题排查
CTRATE TABLE (,,,)聚簇索引:主键id非聚簇索引:(user_id,card_number(20))获取日志得到导致死锁的两条sql:定位代码定位到代码发现代码中锁同一个事务执行了两条update语句,并且操作的还是同一条记录。在MYSQL中,行级锁并不是直接锁记录,而是锁索引。索引分为主键索引和非主键索引两种,如果一条语句操作了主键索引那么就会锁定这条主键索引,如果一条语句操作了非主键索引,Mysql会先锁定该非主键索引,再锁定相关的主键索引。(1)事务1执行第一条up
2024-02-02 18:07:35 319
原创 Spring中的设计模式
Spring 使用工厂模式可以通过 BeanFactory 或 ApplicationContext 创建 bean 对象。
2024-01-23 13:01:02 383 1
原创 分库分表常见问题
根据范围进行分表,比如0-1000万放入0表,1000万-2000万放入1表,不需要迁移数据有热点问题,并发高的情况下,很多操作全都针对同一张表,一些加锁操作影响性能。根据id取模的方式计算应该被放入哪站表,迁移起来困难但没有热点问题,承担压力的表可能有多张,减少并发加锁的概率。
2024-01-18 16:52:53 315
原创 Java基础
就是不确定参数的个数,支持传入0个或者多个参数。//......//......遇到方法重载的情况怎么办呢?会优先匹配固定参数还是可变参数的方法呢?答案是会优先匹配固定参数的方法,因为固定参数的方法匹配度更高。通过泛型来指定传入的对象类型,增强代码的可读性。哪里用到了泛型:自定义接口通用返回结果CommonResult通过参数T可根据具体的返回类型动态指定结果的数据类型。
2023-09-28 19:58:11 49
原创 集合相关问题
jdk1.7中,ConcurrentHashMap使用了分段锁技术,给哈希表分成多个段,每一段有一个独立的锁,这样可以在多个线程同时访问哈希表的时候,只需要锁住需要操作的那个段就可以了。
2023-09-20 17:21:32 42 1
原创 JVM问题
在计算机的世界里只认识0和1,所以如果这个文件想被计算机运行需要将这个java文件编译成二进制,需要两步编译Java能够跨平台主要是因为在不同的系统上面都安装了对应的虚拟机,虚拟机可以把class文件翻译成各个系统能够识别的二进制指令。
2023-09-12 17:38:33 48 1
原创 Spring常见问题
AOP就是面向切面编程,一个类里面有一些方法,不用修改这个方法本身,现在需要在执行这个方法之前或者执行这个方法之后执行一些逻辑,像一些公共的逻辑我们可以把他提取出来像是日志啊权限校验啊这些逻辑,然后会生成一个代理对象,如果一个bean实现了接口就会采用jdk动态代理,如果没有实现一个接口会采用cglib动态代理,让代理对象去执行这些逻辑。Bean初始化:执行afterPropertiesSet()方法,在这个方法里面我们可以自己写一些逻辑,像是对某个属性进行验证啊,赋值之类的。
2023-08-28 23:10:20 56
原创 多线程常见问题
首先一个线程从初始态获取时间片之后会转换成运行态,其他没有拿到时间片的线程会进入阻塞态,运行态的线程调用sleep方法会进入超时等待状态,并且没有释放锁资源,一定时间之后会被自动唤醒,运行态的线程执行wait方法之后会进入等待状态,他释放了锁资源需要其他线程调用notify或者notifyAll方法对他进行唤醒。可以用valatile关键字来保证变量的可见性,对于加了volatile的变量,线程在读取变量时会直接从内存中去读取,修改变量的时候同时会修改cpu告诉缓存和内存中的值。
2023-08-28 22:10:36 97
原创 MySQL索引常见问题
确保写入数据库的数据具有唯一性如何只在业务中做校验,可能在数据库中会出现脏数据可以为空针对MySQL5.6扫描二级索引的一项优化,本来一些过滤条件是在MySQL服务层去做的,现在在匹配索引的时候就加上这些过滤的条件,将索引过滤的条件下推到引擎层来降低回表的次数。
2023-08-26 15:04:53 129
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人