cpp 选手备战秋招学习笔记 day19

一、Redis 相关

Redis 请求变慢的判断以及原因排查

首先,慢是一个相对的概念,要根据机器都常规延迟和当下延迟做比较如果是常规延迟的两倍就可以认为变慢了,如果不使用相对只延迟可能有机器差异。

原因 1 可能是因为慢查询或者大量 key 过期导致的清空过期 key 的连续操作,慢查询问题可以通过优化查询方法解决。

对于大量 key 同时失效的问题可以在设置过期时间都时候增加一个随机值来解决,增加随机性。

原因 2 可能是因为文件系统,虽然 AOF 是由后台线程操作,但是如果频繁 AOF 后台进程阻塞也会导致问题,或者因为使用了同步的写 AOF,或者导致 AOF 频繁重写,如果业务可以接受可以降低写 AOF 的频率。

原因 3 可能是因为操作系统的内存频繁的换入换出,swap,因为 Redis 是内存数据库,所以一定是受 swap 影响的。

二、项目相关

1.定时器的实现(cpp webserver)

定时器通过双向的升序链表实现,按照过期时间从最近到之后去排序,然后向内核注册一个每五秒的信号,处理操作是写一个缓冲区触发 epoll 的 EPOLLIN 事件,然后主线程去链表逐个清除过期的连接。

2.关于注册 epollout

这个解决的是大文件在发送的过程中不能一次发完,因为 socket 的缓冲区有限限制了,首先要记录每次发送的文件的偏移位置,避免不能继续发送,其次是注册写事件之后可写的时候继续发送。

用这种方法可以解决不能一次发送完成的大的资源。

三、cpp 相关

1.左值和右值的区别

左值是有身份、可以取地址的;右值不能取地址。左值不能被移动,右值可能即将被移动。

2.移动和赋值的区别。

赋值是把原对象复制一份,放在当前的位置。而移动是直接交接它的空间,原对象有效,但是不能确保其状态。

3.虚析构函数的意义。

虚析构函数可以在使用父类的指针或者引用指向堆上的子类对象,然后用父类的指针释放空间的时候。可以调用正确的虚析构函数。

总结 Redis 的排查这个感觉像是会面试问到的类型,因为很全面的问题而且排查问题也是常用场景。

相关推荐
leonkay10 小时前
C# 特性(Attribute)——【1】基础讲解
开发语言·青少年编程·面试·c#·.net·个人开发
leonkay12 小时前
C# 特性(Attribute)——【2】工业设备参数框架设计
经验分享·面试·架构·c#·学习方法·设计
小江的记录本14 小时前
【AI Agent】《2026年9月 AI Agent全栈开发技术选型专项面试宝典》
java·spring boot·python·spring·ai·面试·ai编程
SamDeepThinking15 小时前
里氏替换原则的盲区:为什么符合契约的List替换依然会失败?
后端·面试·程序员
水管在开花.20 小时前
Agent范式与LangGraph-②零基础保姆级教程
人工智能·面试·langchain·agent
程序员-Benothing1 天前
数据库的脏读、不可重复读和幻读:从面试标准答案到源码级原理
数据库·面试·职场和发展
数智启示录1 天前
Flink CDC 机制精讲(四):一条 SQLServer CDC 事件如何保持顺序 【面试宝典】
数据库·面试·sqlserver·flink
艾莉丝努力练剑1 天前
【AI大模型接入SDK】DeepSeek API 基础概述
c++·人工智能·学习·ai·面试·deepseek
数智启示录1 天前
Flink CDC 机制精讲(五):Operator UID、Savepoint 与安全升级 【面试宝典】
大数据·面试·flink