作者:手机用户2602906645 | 来源:互联网 | 2023-08-11 16:55
MyBatis中井号和美元符号的区别:
#{变量名} 可以预编译 类型匹配等操作,会转化成jdbc类型
#方式很大程度上防止sql注入
${变量名} 不进行数据类型的匹配 直接转换
$ 无法防止sql注入
$一般用于传入数据库对象 例如传入表明
尽量多用#方式 少用$方式
一级缓存和二级缓存的区别:
一级缓存 sqlSession 二级缓存 mapper级别 多个sqlsession共享
都是用hashmap存储数据 相比一级缓存 二级缓存范围更大 跨sqlsession的
springboot的自动装配机制:
springboot框架是为了能够帮助使用spring框架的开发者快速高效的构建一个基于spirng框架以及spring生态体系的应用解决方案。它是对“约定优于配置”这个理念下的一个最佳实践。因此它是一个服务于框架的框架,服务的范围是简化配置文件。
Spring Boot启动的时候会通过@EnableAutoConfiguration注解找到META-INF/spring.factories配置文件中的所有自动配置类,并对其进行加载,而这些自动配置类都是以AutoConfiguration结尾来命名的,它实际上就是一个JavaConfig形式的Spring容器配置类,它能通过以Properties结尾命名的类中取得在全局配置文件中配置的属性如:server.port,而XxxxProperties类是通过@ConfigurationProperties注解与全局配置文件中对应的属性进行绑定的。
Mysql的事务隔离级别
低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。
读未提交 读取未提交的也叫脏读
读已提交 读取提交的 默认的
可重复读 幻读 多实例并发处理数据 一个再读取 另一个插入了新行
可串行化 它在每个读数据加上共享锁 超时 锁竞争
多版本并发控制 mvcc
是通过保存数据在某个时间点的快照来实现的。也就是说,不管需要执行多长时间,每个事务看到的数据都是一致的
保证线程安全的几种方式:
1. Confinement 限制数据共享 将可变数据限制在单一线程的内部 避免竞争
核心思想: 线程之间不可享可变数据类型
- immutable 将可变类型改为 immutable类型 避免多线程间的race condition
- Threadsafe data type 共享线程安全的可变数据
- Synchronization 通过锁机制共享不安全的数据
G1:
特点 充分利用计算机资源 分代收集 空间整合 建立可预测的停顿
回收步骤:初始标记 并发标记 最终标记 筛选回收 在用户规定的时间里,回收最大价值得region的垃圾
内存分配与回收策略
对象优先在eden分配 大对象直接进入老年代
长期存活的对象将进入老年代
动态对象年龄判判断 同年龄的对象的大小超过整个survivor区的一半,大小等于这个年龄对象都会放入老年代
堆溢出
回收的对象没有回收造成的内存溢出
解决:查看是否有没有回收的对象 如果没有扩大内存
栈溢出
递归调用太多
扩大栈深度 从代码入手 改正错误调用
方法区溢出:java.lang.OutOfMemoryError: null
直接调内存大小 -xx:MaxDirectMemorySize=10
Gc日志分析
设置参数:-xloggc:D:logs/admin_client.log
提前建立好目录 admin_client.log