何为面试
面试是公司与求职者互相了解与互相选择的过程,从求职者的角度需要了解目标公司的文化,价值观,面试流程以及考核范围。
互相了解
文化与价值观
在简历筛选与非技术问题面试中公司会倾向选择认同公司文化与价值观的求职者:
面试流程
了解面试的流程大方向,对求职时间安排,设定学习计划有不少的帮助:
考核范围
| 主题 | 介绍 |
|---|---|
| 算法 |
|
| 系统设计 |
|
| 项目 |
|
| 基础知识 |
|
| 非技术问题 |
|
你可以通过 Leetcode Discuss 来浏览其他人的面经,大致了解题目的类型以及难度。
互相选择
如同其他稳定与健康的关系一样,求职者与公司应该是平等与互相选择的关系。Big Five 固然是出色的公司,但是里面每一家的之间(甚至同一个公司内的不同组)的价值观,工作压力,升职难度都不一样(一般来说,谷歌与微软的 WLB 会更好)你可以通过身边的朋友,领英上的校友,论坛,面试中与内部员工的沟通再进行选择。
注重知识与技能
面试考核的是知识与技能结合的能力。以算法为例,大学课程注重的是传授知识而非技能,老师会对递归,时间复杂度,数据结构等概念进行讲解,并且给出例题分析以及课后练习,但是并不会教授你面试中需要的技能,例如如何通过数据范围反推解法的时间复杂度,编程语言的算法技巧,常见的面试算法,如何与面试官沟通等。算法练习中,需要平衡知识(阅读算法书以及上算法课)以及练习(在不同的平台做题),不能只追求其中一种而忽略另外一种能力。一位算法课教授拥有丰富的算法知识(远超于面试需要的范畴),但是如果 Ta 没有进行专门的技能练习,有计划并且针对性地练习算法题的话。那么 Ta 在 45 分钟面试时间内,不一定能写出符合面试要求的代码。Ta 可能不记得某个 API 的具体用法,不熟悉某种算法技巧或者无法给出面试官期待的解法。(Leetcode 287 题的最优解花了 Donald Knuth (美国计算机科学家,算法界的传奇,著作包括《计算机程序设计艺术》等) 24 小时才想到快慢指针的解法。)
正确的方法做正确的事
求职过程中,前期需要先制定目标,学习高效练习的方法之后,再花费大量的时间进行练习。没有制定正确的目标只注重练习的话,只会与正确的方向南辕北撤。相反,不注重练习方法只围绕着目标准备的话,则会事倍功半。
面试是横向对比
通常来说,面试官会准备几个题目,然后在一周或者一个月内使用这些题目考核求职者,对比不同求职者的表现并且给出评价,你要做的是要比其他人更好。作为求职者,如何能够知道其他人的表现呢?首先,一些经典题,例如 Leetcode Top 100 liked 的题目,需要掌握最优解。其次,你可以使用不同平台进行模拟面试,模拟面试中的一半时间会让你担任面试官,从面试官的角度来判断与了解不同求职者的优缺点以及做题能力。
国内求职者要注意的地方
国内面试包括许多基础知识的考核,例如编程语言底层,框架或者组件的原理等,但是这些在 Big Five 的面试中占比并不高,一位朋友在面试谷歌软件工程师岗位之前花了一年半时间学习当时最热门的机器学习。他犯了一个关键错误,软件工程师主要考核算法以及系统设计,机器学习项目或许能够帮他提高获得面试的机会,但是花大量时间在里面对于面试毫无帮助。他错误地以为谷歌的面试官那么厉害,一定能够在 45 分钟的面试中全面考察到他各方面的能力。但是这是不正确的,面试官不会去考核岗位要求以外的内容,更不会去考核自己不了解的内容。