java 经典备忘

0.jvm 内存模型及其优化

解答:堆-新生代-旧生代-持久代 & GC

 

1.HashMap 原理,ConcurrentHashMap 和 Hashtable区别,LinkedHashMap,TreeMap

解答:ConcurrentHashMap属于并发库里的类,并发库里提供了 Lock 和 Condition

 

2.两个线程对 i=0进行 i++处理,结果为1或2,解释为1的情形

解答:jvm 内存模型(jmm),即主内存和工作区

 

3.mysql 存储类型,order by 的原理,索引

解答:order by 底层是 Btree,B+tree vs. B-tree

 

4.Top10问题

解答:比如数据库里有很多很多数据(int),从中挑出top10,我们可以先给定一个初始值均为0的 t[10],然后从数据库里分页查询第一批10个数a[10],拿出 a[0],若 a[0]>t[0],则 t[0]=a[0],接着若 t[1]<a[1]<=t[0],则 t[1]=a[1],若 a[1]>a[0],则 a[1]和 a[0]交换,然后依次规律下去,第二批数据比较时,t里面的元素该踢出的就踢出。

 

5.洗牌问题

解答:对于1,2,3,4,5,每次随机选出一个e =  list.get(random.nextInt(a.size())),放入一个数组中,然后 list.remove(e)。由此可见,对于数组问题,往往需要借助新数组。

 

6.数据库分表策略

解答:比如订单表里有 order_id,user_id,.......,表长度1亿(即有1亿行记录),可以对 id取模,mysql 单表支持500W 条记录,那么分成20张表。如果还要根据 user_id 查订单,分表出中间表,就两字段 user_id,order_id,user_id 可能分散在多张表里,所以要经过各种查询,用查出来的订单号再去分表里查订单详情。

 

7.volatile

 

8."一致性 hash"算法

 

9.Lock 和 synchronized 最大区别

解答:手动释放锁 unlock()

你可能感兴趣的:(java,经典)