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 的排查这个感觉像是会面试问到的类型,因为很全面的问题而且排查问题也是常用场景。

相关推荐
怕浪猫13 分钟前
我有个朋友,工作八年,公司从 300 人减到 80 人
面试·程序员
考研保研资料分享31 分钟前
2024财会跨保北大金融科技:三场笔面试与经管法混申复盘
科技·面试·金融
H_BB2 小时前
面试笔记:数据加密和心跳机制
笔记·面试·职场和发展
j7~2 小时前
【C++ 面试笔记】(篇二):类与数据抽象 & STL 容器与算法
开发语言·c++·面试·stl容器和算法·类和数据抽象
Yuzhiyuxia14 小时前
【AI Agent面试系列】AI Agent记忆机制知识点1
人工智能·面试·职场和发展
考研保研资料分享17 小时前
2025公卫保研清华专硕:三校考核、英文读译与择校复盘
面试
Lichee2021 小时前
招行Java 面试知识点梳理:Spring 事务、锁、线程池、集合
java·面试
aiautotools1 天前
Claude Code MCP 怎么配:命令、scope 与避坑
面试
soft_hub11 天前
海外会议怎么用录音APP翻译会议内容
面试·职场和发展
考研保研资料分享1 天前
2025生物信息跨保浙大:四校考核、文献读译与材料准备
面试