技术面试
# 技术面试
算法/系统设计/项目深挖——技术面试考的不是记忆力,是思考过程
# 一、技术面试的底层逻辑——面试官在找什么
面试官不是来难为你的。他带着一个问题走进面试间:
"我愿意和这个人一起工作吗?"
这个问题拆成三个子问题:
1. 他能独立解决问题吗? → 算法 + 系统设计
2. 他能把问题想清楚吗? → 思考过程比答案更重要
3. 他有什么是我从简历上看不到的? → 项目深挖
1
2
3
4
5
6
7
2
3
4
5
6
7
技术面试不是在考试——是在模拟一次工作协作。 你边想边说,面试官边听边引导,这个互动过程本身就是考核。
# 二、算法面试——不是背题,是展示思路
# 2.1 拿到题目的前 60 秒
❌ 看了题目直接开始写代码 → 写了 15 分钟发现理解错了
✅ 前 60 秒做三件事:
1. 复述题目确认理解:"你的意思是——输入一个数组,返回不重复的元素?"
2. 举一个具体例子确认边界:"如果输入 [1,2,2,3],输出应该是 [1,2,3] 对吗?"
3. 先说思路再说代码:"最暴力的方法是两层循环 O(n²)——但我们可以用哈希表 O(n)"
1
2
3
4
5
2
3
4
5
# 2.2 卡住了怎么办
❌ 沉默,盯着白板,试图回忆起"这道题的标准答案"
→ 面试官在等你说话——你越沉默越紧张
✅ 三步自救:
1. "让我先想一个最暴力的解法——哪怕时间复杂度很差"
→ 先说出一个能用的方案,面试官知道你能解决问题
2. "这个暴力解法的瓶颈在 XX 步骤——有没有办法优化这里?"
→ 自己指出问题,展示分析能力
3. 如果真想不到:"你能给我一个提示吗?我想确认方向是对的。"
→ 这不扣分。在真正的工作中,你不会拒绝同事的帮助
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 2.3 写完代码后的 2 分钟
□ 自己跑一个测试用例——用你最开始举的例子,一步步走一遍代码
□ 指出代码的局限性:"这个解法在数据量超过 100 万时需要改为分治"
□ 讨论优化方向:"如果空间复杂度卡得更紧,可以用原地算法但会改变原数组"
1
2
3
2
3
# 三、系统设计面试——不要背"秒杀系统设计"
# 3.1 四步法
1. 澄清需求(2 分钟)
→ "用户是谁?DAU 大概多少?读写比例?数据一致性要求?"
→ 不问需求直接画架构图 = 扣分
2. 给一个简单方案(3 分钟)
→ "如果是 MVP,我一周上线会这么干——单体应用 + MySQL + 单机 Redis"
→ 表明你知道 scale 不重要的时候不需要微服务
3. 找瓶颈并演进(10 分钟)
→ "如果 QPS 到 10000——瓶颈在哪?"
→ 加缓存 → 读写分离 → 消息队列异步 → 分库分表
→ 每一步都说明"为什么加",而不是"教科书上说该加"
4. 总结 trade-off(2 分钟)
→ "最终方案的代价是强一致性退化为最终一致性——如果业务不能接受,我的兜底方案是 XX"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 3.2 不要背,要演
面试官听过一万遍"设计一个秒杀系统"的标准答案。
你的优势不是你背得全——是你把思考过程"演"出来了。
"我先想到 Redis 预扣库存——但 Redis 挂了怎么办?"
"那加上数据库兜底——但数据库扛不住——再加消息队列削峰。"
"等等,消息队列也有吞吐上限——要不要前置一个限流?"
面试官看到你在思考,而不是在背诵。
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 四、项目深挖——面试官在验证简历上的东西
# 4.1 面试官最常问的三类问题
1. 难度验证:
"这个项目最难的部分是什么?你怎么解决的?"
→ 如果你说"都还行"——说明你做的都是 CRUD,或者你根本没深入
2. 决策验证:
"为什么选 Kafka 而不是 RabbitMQ?怎么对比的?"
→ 如果你说"因为组里在用 Kafka"——这不是决策,这是跟随
3. 结果验证:
"你怎么衡量这个项目做成功了?"
→ 如果你说"上线了就成功了"——你没有产品思维
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 4.2 提前准备:每个项目准备一个"失败点"
面试官一定会问:"这个项目中你犯过什么错?"
如果你说"没有,挺顺利的" → 要么你没做过,要么你对自己没有反思。
准备一个真实的"翻车→复盘→改进"的小故事:
"我们上线后发现数据库连接池设太小,大促那天晚上 10 点连接耗尽——
当时临时改了配置重启,扛过了大促。
复盘后我们做了两件事:① 配置变更前做压测验证 ② 加了一个连接池使用率的监控告警。"
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 五、反问环节——这是你面试公司的机会
面试官:"你有什么想问我的吗?"
❌ "没有。" → 你不是不感兴趣,就是没准备。不管哪种——扣分。
❌ "公司加班多吗?" → 可以问,但不要第一个问题就问这个
✅ 展示你思考深度的问题:
"团队目前遇到的最大的技术挑战是什么?"
"你们技术决策的流程是什么样的?"
"团队内 code review 的文化怎么样?"
"这个岗位前三个月的成功标准是什么?"
"团队里最优秀的那个工程师是什么样子的?"
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 六、小结
技术面试的三个底层原则:
1. 说出来 → 不要把思路憋在心里。面试官想知道你是怎么想的,不是只想要正确答案
2. 不硬扛 → 卡住了就求助、给暴力解、讨论优化方向——这些都比沉默好
3. 主动反问 → 面试是双向的。你也在判断这个团队值不值得你加入
1
2
3
4
5
2
3
4
5
行动清单:
- [ ] 找一个系统设计题(比如"设计一个短链系统"),按四步法练一遍,录下来自己听
- [ ] 你简历上的每个项目准备一个"最难的问题"和"犯过的错误"
- [ ] 准备 3 个反问问题——每次都问,慢慢就知道什么答案代表好团队
上次更新: 2026/06/15, 15:38:22