腾讯 TEG 云架构平台部一面、二面面经
- 轮次
- 一面+二面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
一面
- 论文相关:创新点是什么?卷积和 Transformer 的区别是什么?除了论文里的方法,还有什么新的创新点可以尝试?你的论文在你们领域算是什么样的成绩?
- 从键盘输入一个 A,到显示在屏幕上,全过程是怎样的?
- 说说对原码、反码、补码的理解。
- 怎么判断一个数的奇偶,不用取余?
- 你在腾讯实习干了什么?
- 手撕:矩阵对角线 Z 字形遍历
二面
- 说说对线程池、生产者和消费者、任务队列的理解
- 如果让你设计一个消息队列,你怎么设计?有锁和无锁分别怎么设计?
- 10 亿个 QQ 号怎么找到只出现 1 次的?
- 三次握手四次挥手为什么是 3 次、4 次?
- 设计一个热点限流器,key 很多怎么减少内存开销?预热的时候怎么识别冷 key 和热 key?不能一次大批量读数据库怎么做预热?
- 实习的工作是什么?
《参考解析》
-
键盘输入 A 到屏幕显示的全过程:按键按下产生扫描码 → 键盘控制器通过 USB/PS2 中断通知 CPU → 内核中断处理程序把扫描码翻译成键码、走输入子系统(evdev)→ 应用程序(终端/编辑器)通过
read拿到字符 → 应用决定回显,写入终端 → 终端把字符交给显示服务(X11/Wayland/图形栈)→ 字体引擎把字形栅格化成位图 → GPU/显示控制器写帧缓冲 → 显示器按刷新率扫描输出。答题时按「硬件中断 → 内核驱动 → 输入子系统 → 应用 → 图形栈 → 显存 → 屏幕」分段讲,并说明每一步的数据形态变化,比背名词有说服力。 -
原码反码补码:原码最高位当符号位、其余位表示绝对值,问题是 +0 和 -0 有两个表示、加减法要单独处理符号。反码是负数按位取反(符号位不动),解决了部分运算问题但仍有 ±0。补码是负数取反加一,它把减法统一成加法(
a - b = a + (-b)的补码相加),0 只有一种表示,且能多表示一个最小值。计算机统一用补码的根因就是「加减法电路可以共用一套、不用为符号单独设计逻辑」。 -
不用取余判断奇偶:看最低位,
n & 1——是 1 就是奇数、0 就是偶数。对补码表示的负数同样成立,因为二进制最低位就是 2⁰ 位。 -
Z 字形遍历矩阵:按对角线推进。每次沿一条对角线走,方向交替(右上 / 左下);走完一条后决定下一个起点——右上方向走到边界时,若还没到最右列就向右移一格,否则向下移一格;左下方向走到边界时,若还没到最后一行就向下移一格,否则向右移一格。边界条件的处理顺序是关键,先判列再判行能避免重复和越界。
-
消息队列的有锁与无锁设计:有锁版本是经典的环形缓冲区(数组 + head/tail 下标 + 条件变量或信号量),入队时抢锁、满了就等,出队同理;生产者和消费者分别用两个条件变量唤醒。无锁版本用 CAS 维护生产者与消费者的下标,配合
volatile/内存屏障保证可见性,队列满/空靠序号差判断,避免 ABA 就再加版本号。无锁的代价是复杂度高、批量竞争下容易自旋浪费 CPU,实际工程里更常见的是「单生产者单消费者无锁 + 多生产多消费有锁」的混合。 -
10 亿 QQ 号找只出现一次的:QQ 号是数值型且范围有限,标准做法是位图 —— 每个号用两个 bit 记录出现次数(0 次 / 1 次 / ≥2 次),10 亿约需 250 MB,可以接受。如果内存更紧,可以分两趟:第一趟按高位分桶统计每桶数量,第二趟只处理那个数量不为 0 的桶(或按 bit 位分层筛选)。如果是通用字符串而不是数字,就用哈希分片后分文件处理,或者用 Bloom filter 先过滤「肯定出现过两次以上」的项。
-
热点限流器与冷热 key 识别:不能每个 key 存一个计数器(key 太多,内存撑不住),所以要用近似结构:Count-Min Sketch 估计频次、滑动窗口用分桶计数、Space-Saving/HeavyKeeper 这类算法只维护 Top-K 热点,天然把冷 key 挤出去。冷热识别就是看这个近似结构里有没有出现过——没进 Top-K 的即视为冷。预热不能全量扫库,可行做法是读最近的访问日志(或代理层的采样日志)取高频项,按时间衰减排序后分批加载;也可以第一次访问时懒加载,配合本地缓存(Caffeine)挡住重复回源。