点击蓝色关注。

文末有福利,先到先得

在危机时代坚持 修炼内功,锻炼身体,

等待恒纪元的到来,一旦新机会出现, 我们就已经做好了准备,抓住新的机会, 实现自己的目标

各位老师好,这是大厂面试拆解——项目实战系列的第10篇文章。

最近投递简历石沉大海,这个时候更要冷静

我问自己 面试成功第一性原理是什么?

  1. 自然是通过面试官 项目系统设计回答
  2. 死磕系统设计题目,今天不搞明白,一家公司面试不通过,换另外一家公司同样不通过,下一次面试还是不通过。
  3. 面试官都不更换题目这说明行业类就一个问题
  4. 第一性原理 就是自己真正搞懂,而不是考虑市场环境如何。

我问自己 面试策略是什么?

  1. 如果不知道准备什么,先开枪,再瞄准,
  2. 找1-2家公司面一次就知道,这个时候必须复盘总结。
  3. 无数次面试经验告诉我,大部分90%人都 都会被同一个问题问到。为什么总结,忙工作,忙其他 干扰因素很多,甚至自己1个月后自己忘记了。
  4. 把面试官当陪练 你越战越勇,平时根本没有和大神交流机会,这次就是。准备-交流,准备-交流 也是高效的学校方式。
  • 游戏地图:深入理解计算机系统–IO模型

希望在io_uring使用场景上对你有帮助。

io_uring 已成为现代高性能开源项目的基石技术 尤其在存储、 数据库和 网络领域实现革命性突破。 其设计兼顾效率与灵活性,未来有望在更多场景替代传统 I/O 模型

一、面试回顾青铜被虐

岗位信息

  • 时间:2025年 5月28
  • 岗位:后端开发工程师

对话内容

面试官: 在你简历提到使用 io_uring请问,

  • 说说libaio和 io_uring有什么区别?
  • 然后说一说 io_uring怎么使用的?

我的感觉

  • 自己简历写内容,自己忘记了,这妥妥犯了一个致命错误,别人揪出来,尴尬,面试官印象打折扣80%
  • 我看W.Richard Steven « UNIX网络编程» 和 陈硕老师的 « Linux多线程服务端编程:使用muduo C++网络库»
  • 提到 5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO。只研究到同步IO (select、poll、epoll 、kqueue),大多数面试这个,自己源码和数据结构还不和清楚呢
  • 纯异步IO 看过相关文章,看过几眼,现在忘记了没有实际操作,当场卡克了,不知道怎么回答了。回答的没底气 异步定义:可以阻塞实现,也可以组阻塞实现 我回答:把自己知道全部回答一次。

面试官:提问,还有吗?等了20分钟 ,这个才是重点

我:反复说之前内容。

后记:

  1. 最重要一点 减少用户态到内核态拷贝,一开始说了,这个没有深入讨论
  2. 自己没有实际代码结合,开始想想更多 问题,例如epoll 可以监控多个,纯异步IO不能解决,判断IO出来完成 一点 纠结15分钟。
  3. 还是那句话,在纯知识方面,你不会,没时间学习,面试官更没时间,更不会,在不清楚情况下,试图说全部要点,导致 思路混乱

小陷阱

  1. 在日常工作中 和面试一样,领导反问,真的吗?你确定吗?还有其他吗?

  2. 为什么不敢大声说,就这几点,而是习惯说 我回去在想想,别人认为根本考虑不周全,是糊弄,应付领导,这就是干活了,等白干 想什么,一个项目1周完成,就是它,简单还效率。 在工作中 复杂设计绝对不通过评审的.

  3. 一个简单事情 你知道,大家知道,但是经过反复验证 这个才是做事情,其他超出能力范围,责任范围 不是做事情。

  4. 清楚 自己能做什么,把能做事情做好,不能做什么,不能做事情 找人解决,而不是自己解决,这个职场大忌,有方案不找领导,专家讨论,就是最大问题,这个蛮干,瞎干,目中无人

  5. 需求是什么问清楚,方案是什么考虑清楚,然后找评审,评审了 后面出问题领导不责怪,如果自己做,结果出问题了,就是自己问题。 因为分工协作

完整的题目:

二、动手写一个 io_uring例子

2.1 拆分任务

✅ 步骤1: 动手写 io_uring一个 demo例子,最简单一个例子

  1. 通过最简单例子 体会背后设计原理。

✅ 步骤2 :阅读材料

  1. Understanding Modern Storage APIs: A systematic study of libaio, SPDK, and io_uring
  2. How io_uring and eBPF Will Revolutionize Programming in Linux, ScyllaDB, 2020
  3. An Introduction to the io_uring Asynchronous I/O Framework, Oracle, 2020 ✅ 步骤3 :回答区别(不要试图完美回答,自己怎么理解就怎么回答)

✅ 步骤4:结合实际项目 验证 你猜想。不用怕打脸,及时调整,及时提问

​项目​ ​应用场景​ ​具体实现方式​ ​性能收益​
​Ceph​ 分布式存储系统 ​BlueStore OSD​​:直接集成 io_uring 优化块设备读写​CrimsonOSD​​:基于 Seastar 框架原生支持 io_uring 显著提升 OSD 吞吐量,降低延迟,适应高并发存储场景
​TiDB (TiKV)​ 分布式数据库存储层 通过 ​​RocksDB​​ 启用 io_uring 异步 I/O,用于 WAL 日志写入、SSTable 读取和 Compaction Compaction 写入时间减少 50%,整体 I/O 效率提升
​RocksDB​ 单机 KV 存储引擎 官方实现 PosixRandomAccessFile::MultiRead() 支持 io_uring,优化批量读取 随机读取和 Compaction 性能显著提升,尤其在高并发场景
​SPDK​ 用户态存储框架 深度整合 io_uring,实现零拷贝和异步 I/O 操作 极致降低 I/O 延迟,适用于 NVMe 存储和虚拟化环境
​Netty​ 高性能网络通信 通过 netty-incubator-transport-io_uring 模块支持异步 Socket I/O 单 Worker 场景 QPS 提升 20%,长连接吞吐量优化
​Redis​ 内存数据库 实验性支持 io_uring 作为事件循环后端(需内核配置) 高负载下 QPS 提升 8%~32%(开启 SQ Polling 时)
​Nginx​ Web 服务器 通过第三方模块实现静态文件异步读写 长连接场景 QPS 提升 20%,短连接性能波动
​xynet​ C++ 高性能网络库 基于 io_uring 和 C++20 协程,实现异步网络操作 减少动态内存分配和系统调用,适用于低延迟通信
​PostgreSQL​ 关系型数据库 社区探索异步 WAL 日志写入和索引刷盘(实验性) 目标降低事务提交延迟,提升高并发 OLTP 性能
​QEMU​ 虚拟化磁盘 I/O virtio-blk 后端驱动集成 io_uring,加速虚拟机磁盘访问 虚拟机 I/O 吞吐量提升,延迟降低
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
https://github.com/axboe/liburing.git
cd liburing 
ls examples/ io_uring-cp io_uring-cp.c io_uring-test io_uring-test.c

make -j4

io_uring-test

这个程序使用 4 个 SQE,从输入文件中读取最多 16KB 数据

https://github.com/axboe/liburing/blob/liburing-2.0/examples/io_uring-test.c

——————–——END————————–

最动人的作品,为自己而写,刚刚好打动别人

我在寻找一位积极上进的小伙伴, 一起参与神奇早起 30 天改变人生计划,发展个人事情,不妨 试试 1️⃣ 加入我的技术交流群Offer 来碗里 (回复“面经”获取),一起抱团取暖 2️⃣ 关注公众号:后端开发成长指南(回复“面经”获取)获取过去我全部面试录音和大厂面试复盘攻略 3️⃣ 感兴趣的读者可以通过公众号获取老王的联系方式。

—————-我是黄金分割线—————————–

抬头看天:走暗路、耕瘦田、进窄门、见微光,

  • 我要通过技术拿到百万年薪P7职务,别人投入时间完成任务,别人采取措施解决问题了,不要不贪别人功劳,
  • 但是不要给自己这样假设:别人完成就等着自己完成了,大家一个集团,一个公司,分工不同,不,这个懒惰表现,这个逃避问题表现,
  • 别人不这么假设,至少kpi上不会写成自己的,至少晋升不是你,裁员淘汰是,你的整个公司ceo,整个部门总裁,整个领导不帮助一下的,他们不这么想 ,你什么没做,战略是别人10年一点带你研究的多难,项目拆分别人10年完成多少问题,项目实现10年安排组织一点点完成多少bug,多少代码,是不要给自己这样假设:你等了看了观察10年什么做 ,0 贡献,
  • 但是不要给自己这样假设,别人全部市场,别人全部市场,别人占据全部客户,一切重要无比,你太差,太才,思考不行,沟通不行,认知不行,去tmd,给别人丢脸。这个方面我无法控制,在这方面经历任何问题应该的。
  • 我控制 的事情是 我必须亲自了解行业遇到难题,了解有什么需求,行业解决方案,我可以从三万英尺看问题,像周围人学习,像免费公开英文资料学习,从模仿开始。然后免费公开。我要通过技术拿到百万年薪P7职务,我必须糊涂混沌中走出来
  • 目标:拿百万年 想进入一线大厂,但在C++学习和应用上存在瓶颈,渴望跨越最后一道坎。
  • 现状:缺乏实战,渴望提升动手能力公司的项目不会重构,没有重新设计的机会,导致难以深入理解需求。
  • 成为优秀完成任务,成为团队、公司都认可的核心骨干。优秀地完成任务= 高效能 + 高质量 + 可持续 + 可度量
低头走路:
  • 一次专注做好一个小事。
  • 不扫一屋 何以扫天下,让自己早睡,早起,锻炼身体,刷牙保持个人卫生,多喝水 ,表达清楚 基本事情做好。
  • 我控制 的事情是 我通过写自己代码拿到百万收益。代码就是杠杆,我必须创造可以运行在2c2g云主机小而美产品出来(服务普通人),而不是运行构建至少10台64cpu 300g内存物理机大而全项目(领航者,超越其他产品,出货全球N1,这个还是有停留有限斗争游戏,为top 10人企业服务)我必须糊涂混沌中走出来