左耳听风_095_94_程序员面试攻略面试风格
你好,我是陈浩网名左耳朵耗子。
国内的公司和国外的公司啊在面试风格上完全不一样。
所以呢这里啊我们也需要了解一下不同风格的面试方法。
那这样呢有利于你准备说句实话,国内的公司呢是比较好面的,国外的公司呢是比较难面的。
从职位招聘信息上你就可以看出来,国内的公司,包括知名公司啊,更多的是面试在表面上。
因为国内公司招的基本上都是马上能来干活的,所以呢问的更多的是一些技术知识上的东西,而准备这些知识性的东西啊,本质上来说跟准备考试没什么两样,恶补一下相关的知识就好了。
然后呢讲一个项目,而项目中呢他们也不怎么追问细节,面试的过程中呢,也不需要写代码,也不需要解决一个难题,所以呢就比较容易谋混过关。
而国外的知名公司呢就没有那么容易了,真的是全方位的考察你的表达能力、沟通能力、思维方式、解析思路、代码风格、算法和数据结构设计和架构能力,还有解决难题的能力啊等等。
那这些呢是很难靠恶补就可以过关的,没有踏踏实实的沉淀,钻研和思考也是很难过关的那首先呢我们来说国内公司对于在基层干活的成群来说呢,国内的公司小公司呢就不说了,像BAT这样的公司啊,基本上来说都是比较好面的那一般来说呢都会问你一些技术知识,比如说java语言的一些特性啊,会不会用spring和netty啊,GVM怎么配置,怎么调试啊,并发编程是怎么玩的等等。
那这些问题呢基本上来说啊都是知识性的问题啊,都是可以google的,通过查手册,查文档就可以知道的。
所以呢这些问题啊是很容易准备的。
只要你老老实实看几本,我在程序员练习攻略里推荐的书就好了。
那当然啊还是有很多人啊,连这些基本的问题都回答不上来,那这个呢就只能怪自己了。
那回答完这些知识性的问题呢,就是项目经理描述了。
你可以随便讲你做过的项目,把这个项目呢用到的一些技术架构都说清楚就好了。
还有怎么上线的,怎么运维的,怎么加班的,怎么苦逼的,怎么带人的,怎么管理项目的那面试官呢也很少追问技术细节啊,因为可能面试官自己都不懂。
那只要你按照我前面说的那个讲项目的方式来啊,面试官一看到你用到的技术站和我这边的很类似,那他呢就会开始想要你了。
当然国内的公司更多的是缺劳动力,所以呢只要你能让他们感到你很能吃苦耐劳,任劳任怨,而且呢能很快上手干活就好了。
然后呢,就是HR和老板的面试,HR和老板不懂技术,也不会问你技术问题。
那他们呢主要是看一看你的性格和态度等等。
那只要你能表现的吃苦耐劳,踏实肯干。
呃,如果还有一点灵性啊,在国内的面试啊,你是很容易通过的那基本上来说啊国内的公司都喜欢快进快出,也就是说啊不在面试上,花太多的精力进来呢就干活,不行呢就开掉。
那基本上是找工人,找劳动力的玩法,也不关心员工的成长。
所以面试过程呢基本上来说啊都是围绕你干什么?我这边这些事儿你会不会干,你会不会加班,能不能吃苦耐劳、听不听话等等这样的内容啊进行呢。
当然啊对于架构师或者高级别的技术人员啊,又是另一种面试方式。
那这个呢在国内的大公司啊得分两种,一种呢是业务型部门的高级技术人员。
那基本上来说呢,不会再问你一些技术的细节,只会问你一些架构方面、项目管理方面和技术方面的事儿,或者呢是一些业务架构上的事情。
那相对来说呢,业务或者应用方面的架构师和高级工程师啊,需要对业务和行业比较了解,有丰富的业务项目经验就好了。
那技术上呢倒不需要有多深的知识。
所以我觉得在一个行业待久了啊,只要你对业务有思考,再加上有技术把持。
那基本上来说啊,只要平时多读一些不错的业务上的想法,那还是比较好过的。
而另一种呢是偏技术部门的架构师和高级工程师,比如说核心基础技术或者是云计算之类的那就会问你很多技术细节上的东西了,而且呢问的还挺深。
需要你有相应的项目经验,或者是开源社区里的工作经验,你需要有过相当的经历啊才有可能面过。
但是呢回过头来说啊,就算是这样的岗位啊,本质上还是回到面知识性问题的方法。
所以呢无非啊就是你能钻研的知识深一点罢了。
而知识呢是死的那只要你努力啊,你总有一天能学会的那总体来说呢,与国外公司相比啊,国内的公司不管是哪个层级上的面试啊,都是比较好通过的那接下来呢我们来聊一聊国外的公司,国外的公司呢我面过的不多啊,只面过amazon、 google、 microsoft,还有facebook,这几个大公司啊,还有一些小公司呢,我就不在这里说了。
那这几个大公司里啊,facebook是相对比较好面的,而google呢是相对最难面的那这些公司的面试啊最近都有改观,不再以算法为主要面试手段了。
但是呢还是会多多少少面临算法方面的题目。
而且呢无论是初级还是高级的技术人员,面试都还是有点难的。
因为这些公司的招聘标准啊是要招超过现有团队同等级别百分之五十以上的人。
那这个呢就要求团队成员只能越来越好,最终导致标准越来越高。
那一般来说呢会有两轮电话,面试一轮呢是工程师面写代码。
那主要呢是算法相关的代码,然后呢可能还是工程师啊,再面一轮技术或者是经理电话面一轮。
主要呢是想了解一下你目前的工作职责,还有你的一些长处和喜好啊,包括你的一些想法什么的。
那如果没有什么问题啊,你就会进入到in house面试。
In house面试呢一般要面一天,至少要五轮。
其中三轮呢和技术相关,包括代码算法、设计架构,还有proup m sosoving.一轮呢是经理,包括做过的项目解决问题的能力、学习能力,还有思考方式啊等等。
一轮呢是HR,包括性格喜好,还有薪水等等。
老实说呢,这种车轮站的面试,如果你之前没有玩过,是第一次上,那么呢会非常不习惯。
一天面下来啊你会累死,当然习惯了,你就会觉得没什么问题。
所以呢还是要多练习。
那国外的公司面试的时候呢,一定会让你写代码。
无论你面多高级的职位啊,那只要是技术岗,基本上都会让你写代码,你千万不要把代码写的跟面条一样。
那至少呢有分模块函数,把函数的接口啊定义的清楚点,代码逻辑辑也要简洁清楚,变量命名呢也要好一点。
那在写代码的过程中呢,如果有觉得不好的地方,要打上to do refect me之类的注释,那这样呢会是一个好的编码习惯。
那一般写完代码之后呢,面试官会问这么几个问题,第一,讲解一下你的代码。
那这个呢主要是跟你一起review代码,那一般呢会考你的表达能力,那最好用一到两个case来讲解一下,代码会更好。
第二呢就是分析一下代码的时间和空间复杂度。
那第三呢就是优化代码,包括代码中的bug和更高性能的算法。
在这个过程中呢,面试官除了要答案以外,也会了解你的思维方式或者做事方式。
注意啊,有一些很有经验的面试官呢会从一个很简单的编码题开始,然后呢会不断的加需求或者改需求。
那一旦你发现这个事儿的时候啊,我给你的建议啊是不要马上实现新的需求,而是停下来和面试官呢讨论需求,感觉一下未来可能的需求变化。
然后呢开始重构代码抽象,该抽象的代码将接口呢和实现分离,把程序逻辑呢和业务功能分离。
那这里呢你需要使用很多编码技巧,甚至是一些设计模式。
那如果你让面试官看到你是在case by case的写代码,那你就完蛋了。
那基本上来说啊,如果你平时写代码不是这样的习惯,在这个过程中呢你是无法装的,你会被搞得原形毕露的。
在设计和架构当中啊,一般会涉及面向对象方面,数据库设计方面,还有系统架构方面的内容。
系统架构方面的内容呢问的也很多。
那基本上呢都是在问一些和高并发高可用高性能和大规模分布式相关的架构。
但是呢在你解题之前啊,你一定要问清楚需求,不要急着说结论。
你先调研需求。
呃,最好呢再问一下为什么要做这个需求,做这个需求的意义是什么?当你了解完需求之后呢,你还可以挑战一下。
就是说如果是这个需求的话,为什么不用另外一种方式或者架构?那这些问题啊都是加分项。
那搞清楚需求之后呢,你要开始设计系统了。
设计系统的时候呢,你不要只是拍脑袋,还需要做一点容量计算。
那如果数据不完整呢,你直接跟面试官说清楚就好了。
有数据上的知识啊,会让你更好的设计你的架构,而且呢这会是非常大的加分项。
另外在设计系统的时候呢,还要考虑到系统未来的扩展性。
也就是说未来如果又加入一些别的东西进来,或者是量变得很大了,那你的系统是否可以很容易的进行功能扩展或者性能扩展。
那这个架构问题呢,如果你没有足够丰富的经验,或者严谨的思考,并不容易做得出来。
Troubling soving ing是一些国外公司,尤其是amazon最喜欢面的一个环节。
那国外的这些大公司啊,都认为他们要解决的问题是没有人解决过的。
所以他们需要的人才呢也是能解决自己从来没有见过的问题的人。
那一般来说呢面试官会给你一个你从来没有见过的问题,而且呢是很难的问题。
很明显是一个只有工程师才能解的问题。
比如说呢用最简单的方式统计一条公路上向两个方向开出的汽车,或者是让你设计一个自动化的学校排座系统,能够让性格接近的人坐在自己身边啊等等。
那一般来说呢,他们也不指望你能在一个小时的面试当中找到问题的最优解。
呃,主要呢是看你的解题思路,而另一方面呢面试官也会和你一起来解。
那这样呢他想感觉一下和你一起工作一起解难题是个什么样的体验。
总之呢面试国外的公司啊,不是你在短期就能准备的,尤其是面一些高级别的技术职位,那还是比较难的那基本上来说呢你脑子要转的很快,智商呢也要比较高,还要在日常生活比较好的软件开发或者工程架构上的训练。
呃,平时呢还有很系统很工程的做事儿,用正确并且严谨的方式来做事,那不然呢一定是面不过的。
好了,我总结一下今天的内容。
我认为呢国内外公司的面试风格有很大的不同,国内的公司呢是比较好面的。
而国外的公司呢相对难面一些,国内公司,包括知名公司啊,要招的基本上都是马上能来干活的。
所以在面试中啊,问的更多的是一些技术知识上的东西比较好,准备很恶补一下相关的知识啊就好了。
不怎么追问细节也不需要写代码,也不需要解决一个难题,容易蒙混过关。
而国外知名公司呢则对面试者进行全方位的考察,你的表达能力、沟通能力、思维方式、解题思路、代码风格、算法和数据结构设计和架构能力,还有解决难题的能力啊等等。
那这些呢都是很难靠恶补就能过关的。
因此呢,我针对这两种不同的面试风格给出了相应的面试流程和应对技巧。
在下节课呢,我们将介绍程序员面试攻略的最后一篇实力才是王中王。