cpp 选手准备秋招学习笔记 day10

1.场景题目

a.关于缓存击穿、雪崩和穿透的概念以及对应的解决方法

缓存击穿是指访问的热点 key 失效导致大量请求直接达到数据库。

解决方法是热点 key 永不失效,或者给数据库加上互斥锁只有第一个请求实际访问数据库。

缓存雪崩是指大量 key 失效,导致大量请求直接达到数据库。解决方法是一种是设置不同 key 不同的失效时间,另外可以使用多级缓存。

缓存穿透是指因为访问大量数据库中也不存在的数据,缓存中更不可能有,于是直接去访问数据库。解决方法可以记录不存在的 key,另一种是使用布隆过滤器。

b.MySQL 的查询优化器没有使用期望的索引,或者很慢

解决方法

首先可以用 forge 强制使用索引、其次对 SQL 语句重写,比如有覆盖索引的 where、建立合适的索引比如联合索引

在排查的时候也要排查是不是索引失效

c.接口设计的原则

首先是规范,输入和输出最好统一类型比如 JSON

安全性要考虑不要把能直接访问内部的接口暴露

性能要考量,比如使用缓存和异步的方式

记录日志

d.Redis 的 key 和 value 设计的原则

首先是都是不要过大,浪费资源

对于 key 要直观好理解

value 是要选择合适的数据结构

e.复杂架构设计要分层的原因

职责分离,比如前后端分离

解耦合,提高系统的扩展性,每一层只依赖于他前面的层而且不用关心具体实现

2.Redis 集群

a.哨兵机制

哨兵解决的问题是判断主库是否下线了是否需要选新的主库、选新主库、选完之后通知的问题。

为什么需要集群?

因为哨兵判断主库下线有一个错判断的可能是网络问题导致没有收到响应,如果直接进行主从切换会有同步、建立连接的过程,如果主库本身没有下线这是一种浪费。

b.判断下线和选新的主库都是少数服从多数的原则

当多数判断主库下线,就把主库从主观下线变成客观下线。

实际执行选主库的操作的哨兵也是通过少数服从多数选出来。

c.哨兵集群的建立

多个哨兵通过在主库发布自己的信息,其他哨兵注册互相通知对方的 IP 和端口等。pub 和 sub

哨兵通过 info 命令获得主库连接的从库的信息。

哨兵获得客户端信息也是通过在主库 pub 和 sub,客户端通过订阅哨兵信息来获得关于主从库切换的具体信息。

3.总结

项目中经常被问到的数据库相关的很多都是索引相关的,查询速度慢?索引设计问题、索引失效问题、语句问题,b+树为什么?也是为了索引,归根到底数据库就是存储数据,索引数据然后用来被检索。

Redis 单机的知识主要是解决高可靠里的数据持久性,对于真实的 Redis 高可靠还有在分布式世界里的服务不中断,这就是主从库解决的问题,哨兵机制使得主从库能够顺利的进行。

相关推荐
进击的明明1 小时前
当AI开始“边想边干”:深入聊聊ReAct,以及如何用Python手搓一个简单Agent
python·面试·agent
~patience~8 小时前
WAV 逆向分析工具使用笔记
笔记
滴啦嘟啦哒8 小时前
【具身笔记】【π0.5 微调与仿真】五、在MuJoCo中实现可视化仿真
笔记·python·vla·具身
xier_ran8 小时前
【infra之路】AI 编译器学习笔记(十三):AI 编译器全景——TVM、XLA、IREE 与其他
人工智能·笔记·学习
连山齐名8 小时前
ai应用开发的学习笔记
服务器·笔记·学习
桃桃乌龙_8 小时前
LangGraph 深度解析:从链到图,把 Agent 的循环画出来
面试
考研保研资料分享8 小时前
地信遥感保研至南京大学南赫:六场考核与跨专业失利复盘
面试
乔旭伟8 小时前
中小厂生产管理系统选型笔记:驱动方式、主线链路与成本结构
笔记·需求分析·规格说明书
考研保研资料分享8 小时前
物理保研至中科大:固体物理复习、四场面试与科研追问
面试·职场和发展
Rain的Java大神之路8 小时前
别再死磕 MySQL 了:向量数据库与 RAG 生产落地实录(Java 工程师专场)
java·后端·面试