如何准备 Coding Interview?

专栏 | 九章算法

网址 | http://www.jiuzhang.com


不管你是刚刚毕业即将参加第一次工作面试的应届毕业生,还是想要跳槽换一个新的工作环境的职场老司机,如果你即将参加技术面试,下面这些关于coding interview的总结和建议都值得你看看。

一、面试前

1你得到的消息不一定是准确的

在准备面试的时候,你所做的第一件事情往往是在网上搜索你感兴趣的公司,了解该公司的相关内容以及该公司的面经和面试指南,并会和有相关面试经验的朋友交流。

但是有一点你要知道,你所看到的消息不一定是准确的,因为有的公司会说善意的谎言。

比如说:在面试过程中当一个面试者没能敲完代码的时候,公司的面试官会说没有关系,你思考的过程和方法很不错。结果这个面试者没能通过面试,你却得到了这家公司看重面试者思考问题的过程而不是结果的消息。

所以即使是从有面试经验的人那里得来的消息也不一定是准确的。

2刷题真的很重要

俗话说得好,熟能生巧。刷题能带来的最大的一个好处是它会降低你在面试时遇见完全没见过的题目的机率,从而提高你的面试通过率。

比如说:如果你之前准备面试时就刷过几次关于平衡二叉树的题目,那么如果在面试时遇到平衡二叉树问题你就能很快解决,从而让面试官对你的表现比较满意。

如下图,根据调查,在面试中遇到刷过的题的面试者被录用的可能性更高。所以建议在面试前至少刷两遍lintcode上 easy 和 medium 的题目,尽力做到60%的题目可以bug free.

3选择面试公司倾向的或是你熟悉的语言准备面试

选择你面试的公司所倾向的语言在一定程度上会对你的面试有所帮助。

比如说:一家使用Ruby语言的公司不太会雇佣一个使用Python语言的面试者。反之,一家使用Python语言的公司也不太会雇佣一个使用Ruby语言的面试者。

下图展示了使用Java C++ Python三种不同语言面试的成功率。

以Java为例,从图中可以看出,在面试一家倾向于使用Java语言的公司时,面试时使用Java语言被录取的几率更大。其原因可能是在倾向于使用Java的公司面试时,出的面试题目很有可能涉及到的与Java有关的知识点比较多。

但是有一点你也需要注意——千万不要为了取悦面试官在面试中使用这家公司倾向但是你却不熟悉的语言。因为使用你不熟悉的语言面试,你甚至可能会搞错一些像迭代数组这样很基本的问题,最后得不偿失。

所以当你不熟悉一家公司的语言时,比起试图取悦面试官,用你熟悉的语言去面试的结果会更好

Lintcode上面的算法题目全面支持 java, python, c++语言,你可以根据面试的需要选择适合自己的语言进行练习。

4语言表达能力需要被重视

上图展示了使用不同语言的程序员的编程能力和表达能力。 如上图所示,使用不同的语言会产生语言表达能力上的一些差异。

比如:使用可读性高的语言如Python的面试者,往往有着更好的语言表达能力;而使用可读性低的语言如C++的面试者,往往在技术方面略胜一筹。

虽然如此,也不要一味认为使用不同的语言会产生很大的语言表达能力上的差异。

因为不管使用的是什么语言,一个优秀的程序员一定具有向面试官解释自己所敲代码的语言表达能力

所以在不断地练习代码时你也不要忘记多听多说多写,注重培养自己的语言表达能力。

5注意代码的规范性

如下图,根据调查,面试官是否录用你往往是根据你在面试时敲出的代码决定的,而不仅仅是由你的程序最后是否能够运行决定。

因为代码不规范会导致很多低级错误的发生,而且也会给面试官留下一个不好的印象。所以在平时练习的时候注意不要为了图方便而随便敲代码,也不要有“只要在面试时把代码敲得规范就行了”这种想法。

因为一方面这样的想法在面试时会给你带来很大的压力,另一方面平时的习惯也可能会导致你在面试时很难把代码敲得规范。

因此你要在准备面试时就注意代码的规范性。可以参考《Google 官方代码风格指南》。

二、面试中

1你可能会需要“撒谎”

大多数的面经都是针对特定的一家公司而写的。

比如说A公司更看重敲代码的效率,B公司更看重解决问题的能力。所以除非你把所有的求职重心都押在了一家特定的公司上,不然你应该不会想轻易改变自己的价值观。

但是在面试时,适当的“撒谎”强调一下自己的价值观与面试公司的价值观相符一点也不为过。

所以在面试A公司时,你可以说自己敲代码的效率很高,在面试B公司时你可以强调自己解决问题的能力不错。毕竟现在大多数的公司都希望应聘者能够认同自己公司的企业文化。2在敲代码之前好好想想

如下图所示,面试成功者往往在开始编写代码前会思考更长的时间。

所以你一定要在认真思考过后再写代码,特别是遇到在白板、白纸上写代码这样的coding interview。

因为如果是由于思考的不谨慎导致不断涂改,不仅会给面试官留下不好的印象,而且面对改的乱糟糟的代码,你也会产生很大的压力,从而导致发挥失常。

3代码敲的越多,被录取的可能性越大!

你可能在面试时遇到过这种情况——面试官问了一个问题,你连题目都没有听明白,大脑一片空白,代码自然是一点也敲不出来或是敲不出来多少。在面试结束后,你还想着是不是有可能靠着自己在之前面试中展示出的智慧、魅力和解决问题的能力通过这场面试。

答案是这样的可能性不大。

如下图,根据调查显示,通过面试的面试者平均敲的代码数有2045个,而未通过面试的面试者平均敲的代码数只有1760个,从而我们可以看出——代码敲的越多,被录取的可能性越大。

而导致这种结果出现的原因可能是无法通过面试的面试者除了本来敲的代码就少之外,还更倾向于删除他们运行不起来的代码。 所以在平时我们就要勤加练习,多敲代码,从而提高自己被录取的可能性。

4敲的模块代码越多,被录取的可能性越大

除了敲的代码数以外,敲的代码类型也很重要。在传统意义上,一个优秀的程序员是不会循环敲代码的,他们会敲那些可以反复利用的模块代码。而调查也表明,成功的面试者往往会定义更多的函数。(函数定义的多少往往是模块化的一种表现)

如上图,平均来讲,用Python编程成功者会定义3.29个函数而失败者会定义2.71个函数。

三、面试后

1面试的时长并不能决定面试结果

在面试结束的时候,我们往往会有一种潜意识下的想法——一场很快结束的面试意味着结果一定十分糟糕,一场持续很长时间的面试则意味着自己一定能进入下一轮面试。

然而如下图所示,事实并非如此。

一场很快结束的面试并不一定是因为你糟糕到面试官不得不提前结束面试,也可能是因为面试官没有足够的时间,还有可能是因为面试官在这段不长的时间中,已经看到了你的能力。

所以我们不要以面试的时长来推测面试的结果,而应通过自己面试时的整体表现来综合推测。

欢迎关注我的微信公众号:九章算法(ninechapter)。
精英程序员交流社区,定期发布面试题、面试技巧、求职信息等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值