- 博客(22)
- 收藏
- 关注
原创 java面试100题-spring_tx-事务失效场景
声明式事务下拿到的bean其实是一个代理对象,事务通知是一个环绕通知,原始方法是在调用的最里层,所以如果将原始方法的异常进行捕捉,那么事务通知就不会感知到有异常的出现,也就不会执行异常后的回滚逻辑。是因为通知的执行顺序,我们自定义的环绕通知的是在事务通知的内层,所以在环绕通知中使用try-catch会导致异常信息传递不到最外层的事务通知中,也就无法触发事务回滚机制。解决方案:将this.bar()调用方式改为proxy.bar()代理对象调用。调整环绕通知和事务通知的切面顺序。日志打印分析问题原因。
2026-03-31 20:03:34
35
原创 java面试100题-构造循环依赖
通过来解决循环依赖问题方案有两个:1.代理对象2.ObjectFactory对象工厂假设 A 依赖 B,B 依赖 A。new A()new B()以上代码报错信息如下@Lazy如果不加@Lazynew A()new B()@Lazy当你在 A 的构造函数参数B b上加上@LazySpring在创建 A 时立即去创建真正的 B 实例。相反,它会创建一个,并将其注入到 A 中。这个代理对象是一个“占位符”,它知道如何获取真正的 B 实例,但只有在你时,才会去创建真正的 B。
2026-03-28 21:30:04
373
原创 InnoDB存储引擎原理
先看一个读写不同步的问题是因为右边没有提交事物吗?是因为当前事务的隔离级别是可重复读(REPEATABLE-READ)那如何在可重复度的隔离机制下读取到右边修改后的数据呢?-使用当前读undo log概念回顾以事务5的第一次Readview查询为例
2026-03-26 18:50:08
27
原创 分布式和集群的概念对比
一组独立的服务器,对外表现为一个整体所有节点功能相同,可以互相替代高可用、负载均衡、提升并发能力集群 = 堆机器,提高 “处理量”分布式 = 拆业务,提高 “复杂度承载能力”
2026-03-21 16:45:45
42
原创 redis常见问题及解决方案
(如 id=-1、非法 id),缓存查不到,直接打穿到数据库,导致 DB 压力巨大甚至宕机。或 Redis 宕机,所有请求直接涌入数据库,DB 被压垮。更新 DB 与更新缓存顺序不当,导致脏数据、数据不一致。多个客户端同时修改同一个 key,导致执行顺序错乱。系统刚启动,缓存为空,流量直接打 DB。大量不常用数据进入缓存,挤掉热点数据。,大量并发请求同时打到数据库。
2026-03-19 08:29:19
320
原创 微服务保护-sentinel
进行授权即可,但是想象一下一种情况,公司出现了内鬼,将你们公司的某一个微服务的地址直接暴露给了其他人,那么这个人就会绕过网关直接去访问该微服务,这是非常危险的。在指定时间内,如果请求数量超过设定的最小数量,慢调用比例大于设定的阈值,则触发熔断。设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待(缓解方案,不会根治,当你释放请求的速度小于新加入请求的速度时仍会拖垮服务):统计指定时间内的调用,如果调用次数超过指定请求数,并且出现异常的比例达到设定的比例阈值(或超过指定异常数),则触发熔断。
2026-03-18 19:09:27
368
原创 LoadBalancer的工作原理和常用负载均衡策略
实现接口,重写choose方法(核心选择逻辑);配置类中注册自定义策略的 Bean;(可选)通过注解为指定服务绑定策略:java// 只为 user-service 服务使用自定义权重策略LoadBalancer 核心原理:客户端侧拦截请求,从注册中心获取并缓存实例列表,执行负载均衡策略选择实例,替换 URL 后发送请求(客户端负载均衡);常用策略轮询(默认):按顺序选择,适合实例性能一致的场景;随机:简单随机选择,无顺序要求;权重:按实例权重分发,适合性能不均的场景;
2026-03-17 15:50:05
353
原创 nacos工作原理
服务发现:核心是「注册 - 订阅 - 心跳 - 推送」,服务提供者注册实例,消费者订阅列表,Nacos 通过心跳维护实例健康状态,动态推送更新;配置管理:核心是「三元组标识 + 长轮询刷新」,配置存储在服务端,客户端启动时拉取、运行时通过长轮询感知变更,实现动态刷新;核心特性:Nacos 兼顾性能(内存缓存)和可靠性(持久化 + 集群),同时支持服务发现和配置管理,是微服务架构的一站式解决方案。
2026-03-17 15:23:45
448
原创 jvm内存监控
启动项目打开浏览器分别访问这三个请求fun1:持续往内存中放数据fun2:死循环模拟cpu被一直占用的问题fun3:模拟线程死锁问题现在三个常见问题已经被创建好,使用内存监控工具去捕捉异常。
2026-03-16 20:26:44
74
原创 docker安装nginx
重要提示:直接挂载空目录会覆盖容器内所有默认文件,导致 Nginx 无法启动。正确做法是先复制默认配置文件:bash# 1. 先启动一个临时容器# 2. 复制默认配置文件到宿主机# 3. 删除临时容器# 4. 查看复制过来的文件。
2026-03-14 22:12:24
413
原创 分布式锁详解
你会发现一个异常的规律,那就是集群中的服务器有几个,那么订单就会多创建几个,商品库存stock就会减掉几个,所以异常的原因一定与集群中服务器的个数有关系。tb_items表中的stock库存数据出现负数。tb_items的stock库存成功减一。tb_items表的stock库存减为负数。tb_items表的stock库存减为负数。tb_items表的stock库存成功减一。tb_items表中的stock库存减一。tb_items的stock库存成功减一。tb_orders表成功新增一条订单数据。
2026-03-14 14:36:18
199
转载 Docker配置nacos流程
将主机目录 /mDisk/dockerContainers/nacos-v2.4.3/conf/ 挂载到容器内的 /home/nacos/conf/ 目录。将主机目录 /mDisk/dockerContainers/nacos-v2.4.3/logs/ 挂载到容器内的 /home/nacos/logs 目录。指定使用的 Docker 镜像,这里是 nacos/nacos-server 的 v2.4.3 版本。设置容器的重启策略为 always,即无论容器因何原因退出,Docker 都会自动重启该容器。
2026-03-12 20:10:07
102
原创 Mysql索引底层原理
使用索引的原因:如果不使用索引,当查询某个数据表某行的数据时,会依次的遍历该行之上的每一行的数据,如该数据表的数据量很大,会导致数据表查询速度变慢,影响数据表查询效率。因为当节点被加载到内存中进行索引大小比对时,如果索引的数据类型太长(比如UUID),会导致索引匹配的效率变低,磁盘的占用空间也会更少。目的:牺牲磁盘空间存储冗余的节点数据,所有的叶子节点来存储真正的索引数据,是为了让每个节点存放更多索引数据。节点分裂会重新分配各个索引之间的链接关系,从而耗费一定的时间复杂度,所以应该尽量避免出现节点分裂。
2026-02-16 13:40:31
276
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1