当前位置: 首页 > news >正文

MySQL,Redis重点面试题

1. 数据库索引

1.1 索引概念与类型

  • 聚集索引:数据和索引放在一起,一个表只能有一个,适合范围查询。
  • 非聚集索引:数据和索引分离,索引指向数据,一个表可以有多个,适合精确查询。
  • 唯一索引:加速查询 + 列值唯一(可以有 NULL)。
  • 覆盖索引:一个索引包含(或覆盖)所有需要查询的字段的值。
  • 联合索引:多列值组成一个索引,专门用于组合搜索,效率高于索引合并。

1.2 B+ Tree 优势(对比哈希表和二叉树)

  • 高度低,磁盘 I/O 次数少。
  • 查询高效且效率稳定,时间复杂度低。

1.3 索引优缺点

  • 优点:提高检索效率,降低 I/O 成本,减少 CPU 消耗。
  • 缺点:增删改操作效率降低,占用额外存储空间。

1.4 索引失效场景

  • 模糊匹配以 % 开头。
  • 对列进行函数运算或表达式计算。
  • 字符串不加引号。
  • OR 条件中,一边有索引一边无索引。

2. 事务与存储引擎

2.1 事务四大特性(ACID)

  • 原子性:回滚日志实现。
  • 一致性:通过其他三者实现。
  • 隔离性:锁机制 + MVCC 实现。
  • 持久性:重做日志实现。

2.2 事务隔离级别

  • 读未提交
  • 读已提交
  • 可重复读(MySQL 默认)
  • 串行化

2.3 MySQL 存储引擎对比

  • 默认:InnoDB(综合性能最佳)。
  • InnoDB 支持事务,MyISAM、Memory 不支持。
  • InnoDB 支持行级锁,其他只有表级锁。
  • InnoDB 支持外键,其他不支持。
  • InnoDB 有崩溃恢复机制,其他没有。

2.4 SQL 调优工具

  • EXPLAIN 命令:分析 SQL 执行计划。

3. Redis 知识点

3.1 缓存问题与解决方案

  • 缓存穿透:请求的数据缓存和数据库都不存在 → 解决:布隆过滤器、缓存空值。
  • 缓存击穿:热点 Key 过期,大量请求打到数据库 → 解决:互斥锁、逻辑过期。
  • 缓存雪崩:大量 Key 同时过期或 Redis 宕机 → 解决:随机过期时间、多级缓存、Redis 集群 + 主从哨兵。

3.2 分布式锁

  • 可重入锁:线程获取锁时检查是否自己的锁,是则计数+1,释放锁计数-1。
  • 实现分布式锁SETNX(建议用 Lua 保证解锁原子性)或使用 Redisson。

3.3 缓存与数据库一致性

  • 先操作数据库,再删除缓存。

3.4 Redis 数据结构应用

  • 点赞/关注/签到:SET(快速添加删除 + 去重)。
  • 获取交集/并集/差集:如共同好友(交集)、好友推荐(差集)。
  • 排行榜:Sorted Set(按分数排序)。

3.5 Redis 性能与持久化

  • Redis 快的原因:单线程,无锁竞争;基于内存;I/O 多路复用。

  • 持久化方式

    • RDB:定期快照,BGSAVE 异步,不阻塞主线程。
    • AOF:每次命令追加日志。
  • 选择建议:对数据安全要求低选 RDB,否则选 AOF;大数据集恢复时 RDB 更快。

3.6 Redis 事务

  • 使用 MULTIEXEC 保证一组命令的原子性,不支持回滚。

3.7 Redis 过期策略

  • 惰性删除:访问时检查是否过期,过期则删除。
  • 定期删除:定时扫描并删除过期 Key。
  • 内存淘汰:达到阈值时删除。

3.8 Redis 哨兵机制

  • 高可用方案,负责监控主从节点、自动故障转移、通知客户端。
  • 主节点宕机时,多哨兵投票选出新主节点,更新从节点和客户端连接信息。
  • 多哨兵协作,避免单点故障,保证集群自动恢复。

http://www.dtcms.com/a/325492.html

相关文章:

  • SharePlay确保最佳游戏体验
  • [Shell编程] Shell 编程之免交互
  • 【CV 目标检测】①——目标检测概述
  • 每日五个pyecharts可视化图表-line:从入门到精通 (3)
  • 如何网络“钓鱼”,钓鱼鱼饵生成工具CobaltStrike使用
  • LangVM —— 一站式多语言版本管理工具,让 Java、Python、Go、Node.js 切换更丝滑
  • 运维学习Day21——LAMP/LNMP 最佳实践
  • Django Request 与 DRF Request 的区别
  • 从 GPT-2 到 gpt-oss:架构进步分析
  • 企业级 IT 运维服务平台数据备份方案:基于 rsync 的自动化实现
  • 时钟频率与带宽
  • 低延迟RTSP|RTMP视频链路在AI驱动无人机与机器人操控中的架构实践与性能优化
  • FlinkSql(详细讲解二)
  • 深入解析游戏引擎(OGRE引擎)通用属性系统:基于Any类的类型安全动态属性设计
  • 服务器配置实战:从 “密码锁” 到 “分工协作” 的知识点详解
  • 【linux】企业级WEB应用服务器tomcat
  • Uipath Studio中的文件管理
  • 基于Springboot+UniApp+Ai实现模拟面试小工具九:移动端框架搭建
  • 4种无需WiFi将数据从iPhone传输到iPhone的方法
  • GraphRAG:用知识图谱赋能检索增强生成,攻克复杂推理难题
  • 【MySQL基础篇】:MySQL索引——提升数据库查询性能的关键
  • 力扣109:有序链表转换二叉搜索树
  • 深入浅出设计模式——行为型模式之观察者模式 Observer
  • vlan (hybird) 实验
  • Python bisect 库详细介绍
  • 【Java基础】你认为Java的优势是什么
  • 【C语言入门级教】函数指针变量
  • 当 WAF 遇上黑客——一次混合式攻击的应急复盘
  • GO学习记录三
  • 5G 非地面网络(NTN)最专业的方案