**
Java对象的4种引用类型==========================================**
强引用:
----强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。 ps:强引用其实也就是我们平时A a = new A()这个意思。
软引用:
----被软引用的对象,如果内存空间足够,垃圾回收器是不会回收它的,如果内存空间不足,垃圾回收器将回收这些对象占用的内存空间。软件引用对应着java.lang.ref.SoftReference类,一个对象如果要被软引用,只需将其作为参数传入SoftReference类的构造方法中就行了。感觉还是比较简单而且容易理解。
弱引用:
----与前面的软引用相比,被弱引用了的对象拥有更短的内存时间(也就是生命周期)。垃圾回收器一旦发现了被弱引用的对象,不管当前内存空间是不是足够,都会回收它的内存,弱引用对应着java.lang.ref.WeakReference类,同样的道理。一个对象如果想被弱引用,只需将其作为参数传入WeakReference类的构造方法中就行了。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。
虚引用:
----“虚引用”顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。
虚引用主要用来跟踪对象被垃圾回收器回收的活动。虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列 (ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之 关联的引用队列中。
**
事务相关====================================================**
事务特性
----原子性 / 一致性 / 持久性 / 隔离性(事务之间互不干扰)
如果不考虑隔离性,会引发下面的问题
事务在操作最理想的状态就是,所有事务之间保持隔离,但是当多个用户同时访问同一个数据的时候,可能会出现并发访问的问题
都是因为另一个事务的操作,干扰了我当前事务的操作
**1: 脏读:**当前事务读取到另一个事务中还没提交的数据,造成了数据脏读
**2: 不可重复度:**另一个事务执行了update更新操作,使当前事务在两次读取数据时,内容不一致,造成了不可重复读
**3: 幻读:**另一个事务进行插入数据,或者删除数据,使当前事务两次读取的数据数量不一致,造成了数据幻读
可以通过设置事物隔离级别解决读的问题
事务的隔离级别
**1: 读未提交:**最低的隔离级别,脏读,不可重复读,幻读,他都有可能读到
**2: 读已提交:**他读不到未提交的,只读已提交的,所以他可以避免脏读,但是你读已提交的就可能读到不一样的内容,所以不可重复读和幻读还是有可能出现的.
**3:可重复读:**听名字就知道是解决了不可重复读,查询的都是事务开始时的数据,但是解决不了幻读。
**4: 串行读:**最高级别, 完全串行化读,每次都会锁表,读写互相阻塞。
MySQL的默认级别就是可重复度 / 隔离级别越高,安全性越高,性能(效率)越差。
事物的原理:1: 客户端连接数据库,只要一连接就会开启一个临时事务日志,
2: 如果直接写SQL语句操作数据库,他会把执行的数据直接同步到数据库,因为MySQL是默认开启自动事务,这就是为什么我们一执行SQL语句数据库就会变化.
3: 如果是我们手动开启事务,数据库服务器就会创建一个临时日志文件,
4: 之后执行SQL语句,他会把结果写在临时日志文件当中,并没有修改到数据库,所以如果不提交事务的话,你是看不到结果的,所以当你commit提交事务后,数据库服务器就会将临时日志文件中刚才执行的结果提交到数据库,你才能看到结果,
5: 但是如果你是用的是rollback回滚,他就会把这个结果从临时日志文件中给删掉,然后这个事务就结束了,所以回滚只是将临时日志文件中的数据删除,在这之前并没有关系到数据库本身,所以数据库没有发生变化.
**
Redis相关==================================================**
是一种高性能的key-value非关系型数据库。
Redis的所有操作都是原子性的,支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
Redis存储的数据是键值对的形式:
1: String 字符串,最简单的k-v存储,短信验证码,配置信息 / 等,就用这种类型来存储。
2: Hash 数据结构就是HashMap里面套一个HashMap, 适合存储对象,我们一般用它存储用户信息对象之类的
3: List 列表有序 比较适合存储有序切固定的数据,他还可以做为队列适用,使用左插右取的方式,适用于广告类存储,元素不唯一
4: Set无序集合 他类似于List,不一样的是Set可以对数据进行一个交集并集差集的运算,使用抽奖啊,共同好友统计之类的
5: Zset有序集合,Set的增强版,增加了一个score参数,自动会根据score值进行排序,使用有排序的数据,班级成绩,销量排名,名次排名之类的



