程序设计:
1,把基础的数据结构的C语言实现在纸上写三遍以上,用我能想到的最精简最优化的方法
2,阅读CARM和TCPL,确保不会遗漏C语言的每个细节
3,重温之前自己做过的靠谱项目,并总结里面的关键难题和解决思路
4,重读Writing Solid Code、Elements of Programming、Practice of programming
5,阅读Science of Programming,做到可以证明自己的程序的正确性(前条件+后条件+不变式)
不要试图用一套自我介绍来搞定所有公司,除非你的简历只有一句话("Exhausted graphic programming"或是"I wrote python"等)。不同的公司有不同的需求,在Google面前大谈.net技术显然不是什么好的选择(我在google一面中就做过这种挫事)。面试之前要进行详细的调研,了解公司和职位的需求,然后根据他们的需求定制自己的自我介绍和简历,效果会更好。
算法设计这块我就不多说了,不搞ACM的码农没啥发言权。代码编写的话这里多说两句:和平时的开发不同,面试时的代码往往是在纸上搞的,而非IDE。很多代码写的还不错的选手往往会在纸上代码这个环节*的翔尿齐飞,限于篇幅原因我就不多介绍纸上代码的技巧了,还是那句话,多练习。我自己把Software Tools、Elements of programming和C interface and implementation中的代码在纸上写过几遍,又把常见的面试题目练习了三遍,因此纸上代码环节从来没出过问题。
三轮技术面试有两轮是典型的技术面,自我介绍+技术提问,由于我在简历上提到“阅读了120本以上的计算机经典书籍”,因此被问到了“看过最经典的计算机书”这样的问题,我拿Brian Kernighan和Rob Pike的The practice of programming吹了一阵,算法题目相对微软要难一些,除了动态规划,也涉及到了后缀数组等不太常见的数据结构,还好之前有所准备,所以回答的还不错。