技术面试系统设计面试技巧职业发展
我面试过大概四五十个候选人。说实话,大部分人过不了面试,不是因为算法题做不出来,而是因为其他一些他们根本没准备的环节。
今天说三个面试官不会告诉你、但会影响最终决定的事。

提问的能力,比回答的能力更值钱#
系统设计题有一个环节很多人做得不好:澄清需求。
面试官说”设计一个短链接服务”,大部分人的反应是直接开始画架构图。但好的做法是先问问题:
- “短链接是给内部系统用的还是给外部用户用的?”
- “预期的QPS量级大概是多少?”
- “需要支持自定义后缀吗?”
- “链接有没有过期时间的要求?”
你可能会觉得这是在拖延时间。但面试官不这么看。在面试官眼里,一个上来就画图的人和一个先搞清楚需求再动手的人,差别在于:前者是码农思维,后者是工程师思维 。
实际工作中也是这样。产品经理给你一个需求,你不问清楚就开干,最后做出来的东西跟产品要的不一样,返工更浪费。面试官考察这个环节,就是在看你会不会在真实工作中犯这种错。
承认不会,比装会强一万倍#
有个候选人被问到CAP定理的时候卡住了。他犹豫了几秒,然后说:“这个我知道名字,但具体的细节我记不太清了。我的理解是分布式系统在一致性、可用性和分区容错之间要做取舍,但我说不清楚具体哪个场景该选哪个。”
这句话比他硬着头皮编一个错误答案要好太多。面试官直接接了一句”没事,我给你讲一下”,然后两个人就进入了正常的讨论状态。最后这个人拿到了offer。
另一个候选人被问到Redis的持久化机制,他明明只记得RDB但不知道AOF,非要硬编一个”应该还有一个叫AFO的机制”。面试官追问了两句他就露馅了。
注意:面试官不是不知道你会不会。你在那犹豫和硬编的过程,他已经看出来了。你硬编,他扣的是”诚实分”;你承认不会,他扣的是”知识分”。 知识分可以补,诚实分补不了。

项目经验的描述方式,暴露了你的层次#
面试的时候总有一句”介绍一下你最近做的项目”。这个环节的回答质量,能直接区分出初中高级。
初级选手的回答模式是:
“我们做了一个电商系统,我负责用户模块,用Spring Boot写的,用了MySQL和Redis。”
中级选手会说:
“我负责电商系统的用户模块。注册登录用了JWT做鉴权,因为是多端应用所以考虑了token刷新机制。日活大概5万,用了Redis做session缓存,QPS高峰期能扛住2000。”
高级选手会这样:
“电商系统用户模块,初期方案是JWT+Redis,上线后发现高并发下token刷新有竞态条件,导致了部分用户被强制登出。排查之后改成了双token方案——access token短期有效,refresh token长期有效,用数据库做refresh token的唯一性校验。改完后登出问题彻底解决,同时减少了60%的Redis写入量。”
看出差别了吗?初级说做了什么,中级说怎么做,高级说遇到了什么问题、怎么解决的、效果如何。
STAR法则(情境、任务、行动、结果)不是鸡汤,是面试的核心框架。尤其是”结果”部分,有数据支撑的回答比没有数据的强十倍。
下次面试之前,把你的项目经历按照这个格式过一遍。不用背,但脑子里要有一个”故事线”,能自然地说出来。