其他分享
首页 > 其他分享> > 一级缓存和二级缓存的区别

一级缓存和二级缓存的区别

作者:互联网

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  限制数据共享  将可变数据限制在单一线程的内部 避免竞争

      核心思想: 线程之间不可享可变数据类型

  1. immutable  将可变类型改为 immutable类型  避免多线程间的race condition
  2. Threadsafe data type 共享线程安全的可变数据
  3. Synchronization  通过锁机制共享不安全的数据

       

G1:

特点 充分利用计算机资源  分代收集  空间整合   建立可预测的停顿

回收步骤:初始标记  并发标记   最终标记   筛选回收  在用户规定的时间里,回收最大价值得region的垃圾

 

 

内存分配与回收策略

     对象优先在eden分配          大对象直接进入老年代

     长期存活的对象将进入老年代   

动态对象年龄判判断 同年龄的对象的大小超过整个survivor区的一半,大小等于这个年龄对象都会放入老年代

 

堆溢出

      回收的对象没有回收造成的内存溢出

      解决:查看是否有没有回收的对象 如果没有扩大内存

栈溢出

      递归调用太多  

       扩大栈深度  从代码入手   改正错误调用

方法区溢出:java.lang.OutOfMemoryError: null

          直接调内存大小    -xx:MaxDirectMemorySize=10

Gc日志分析

       设置参数:-xloggc:D:logs/admin_client.log

       提前建立好目录  admin_client.log

 

标签:缓存,一级,配置文件,对象,回收,二级缓存,线程
来源: https://www.cnblogs.com/LWHyyds/p/16553607.html