database
where
andon
- limit
spring
- set 注入 int
- 后处理器的切入时机
Filter mapping规则
- 如何添加多个Mapping
- 如何排除某个规则
shrio
- 如何配置多个realm
- 如何在realm中加盐
多线程
- 实现一个无锁的线程安全的栈
- CAS原理
- 自旋是什么
- 如何证明无锁的线程安全的栈是线程安全的。
- 守护线程的finally块会被执行么?
- FutureTask是啥子?
HashMap
数据结构
Hash算法
- h 32位
- h = h^(h>>>20)^(h>>>12)
- h = h^(h>>>7)^(h>>>4)
- 算法中是采用(h>>>7)而不是(h>>>8)的算法,应该是考虑1、2、3三位出现重复位^运算的情况。使得最低位上原hashCode的8位都参与了^运算,所以在table.length为默认值16的情况下面,hashCode任意位的变化基本都能反应到最终hash table 定位算法中,这种情况下只有原hashCode第3位高1位变化不会反应到结果中,即:0x7FFFF7FF的i=15。
其中h^(h>>>7)^(h>>>4) 结果中的位运行标识是把h>>>7 换成 h>>>8来看。 即最后h^(h>>>8)^(h>>>4) 运算后hashCode值每位数值如下: 8=8 7=7^8 6=6^7^8 5=5^8^7^6 4=4^7^6^5^8 3=3^8^6^5^8^4^7 2=2^7^5^4^7^3^8^6 1=1^6^4^3^8^6^2^7^5 结果中的1、2、3三位出现重复位^运算 3=3^8^6^5^8^4^7 -> 3^6^5^4^7 2=2^7^5^4^7^3^8^6 -> 2^5^4^3^8^6 1=1^6^4^3^8^6^2^7^5 -> 1^4^3^8^2^7^
Entry<K,V>
- int hash
- K key
- V value
Entry<K,V>
next
- Map
- table = Entry[]
- int loadFactor = 16
- int capacity = 0.75
- -
Object
- hashCode()
- 本地方法,返回对象地址
- String等很多类重写了该方法。
public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
}
return h;
}
- equals相等则 hush一定相等,反之不成立。
异常
- 对于运行时异常,JVM是怎么处理的。