最近跟同事讨论面试的事情比较多,因此就综合你们所说的列举几条面试建议吧。这些建议是针对中国候选人应聘美国职位而写的,但适用范围可能更广。倘若你实际的实力是 X,面试官感知到你的实力是 Y,这些建议既不能让你实力暴增(X++),也不能让你展示超乎实际的实力(Y > X),只能帮助你避免因为沟通问题而形成的实力不被发现(Y < X)。html
尽管面试有个「试」字,但在真正好的技术面试其实不是一问一答的考试,更可能是如同同事之间的技术讨论同样,从比较糟糕的解决方案开始作优化,直到作到你们均可以接受的程度为之。这个观点在《理想的技术面试过程》中也提到过,在这里就说一下具体应该怎么作。面试
首先你要自信,不能以为面试是公司对你的单向选择,实际上是同时包括你对公司的双向选择。有些心理学上的技巧可让你显得自信一点的,例如说在公司大堂等待的时候尝试深呼吸和伸展一下四肢。因为人的心理状态和身体语言是互相增强的,因此若是你使用自信的身体语言,你就会无心识地被「误导」觉得本身确实自信,不过这正是你想要的效果。(若是你想更多的了解什么身体语言表示自信,能够去找自己体语言方面的书来看。)函数
而后你不要高估题目的难度。有些人可能被 Google 中国的某些面试官虐待过,以为越是好的公司题目天然越难,但这实际上是中国应试体系的思惟方式而已,题目难度不是筛选出少数人的惟一手段。就好像同事问你问题同样,问及的事情有多是你彻底没作过的,你就凭借常识来提供一些基本的判断;也有多是你深刻研究过的领域,你能够说出不少细节和难以碰见的问题。面对后面一种状况,假设你说的都是对的,面试官会很开心;面对前面一种状况,面试官会让你说出更多细节,或者问你哪里还能继续优化,这时候你就知道你的答案和已知最优答案还有差距了。(有些 Google 面试官会在你给出该问题业界已知最优解后仍然问你能不能继续优化。)因此千万不要一开始就假设题目很难,以为给出一个没有优化过的答案很丢脸。性能
不少时候人一紧张起来,说话就会越说越快,在有点口音的状况下只会让对方愈来愈难听懂。在对本身技术自信的基础上,同时也须要对本身的英语表达能力自信。其实语法或者词汇有点问题,说话有口音,这些影响都不大,只要对方可以听到关键词汇,意思仍是能明白的。有时候可能双方都要多说几回「excuse me」和「what is it」才能问明白对方的意思,但只要最后问题能讨论清楚,那你至少仍是让面试官了解到了你的真实实力。优化
这个问题来源自某人的一句评论:编码
有 ACM 背景的人每每在面试过程当中都很不介意写全局变量,但我更指望这个问题的解决方案就是一个函数,因此实现细节都在内部解决。code
其实「全局变量」不是重点,代码的易读性和可维护性才是重点,而这每每是 ACM 或我的项目所缺少的训练,这种问题尤为容易出如今编码能力很强但不多跟人合做的人身上。htm
对于 ACM 而言,只要程序能运行代码怎么写都没所谓,反正代码的生命周期也就是几个小时,不管是否经过几个小时后你就不会再去阅读或者修改这段代码了。这种训练使得写 hacky 代码缺乏惩罚。但在实际工做当中,任何 hacky 的代码都会引入新的 technical debt,最终确定是你以及你的同事承担。你写下的第一个版本,可能要在代码库中停留几年才有人彻底推倒重写,这几年内不停地有人在上面作修改,你须要保证在这个过程中你们都还能明白这段代码是干什么的。blog
若是你把面试官看作同事,那么你写的代码天然是要通过他 code review 的。不要为了追求高性能而写出很难读的代码来,面试官读不懂就判断不了代码的正确性,性能再好也没有用。你宁肯先写下来最清晰可读的版本,若是面试官说须要优化性能时再作优化。生命周期