一般来说,大厂Coding Interview通常会考察以下几点:
Problem Solving
当面试官衡量求职者Problem Solving的第一点就是「他会不会问有意义的问题?」
很多时候面试官在给出问题的时候,其实是有意识地提供给面试者一些信息,但他不会把全部的信息都给出来。也就是说,问题的题面可能只是表面,但是有一些边界条件是需要求职者自己去考虑的。
就拿一道关于「搜索」的题来举个例子:「在一个列表当中找两个数字加合成一个数字。」
这时候就可以去问一些比如「有多少个数字」、「有多少个数组」、「数据的大小」之类的问题。
这里需要注意的是,求职者问出的问题很多时候可以体现出自己本身的Computer Science Fundamental 强弱程度,也可以让面试官清晰的看出其思考是不是真的是挂钩在问题本身。
第二点,面试官比较在意求职者能不能用相对简单的方法把题目解答出,一个好的「解决问题的思路」其实就是能不能去优先想到「最简单的方法」,然后通过观察,再进行优化分析,这也是「解决问题」能力的体现。
第三点,面试官在意求职者能否在解题的过程中能不能做「Trade Off」,比如说,有些问题会有很高的「时间复杂度」,但它的「空间复杂度」较低。
这种时候,求职者就需要去想出一个方法,让问题的时间复杂度变低,空间复杂度稍微变高。
简而言之,就是用时间换空间,用空间换时间。如果想要拥有一个完美的「Trade Off」,那么前提必须要有两个解决方案作为铺垫。
当你有一个Solution的时候,你就需要分析出另外一个Solution,并且告诉面试官为什么另外一个Solution 比较好,这也就是所谓的Trade Off的能力。
Coding
首先大家需要注意的是,Coding是非常考验基本功的。那么对于Coding 整体的Approach考察来说,第一个考察重点是 API first(a product-centric approach to developing APIs)。 所谓的API其实很简单,一般来说有三个部分。第一个部分就是Solution的名字是什么,第二是Input,第三是Output。
Coding的第二个考察重点,叫做「Thought To Code Translation Speed」,你需要高效且准确的写出你的代码,并且去深刻的理解每一行代码的意义。
Coding的第三个考察重点也就是「代码风格」。
代码风格非常重要,特别是在现如今远程面试居多的这个大环境当中,在面试过程当中,如果你的代码参差不齐,这里多一个空格,那里又多一行,就会给人一种非常随便的感觉。代码的风格很大程度上会体现出你的审美和对工作的热情程度。
Communication
Communication 是贯穿着整个Interview的,如果求职者能在一个 Interview中占据相对的主导地位的话,胜算会特别高,有时甚至会是两倍的差别。
要去Drive Conversation,而不是单纯成为一个面试过程中的「话痨」。不要为说而说,而是有意识地去「Drive」
02、关于Hiring Freeze