关于面试题
  面试题往往是准备面试时受追捧的东西。我这里却想提一个有点不可思议的观点:不要准备面试题。
  “下水井盖为什么是圆的?”
  “全世界有多少辆汽车?”
  不知道有多少“微软面试题”,"google面试题"在网上到处流传。
  其实恰恰反了,这些不着调的面试题,并不因为它是微软和google的面试题变得高深莫测。之所以会有这样的题目出现,正是以其极度的不靠谱反衬了这些大公司对“过程比答案重要”的诠释,和对自己的面试官面试的把控能力的信心。
  对于一个合格的面试官来说,问题只是话题的起点。所以精心准备的答案可能在面试官的一次追问后全盘崩溃,一开始支支吾吾的面试者,也可能在面试官逐渐的引导下展示出自己的能力。
  我常常提一个观点,面试和考试不同,面试可能因为一个问题答得好而通过,也可能因为一个回答不好而通过。其实面试只有结果,没有分数。设想以下场景:
  “能解释一下http协议中302这个状态码是什么吗?”,“我不记得了。” (0分)
  “能解释一下http协议中302这个状态码是什么吗?”,“哦,记不清了,我只记得404是找不到页面,304是可以从缓存读取,5xx是服务端错误” (加分,了解一定http状态)
  “能解释一下http协议中302这个状态码是什么吗?”,“啊,那个,应该是服务端错误吧?”(倾向于面试不通过,不了解的时候尝试猜测蒙混,这种特质对工作不利)
  你看,同样的一个问题,同样是应聘者不知道问题的答案的情况,结果却大相径庭。
  所以,面对面试题,过程重于结果,纠结于题目、准备答案是不会有任何意义的。
  面试时该如何做呢?以下是我的几点建议:
  厘清问题,必要时可以跟面试官沟通确认,避免误解,不但理解问题,还要同时思考面试官的意图
  不急于开始回答,可以先分析问题,列举实际案例,争取思考时间
  不限于回答问题,可以以对面试官意图的理解为基础,主动讲解相关知识,展示自己对相关领域的体系化思考
  正面承认自己了解和不了解的东西,不敷衍,不猜测,有记不清的地方,可以正面要求面试官提示
  以上四点,都是只有面试场景才能够使用的,这也是为什么我说“面试和考试不同”。
  关于争论
  技术相关岗位中,常常有这样的抱怨:“面试官技术比我弱怎么办?面试官跟我争论技术问题怎么办?”
  通常情况下,面试官不应该也不会跟应聘者讨论技术问题本身,比如我,如果觉得应聘者回答错误,会尝试以追问的形式考查应聘者能否自圆其说,一些概念性错误,我则会追问其来源出处,直到对方无法回答。
  当然,不怕一万,怕万一,作为应聘者,万一遇到了这样的事情,而且面试官真的错了怎么办?
  虽然面试官在这样的场景下天然强势,但其实也不是完全没有办法,有三点,至少可以缓解问题:
  一、不要正面否定对方,尝试认同对方观点合理性,再从侧面反驳。
  二、展示推理过程,从双方共同认可的观点出发,层层推理得出你的结论,在过程中,不断跟面试官讨论确认。
  三、引述出处,使用专业词汇,使得面试官对你的观点天然产生敬畏,不敢草率否定。例如:
  “说说为什么JavaScript是一门基于对象的语言而不是面向对象的语言?” “JavaScript明明是面向对象啊?”(惨死,还是冤死)
  “说说为什么JavaScript是一门基于对象的语言而不是面向对象的语言?” “哦,JavaScript的语言规范ECMA262的序章里面提到过JavaScript是面向对象的语言,而ECMA262名词解释里也提到了JavaScript是基于对象的语言。在它这个定义里面,面向对象是指以对象为主要抽象工具,描述逻辑,基于对象是指基础库和运行时设施,以对象为基础来设计。所以JavaScript既是面向对象,又是基于对象。JavaScript是基于对象的语言而不是面向对象这个说法我好像也听过,但是记不太清了,因为觉得语言规范比较权威嘛,呵呵”(说的有凭有据,又留足面子,至少得回去掂量一下……)
  其实“不靠谱的面试官”很少出现,这样的突发情况并不是总能处理好,我们要尽大努力,剩下的凭运气了……