面试准备 - 技术面试与行为面试的准备方法
互联网公司技术实习岗的面试一般分为两个环节:技术面和行为面。大部分面试都是这两个其中一个的变种,有时候也会混合。
一般而言,一轮面试持续 45-60 分钟,小公司可能会合并成一轮,大厂通常会有 2-4 轮面试。有些公司会先有笔试 OA(Online Assessment)作为初筛,通过后才进入电话/视频面试环节。
技术面
这里主要简单讲解一下技术面的交流技巧,具体提升技术能力提升的资源可以看下一章节。
数据结构与算法
算法面一般会在 45 分钟内给你 1-2 道 LeetCode 风格的算法题,在面试中解一道题的步骤应该大致如下:
- 需求确认:和面试官确认需求,先确定理解了问题再开始写代码。
- 解法讲解:快速讲解一遍解法,并且和面试官确定这个解法合不合理。
- 协作思考:如果想不出解法,可以适当的找面试官要提示,和面试官一起讨论和 pair program。
- 边写边说:面试官 ok 后可以开始写代码,一边讲解一边写。
- 测试验证:代码跑通后写一些简易的单元测试,确保 example case 和能想到的 edge case 都通过了后再和面试官确认写完了。
- 现场 debug:如果有 bug 不要慌,能现场找到问题并且成功 debug 也是加分项。
如果你按照这几步做完了题的话基本上面试官不会挂你,因为交流和写码能力都没什么问题。
系统设计
系统设计面试通常是 45 分钟到 1 小时,重点考察你对系统架构、扩展性、可用性等方面的理解。整个过程应该更像是一场主动讨论而不是考试,面试官更在意你是否能清晰地表达思路、权衡 trade-off,而不是是否能一下子画出“完美”的架构图。推荐的流程如下:
- 明确需求:一开始不要急着画架构,先和面试官确认功能需求(Functional Requirements)和非功能需求(Non-Functional Requirements),比如是否需要高可用、高并发、低延迟、数据一致性等。
- 澄清边界和约束:确认系统的使用场景、用户规模、数据规模、QPS、写入频率等,不同的场景需要的系统构架也不一样。
- 高层设计:先从一个高层架构开始,比如用户请求如何流转、有哪些核心组件(API gateway、load balancer、database、cache 等),画出大致的数据流图,让面试官知道你对整个系统有全局的把握。
- 深入模块:在面试官确认之后,选几个关键模块深入设计,比如数据库 schema、缓存策略、负载均衡策略、数据分片、异步处理、容错机制等。
- 权衡与取舍:在每个设计点上可以主动提出 trade-off,比如选择 SQL 还是 NoSQL,缓存一致性怎么做,数据丢失能不能接受等,展示你做架构决策的能力。
- 持续迭代:过程中面试官可能会给出新要求或 challenge 你的设计,不要慌,这其实是一个共同迭代的过程,像是在一起打造系统一样。
- 总结复盘:最后简单总结一下你的设计思路、优点和可能的改进点,让面试官知道你有反思和持续优化系统的意识。
只要你能把系统设计当作一次技术讨论,主动沟通、积极回应反馈,并清晰地表达你的架构思考,即使设计不完美,面试官也不会为难你。
行为面
深度理解你的简历
在行为面中,很多问题其实都是围绕你的简历展开的。面试官可能会根据你写的每一段经历进行深入追问,所以你要对简历上的内容非常熟悉。比如你写你在实习期间开发了某个功能,面试官可能会问你这个功能是怎么实现的,遇到过哪些技术难点,做出过哪些 trade-off,效果怎么样,团队反馈如何等等。
很多同学简历写得很好看,但面试时一问就答不上来,会让人觉得只是“挂了个名”或者“没有实际参与”。相反,如果你能讲清楚这个功能背后的技术方案、思考过程和实际影响,即使是一个很常规的任务,也能让面试官看到你真的参与了、动脑了,这是非常加分的,这也是为什么我在简历章节不建议同学过度量化和润色自己的经验,很容易被面试官抓着结果问。所以,一个优秀的面试者不能只背简历,而是要吃透简历,尤其是你写下来的每一项技术成果或者项目亮点,都要能讲清楚“做了什么、怎么做的、为什么这么做”。
准备几个故事
行为面其实没有那么神秘,大多数问题都是几类经典问题的变形,比如:
- 讲一次你在工作或项目中遇到困难,是怎么解决的;
- 讲一次你和别人有分歧的经历,怎么沟通、协调;
- 讲一次你主动承担责任或带头推动事情的例子;
- 讲一次你在压力比较大的情况下怎么完成任务的;
- 讲一次你失败的经历,从中有什么收获。
这些问题的核心在于看你解决问题的思路、沟通协作能力、责任心和反思能力。建议你提前准备几套这样的故事,最好是你亲身经历过、比较熟悉的场景,确保对事件背景和个人职责有清晰认知。回答的时候可以用 问题背景 → 思路和采取的解决策略 → 成果与复盘的框架来组织答案,让整个故事听起来有条理、有重点。
面试前写下来、过一遍,不是为了背,而是为了到时候不慌。很多人第一次被问这种问题,会觉得不知道从哪里说起,脑子一片空白。如果你提前练过,现场就会更从容,思路也会更清晰。
面试准备策略
模拟面试
找同学或学长学姐进行模拟面试,习惯面试节奏和回答问题的感觉。我大一大二的时候每次面试前一天都会找一位同学模拟面试。
模拟面试不一定能完全还原真实面试的场景,但它可以帮你提前适应那种“和一个陌生人不停说话”的状态,让你在正式面试时更放松、更自如。
时间管理
- 切记不要太啰嗦,尤其是像自我介绍这种环节,不然容易后面没有时间答题。
- 技术面:通常 45-60 分钟,尽快确认好需求,保留大部分时间 coding。
- 行为面:通常 30-45 分钟,每个问题保持在 5-10 分钟内。
心态调整
- 把面试当作技术交流,不要过分紧张
- 提前了解公司文化和面试风格
- 准备失败的心理预期,面试是双向选择
面试后的 Follow-up
Thank You Email
面试结束 24 小时内向 HR 发送感谢邮件,简短表达谢意和对岗位的兴趣。
反思总结
无论结果如何,都要复盘面试过程:
- 哪些问题回答得不够好?
- 有哪些知识盲区需要补充?
- 下次面试可以改进的地方?
记住,每次面试都是学习机会,即使没拿到 offer 也能积累宝贵经验。
Tip
对于面试经验较少的同学,建议采取多面试策略积累经验:即使是非目标公司也可作为宝贵练习机会,通过实战演练持续优化表现,同时将最佳状态留给心仪企业;在时间安排上,建议尽量选择靠前的面试时段——在滚动招聘(rolling basis)机制下,越早参与流程通常越具竞争优势。