Java基础
- HashMap的底层数据结构?HashMap如何扩容?为什么扩容之后的大小是2的幂次方?
- ConcurrentHashMap的底层数据结构?谈谈ConcurrentHashMap的分段锁技术?
- Volatile能保证可见性吗?Volatile修饰的变量并发更新时是否是线程安全的?Volatile保证可见性的底层原理是什么?
- Synchronized是否线程安全的吗?Synchronized实现线程安全的底层原理是什么?
- ThreadLocal是什么?一般用在什么场景?
- AQS是什么?哪些类是利用AQS保证的线程安全?
- CAS是什么?哪些类是利用CAS保证的线程安全?
- ThreadPoolExecutor线程池有哪些参数、分别代表什么意思?持续往线程池里加任务,线程数、队列数的增长情况是怎样的?如何根据任务类型确定线程池数量大小、队列长度?
数据库
- 为什么分页大了之后,limit会变慢?该怎么优化?
- 为什么索引字段类型不匹配,会导致索引失效?
- 为什么非最左匹配like查询,会导致索引失效?
- 业务高峰期,如果必须需要新增索引,该怎么操作、需要注意什么?
- JOIN操作时,数据库内部是怎么实现的?是两层for循环吗,这样效率会不会很慢?
- 如何从科目成绩表中查出总分数排名前三的同学(可能会存在总成绩相等的情况,最后的查询记录数可能会大于3)?
- 数据库隔离级别有哪些?为什么你们系统选择可重复读隔离级别?各种隔离级别的适用场景,该如何选择?
- Mysql中utf8编码占几个字节?utf8和utf8mb4有什么区别?如果存中文时,Java用utf-8、mysql用utf8会不会产生乱码?
- Mysql有几种锁?什么是间隙锁?
- 说出10种sql优化的建议?
Redis
- redis的String和c语言的String有什么区别?
- redis的ZSet底层实现是什么?
- 如何查看redis集群总共有多少个key?
- 如何查看redis集群1小时内即将过期的key?
- redis为什么这么快?仅仅是因为数据存在内存里吗?
- 为什么GeoHash的地理位置距离计算会很快?
- redis有几种部署模式?该怎么选择?
- redis实现分布式锁的几种方式?setNX有什么局限性?
- redis的哪些命令是原子性的?除了setNX还有哪些?
算法
- 手写冒泡排序、插入排序、选择排序?怎么计算他们的时间复杂度、空间复杂度?
- 快速排序的思路?时间、空间复杂度是多少?最好能写一边。
- 堆排序的思路?时间、空间复杂度是多少?最好能写一边。
- 如何判断两个单向链表是否相交?如何找出交点?
- 如何找出二叉树上距离最远的两个点(每个节点有一个数值大小,两个节点的距离是指从起点到终点所经过的所有节点的数值和)?
分布式
- 如何保证分布式事务?两阶段提交和三阶段提交是什么意思、有什么区别?
- 如何实现分布式锁?redis分布式锁的原理、zookeeper分布式锁的原理?
- 对比SpringCloud和Dubbo的区别?Dubbo?SpringCloud吗?该如何选择?
- Zookeeper和Eurake的区别?为什么说Zookeeper保证了CP、Eurake保证了AP?Eurake是如何保证AP特性的?
其他
- 接口优化有哪些思路和手段?
- 如何避免商品超卖?数据库乐观锁?
- 秒杀系统该怎么设计?需要注意哪些点?能支撑多少的并发量?