Hash碰撞冲突
我们知道,对象Hash的前提是实现equals()和hashCode()两个方法,那么HashCode()的作用就是保证对象返回唯一hash值,但当两个对象计算值一样时,这就发生了碰撞冲突。如下将介绍如何处理冲突,当然其前提是一致性hash。
一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用。
一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义:
Optional
类 是jdk 1.8
后新添加的特性,阿里巴巴的代码规范也明确说明了使用 Optional 来防止NPE。
Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。
Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。
Optional 类的引入很好的解决空指针异常。
实际业务中,多表关联查询应用实例很多,怎么使用JPA进行多表查询,可以选择不同的方法优化。
记下在JPA中多表查询的有效使用方法。
如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,并执行该代码块时,其他线程便只能一直等待,等待获取锁的线程释放锁,而这里获取锁的线程释放锁只会有两种情况:
在多线程中,当多个线程同时访问同一个资源对象的时候,由于线程在处理中是不可控的,导致,执行的结果可能出现不可控的错误。
例如:两个线程thread-1和thread-2,同时要数据入库,需要判断数据字段a,不重复,所以当插入数据的时候先去检查数据库中a字段,当我们的两个线程中字段a相同的时候,出现thread1先执行查询,在thread2查询,两个线程同时都会得到a字段没重复,这个时候,数据入库,肯定会有问题的。
有线程安全的问题,这个资源叫做临界资源
。