目录
- 1. 数据库隔离级别
- 2. 如何保证接口幂等
- 3. 常用的索引
- 4. B+树的实现
- 5. 并发时,防止直接查询库
- 6. Redis做缓存场景
- 7. 毫秒级重复插入相同数据
- 8. 介绍下常用的锁
- 9. Spring 和Spring Boot异同
- 10. Spring Boot加载原理
- 11. Spring Boot常用注解的理解和原理
- 12. Spring Cloud 的理解
- 13. 常见算法的复杂度和简述原理(快排,堆排,桶排等)
- 14. Hashmap的理解,构成,复杂度(如何解决哈希冲突,为什么)
- 15. 遇见内存溢出,系统死锁时如何排查(日志无异常)
- 16. ==和equals的区别,hashcode理解
- 17. 常用的消息中间件有使用过什么,场景
- 18. 你有用到过设计模式吗,怎么使用的?
- 19. 网络协议Tcp和Http异同
- 20. 三次握手和四次挥手
- 21. 你如何设计在线视频,移动会议
- 22. 微信抢红包如何设计,简述思路
- 23.JVM如何避免频繁的Full GC
1. 数据库隔离级别
原子性:指一个事务中的操作,要么全部成功,要么全部失败,如果失败,就回滚到事务开始前的状态。
一致性:指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。那转账举栗子,A账户和B账户之间相互转账,无论如何操作,A、B账户的总金额都必须是不变的。
隔离性:
永久性:指如果事务一旦被提交,数据库中数据的改变就是永久性的,即使断电或者宕机的情况下,也不会丢失提交的事务操作。
2. 如何保证接口幂等
幂等文章
面试官:如何保证接口的幂等
接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用
- 使用缓存和 token
- 使用status 代码判断
3. 常用的索引
面试官:说说你用的索引,组合索引有用吗
- 普通索引:仅加速查询
- 唯一索引:加速查询 + 列值唯一(可以有null)
- 主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个
- 组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并
- 全文索引:对文本的内容进行分词,进行搜索
4. B+树的实现
B+树文章
面试官:b+树如何实现的,为何采用,之前用的又是什么?
- B树的节点都存储数据,在数据库中定位的时候,会比B+树多出不必要的读取。而B+树,只有叶子节点存储数据
- 叶子节点上增加了链表设计,更加适合范围查询(数据库常用),遍历不需要再中序进行
5. 并发时,防止直接查询库
面试官:并发 大量访问时 如何防止直接查询库
可以用redis做缓存,把常用的查询数据放里面
如果问到缓存中没查到,还是到库去查询,这其实是缓存穿透的概念,解决:布隆过滤器
6. Redis做缓存场景
7. 毫秒级重复插入相同数据
面试官: 两个用户同时插入相同数据如何防止错误(同一手机号)或者毫秒内同时访问同一个插入接口(重复点击,压测)
避免并发情况下的重复提交
8. 介绍下常用的锁
面试官:谈谈锁机制异同,场景(三个关键字lock volidate synchronized)
详解
9. Spring 和Spring Boot异同
10. Spring Boot加载原理
11. Spring Boot常用注解的理解和原理
12. Spring Cloud 的理解
13. 常见算法的复杂度和简述原理(快排,堆排,桶排等)
14. Hashmap的理解,构成,复杂度(如何解决哈希冲突,为什么)
15. 遇见内存溢出,系统死锁时如何排查(日志无异常)
16. ==和equals的区别,hashcode理解
17. 常用的消息中间件有使用过什么,场景
18. 你有用到过设计模式吗,怎么使用的?
19. 网络协议Tcp和Http异同
20. 三次握手和四次挥手
21. 你如何设计在线视频,移动会议
22. 微信抢红包如何设计,简述思路
23.JVM如何避免频繁的Full GC
调优(调整内存参数,扩大新生代容量,或者增加机器内存,治标不治本);
削峰(发给消息中间件,慢慢处理,治本)