40多分钟
分库分表设计,场景
怎么设计索引。什么是索引覆盖、索引下推,
索引的数据结构、
数据库锁。行锁和表锁,具体场景
事务幻读
redis集群架构,sentinel cluster 的区别,cluster是怎么管理主节点,redis的数据结构,跳表,
分布式锁的实现,有什么问题,redlock原理,怎么延长锁时间
hashmap的数据结构
线程池相关的参数,原理
模式:写单例模式,用到哪些其他的设计模式,详细介绍spring利用到的设计模式,模板和策略模式的区别
Object类有哪些方法,hashcode有什么用,什么时候会重写equals方法,有什么用,==和equals区别
数据库存储引擎介绍,事务特性,MVCC,UNDOlog,索引,SQL优化
多线程:怎么创建线程,futureTask怎么获取返回值,是不是阻塞的,线程池的实现原理
redis的数据类型,怎么进行持久化,详细介绍
ConcurrentHashMap 介绍,加锁的过程,synchronized的原理,锁升级的过程
HashMap为什么是2倍扩容
针对最后一个问题疑问比较多,我回答的是计算器底层是0和1,二进制数据存储,我们用(2-1)&hash 在做位运算的时候低十六位和高十六位都能参与进来,最大程度避免hash冲突。我理解是只要是2的倍数就可以,但是一般来说扩容2倍就足够了,如果过多的话可能会导致很多分配的内存空间没有用。面试官说是因为扩容2倍前面的都不需要移动位置。(需要具体研究下)。。