1、HashMap原理,线程安全?
数组,链表,红黑树。 非线程安全
2、Java如何进行线程同步
同步锁 synchronized
ReentrantLock锁
Semaphore 信号量
3、CAS原理
Compare And Swap 先比较再交换
有三个操作数 内存位置,预期值A,修改值B,如果内存位置和预期A取出的值相同,则把值替换成B,否则不做处理。
4、JVM垃圾回收之GC算法
标记-整理
标记-清除
标记-复制
5、Mysql索引原理以及查询优化:
B+Tree索引
查询优化:explain 最左匹配
6、TCP,拥塞控制
7、算法:给定一棵二叉树,找到这棵树最中最后一行中最左边的值。
9、电商平台中订单未支付过期如何实现自动关单?
定时任务,定时检查订单是否过期
10、如何设计一个秒杀系统
限流 , MQ异步下单, 商品数据缓存到Redis,Redis扣库存并防止超卖
11、如果你的系统的 OPS 突然提升 10 倍你会怎么设计?
限流降级,扩容,加缓存,异步化 分库分表
12、如何设计一个支持 10 万 OPS 的会员系统
缓存 + 分库分表 + 异步写入 + 集群
13、关于索引的底层实现,为什么选择 B+Tree而不是红黑树?
对比红黑树,他的分叉是2,这样整体树就高,磁盘IO次数就多。
对比B树,B树非叶子节点也存数据,这样分叉就变少,树变高,磁盘IO次数就多。
B+树, 数据存储在叶子节点,非叶子节点存储索引,叶子节点数双向链表,这样就更容易支持范围查找
参考:
为什么选B+树,而不是红黑树或B树?
对比红黑树:红黑树是二叉树,分叉只有2。数据量大时树太高,磁盘IO次数多;而B+树非叶子节点不存数据,分叉大、树矮,IO次数少。
对比B树:B树的非叶子节点也存数据,导致分叉变小,树变高,IO变多;且B树范围查询需要频繁中序遍历。B+树非叶子节点不存数据、节点大小固定,有利于磁盘预读;叶子节点通过双向链表连接,支持高效的范围查询和排序。
总结:B+树把数据全放叶子节点,内部节点只做索引,这种设计最大化地利用了一次磁盘IO能读取的数据量,把树高降到了最低,完美契合数据库磁盘存储的特性。
14、介绍HashMap,与TreeMap区别
HashMap是无序的 O(1),
TreeMap是有序的,红黑树 O(logn)
15、用HashMap实现一个有过期功能的缓存,怎么实现
value 是一个对象,包括创建时间和过期时间,获取key的时候,判断value是否过期
还有定时任务,检查是否过期
作者:Work Hard Work Smart
出处:http://www.cnblogs.com/linlf03/
欢迎任何形式的转载,未经作者同意,请保留此段声明!
浙公网安备 33010602011771号