文章

2025 暑期面经整理

这段时间高强度面试,腾讯、字节、阿里和快手总共十几轮,最终幸运地拿下了腾讯的 Offer,今天得空整理一下面经

2025 暑期面经整理

腾讯-WXG & 微信输入法

一面(处女面)

  • 耗时:1h
  • 自我介绍
  • 做题: 四点正方形 (边界条件没想出来面试官一直在提示我 X﹏X)
  • 做题: 二叉树球深度 用递归和迭代求树的最大深度,时间复杂度空间复杂度
  • 问操作系统的进程线程区别
  • 问 C 语言中 static 关键字
  • 做题:void AlignedMalloc(size_t size, int aligned)AlignedFree(void* data),抽象
  • PS:做不出来面试官会提示,边界条件没考虑会让你再想想。面完感觉我还是太紧张了答都答不好,他说还有吗,我都想回句不知道。后面面试的时候得想好了再张嘴。八股还是准备的不充分

二面

  • 耗时:45min
  • 问项目,因为我的项目都是学习练手的项目,他问我你有觉得哪些地方做得不好,需要改进的/做的不够漂亮完美,还可以更好的
    • 我讲 HTTP 协议解析时耗时很长,发现原因是大量的字符串创建操作,通过换成 string_view 来提高,还有时间轮如何处理长连接
    • 面试官问我长连接该怎么设置,如果有永久连接该怎么处理
    • string 底层实现,短字符串优化,如果让我设计一个 string 模板类,该怎么做。sizeof 字符串大小是多少,问我知不知道 span
    • 我讲原先的项目不支持 HTTP/1.0 协议,使得 abwebbench 无法正常工作
    • 问我 HTTP/2 比 HTTP/1 好在哪
    • 问了解 Protobuf 吗,有哪些平替
    • 问如果定义了 1234 四个字段,但某一端没有 4,它会怎么处理数据,是丢掉还是怎么办?知道 Protobuf 是怎么压缩的吗?Protobuf 版本知道吗?
    • 知道 ZooKeeper 吗?负载均衡的一致性哈希,如果一台机器挂了,它的流量会分到哪里?
  • (第二个项目是数据库相关)知道哪些数据库?我把当时想到的都说了,Redis,MySQL,PostgreSQL,MongoDB 啥的
  • Redis 的数据结构
  • 场景:面对面建群,用户向后台申请一个随机数,其他人都输入这个随机数,并且有一个时间窗口,比如 5 分钟。如何确保这个随机数 5 分钟内有效且唯一,如果用户可以主动释放呢
  • 做题:给一个 string,输出所有合法的 IP 地址,比如 111111.11.1.111.1.1.1 等合法的地址
  • 问表现:看不出来啥,书本知识掌握的挺不错

面委面

  • 耗时:1h
  • 总体来说比较折磨,其实和我准备不充分有很大关系,面试前两天光顾着看 ZooKeeper 去了。面试官先问的我的第一个 RPC 项目,问 epoll 的实现,我只说了红黑树链表这些,“多路IO复用”这个词当时就没想到,然后问 epoll 的 ET 和 LT,ET 能不能用阻塞,LT 能不能非阻塞,之前没考虑过把我问傻了;然后是 Reactor,我用的主从reactor,面试官问我能不能不用主 Reactor,全是从 Reactor 行不行,面的时候说留个全局队列把新连接放里面再消费,后面自己看的时候感觉面试官想让我往类似 Nginx 的形式上靠,然后还问了网络传输大小端是怎么回事之类的
  • 结尾反问的时候我想让他评价一下我的表现,他反过来让我来个自我

HR 面

  • 耗时:35 min
  • HR 非常友好。先自我介绍,然后面试官让我讲讲本科为什么没有实习,我想分享哪些自己的有点,困难挫折啥的,我还夸了夸前几轮的面试官,职业规划是什么,顺带问了问我的家庭情况,整个过程非常舒服,一点压力没有
  • 像优缺点之类的常见的问题还是得准备下,到面试的时候使劲说就行

字节-电商

一面

  • 耗时:1h
  • 自我介绍
  • 挑一个最熟悉的来
  • RPC 项目哪些模块,问了下时间轮超时模块,什么是 Reactor,负载均衡的一致性哈希有没有并发问题
  • CMU 15445 的数据库和 MySQL 的区别,数据库一般有哪些模块
  • MySQL 索引相关
  • 一个 SQL 的题,问索引
  • 做题,最长非重复子串
  • PS:面试官感觉不太懂 C++相关的,业务做的多,但是我不了解业务的

二面(凉)

  • 时间:2025/03/12 16:00
  • 自我介绍
  • ZooKeeper 服务注册原理和复杂均衡原理
  • 如果 ZooKeeper 部分服务节点出现问题,客户端该如何调整避免请求到不可用节点
  • 解释 HTTP 协议通信原理。TCP 和 UDP 什么区别,UDP 的特点,粘包拆包,有哪些网络劫持的方式(中间人攻击,DNS 劫持啥的)
  • 数据库实验中的 Top-N 怎么做的
  • 讲讲写时复制
  • RPC项目中那个时间轮怎么实现的
  • 如何使用 Linux 工抓取网络的请求包?如何查看服务器的 TCP 连接状态及并发请求数?如何在服务器上查找包含特定字符串(如 8080)的文件?如果要将文件中的 80 替换为 8080,该怎么做?在 Linux 中,如何回到命令行最前面
  • Redis 支持哪些数据类型?实现过期的策略有哪些?Redis 系统扩容会发生哪些操作?
  • MySQL 支持哪些引擎及各种特点?查询语句中,如何判断索引是否被执行?
  • 列举一些稳定的排序算法
  • 做题:0~9十个数随机排,重新排序,使得新的数刚好比原先的数高一点,比如 1 3 9 0 8 5 2 6 7 4 对应的输出是 1 3 9 0 8 5 2 7 4 6,刚好大了一点。做的时候没有考虑边界情况
  • 反问
  • 最后应该是岗位不匹配,给我挂了。过了不到一周又被数据库部门的捞了

字节-数据库

一面

  • 耗时:53 min
  • 自我介绍
  • 问都是课程项目吗,项目中具体做了什么
  • 第一个项目的目的和背景,该项目想要和市面上现有框架相比实现什么目标(?)
  • 为什么使用协程,这是这一个方向的通用解决方法吗
  • 三种负载均衡各自的优缺点,讲讲一致性哈希的实现原理
  • 问那个数据库是什么名字
  • Copy-On-Write Trie 是什么,目的是啥,有啥好处?(锁住根节点相当于锁住整颗树)
  • HyperLogLog 的实现原理,为啥要自己实现(这是课程布置的实验啊)LRU-K 页面置换算法基本原理,用到了哪些数据结构
  • 缓冲池如何插入数据,口述下已满和未满的情况
  • 可扩展哈希是什么,用例子讲讲怎么扩容的(口述的时候感觉好抽象,没有图很不方便),有和其它的哈希做过对比吗(可扩展哈希就是个存数据的结构啊)
  • 这个项目中 index 和数据文件有何关联(类似 InnoDB 那样存一起的)
  • 解释一下 JOIN 的语意和分类
  • 还有哪些解决问题的过程想要分享?
  • 数据库优化实验中,是如何发现性能瓶颈的?
  • 反问

二面

  • 耗时:1h15min
  • 自我介绍
  • 共享屏幕打开编辑器,写个多态的代码,然后让我将头文件拆一下,拆了几个文件后用 g++ 命令行编译运行一下。然后问链接了解吗?Debug 模式和 Release 模式的区别,Release 的优化做了哪些
  • 问 RPC 项目,讲讲网络编程有哪些结构(从 socket 多线程讲到 IO 多路复用),问协程怎么实现的,汇编用的什么版本
  • 问 CMU 实验,数据库的文件存成什么格式的文件, SEQSCAN 怎么实现的,优化了解多少?SEQSCANINDEXSCAN 啥区别
  • 操作系统实验,讲下系统调用是啥,mmap 怎么实现的,有什么作用
  • 代码,写堆排序,写了老半天才写出来 😭,问我堆排序相比快排有哪些优点
  • 我一边写代码他一边让我反问

阿里云-CDN

一面

  • 耗时:1h18min
  • 自我介绍
  • 问我读博还是工作的想法(一头问号)问导师情况,问本组科研体系(啊???)为什么对深度学习方面没有特别热衷?实习时间和毕业论文准备情况,毕业论文题目是啥?平时处理图像用什么库和数据集?学校是否有发小论文的要求?本科阶段有相关研究经历吗?导师是怎么选的
  • 是如何了解到 CDN 团队并决定投递的?(我也不晓得啊)你对 CDN 感兴趣的原因?CDN 有哪些难点,最感兴趣的是什么?
  • 计算机网络有何机类?有没有研究过网络测量,优化算法等方面知识?最近关注了哪些网络领域的前沿动态?
  • 学习过程中,有没有遇到过特别具有挑战性/印象深刻的计算机相关项目?
  • 简历项目做的过程中遇到的问题。火焰图怎么做的,为什么要在 RPC 项目添加 ZooKeeper,口述如何设计 RPC 事件处理模型。HTTP2,HTTP3
  • CMake 的历史和发展可以讲一下吗,干什么的(?)
  • 服务程序在服务器上长时间运行后突然停止,该如何排查
  • 详细介绍 HTTPS 的安全传输
  • 如何发现并排查内存泄露,还知道哪些代码检查的工具。
  • 做题:给一个有序的每行都是IP 地址 - 地名格式的文件,输入 IP 地址查到对应地名信息(简单二分)
  • 反问。总的感觉不太对口,后面先面着再说吧

二面

  • 耗时:1h13min
  • 大约何时能参与实习,实习时长是多久? 已经进行了多少次面试?有心仪的公司吗?实习地点有什么要求吗?
  • 介绍一下自己
  • 操作系统实验
    • 关于操作系统实验,具体工作内容能否展开说明一下?
    • 操作系统实验中包含哪些基本原理?(文件系统、内存管理等)
    • 了解的进程调度有哪些类型?
    • 是否可以自定义按优先级进行调度的编程接口?
    • 进程间互相交互的方式是什么?这个系统是否支持网络功能?
    • 在该系统中,进程间通信的方式有哪些?
    • 系统调用相关的机制是怎样的?
    • 所有系统调用都使用相同的中断吗?
    • 系统调用表中包含的内容有哪些?
    • 触发系统调用的中断与定时器中断、键盘鼠标中断等是否一样?
    • 系统中的中断向量表是什么?
    • 缺页中断的原理是什么?
    • 页表大小是多少?
  • RPC 项目
    • 主从reactor是如何工作的?
    • 协程在你的模型中起到什么作用?
    • 线程与协程之间的关系是什么样的?
    • 这些协程之间的调度关系是怎样的?
    • 当某个连接上有大量耗时的数据处理操作时,是否会阻塞其他连接?
    • ET 模式是什么?
  • 主要使用 C++ 编程
    • 还有其他语言吗?
    • 讲一下智能指针
    • 你了解 Rust 编程语言吗?
    • C++ 中是如何做类型转换的?
    • 在 C++ 编程过程中,这些类型转换操作常用吗?
    • 如何将子类转换成父类?
  • 数据库实验,在数据库相关的工作中做了哪些事情?
  • 日常使用中如何调用数据库的?
  • 对于 Linux 系统的日常使用和开发工具熟悉到什么程度?
  • GDB 调试多线程?
  • 对 Redis 有何了解和使用经验?
  • 是否介绍了团队情况?
  • 对于AI了解程度如何?
  • 这些实验和项目是独立完成还是与他人合作完成的?

快手

一面

  • 耗时:55min
  • 自我介绍
  • 直接问 CMU 15-445 做了什么,挨个讲。LRU-K 算法怎么实现的,并发怎么样,为什么用互斥锁,有哪些锁,死锁条件,死锁检测方法有哪些,讲一下银行家算法。仔细扣可扩展哈希,怎么扩展的,怎么缩容的,并发能力怎么样,和其它哈希的对比
  • (操作系统实验)讲讲什么是内中断,中断有哪些
  • 做题
    • $n$ 个节点的二叉树总共有多少种
    • $[1,N]$ 范围内的 $N$ 个数,统计每个数出现的频次,要求时间复杂度 $O(N)$,空间复杂度 $O(1)$

总结

花了一个月的时间总共面了 11 轮,整体面下来,感觉各位面试官对基础知识的考察还是比较多的。至少我在简历上写的内容,都需要能自己说清楚,每个项目做了什么东西,也要能有条理口述出来,让面试官快速理解

基础知识的掌握还是很重要,像操作系统的概念、还有网络编程相关的内容都要好好看,好好抓。当然 C++ 的语言特性也要花一些时间看看,像 STL 还有智能指针这些的八股也要非常熟悉。当时腾讯在约一面打电话时,就开始问我了解哪些智能指针了

除了这些,项目也得打磨打磨,至少要有一些“自己做的”改进和优化,虽然说 WebServer 都烂大街了,但这个项目还是有价值的,我做的 tirpc 基本也就是 WebServer 那一套,要我现在推荐项目的话,我会推荐 sylar,这个项目确实比较难,可以不做,但可以看看它有实现哪些功能,参考着用到自己项目里,讲道理 sylar 这个项目如果完全搞懂了项目这块还是很稳的

然后就是数据库这些,建议把八股好好看看,Redis 和 MySQL 只要是开发,感觉都绕不过去。Redis 的数据结构,网络模型之类的都要清楚。MySQL 要把索引什么的搞懂,这块具体问了些什么可以看我上面写的面经。但愿别出场景题

至于学习资源,我推荐看 小林 Coding,相对来说内容还是比较全的,复习应该够用了。唯一不好的可能就是内容太多,赶时间可以直接看小林整理的面试题。除了小林外,JavaGuide 其实也不错,这两个对照着看感觉就差不多了

虽然只面了 4 家,已经能感觉到 C++ 就业面的狭窄。只有腾讯的是 C++ 后端开发,字节和阿里的都是有些偏门的方向,感觉进去了也不好转。私以为造成这种状况的原因还是因为 C++ 和具体业务的距离有些遥远,字节电商挂应该就是我没做过业务的工作。如果学 Java 那一套,SpringBoot、MySQL、Redis 还有消息队列那一套下来,肯定是要接触对应业务场景的,不过这些对于 C++ 来说都有些遥远。不管咋说,实习暂时是找到了,看看公司里面是啥情况。学习肯定是不会停的,现在想着是把 Golang 还有分布式之类的都要看看

本文由作者按照 CC BY 4.0 进行授权