程序员面试白皮书

逸超 虾米 笑笑 等
前言 我的故事,你的故事 这是一本我希望自己在大学就能看到的一本书。在我读大学的时候,跟很多同学一样也走过不少弯路:艰难地啃着计算机必修课,被里面的指针和对象搞的晕头转向,对i++和++i区别死活不理解,为操作系统的调度策略而抓狂,很难对专业书产生兴趣,只是想着去应付考试和学分。当我们毕业后,虽然有了计算机学位和实际工作经历,但其实还是不知道最想得到什么。我当时心中有个情节,就是希望能去最好的公司,比如Google,因为听说那里面都是最聪明的人,有着最好的待遇和福利,做着最有影响力的事情。当我鼓起勇气去尝试的时候,我失败了,并且要进入6个月的冷藏期(失去在一段时期内继续面试的机会)。而我发现当时的面试表现是那么的稚嫩和糟糕,我开始懊恼,开始反省,开始重新准备,这样才有了我下一个面试机会和其他的Offer。当然如果一切可以重新再来,我可以更有自信更好地发挥我的能力,也许当时的理想公司就会给我Offer。 有些朋友会认为只要能混过面试,拿到工作之后有的是时间可以继续学习。这话听起来有道理,但我在这里给出一个反例:我记得多年前第一份实习的任务是对某个大型应用程序进行性能测试。我不知道如何创建一个用户界面,然后随意定义文本字段、菜单和按钮。我不知道如何用线程来思考,我错误调用整个缓存和线程池。我也不知道如何去做代码维护,并且没有单元测试和编写基本的文档,最后我还是写了几千行的Java代码,这是个无法维护的巨大的类。而如果我在工作之前多一些积累和看一些代码,或许不会那么尴尬。 也有些同学说面试中只会考没有用的算法,这跟工作没有任何直接关系。我同意工作中大多数情况是不会用到复杂的算法的,但如果你没有过硬的基本功,在面对一些新情况的时候,你就很难举一反三,灵活运用了。我记得我在第一家公司第一个项目是在一个新城市中增加新的排序选项来选择上市的所有租房。这是一个紧急任务,上司希望我尽快熟悉…