面试题库(一)

一、数据库隔离级别及其含义(MySQL默认级别:可重复读

数据库的隔离级别从低到高有四种:

隔离级别说明会出现的问题
读未提交(Read Uncommitted)读到别人未提交的事务数据脏读、不可重复读、幻读
读已提交(Read Committed)只能读到别人提交后的数据不可重复读、幻读
可重复读(Repeatable Read)同一事务内多次读数据结果一致幻读(MySQL用了间隙锁防止)
串行化(Serializable)加锁读,事务串行执行性能最差,但最安全

MySQL 默认是 Repeatable Read(可重复读)


二、MySQL 索引原理与优化

✅ 索引原理

  • 底层结构:B+树

    • 叶子节点存储数据,非叶子节点只存索引,提高查询效率

  • 索引作用:加快查找、排序,但过多会影响写入速度

✅ 索引类型

  • 主键索引(PRIMARY KEY)

  • 唯一索引(UNIQUE)

  • 普通索引(INDEX)

  • 组合索引(多个字段)

  • 全文索引(FULLTEXT)

✅ 合理创建索引

  • WHERE/ORDER BY/JOIN中出现频繁的字段

  • 高选择性字段(比如手机号)

  • 前缀索引:针对长字符串字段

✅ 优化技巧

  • 使用覆盖索引(只查索引字段,不查表)

  • 避免在索引字段上使用函数、表达式(会失效)

  • 最左前缀原则:组合索引用上前几个字段才生效

  • 索引列尽量为 NOT NULL


三、消息队列使用场景

  • 削峰填谷:系统高并发时缓冲压力(如下单)

  • 异步解耦:系统模块之间异步调用(如下单后发短信)

  • 流量削减:限流处理、批量处理(如日志收集)

  • 顺序保证:比如交易系统按顺序执行操作


四、消息的重发与补偿策略

  • 设置消息的最大重试次数,防止无限重发

  • 记录消费状态(幂等性),避免重复处理

  • 使用定时任务 + 死信队列做补偿处理

  • 数据库中标记消费状态 + 消息ID,防止重复消费


五、MQ 如何保证消息不丢

  • 消息持久化:生产者/消费者都写磁盘

  • ACK机制:确保消息被正确消费后才确认删除

  • 消息重试机制:未ACK的消息重试消费

  • 死信队列(DLQ):处理一直失败的消息


六、如何防止缓存击穿与雪崩

✅ 缓存击穿(热点key突然失效)

解决方案:

  • 给热点key设置永不过期

  • 使用互斥锁控制只有一个线程回源查询数据库

✅ 缓存雪崩(大量缓存同时失效)

解决方案:

  • key过期时间加随机值,错开失效时间

  • 设置多级缓存(本地+Redis)

  • 降级策略,部分服务降级或限流


七、Redis 的数据结构及使用场景

数据结构描述应用场景
String字符串、数字计数器、缓存对象
Hash键值对集合用户信息、对象属性
List有序链表消息队列、任务列表
Set不重复集合标签、去重
Sorted Set(ZSet)有序集合排行榜、积分榜
Bitmap位图用户签到、活跃状态
HyperLogLog估算基数统计UV(独立访客)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值