跳转到内容
cookie

学生指南 · 倒数第二学年的秋季到冬季

软件工程实习面试

大多数软件工程实习面试会先进行线上编程测评,之后是一到两场现场编程面试。每场面试围绕一到两个问题展开,并有后续追问,此外还会询问一些过往经历。面试官会考察你如何理解问题、找到可运行的解法、解释时间和空间复杂度并进行测试;他们也会给出提示。

各个阶段

许多大型公司会先进行线上测评,也就是在家限时完成的编程测试。例如,Amazon 表示,其实习线上测评约需 90 分钟,考查编程、技术问题解决能力和 Leadership Principles,其中编程部分约需 70 分钟。接下来是视频现场面试,你要在工程师观察并提问的同时解决问题。

Meta 的实习面试指南最后更新于 2022 年,其中介绍了两个阶段:电话初筛和后续面试。两阶段的要求相同,每场面试约有 30 到 35 分钟用于编写一到两道题的代码。Google 表示,候选人可能需要完成编程练习,每位候选人都会按照明确的评分标准进行评估,而且不会有脑筋急转弯题目。具体安排会有变化,因此收到面试邀请后,请查看公司自己的页面。

面试官如何评分

面试官主要关注你如何得出答案。Google 表示,面试官会像关注答案一样关注你的思考过程,并会提出后续问题。Meta 的指南建议你讨论不同解法的 Big-O 复杂度、提出澄清问题;与其只有一个想法,不如写出能运行但并非最优的代码。指南还建议,如果你卡住了,就先从暴力解法开始,再逐步改进;面试官给出提示并不是什么坏事。

实际来说,这包括五件事:理解问题(复述问题,并询问边界情况和输入规模)、得出正确解法、解释时间和空间复杂度、尽可能改进解法,以及通过手动演示示例和边界情况来测试。沟通贯穿整个过程,因为面试官只能对你说出来的内容评分。

示例讲解:两数之和

给定一个数字列表和一个目标值,返回两个相加等于目标值的数字的位置。先提问:答案可能不止一个吗?同一个数字能用两次吗?列表是否已排序?列表可能有多长?然后大声说出暴力解法:检查每一对数字。这个解法正确,但对于有 n 个数字的列表,所需时间与 n 的平方成正比。

然后改进解法。遍历列表时,用哈希表记录每个已见数字及其位置;对每个新数字,检查目标值减去该数字的结果是否已在表中。这样只需遍历一遍就能找到这对数字,所需时间与 n 成正比,代价是额外内存也与 n 成正比。最后,大声用一个小示例、一个没有答案的列表和一个有重复数字的列表进行测试,并说明如果列表已经排序,你会如何调整(从两端用双指针,不需要额外内存)。

需要掌握的主题,以及该使用哪种编程语言

实习面试问题大多涉及第一门数据结构与算法课程的内容:数组和字符串、哈希表和集合、栈和队列、链表、树和图的广度优先搜索与深度优先搜索、排序和二分查找、递归,以及简单的动态规划。了解每种操作在时间和空间上的开销,与了解数据结构本身同样重要。

使用你最熟悉的编程语言。Meta 的实习指南建议使用你最熟悉的语言,Amazon 对其测评的建议是复习并练习你打算使用的语言。Python 很常见,因为代码简短,但熟练程度比语言选择更重要。

边思考边讲解,以及面试中的 AI

即使你想说的是“我还不确定”,也要说出你的思路,因为沉默会让面试官没有内容可评分,也无从帮你。收到提示后,接受提示并说明它如何改变你的解题思路。独自练习这种表达会让人觉得奇怪,所以和朋友一起练习,或录下自己边讲边解题的过程,会很有帮助。

各公司的 AI 使用规定不同,所以请在面试当天前确认。Google 表示,面试期间不允许使用 AI 工具;Meta 则表示,现在许多面试环境内置了 AI 助手,候选人需要使用。若不允许使用 AI,使用它就是作弊;若面试中包含 AI,如何检查并纠正它给出的内容也属于评估的一部分。

行为类问题

大多数技术面试都会问一些关于你过往经历的问题:你引以为豪的项目、你费力解决的 bug,或你与队友意见不合的一次经历。Amazon 会根据 Leadership Principles 评估候选人,其中首先是客户至上,即领导者从客户需求出发,倒推解决方案。因此请阅读这些原则,并为其中主要原则准备一个事例。

注册账号后,cookie 的面试准备可以针对你指定的职位,由 AI 面试官逐个问题进行模拟面试。它会像真正的面试官一样根据你的回答继续追问,并在最后为每个回答撰写报告。这会使用积分,并会先显示预估用量。

查询渠道

已于 对照以下页面核实。规则每年都会变化;如果这里的信息与上述页面不一致,请以那些页面为准。

常见问题

什么是线上测评?

许多公司在现场面试前会安排一场在家完成的限时编程测试。Amazon 表示,其实习测评约需 90 分钟,主要考查编程。

编程面试应该使用哪种语言?

选择你最熟悉的语言。Meta 建议使用你最熟悉的语言,Amazon 建议练习你打算使用的语言,因此熟练程度比语言本身更重要。

实习编程题有多难?

通常以第一年数据结构与算法课程内容为基础:数组、哈希表、树、图、排序和递归;后续追问会要求你改进或扩展解法。

如果我在编程面试中卡住了怎么办?

说清楚自己卡在哪里,先尝试暴力解法,再逐步改进,并接受收到的任何提示。Meta 的指南表示,面试官给出提示并不是什么坏事。

编程面试中可以使用 AI 吗?

这取决于公司。Google 表示,面试期间不允许使用 AI 工具;Meta 则表示,许多面试都包含内置 AI 助手,候选人需要使用。