前言

大部分人在求职的时候,通常是这样的流程:
写简历->网上找企业投简历->收到面试通知,准备->面试。这整个过程中,还包含着准备面试的阶段。关于如何准备面试不是本文探讨的内容,这篇文章是想从面试官或者企业的角度出发,尝试从招聘方理解他们会如何去面试一个求职者这个角度来帮助我们更好的准备面试,从而得到自己心仪的offer(本文只针对it行业,或者再缩小范围,只针对前端招聘)。
ps:只所以想写这篇文章,是因为之前招的前端由于各种原因被辞退了,所以这段时间又开始在招聘初级前端工程师。从之前的面试者到面试官的身份转换,这个过程产生了一些想法,所以就把这些想法记录下来,也算是为以后自己的求职做准备。

面试官是如何面试求职者

其实我也还是属于入门一年多的前端,并没有太多经验和能力来面试别人,尤其是在面试和招聘这两个方面。但是这并不妨碍你去学习。我网上找过资料,询问过公司的大神,也向公司负责人事的总经理请教过。这篇文章其实就是基于这几方面收集的整合。
一般企业会从下面几个方面来考察面试者

  1. 考察对方专业知识,根据对方的回答再进行深入提问。考察专业知识这点已经是共识了。只有专业知识符合了,才能有机会进行下面的面试阶段。
  2. 询问对方感兴趣的技术是什么(技术方面),然后根据他所说的技术,深入挖掘问下去。因为在面试官看来,如果你连感兴趣的东西都了解得不多,学得不够好,不是态度的问题就是学习能力的问题。而这两者都是企业不愿意在一个员工身上看到的。
  3. 询问对方的做项目中遇到什么样的难题,怎么解决的?每个人在做项目的时候都会遇到难题,但是如果你没有记录总结的习惯,你就不太可能在这个环节回答得很好。
  4. 询问对方平时遇到问题都是如何解决的或者抛出一个问题让对方给出解决方案或者思路。从对方的回答中来判断对方解决问题的思路和方法。
  5. 询问对方下班后的时间都会花在什么地方?从对方的回答中判断对方是否会主动学习,毕竟程序员这个行业是需要保持不断学习的步伐才能不落后。当然了这个问题是需要有提问技巧的,如果这么直白得问,求职者的回答肯定都是套路。
  6. 在沟通的过程观察对方的表达能力。 如果是表达能力存在比较大的问题,则可能会给后面的工作造成困扰,因为你在公司不是一个人在战斗,肯定是需要同事的沟通与协作。能把意思表达清楚是一个必须要掌握的能力。
  7. 谈到薪资的过程,可通过公司提供的成长性、技术成长等方面来平衡对方的心理落差。这点是总经理说的,HR总是想着法子将你的工资压下来(一脸鄙视)。

求职者如何准备面试

有了这几个参考的角度,是不是就会觉得准备面试就没有那么无从下手了。那我们就看针对上面说的一点一点来看如何应对

一、专业知识

这部分的内容就好像上学时代考卷中的选择题和填空题。前端基本专业知识就那些,你看或不看,它都在那里。这部分就没有太多技巧可言了,好好找几份前端面试题,该背得背,该coding得还是老老实实地coding。这里附上两份github的面试题大全:

二、感兴趣的技术

如果把整个面试过程看做一场考试,第一部分是封闭型问题,那么这部分则是开放性问题,没有标准可言。
但是有一点一定要注意的:所说的技术一定是你最熟悉的,因为对于你感兴趣的技术,面试官一定不会放过这个机会,深入问下去的。
可能会有人会觉得,感兴趣的技术为什么非得是你熟练掌握的技术呢?我对一项新的技术很感兴趣,但是我还没有来得及深入学习。这样的想法也是正确的,在平常的回答中,你大可以这么说。但这是在面试啊,你需要在跟面试官的沟通过程中,让对方更多的了解到你。所以如果你这么回答:“我对这项技术很感兴趣,但是我还不懂这项技术”,目测面试官会一脸懵逼,这还能不能愉快得沟通啊。这简直就是面试话题终结者。因为在面试官看来,如果你连喜欢的东西都研究得不够深入,那么你所谓的喜欢也太廉价了。
这就回到了面试的目的。面试的目的不是让你百分百的表达你的真实想法,而是让你尽可能得在整个面试过程中,让对方能更全面得了解到你的能力。任何行为和言语如果不能达到这个目的,都应该尽量减少或者避免。

三、做项目过程遇到什么难以解决的难题?最后如何解决

这个问题我问过很多应届毕业生,屡试不爽。普遍的回答都是没有什么问题。没有问题本身就是最大的问题。试想下,你在做任何东西的过程中怎么可能没有问题呢?比如你在利用新框架做一个项目,那么关于环境的搭建是否有疑问?关于新框架语法是否有疑问?还有每个框架都会存在很多坑,你没有踩过吗?还有作为web开发者,PC的浏览器兼容问题有遇到过吗?Android和iOS兼容性问题?这些都是你在做项目过程中可能会遇到的问题,如果你就这么回答没有,则一定说明你没有深入思考过或者遇到问题从来不会记录和总结。

那么对于这个问题该如何准备呢
其实如果有记录和总结问题的习惯的话,那么这个问题就迎刃而解。如果没有的话,那就从现在开始培养这个习惯咯。可以每天建立一个问题记录列表,用来收集每天的问题(模板如下):

1
2
3
4
5
6
7
8
9
10
11
# 问题描述:

gulp执行sass命令报错

node_modules/node-sass/vendor/darwin-x64-48/binding.node,

解决办法

node-sass的问题,rebuild即可

npm rebuild node-sass

通过每日记录问题来培养这种习惯。这个方法也可以用在做项目的过程中,专门为每个项目建一个问题记录列表,所有在项目开发过程中遇到的问题,都可以扔到这个列表中,然后再按照上面的方法,将问题描述和解决办法补齐。最后在项目结束后,就可以通过这份问题记录列表来做总结。
这样就不用再担心在这个问题回答不出来了,就把你问题记录列表里的内容抛出来就行。

四、询问对方平时遇到问题都是如何解决

工作中最重要的能力应当是解决问题的能力。解决问题的能力包括思路和能力两部分。思路就是你想到如何去解决这个问题,而能力就是指具体解决问题的能力,这里指coding能力。所以在遇到问题的时候,如何清晰地将你解决问题的思路表达出来就显得很重要了。思路这种东西,就是你脑袋中的各种想法,如果你没有刻意得训练过,很难一下子将其通过语言清楚得表达出来。所以要想回答好这个问题,也需要在平常的学习和工作过程中,有意识地将解决问题的想法通过文字或者流程图、思维导图等方式记录下来。这样的训练过程能强化解决问题的思路,对解决问题也是很有帮助的。

五、询问对方下班后的时间都会花在什么地方?

这个问题意图太明显了,所以大部分面试者的回答都是套路,不够具体且没有可信度。比如:“下班后一般就看书、学习”这类的回答。讲真的,如果你从无数个面试者口中听到类似的话,那么你可能就不会再相信这句话了。这类问题的回答就跟制定计划很类似,如果你制定的计划非常模糊:我要学习Vuejs,那多半这个计划就会执行不下去了。但如果你制定的计划是这样的:

1
2
3
4
5
6
7
8
学习计划:掌握vuejs,能独立完成vuejs的项目
具体行动:
1、官网学习vuejs api
2、使用vuejs完成TODO sample
3、使用vue-cli脚手架构建项目
4、学习vue-router的使用
5、学习vue-resource使用
6、做一个XXX项目

那么这个计划就相对完成的概率就高很多。
同样地,如果你的回答是具体且可实施的,那么可信度就会大大增加了。对于这个问题,我的回答会是这样的:

1
2
3
4
5
正常情况下是6点下班,除去通勤和吃饭及休息时间,一般8点半开始空闲出来。
1、首先,我会选择先花20分钟到30分钟跟着健身App锻炼,即保持健康,也为了保证后续学习的精神状态。
2、接着便是学习、看书和coding time。在奇妙清单中,我建有“学习计划”,“阅读计划”,“项目计划”三个清单。
一般是会先花半个小时在阅读计划上。半个小时结束之后,再根据学习计划和项目计划来安排。
比如这两天的时间用来完成项目计划中的任务,然后后面几天就可以用来学习,完成学习计划中的任务。

相信这样回答的可信度肯定拉“下班后一般就看书、学习”这种回答好几条街。
当然了,这么回答的前提是你真的有这么在做,我可没有教你虚造这样的回答。

六、关于表达能力

关于如何提高表达能力,网上已经有太多的资源和教程了。我只能帮你到这,剩下的就靠你自己了。
再多说一句,以程序员这个行业对表达能力的要求远没有其他行业如销售那般高,只要你能把意思简洁明了地表达清楚就可以了。如果当中能再多点风趣幽默,那简直就是完美了。

关于薪资

关于如何谈薪资,可以参考之前写过文章:http://www.iamsuperman.cn/2016/08/02/how-to-deal-with-hr/。
总之一句话,合理认识你的价值,不要被HR的话所吓倒了。该要多少钱,就要多少,不要慌!