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 高可靠还有在分布式世界里的服务不中断,这就是主从库解决的问题,哨兵机制使得主从库能够顺利的进行。

相关推荐
索端阳22 分钟前
I.MX6ULL 裸机开发:LCD Framebuffer 与 RGB888 学习笔记
笔记·vscode·嵌入式硬件·学习
一个低调的青年30 分钟前
电池健康状态估计(一)
经验分享·笔记·其他·算法·模型
影寂ldy44 分钟前
C# TCP转串口Modbus网关终极完整版笔记(队列防抖+一问一答+帧解析+双客户端轮询)
笔记·tcp/ip·c#
我叫黑大帅12 小时前
Go日志库工程选型与逃逸分析评测报告
后端·面试·go
L@ncor13 小时前
第五章 基于低代码平台的智能体搭建 · 学习笔记(Coze / Dify / FastGPT / n8n)
笔记·学习·低代码·agent·prompt工程
知潮网13 小时前
被嫌弃的五仁月饼,一吨千元在养猪场翻了身
笔记
2601_9606312313 小时前
中药前处理及提取的工艺环节与技术要点
笔记
2601_9653842613 小时前
口腔黏膜清洁中的几何约束与流体动力学边界层问题分析
经验分享·笔记
此时不提桶,更待何时13 小时前
05-05-B-对象存储与文件服务面试与生产事故实战
面试·nosql
一米阳光866113 小时前
软考高级【信息系统项目管理师】高项重要考点(9)组织 助你顺利上岸!
笔记·职场发展·软考·高项·信息系统项目管理师·高级职称