极客时间已完结课程限时免费阅读

94 | 程序员面试攻略:面试风格

94 | 程序员面试攻略:面试风格-极客时间

94 | 程序员面试攻略:面试风格

讲述:杨超

时长13:00大小11.88M

你好,我是陈皓,网名左耳朵耗子。
国内公司和国外公司在面试风格上完全不一样,所以,这里我们也需要了解一下不同风格的面试方法,这样有利于你准备。
说句实话,国内的公司是比较好面的,国外的公司是比较难面的。从职位招聘信息上你就可以看出来,国内的公司包括知名公司更多的是面试在表面上。因为国内公司招的基本上都是马上能来干活的,所以,问的更多的是一些技术知识上的东西。
准备这些知识性的东西,本质上来说跟准备考试没什么两样,恶补一下相关知识就好了。然后讲一个项目,项目中他们也不怎么追问细节,面试的过程中,也不需要写代码,也不需要解决一个难题,所以,容易蒙混过关。
国外的知名公司就没有那么容易了,真是全方位的考察,你的表达能力、沟通能力、思维方式、解题思路、代码风格、算法和数据结构、设计和架构能力、解决难题的能力……这是很难靠恶补就可以过关的,没有踏踏实实的沉淀、钻研和思考,你是很难过关的。

国内公司

对于在基层干活的程序员来说,国内的公司,小公司不说了,诸如 BAT 这样的公司,基本上来说,都是比较好面的。一般来说,都会问你一些技术知识,比如:Java 语言的一些特性啊,会不会用 Spring 和 Netty 啊,JVM 怎么配置怎么调试啊,并发编程是怎么玩的……
这些问题基本上来说都是知识性的问题,都是可以 Google 的,通过查手册查文档就可以知道的。所以,这些问题是很容易准备的,只要你老老实实地看几本我在《程序员练级攻略》里推荐的书就好了。当然,还是有很多人连这些基本的问题都回答不上来,这只能怪自己了。
回答完这些知识性的问题,就是项目经历描述了。你可以随便讲你做过的项目,把这个项目用到的一些技术架构都说清楚就好了,还有怎么上线的,怎么运维的,怎么加班的,怎么苦逼的,怎么带人的,怎么管理项目的。面试官也很少追问技术细节,因为可能面试官自己都不懂(哈哈)。
只要你按照我前面说的那个讲项目的方式来,面试官一看你用到的技术栈和我这边的很类似,他就开始想要你了。当然,国内的公司更多的是缺劳动力,所以,只要你能让他们感到你很能吃苦耐劳、任劳任怨,而且能很快上手干活就好了。
然后就是 HR 和老板的面试了,HR 和老板不懂技术,也不会问你技术问题,他们主要是看看你的性格和态度等。只要你表现能吃苦耐劳,踏实肯干,如果还有一点“灵性”(脑子转得快,与人好沟通,一来一回有问有答,性格外向点儿),在国内的面试你是很容易通过的。
基本上来说,国内公司喜欢快进快出,也就是说,不在面试上花太多的精力,进来就干活,不行就开掉,基本上是找工人找劳动力的玩法,也不关心员工的成长。所以,面试过程基本上来说,都是围绕你干什么,我这边这些事你会不会干,你会不会加班、能不能吃苦耐劳,听不听话等这样的内容进行的。
当然,对于架构师或是高级别的技术人员,又是另一种面试方式,这在国内的大公司中得分两种。
一种是业务型部门的高级技术人员,基本上来说,不会再问你一些技术的细节,只会问你一些架构方面、项目管理方面,以及技术方面的事,或者一些业务架构上的事情。相对来说,业务或应用方面的架构师和高级工程师需要对业务和行业比较了解,有丰富的业务项目经验就好了,技术上倒不需要有多深的知识。我觉得,在一个行业呆久了,只要你对业务有思考,再加上有技术把持,基本上来说,只要平时多读一些不错的业务上的想法,还是比较好过的(因为不会问及细节问题)。
另一种是偏技术部门的架构师和高级工程师,比如核心基础技术,或是云计算之类的。那就会问你很多技术细节上的东西了,而且问得还很深,需要你有相应的项目经验,或是开源社区里的工作经验。你需要有过相当的经历才有可能面过。但是,回过头来说,就算是这样的岗位,本质上还是会回到面知识型问题的方法,所以,无非就是你能钻研的知识深一点儿罢了。知识是死的,只要你努力,你总有一天能学会的。
总体来说,与国外公司相比,国内的公司不管是哪个层级上的面试都是比较好通过的。

国外公司

国外的公司我面过的不多,只面过,Amazon、Google、Microsoft、Facebook 这几个大公司,还有一些小公司就不在这里说了。这几个大公司中,Facebook 是相对比较好面的,Google 是相对最难面的。这些公司的面试最近都有改观,不再以算法为主要面试手段了,但还是会多多少少面你算法方面的题目。而且,无论初级还是高级的技术人员的面试都还是有点难的,因为这些公司的招聘标准是要招超过现有团队同等级别 50% 以上的人。这就要求团队成员只能越来越好,最终导致标准越来越高。
一般来说,会有两轮电话面试,一轮是工程师面写代码,主要是算法相关的代码,然后可能还是工程师再面一轮技术,或是经理电话面一轮,主要想了解一下你目前的工作职责还有你的一些长处和喜好,包括你的一些想法什么的。如果没有什么问题,你就会进入到 in-house 面试。
in-house 面试一般要面一天,最少 5 轮,3 轮和技术相关(包括代码、算法、设计、架构、Problem solving),1 轮是经理 (包括做过的项目、解决问题的能力、学习能力、思考方式……),1 轮是 HR(包括性格、喜好、薪水……)。老实说,这种车轮战的面试,如果你之前没玩过,是第一次上,那么会非常不习惯。一天面下来,你会累死。当然,习惯了你就会觉得没什么问题,所以还是要多练习。
国外的公司面试时一定会让你写代码,无论你面多高级的职位,只要是技术岗,基本上都会让你写代码。你千万不要把代码写得跟面条一样,至少要分模块函数,把函数接口定义得清楚点儿,代码逻辑也要简洁清楚(有大量的 if-else 嵌套的一定不是好代码),变量命名也要好一点儿。写代码的过程中如果有觉得不好的要打上 //TODO:refactor me 之类的注释,这样会是一个好的编码习惯。一般写完代码后,面试官会问如下几个问题。
讲解一下你的代码。这主要是跟你一起 Review 代码,一般会考你的表达能力。最好用一到两个 case 来讲解一下代码会更好。
分析一下代码的时间和空间复杂度。
优化代码,包括代码中的 Bug 以及更高性能的算法。
在这个过程中,面试官除了要答案以外,也会了解你的思维方式或是做事方式。
注意,有些很有经验的面试官会从一个很简单的编码题开始,然后不断地加需求,或是改需求。一旦你发现这个事的时候,我给你的建议是不要马上实现新的需求,而是停下来,和面试官讨论需求,感觉一下未来可能的需求变化,然后开始重构代码,抽象该抽象的代码,将接口和实现分离,把程序逻辑和业务功能分离。
这里,你需要使用很多编码技巧甚至一些设计模式。如果你让面试官看到你是在 Case-by-Case 地写代码,那你就完蛋了。基本上来说,如果你平时写代码不是这样的习惯,在这个过程中你是无法装的,你会被搞得原形毕露的。
在设计和架构中,一般会涉及面向对象方面、数据库设计方面和系统架构方面的内容。系统架构方面的内容问得也很多,基本上都在问一些和高并发、高可用、高性能和大规模分布式相关的架构。但是,在你解题前,你一定要问清楚需求,不要急着说结论。先调研需求,最好再问一下,为什么要做这个需求?做这个需求的意义是什么?
当你了解完需求后,你还可以挑战一下,如果是这个需求的话,为什么不用另外一种方式或架构?这些问题,都是加分项。搞清楚需求后,你要开始设计系统了。设计系统时,你不要只是拍脑袋,还需要做一点容量计算。如果数据不完整,你直接跟面试官说清楚就好了,有数据上的支持会让你更好地设计你的架构,而且,这会是非常大的加分项。
另外,在设计系统时,还要考虑到系统未来的扩展性,也就是未来如果又加入一些别的东西进来,或是量变得很大了,你的系统是否可以容易地进行功能扩展或性能扩展。这个架构问题,如果你没有足够丰富的经验,或是严谨的思考,并不容易做得出来。
Problem Solving 是一些国外公司尤其是 Amazon 最喜欢面的一个环节了。国外的这些大公司都认为他们要解决的问题是没有人解决过的,所以他们需要的人才也是能解决自己从来没有见过的问题的人。一般来说,面试官会给你一个你从来没有见过的问题,而且是很难的问题,很明显是一个只有工程师才能解的问题。
比如,用最简单的方式统计一条公路上向两个方向开出的汽车(比如在公路路面上放两个压力传感器什么的),或是让你设计一个自动化的学校排座系统,能够让性格接近的人坐在自己身边等。一般来说,他也不指望你能在一个小时的面试中找到问题的最优解,主要看你的解题思路。另一方面,面试官也会和你一起来解(有可能面试官自己也不知道答案),这样他想感觉一下,和你一起工作,一起解难题是个什么样的体验。
总之,面试国外的公司不是你在短期就能准备的,尤其是面一些高级别的技术职位,还是比较难的。基本上来说,你脑子要转得快,智商也要比较高,还要在日常受过比较好的软件开发或是工程架构上的训练,平时还要很系统、很工程地做事,用正确且严谨的方式做事。不然,你一定是面不过的。

小结

总结一下今天的内容。我认为,国内外公司的面试风格有很大不同。国内的公司是比较好面的,国外的公司相对难面一些。国内公司包括知名公司要招的基本上都是马上能来干活的,所以,面试中问的更多的是一些技术知识上的东西。比较好准备,恶补一下相关知识就好了。不怎么追问细节,也不需要写代码,也不需要解决一个难题,容易蒙混过关。
国外知名公司则对面试者进行全方位的考察,你的表达能力、沟通能力、思维方式、解题思路、代码风格、算法和数据结构、设计和架构能力、解决难题的能力……这些是很难靠恶补就能过关的。因此,我针对这两种不同的面试风格,给出了相应的面试流程,以及应对技巧。
下篇文章中,我们将介绍是程序员面试攻略:实力才是王中王的相关内容。
下面是《程序员面试攻略》系列文章的目录。
分享给需要的人,Ta购买本课程,你将得29
生成海报并分享

赞 14

提建议

上一篇
93 | 程序员面试攻略:面试中的技巧
下一篇
95 | 程序员面试攻略:实力才是王中王
unpreview
 写留言

精选留言(19)

  • 阿鼎
    2018-08-21
    长期写业务代码,技术层面提高空少,想换其他技术性强的行业,又换不了。处于死循环中。
    27
  • Geek_2a4953
    2018-08-21
    上一篇文章,感觉面试好难,换一份工作怎么需要这么多准备啊。这篇文章,国内的面试和国外一比,简直是渣渣。。。。
    共 1 条评论
    14
  • 骑个隆咚锵老干部
    2018-08-21
    请问耗子老师,感觉看书很难掌握和深刻理解一些知识,比如对于Java以及框架和架构的学习,请问在平时如何找一些实践项目。我看老师的帖子多是学习路线,能否在推荐各种知识路线的时候,补充对于实践的建议和资源。

    作者回复: 一方面,你可以在工作中,或者是你自己的业余项目,另一方面,做开源软件也很不错。

    共 2 条评论
    9
  • 刘匿名
    2020-12-12
    2020年年底这个时间段写个评论, 后续的同学注意下,现在国内面试稍微好些的公司也会面试代码,项目经验以及解决问题的能力的。所以即使说国内总体比国外公司容易,也千万不要掉以轻心。
    7
  • 张磊
    2018-08-22
    国内公司好面不完全是因为面试官水平低,大多数人候选人连基本技能掌握的都不好,又必须找人干活,不得已只能降低标准了。
    共 1 条评论
    5
  • 爱学习的大叔
    2020-04-04
    无论是国内还是国外,数据结构和算法,设计和架构能力是必不可少的。这两个是提升自己技术能力和重要的两方面。
    3
  • caohuan
    2018-11-08
    耗子哥 解析的太到位了,国内公司 做底层苦力,基本是完成功能需求,能出活就上车,第一轮笔试需要刷一遍 最基础的应用题目,然后 才能见到 项目负责人,面试也是 交谈 自己已做过的项目,面试官会对着简历和项目经历 问一下 技术知识,然后 HR,公司的领导 跟我们聊些职业规划、公司文化 什么的,最后 通过公司的比对 是否 接我,然后 我对公司间的对比 是否进入。 谢谢耗子哥 对 国内公司 招聘的套路的拆解,这是可以拿来参照。
    展开
    3
  • 楚翔style
    2018-09-01
    今天刚面回来,北京爱云校大数据岗,完全考察手写代码能力,思维能力。 所以,现在国内创业公司的面试也是有水平的
    2
  • 右耳朵猫咪
    2018-08-28
    如果面试过了 但是工作中发现很多不会的咋办?
    2
  • 铁憨憨
    2018-08-21
    希望耗子叔,多讲解些和GO实战相关的经验,从您推荐go开始,已经很热爱go了,但是学习资料感觉不好找

    作者回复: 可能没有篇中高了。做开源吧

    2
  • 你为啥那么牛
    2020-11-06
    15年面试智联招聘的岗位,就是轮番轰炸,面了六轮,一直到技术总监。搞了一天,疲惫不堪,当然最后还是进去了!并不是以进来就干活为标准,当然智联的水平在行业里算不上数。
    1
  • linker
    2020-04-05
    国内也有公司面写代码吧?有的还有机试。不过只要leetcode做个100道题,应该没什么问题。
    1
  • 少年姜太公
    2018-08-23
    感觉中小企业都是缺劳动力,去了就当作码农。面试都没有专业知识,直接问项目。
    1
  • 拉羒尔
    2022-10-16 来自广东
    现在国内稍微有点知名度的公司没有不考算法的了吧?
  • jerry.mei
    2021-12-16
    国内有招业务架构的岗位吗,感觉都是偏技术架构的,而且对工作年限卡的有点死
  • cv0cv0
    2021-11-26
    感觉还是国外的面试有意思。
  • cv0cv0
    2021-11-26
    面试中写代码一般是让手写还是可以用ide?
  • aoe
    2021-09-10
    原来国外的程序员起点不一样
  • 郭新鹏
    2018-09-06
    国外公司在国内都有办公吗? 工作环境全英文的吗?