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

相关推荐
怕浪猫1 小时前
Agent 的记忆系统怎么设计?面试官想听的是这个
算法·面试·github
程序员Sunday11 小时前
JavaScript 事件循环面试题,宏任务与微任务怎么执行|Sunday面试指南
开发语言·javascript·面试·校招·事件循环·程序员sunday
YangYang9YangYan11 小时前
2027 秋招|数据科学与大数据技术面试项目价值回答思路,告别纯代码描述
大数据·面试·职场和发展
邓江洲12 小时前
一道经典的 NSString 内存面试题
面试
时间的拾荒人15 小时前
Qt 界面美化实战:QSS 样式表
开发语言·qt·面试
法欧特斯卡雷特18 小时前
Kotlin 新特性抢先看:伴生扩展与伴生块
后端·面试·开源
YonyouHRSaaS19 小时前
2026年10-11月AI面试选择指南:对国内主流AI面试系统进行对比,看看哪个更值得选!
人工智能·面试·职场和发展·hr·ai面试
浅念-20 小时前
动态规划专题:斐波那契数列模型 + 网格路径DP(LeetCode例题全解析)
笔记·算法·leetcode·面试·职场和发展·动态规划·推荐算法
落魄大学生之流水线上谋生计20 小时前
接口测试实习指南:从基础方法到面试与现场难题
面试·职场和发展
程序员清风21 小时前
AI时代建议学点自己真正感兴趣的!
java·后端·面试