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

相关推荐
Sam_Deep_Thinking4 小时前
new Thread()之后发生了什么?
java·后端·面试·程序员
用户938515635075 小时前
从小米前端面试题,彻底搞懂闭包、作用域链与 useState 惰性初始化
前端·面试
怕浪猫5 小时前
从 Windows 换到 Mac 三个月,我真香了
算法·面试·架构
古希腊掌管代码的神THU8 小时前
【清华代码熊】DeepSeek-V4.1-Flash 多模态架构解析
人工智能·深度学习·机器学习·自然语言处理·面试
林川~0112 小时前
Unity 反射(Reflection)从原理到实战:一篇讲透原理、用法、实战案例与性能优化
面试·性能优化·反射·il2cpp·type
晚安日记wanna12 小时前
React 为何不做双端 diff?Vue 与 React 更新逻辑的三层差异
前端·react.js·面试
keke.shengfengpolang13 小时前
2026年资金分析岗校招技术栈拆解:Excel预测模型、SQL取数、SAP与Oracle资金模块,附2027届备考路线
面试
HRaitest13 小时前
【架构拆解】从“外挂插件”到“原生基座”:2026 新一代全链路 AI 招聘系统底层技术演进
人工智能·ai·求职招聘
顶点多余13 小时前
9.16 面试总结
linux·面试·职场和发展
Alice-YUE1 天前
工业级 AI Agent 架构:5 层、2 范式、4 原则,一次讲透
面试·系统架构·大模型·ai agent·智能体