编程之美 微软技术面试心得
自计算机与软件出现以来,在近半个世纪里,软件开发所能衍生出的无限创意,深深吸引着全世界的青年。在二进制的世界里,这帮年轻的程序员充分发挥自己的热情和想象力,仅仅通过对“1”和“0”的互换操作,他们辟地开天,恣意汪洋地创造出一个又一个的奇迹。今天,前几代“青年”积累构建的虚拟世界正在深刻地改变我们的现实生活。软件开发过程的复杂程度已经足以媲美传统的工业生产。前人堆积如山的开发经验和规则,令象牙塔里的学子们望而生畏。今天软件学院的学生们站在巨人的肩膀上,用最流行的语言和工具武装到了牙齿,但似乎缺少了前辈们的热情,也忘记了编程的乐趣所在——发现问题,分析问题,解决问题,寻找更优的解法,总结规律,抽象出算法的过程,以及由此产生的成就感。
本书收集了大约60道微软技术面试题,作者试图通过书中妙趣横生的问题和详细的解说,面试者的各种小故事,告诉读者微软需要什么样的技术人才,重视什么样的能力,如何甄别人才。但它更深层的意义在于引导读者思考,帮助读者重拾通过编程探索未知世界的乐趣。
我在卡内基梅隆大学毕业找工作的时候,经常和其他同学一起交流面试的经验。当时令求职者“闻面色变”的公司有微软,研究所有DEC的SRC。每次有同学去微软或SRC面试,回来的时候都会被其他同学追问有没有什么有趣的面试题。我也是那时第一次听说“下水道井盖为什么是圆的”这一问题。
我自己申请加入微软美国研究院时被面试了两天,见了15个人,感觉压力很大。至今还记得有一位面试者不断追问我论文中一个算法的收敛性时,我们进行了热烈讨论。在微软工作的十几年中,我自己也面试了非常多的新员工。特别在微软亚洲研究院的九年,经常感觉很多刚刚毕业的优秀学生基础很好,但面试的准备不足。我非常欣慰地看到邹欣工程师和微软亚洲研究院其他同事们努力编写了这本好书,和大家一起分享微软的面试心得和编程技巧。相信更多的同学会因此成为“笔霸”、“面霸”,甚至“offer霸”。
程序虽然很难写,却很美妙。要想把程序写好,需要学好一定的基础知识,包括编程语言、数据结构和算法。程序写得好的人通常都有缜密的逻辑思维能力和良好的数理基础,而且熟悉编程环境和编程工具。古人说“见文如见人”,我觉得程序同样也能反映出一个人的功力和风格,好的程序读来非常赏心悦目。我以前常出的一道面试题是“展示一段自己觉得写过的最好的程序”。
编程很艰苦,但是很有趣。本书的作者们从游戏中遇到的编程问题谈起,介绍了数字和字符串中的很多技巧,探索了数据结构的窍门,还发掘了数学游戏的乐趣。我希望读者在阅读本书时能找到编程的快乐,欣赏到编程之美。本书适合计算机学院、软件学院、信息学院高年级本科生、研究生作为软件开发的参考教材,也是程序员继续进修的优秀阅读材料,更是每位申请微软公司和其他公司软件工程师之职的面试必读秘笈。
人类的生活因为优秀的程序员和美妙的程序而变得更加美好。