我撕去一小块窗纸,你能看到多远的天?# JobHunting - 待字闺中
y*n
1 楼
我撕去一小块窗纸,你能看到多远的天?
交流面试的时候,经常有朋友会问一个问题:我正确回答了90%的面试题,为什么被拒?
我们就来探讨这个问题。
先回答我一个问题:假设一次面试满分是100分,你正确回答90%题,该得多少分?
如果你认为该得90分,那说明你还没有理解面试,区分不开面试与考试的区别。考试是
看你是不是合格,面试是要选拔最优。用考试的思维应对面试,哥们儿你南辕北辙了。
现在回答我第二个问题,如果某个职位,有10个人都能正确回答90%题,凭什么要求对
方把offer给你?如果想不通这个问题,那你将来的面试成功率将永远是1/N(N表示竞
争同一个岗位时,与你水平相当的人数)。
你有没有想过,你的竞争对手中,发生如下情况:
- 有人能在满分100的面试中,得到150分,甚至200分
- 有人能把一道10分的题回答成50分
- 有人能用错误的回答,击败你正确的答案
- 有人能用他不会的题,从你手中抢走offer
对我来讲,面试题都答正确只能算是及格。
如果想在面试中占据优势,就要做到:走出题目、走出正确答案、走出自己的局限。
如何走出题目?
再一次面试交流会上,我问过道很俗的题目:你擅长独立开发还是合作开发?现场有90
%人选择合作开发,他们认为合作是现代企业需要的。有10%选择独立开发,表示能力强
可以独挡一面。在我的提示下,终于有人壮着胆子选择两个都擅长。我反问:“你两个
都擅长?谁信呀”。那位同学立刻哑口。
当90%的人与你回答一致时,无论你的回答多么正确,也一文不值。
当遇到选A还是选B的题目,你有没有想过除了两个最直接的选择外,你还可以:
- 两个都选
- 两个都放弃,而选C
- 30%选A,70%选B
- …….
对于这道题,我的回答是:我既擅长合作开发,也擅长独立开发。某年某月在某公司我
参与某项目,与多方合作,达到极好效果。某年某月领导让我独立完成一项工作,我经
过N多努力,取得惊人效果。
顺便说一句,我在面试中从来不会说“我参加的一个项目”,我提到的项目一定有:时
间、地点、人物、事件、结果。
再说一道我经常举例用的题目:写一个SQL在Users表中删除一个用户。
正确答案:DELETE FROM users WHERE id=[userid]
大部分同学正确回答之后,就回家等好消息了。
我们冷静下来分析一下,这个语句是不是学过SQL两天的人都能写出来?这样的正确答
案即便回答100道题也没用,因为这样只能不断证明你是个初学者。注意,我不是说 “
你是个初学者”,我是说“你表现出来是个初学者”
看看这样回答是不是好些:先删除与该用户关联的其他数据,再删除用户数据。
好在什么地方?不仅仅是回答更完善了,而且表现出“我有数据库经验”
我会这样回答:根据我的经验,我们从来不真正的删除用户数据,我们只更新用户状态。
UPDATE users SET active=0 WHERE id=[userid]
这样回答明确告诉对方,我不但懂SQL,也懂数据库,有项目经验,能够灵活运用。
现在再看看最初那个正确答案还有任何优势吗?
其实我说的这些很多朋友早早就知道,却在面试中说不出来。
有人会好奇,面试官问SQL,会期望你回答项目经验吗?在面试中,如果有可能我会尽
量超出对方期望回答问题。只有这样才能把10分的题答成50分。
这其实也解释了一种现象,为什么有人面试感觉很好,拿不到offer?你感觉好是因为
题容易,但题容易了你会按照容易的发式去回答,而忽视了可发挥的空间。
我常说,面试中没有容易的题目,因为对你容易对其他人也容易。
一条原则,面试中容易的题要“小题大做”
一道题可以有很多种回答,每种回答又可以有很多种回答的方法。会面试的人可以根据
自身情况、对方公司、天时地利而选择最好的回答。
举个例子,我在大四时面试一个通讯公司,面试被安排在晚上。其中一个面试题:你知
道OSI网络7层协议吗?我突然意识到我们当天下午刚刚考完了《通讯原理》。也就是说
我所有的竞争者(我的同学)都能倒背如流。我于是回答:我知道OSI的7层协议,但具
体顺序不记得了。你等我理一下:最下面是网卡网线是硬件层,硬件搭建好了数据就通
了,上面是数据链路层,数据连通了就能跑网络协议了,然后是网络层…….。当我的
竞争者都会背时,我要展现给面试官我懂。
有人会问,把简单题回答那么复杂,后面时间不够怎么办?我再次提醒你,能不能把面
试和考试分开?考试时间不够题没做完会扣分,面试时时间由面试官掌握。如果面试官
准备了10道题,你在前5道题充分展现了自己的能力素质,后5道题还有必要做吗?
再举一个反例,我的一个朋友在加拿大的蒙特利尔(法语区)面试一个Java职位,问题
是一道俗题:Abstract Class与Interface有什么区别?
我朋友回答:Class表示“是”什么,Interface表示“有”什么。
虽然回答方式有些标新立异,但是忘记了天时地利。一个以中文为母语的应聘者,一个
以法语为母语的面试官,两人用都第二语言的英语讨论“是”和“有”的关系。能扯明
白吗?如果扯不明白,对方当然认为你概念不清了。
无论是在准备面试,还是面试过程中,还是时候分析。我们必须要明确对方问你什么?
你回答了什么?如果你还在想着正确答案,请回到开头重读本文。你必须要分析清楚对
方的问题是再考你哪方面的能力,而你的回答都包含了那些能力,有没有给足,有没有
超出,有没有以外惊喜?只有这样准备面试,才可以一道题顶十道题。
我与朋友谈到的一道面试题:现在北京有一套房子,价格200万,假设房价每年上涨10%
,一个软件工程师每年固定能赚40万。如果他想买这套房子,不贷款,不涨工资,没有
其他收入,每年不吃不喝不消费,那么他需要几年才能攒够钱买这套房子?
供选答案:A-5年; B-7年;C-8年;D-9年;E-永远买不起
这道题的正确答案是E永远买不起。
当我算到永远买不起时,我立刻意识到,我的全部竞争者都会选E。这时就要突发奇想
,有没有变通办法。也就是说,当其他人回答“不可能”是,我回答“可能”。
找的一个办法:期权,与房主签一个合同:7年后我以280万买下现在值200万的房子。
现实中不是每个人都笃定房价永远高速上涨,会有人愿意和你签这份合同的。
找到第二个办法:分期付款,第一年买下20%产权,第二年买下18.18%产权,到三年买
下16.53%产权,….到第7年可以付清全款。
有人质疑:你确定法律允许你这样一点一点地买房产吗?我们去面试IT民工,不过是发
挥一下创造力,又不是去应聘律师。
找到第三个方法,每年用40万买个很小的房子,到第7年把所有的小房子卖掉,再买大
房子。
只要你愿意打破题目的边界,可以找到很多“可能”的方法。我承认我回答的不是正确
答案。但要搞清楚,对方想考我的数学能力,我的回答中展现了数学能力、思维的广度
、对待问题的灵活。这样,我的不正确回答可以击败正确答案。
另外一个例子,在我大学毕业求职时,一个国内公司说要考我个脑筋急转弯。我说我不
擅长这类题,对方公司坚持要考。题目是:一个小孩家在17楼,每天回家坐电梯到15楼
,然后再走两层回家,为什么?我想了想,说不知道。
到面试结束,对方问我有什么问题,我说 “那个脑筋急转弯能告诉我答案吗?我想输
个明白。”对方说答案是:小孩身高够不到17层的按键,只能够到15层。
我听后大笑,说:难怪我答不出来,原来这个小孩弱智呀!一个三岁的孩子够不到东西
都知道搬个小板凳,这个小孩能自己出去,至少也6、7岁了吧,天天遇到困难都不想一
个办法?电梯房块砖头,身上带只笔都能搞定。
我转而对面试官说:如果我有幸被贵公司录用,将来咱们就是同事,我周围工作的不会
都是这种水平吧?(言外之意,用这么弱智的题目考我,你们的智商也太…….)
对方问这道题不过是考考小聪明,我的回答告诉对方:小聪明没有,但是我有口才、有
逻辑、有应变。最后,再鄙视以下这道题,展示一下年轻人的傲气。
面试中,搞清对方要什么,然后加倍地还给他。“投我以木桃,报之以琼瑶”(曲解一
下这两句诗)
很多朋友喜欢对面试题分类,什么人事题、概念题、经验题、behavior题。对于我来说
,除了代码题要特殊对待一下以外,其他题目基本不分类,回答方法也一样:按照对自
己最有利方式回答。
你问我技术,我往里混经验;你问我经验,我往里揉智慧;你考我智慧,我展现细心。
我的多数面试回答里面都混有附加值,我通过附加值从别人手里抢offer。其实,用不
着每样都擅长,只要适当地添加的附加值,就大大地增加的胜算。因为多数人答题都只
会在题里面转,你在玩儿附加值,就已经领先了。
现实的面试中,并不是每个面试官都能从你的答案中正确解读里面的附加值,但他会感
觉到你的回答比其他人的好,至于好在哪有时他也说不清。当然,也有面试官对你添加
的附加值毫无感觉,这种情况你还有必要以后跟他混吗?
多数情况,你不用走太远,只需要走一两步,比其他应聘者多走一两步。假设大家的水
平相当,当遇到一道题时,你能想到的其他人也能想到。这是不要急着回答,多想一步
,找到一个更好一点的回答,多一半的人就这样被甩掉了。
再举一个例子,又是一道俗题:你为什么要选择我们公司?
多数人都会用家庭原因、个人爱好、朋友介绍之类的理由。这些回答都属于搪塞,回答
了和没回答没有任何区别。
我会这样回答:现在IT界的格局正在发生变化,未来的5-10年mobile device和online
service将会成为IT业发展最迅猛的两个领域。我认为贵公司的产品,在未来世界会占
一席之地的。这是我应征的主要理由。
有分析、有远见、有决定,同时还不温不火地拍了对方的马屁。
不要浪费任何一道题,不要浪费任何一次机会,几乎每道题都有发挥的空间。
我们在从另外一个角度看面试。 比如某饭店要招聘一个大厨,有如下厨师应聘:
A. 可以在网上查配方,做出味道不错的菜
B. 刀工纯熟,配料精湛,掌握主流菜系
C. 掌握各菜系,可以根据时令、地区、客人,对配料进行调整
D. 可以根据已有菜系的特色,不断开发新菜品。
E. 了解各个菜系的起源和发展,以及对各地区文化的影响
现在分析一下谁最有可能拿到offer呢?
- A或许某几道菜能比B做得更好,但是A几乎没有offer的可能。
- B或许是个好厨师,但很难成为大餐馆的主打。
- 当B在面试中与C或D竞争一个名店职位,胜算不大。
- E虽然高高在上,但对多数餐馆来说似乎用不上。也就是说并不是玩得越大,机会
越多。
再看看几个有趣的现象:
- A能看得到B比自己强
- 在B看来,苦练刀工,掌握更多的菜品是王道
- 无论B怎样练刀工,都不可能成为C,因为思想没走出来
- 在B看来C的某些错作是“错误”的
- 人们对C和D的刀工要求并不高
对于B来说,必须要满足两个情况,苦练刀工才有意义:
- 店家只想招个切墩的
- 竞争者也是玩儿刀工的
对多数人来说,我们很难成为C和D,但是在面试中装扮一下总可以吧。从C和D的角度考
虑一下问题,用C和D的语气说几句话,成功率就会上升。
现在说说代码题。我以前从没准备过代码题,我知道DP也是近一年的事。我不是说代码
题不重要,但不要只盯着代码题。如果你认为代码题是王道,你的思维会被“封顶”,
如同前面那个苦练刀工的厨师。
很多朋友对算法题只盯着两个东西:核心算法和bug free。
对我来说,核心算法固然重要,但也不过20%。我从来不考虑Bug free,原因很简单,
我做不到,即便做到了所展现的不过是bug free。相比之下,下面这些条目更重要,因
为它们关联你的经验:
1. 动笔之前,是否理解问题,是否问了该问的问题
2. 思路是否在正确的轨道上
3. 良好的命名习惯
4. 是否考虑了通常情况和特殊情况
5. 有没有针对性的优化(时间、空间或其他)
6. 代码中涉及的概念是否都使用正确。
7. 代码的可读性、可维护性、可扩展性(可测试性)。
8. 代码完成,清楚地知道代码的优势、劣势以及什么时候会出错
有时会遇到一种情况,某道代码题,如果保守写法比较稳妥,优化写法会有风险。我的
抉择原则是:看那个保守写法是不是足够展现自己。如果只是个入门级,那么我宁可冒
险优化。还是那句话,面试不是考试,对错不重要,对很多面试官来说,我在努力优化
比把题作对更重要。
有时即便你没有真的去优化,只说一句“让我看看,还有没有优化的可能”。也能给面
试官留下不错的印象。
我常说,如果你发现代码的核心算法是多重循环,那干脆就别动笔了。
网上有个帖子提到“见自己,见天地, 见众生”
对我来说:
见自己——给每道题找到最正确的答案
见天地——根据天时地利,为每道题找到对自己最有利的答案和回答方式
见众生——搞定面试官,挤死比自己学历高、能力强、经验多、做题猛的竞争者。
交流面试的时候,经常有朋友会问一个问题:我正确回答了90%的面试题,为什么被拒?
我们就来探讨这个问题。
先回答我一个问题:假设一次面试满分是100分,你正确回答90%题,该得多少分?
如果你认为该得90分,那说明你还没有理解面试,区分不开面试与考试的区别。考试是
看你是不是合格,面试是要选拔最优。用考试的思维应对面试,哥们儿你南辕北辙了。
现在回答我第二个问题,如果某个职位,有10个人都能正确回答90%题,凭什么要求对
方把offer给你?如果想不通这个问题,那你将来的面试成功率将永远是1/N(N表示竞
争同一个岗位时,与你水平相当的人数)。
你有没有想过,你的竞争对手中,发生如下情况:
- 有人能在满分100的面试中,得到150分,甚至200分
- 有人能把一道10分的题回答成50分
- 有人能用错误的回答,击败你正确的答案
- 有人能用他不会的题,从你手中抢走offer
对我来讲,面试题都答正确只能算是及格。
如果想在面试中占据优势,就要做到:走出题目、走出正确答案、走出自己的局限。
如何走出题目?
再一次面试交流会上,我问过道很俗的题目:你擅长独立开发还是合作开发?现场有90
%人选择合作开发,他们认为合作是现代企业需要的。有10%选择独立开发,表示能力强
可以独挡一面。在我的提示下,终于有人壮着胆子选择两个都擅长。我反问:“你两个
都擅长?谁信呀”。那位同学立刻哑口。
当90%的人与你回答一致时,无论你的回答多么正确,也一文不值。
当遇到选A还是选B的题目,你有没有想过除了两个最直接的选择外,你还可以:
- 两个都选
- 两个都放弃,而选C
- 30%选A,70%选B
- …….
对于这道题,我的回答是:我既擅长合作开发,也擅长独立开发。某年某月在某公司我
参与某项目,与多方合作,达到极好效果。某年某月领导让我独立完成一项工作,我经
过N多努力,取得惊人效果。
顺便说一句,我在面试中从来不会说“我参加的一个项目”,我提到的项目一定有:时
间、地点、人物、事件、结果。
再说一道我经常举例用的题目:写一个SQL在Users表中删除一个用户。
正确答案:DELETE FROM users WHERE id=[userid]
大部分同学正确回答之后,就回家等好消息了。
我们冷静下来分析一下,这个语句是不是学过SQL两天的人都能写出来?这样的正确答
案即便回答100道题也没用,因为这样只能不断证明你是个初学者。注意,我不是说 “
你是个初学者”,我是说“你表现出来是个初学者”
看看这样回答是不是好些:先删除与该用户关联的其他数据,再删除用户数据。
好在什么地方?不仅仅是回答更完善了,而且表现出“我有数据库经验”
我会这样回答:根据我的经验,我们从来不真正的删除用户数据,我们只更新用户状态。
UPDATE users SET active=0 WHERE id=[userid]
这样回答明确告诉对方,我不但懂SQL,也懂数据库,有项目经验,能够灵活运用。
现在再看看最初那个正确答案还有任何优势吗?
其实我说的这些很多朋友早早就知道,却在面试中说不出来。
有人会好奇,面试官问SQL,会期望你回答项目经验吗?在面试中,如果有可能我会尽
量超出对方期望回答问题。只有这样才能把10分的题答成50分。
这其实也解释了一种现象,为什么有人面试感觉很好,拿不到offer?你感觉好是因为
题容易,但题容易了你会按照容易的发式去回答,而忽视了可发挥的空间。
我常说,面试中没有容易的题目,因为对你容易对其他人也容易。
一条原则,面试中容易的题要“小题大做”
一道题可以有很多种回答,每种回答又可以有很多种回答的方法。会面试的人可以根据
自身情况、对方公司、天时地利而选择最好的回答。
举个例子,我在大四时面试一个通讯公司,面试被安排在晚上。其中一个面试题:你知
道OSI网络7层协议吗?我突然意识到我们当天下午刚刚考完了《通讯原理》。也就是说
我所有的竞争者(我的同学)都能倒背如流。我于是回答:我知道OSI的7层协议,但具
体顺序不记得了。你等我理一下:最下面是网卡网线是硬件层,硬件搭建好了数据就通
了,上面是数据链路层,数据连通了就能跑网络协议了,然后是网络层…….。当我的
竞争者都会背时,我要展现给面试官我懂。
有人会问,把简单题回答那么复杂,后面时间不够怎么办?我再次提醒你,能不能把面
试和考试分开?考试时间不够题没做完会扣分,面试时时间由面试官掌握。如果面试官
准备了10道题,你在前5道题充分展现了自己的能力素质,后5道题还有必要做吗?
再举一个反例,我的一个朋友在加拿大的蒙特利尔(法语区)面试一个Java职位,问题
是一道俗题:Abstract Class与Interface有什么区别?
我朋友回答:Class表示“是”什么,Interface表示“有”什么。
虽然回答方式有些标新立异,但是忘记了天时地利。一个以中文为母语的应聘者,一个
以法语为母语的面试官,两人用都第二语言的英语讨论“是”和“有”的关系。能扯明
白吗?如果扯不明白,对方当然认为你概念不清了。
无论是在准备面试,还是面试过程中,还是时候分析。我们必须要明确对方问你什么?
你回答了什么?如果你还在想着正确答案,请回到开头重读本文。你必须要分析清楚对
方的问题是再考你哪方面的能力,而你的回答都包含了那些能力,有没有给足,有没有
超出,有没有以外惊喜?只有这样准备面试,才可以一道题顶十道题。
我与朋友谈到的一道面试题:现在北京有一套房子,价格200万,假设房价每年上涨10%
,一个软件工程师每年固定能赚40万。如果他想买这套房子,不贷款,不涨工资,没有
其他收入,每年不吃不喝不消费,那么他需要几年才能攒够钱买这套房子?
供选答案:A-5年; B-7年;C-8年;D-9年;E-永远买不起
这道题的正确答案是E永远买不起。
当我算到永远买不起时,我立刻意识到,我的全部竞争者都会选E。这时就要突发奇想
,有没有变通办法。也就是说,当其他人回答“不可能”是,我回答“可能”。
找的一个办法:期权,与房主签一个合同:7年后我以280万买下现在值200万的房子。
现实中不是每个人都笃定房价永远高速上涨,会有人愿意和你签这份合同的。
找到第二个办法:分期付款,第一年买下20%产权,第二年买下18.18%产权,到三年买
下16.53%产权,….到第7年可以付清全款。
有人质疑:你确定法律允许你这样一点一点地买房产吗?我们去面试IT民工,不过是发
挥一下创造力,又不是去应聘律师。
找到第三个方法,每年用40万买个很小的房子,到第7年把所有的小房子卖掉,再买大
房子。
只要你愿意打破题目的边界,可以找到很多“可能”的方法。我承认我回答的不是正确
答案。但要搞清楚,对方想考我的数学能力,我的回答中展现了数学能力、思维的广度
、对待问题的灵活。这样,我的不正确回答可以击败正确答案。
另外一个例子,在我大学毕业求职时,一个国内公司说要考我个脑筋急转弯。我说我不
擅长这类题,对方公司坚持要考。题目是:一个小孩家在17楼,每天回家坐电梯到15楼
,然后再走两层回家,为什么?我想了想,说不知道。
到面试结束,对方问我有什么问题,我说 “那个脑筋急转弯能告诉我答案吗?我想输
个明白。”对方说答案是:小孩身高够不到17层的按键,只能够到15层。
我听后大笑,说:难怪我答不出来,原来这个小孩弱智呀!一个三岁的孩子够不到东西
都知道搬个小板凳,这个小孩能自己出去,至少也6、7岁了吧,天天遇到困难都不想一
个办法?电梯房块砖头,身上带只笔都能搞定。
我转而对面试官说:如果我有幸被贵公司录用,将来咱们就是同事,我周围工作的不会
都是这种水平吧?(言外之意,用这么弱智的题目考我,你们的智商也太…….)
对方问这道题不过是考考小聪明,我的回答告诉对方:小聪明没有,但是我有口才、有
逻辑、有应变。最后,再鄙视以下这道题,展示一下年轻人的傲气。
面试中,搞清对方要什么,然后加倍地还给他。“投我以木桃,报之以琼瑶”(曲解一
下这两句诗)
很多朋友喜欢对面试题分类,什么人事题、概念题、经验题、behavior题。对于我来说
,除了代码题要特殊对待一下以外,其他题目基本不分类,回答方法也一样:按照对自
己最有利方式回答。
你问我技术,我往里混经验;你问我经验,我往里揉智慧;你考我智慧,我展现细心。
我的多数面试回答里面都混有附加值,我通过附加值从别人手里抢offer。其实,用不
着每样都擅长,只要适当地添加的附加值,就大大地增加的胜算。因为多数人答题都只
会在题里面转,你在玩儿附加值,就已经领先了。
现实的面试中,并不是每个面试官都能从你的答案中正确解读里面的附加值,但他会感
觉到你的回答比其他人的好,至于好在哪有时他也说不清。当然,也有面试官对你添加
的附加值毫无感觉,这种情况你还有必要以后跟他混吗?
多数情况,你不用走太远,只需要走一两步,比其他应聘者多走一两步。假设大家的水
平相当,当遇到一道题时,你能想到的其他人也能想到。这是不要急着回答,多想一步
,找到一个更好一点的回答,多一半的人就这样被甩掉了。
再举一个例子,又是一道俗题:你为什么要选择我们公司?
多数人都会用家庭原因、个人爱好、朋友介绍之类的理由。这些回答都属于搪塞,回答
了和没回答没有任何区别。
我会这样回答:现在IT界的格局正在发生变化,未来的5-10年mobile device和online
service将会成为IT业发展最迅猛的两个领域。我认为贵公司的产品,在未来世界会占
一席之地的。这是我应征的主要理由。
有分析、有远见、有决定,同时还不温不火地拍了对方的马屁。
不要浪费任何一道题,不要浪费任何一次机会,几乎每道题都有发挥的空间。
我们在从另外一个角度看面试。 比如某饭店要招聘一个大厨,有如下厨师应聘:
A. 可以在网上查配方,做出味道不错的菜
B. 刀工纯熟,配料精湛,掌握主流菜系
C. 掌握各菜系,可以根据时令、地区、客人,对配料进行调整
D. 可以根据已有菜系的特色,不断开发新菜品。
E. 了解各个菜系的起源和发展,以及对各地区文化的影响
现在分析一下谁最有可能拿到offer呢?
- A或许某几道菜能比B做得更好,但是A几乎没有offer的可能。
- B或许是个好厨师,但很难成为大餐馆的主打。
- 当B在面试中与C或D竞争一个名店职位,胜算不大。
- E虽然高高在上,但对多数餐馆来说似乎用不上。也就是说并不是玩得越大,机会
越多。
再看看几个有趣的现象:
- A能看得到B比自己强
- 在B看来,苦练刀工,掌握更多的菜品是王道
- 无论B怎样练刀工,都不可能成为C,因为思想没走出来
- 在B看来C的某些错作是“错误”的
- 人们对C和D的刀工要求并不高
对于B来说,必须要满足两个情况,苦练刀工才有意义:
- 店家只想招个切墩的
- 竞争者也是玩儿刀工的
对多数人来说,我们很难成为C和D,但是在面试中装扮一下总可以吧。从C和D的角度考
虑一下问题,用C和D的语气说几句话,成功率就会上升。
现在说说代码题。我以前从没准备过代码题,我知道DP也是近一年的事。我不是说代码
题不重要,但不要只盯着代码题。如果你认为代码题是王道,你的思维会被“封顶”,
如同前面那个苦练刀工的厨师。
很多朋友对算法题只盯着两个东西:核心算法和bug free。
对我来说,核心算法固然重要,但也不过20%。我从来不考虑Bug free,原因很简单,
我做不到,即便做到了所展现的不过是bug free。相比之下,下面这些条目更重要,因
为它们关联你的经验:
1. 动笔之前,是否理解问题,是否问了该问的问题
2. 思路是否在正确的轨道上
3. 良好的命名习惯
4. 是否考虑了通常情况和特殊情况
5. 有没有针对性的优化(时间、空间或其他)
6. 代码中涉及的概念是否都使用正确。
7. 代码的可读性、可维护性、可扩展性(可测试性)。
8. 代码完成,清楚地知道代码的优势、劣势以及什么时候会出错
有时会遇到一种情况,某道代码题,如果保守写法比较稳妥,优化写法会有风险。我的
抉择原则是:看那个保守写法是不是足够展现自己。如果只是个入门级,那么我宁可冒
险优化。还是那句话,面试不是考试,对错不重要,对很多面试官来说,我在努力优化
比把题作对更重要。
有时即便你没有真的去优化,只说一句“让我看看,还有没有优化的可能”。也能给面
试官留下不错的印象。
我常说,如果你发现代码的核心算法是多重循环,那干脆就别动笔了。
网上有个帖子提到“见自己,见天地, 见众生”
对我来说:
见自己——给每道题找到最正确的答案
见天地——根据天时地利,为每道题找到对自己最有利的答案和回答方式
见众生——搞定面试官,挤死比自己学历高、能力强、经验多、做题猛的竞争者。