- 博客(84)
- 收藏
- 关注
原创 什么是SQL注入
防御核心:预编译语句(Prepared Statements) + ORM框架(如MyBatis)。SQL注入的本质:通过用户输入篡改SQL语义。辅助措施:输入过滤、最小权限、WAF。
2025-03-29 20:54:25
137
原创 spring事务的实现方式
禁⽌此连接的⾃动提交,这是实现Spring事务⾮常重要的⼀步。一. 编程式(通过编写代码显式控制事务的开启、提交、回滚)二. 声明式( @Transactional 开启)4. 如果加了,那么则利⽤事务管理器创建⼀个数据库连接。@Transactional注解。事务的实现(编程式,声明式)7. 执⾏完当前⽅法后,如果。5. 并且修改数据库连接的。6. 然后执⾏当前⽅法,Spring会创建⼀个。时,会先判断该⽅法上。,并且这个异常是需要。
2025-03-28 19:11:28
159
原创 Spring 是如何解决循环依赖问题的?
(map1 单例池,map2 原始Bean,map3 Bean对象工厂)《A类需要B类,B类需要A类,形成循环依赖》map3(Factory.创建A的方法)3级缓存解决循环依赖(就是3个map)
2025-03-28 10:15:10
222
原创 ApplicationContext和BeanFactory有什么区别
⽽ApplicationContext继承了BeanFactory,继承了诸如 EnvironmentCapable、MessageSource、ApplicationEventPublisher等接⼝,从⽽。BeanFactory(Bean⼯⼚),可以⽣成维护Bean,
2025-03-28 09:09:45
121
原创 Spring Bean的生命周期
5.回调aware方法(BeanNameAware、BeanFactoryAware、ApplicationContextAware)4.属性填充(加了@Autowired注解)
2025-03-27 23:02:11
138
原创 JDK动态代理和CGLib动态代理实现原理和两者的区别
3.创建实现指定接口的代理类(转发到InvocationHandler对象中的invoke方法中)(invoke方法又会跳转到被代理类的目标方法中)* 3. InvocationHandler类中method.invoke(target, args)* 2. proxy类中InvocationHandler.invoke()2.被代理类决定类型(代理对象的类型)(不需要实现接口)jdk代理(实现接口的类),cglib代理(任何类)2.必须实现接口(代理对象)
2025-03-27 15:39:57
173
原创 跨域请求是什么?有什么问题?怎么解决?
Springboot 解决跨域(CorsConfig)任意一个与当前页面url不同)浏览器(同源策略-安全功能)
2025-03-27 10:28:47
123
原创 深入理解MVCC机制
当202已提交,201读的时候(是202事务的版本),使得不同的事务会根据数据版本链对比规则。3个事务(201,202,203)201读的时候(是自己事务的版本)MVCC机制的实现就是通过。
2025-03-26 23:18:05
330
原创 explain详解与索引最佳实践
index(覆盖索引,回表)EXPLAIN SELECT * FROM film。range( in(), between ,> ,<, >= )(范围扫描)5. possible_keys列(可能用什么索引查找)eq_ref(返1条记录的主键或唯一索引的关联查询)7. key_len列 (被选中索引的字段的长度)NULL 特例(优化阶段搞定,不访问表或索引)6. key列 (实际用什么索引查找)☆☆☆explain中的列☆☆☆。ref (普通索引)
2025-03-26 21:40:17
276
原创 mysql底层数据结构与算法
对索引的key进行1次hash计算就可以定位出数据存储的位置。mysql的索引结构(B+树、hash、红黑树)hash索引比B+树索引更高效(很多时候)插入数据的时候比当前节点小的左大的右。索引的本质(排好序的数据结构)红黑树(有平衡功能的二叉树)
2025-03-26 12:51:40
138
原创 索引失效的10种场景
explain select * from user where code = ‘101’ and name=‘张三’;上面四种情况,sql都能正常走索引。最左匹配原则(都有code)建立一个联合索引(idx_code_age_name)not in和not exists(in可以走索引)使用了select *like左边包含了%order by的坑。
2025-03-25 22:41:38
230
原创 sql优化的14个技巧
explain select * from where exists (select 1 from where .user_id = .id and .status=1)
2025-03-24 15:36:06
147
原创 主键使用自增ID还是UUID
InnoDB存储引擎中:主键索引是作为聚簇索引存在的,如果是自增ID原本就有序,如果是UUID需要变换位置重新排序,可能生成内存碎片。插入性能是原本有序的自增ID好。InnoDB的聚簇索引(主键-唯一索引-隐式id)
2025-03-24 09:29:34
269
原创 关心过业务系统里面的sql耗时吗?统计过慢查询吗?对慢查询都怎么优化过?
搞明白慢的原因:查询条件没有命中索引,load了不需要的数据页,数据量太大。1.看执行计划explain(命中索引没,改语句改索引)3.考虑分表(表太大了)2.是不是load多了。
2025-03-23 23:56:14
89
原创 超大分页怎么处理
select * from table where id in (select id from table where age> 20 limit 1000000,10)走了age的索引覆盖,优化提升效率。select * from table where id > 1000000 limit 10(id连续可以用,效率很高)这条语句要扫描100万条数据,取10条。
2025-03-23 23:47:39
88
原创 从锁的类别上分mysql都有哪些锁?行锁定是不是阻碍了并发效率
行锁不是阻碍并发效率,而是增加cpu,内存等开销,因为要频繁加锁释放锁。相反,行锁会增加并发效率(因为锁粒度小,线程并发就多,不像表锁锁整张表)3个事务有一个拿了写锁另外2个不能拿读写锁。类别上(共享锁,排它锁)就是(读锁,写锁)举例:3个事务都可以拿读锁。
2025-03-23 13:45:17
72
原创 按照锁的粒度分数据库锁有哪些?
(上锁《这个表数据就给这个事务用》)(上锁《这行数据就给这个事务用》)表锁: 粒度大,并发度低,开销小。行锁: 粒度小,并发度高,开销大。
2025-03-23 12:21:58
100
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人