
前言
计算机技术博大精深、日新月异,Hadoop、GPU计算、移动互联网、模式匹配、图像识别、神经网络、蚁群算法、大数据、机器学习、人工智能、深度学习等新技术让人眼花缭乱,稍有不慎,就会被时代所抛弃。于是,很多IT从业者就开始困惑了,不知道从何学起,到底什么才是计算机技术的基石。其实,究其本质与基础,还是最基础的数据结构与算法知识:Hash、动态规划、分治、排序、查找等。所以,无论是世界级的大型企业,还是几个人的小公司,在面试求职者的时候,往往会考察这些最基础的知识,无论你的研究方向是什么,这些基础知识还是应该熟练掌握的。
本书在写作风格上,推陈出新,对于算法的讲解,不仅有文字描述,更以示例佐证,能够更好地让读者读懂。为了能够写出精品书籍,我们对每一个技术问题都反复推敲,与算法大牛一起反复论证可行性,对于文字,我们咬文嚼字,字斟句酌,所有这些付出,只为让读者能够对书中的技术点放心,文字描述舒心。
市面上同类型书籍很多,也都写得不错,但是,我们相信,我们能够写出更适合读者需求的高质量精品书籍。为了能够在有限的篇幅里面尽可能地罗列出“干货”,我们在选择题目上也是下了巨大的功夫:首先,我们通过搜集近3年以来几乎所有IT企业的面试笔试算法真题,包括已经出版的其他著作、技术博客、在线编码平台、刷题网站等,保证所选样本足够大。其次,我们选择题目的时候尽可能不选择那种一眼就能知道结果的简单题,也不选择那种怪题、偏题、难题,我们的选题原则是选择难度适中或者看上去简单但实际容易出错的题目。通过我们的努力,力求遴选出来的算法真题能够最大限度地帮助读者。在真题的解析上,我们采用层层递进的方法,先易后难,层层深入,将问题抽丝剥茧,使得读者能够跟随我们的思路,一步步找到问题的最优解。
写作的过程是一个自我提高、自我认识的过程,很多知识,只有你深入理解与剖析后,才能领悟其中的精髓,掌握其中的技巧,程序员求职算法也不例外。本书不仅具备了其他书籍分析透彻、代码清晰合理等优点,还具备以下几个方面的优势:
第一,算法书籍分多种语言版本实现:C/C++、Java、C#、Python等,这样,不管读者侧重于哪一种语言,都能够有适合自己的书。后续可能还有PHP等其他语言描述的图书出现。本书中如果没有特别强调,代码实现均默认使用Python语言。
第二,每个题目除了循序渐进的分析以外,还对方法进行了详细阐述,针对不同方法的时间复杂度与空间复杂度,进行了详细的分析。除此之外,为了更具说服力,每一种方法几乎都对应有示例讲解,对方法是一种更好的辅助。
第三,代码较为规范,完全参照华为编程规范、Google编程规范规范编码。小作坊编码的时代早已过去,程序员要想在一个团队中大展拳脚,就离不开合作,而合作的基础就是共同遵循统一的编码规范。不仅如此,规范化的编码往往有助于读者理解代码。
第四,除了题目讲解,还有部分触类旁通的题目供读者练习。本书不可能囊括所有的程序员求职类的数据结构与算法类题目,但是,本书会尽可能地将一些常见的求职类算法题和具有代表性的算法题重点讲解,将其他一些题目以练习题的形式展现在读者面前,供读者思考与学习。
我是一个很乐观的人,人生在世,就是在发现问题,解决问题中度过,我总能够以最饱满的精神状态完成创作。在此,感谢我的父母、姐姐、亲朋好友一直以来对我的关心与照顾,感谢我的大学老师刘坚教授、张立勇副教授、王献青副教授、霍秋艳副教授等对我的无私的知识传授,将我带进了计算机的殿堂,在我对学习感到困惑的时候,点亮我人生的灯塔。感谢同学与师兄弟们的兄弟情义,感谢同事们工作的支持以及业余一起打篮球、踢足球、谈人生、谈理想。感谢那些对我生活、工作给予巨大关心的人,是你们一路陪伴,让我孤独的心充满温暖与爱。正是有了你们,我的生活才更加丰富多彩。每每想到这些,我都对生活充满了无限的期待。
数据结构与算法知识博大精深,非一本或是几本书就能够将其讲解透彻,但不能因为这样就不去做这件事了。尽管本书竭尽所能希望将所有程序员求职过程中出现的面试笔试题一网打尽,试图做到知识覆盖面广,内容知识全,但仍然无法做到面面俱到,百分之百的读者满意率是本书以及后续改版奋斗与追求的目标,希望读者能够体谅。有兴趣的读者可以阅读《算法导论》《编程珠玑》等国外知名专家编写的专著进行知识的扩展与延伸。
其实,本书不仅可以作为程序员求职的应试类书籍,还可以作为数据结构与算法的教辅书籍。书中的很多思想、方法对于提高对数据结构与算法的理解是大有裨益的,不管你是本科生还是研究生,不管你是低年级学生还是高年级学生,不管你对计算机底层知识还是当前的计算机前沿知识是否了解,都不影响你学好本书。
本书是作者历经四年时间打造的技术精品,尽管我们用尽心思、绞尽脑汁地希望做到百分之百的准确性,但书中不足之处在所难免,在恳请读者原谅的同时,也希望读者能够将这些问题反馈到我们这里,以便于未来继续改进与提高,为读者提供更加优秀的作品。
本书中有部分思想来源于网络,无法追踪到出处,在此对这些幕后英雄致以最崇高的敬意。没有学不好的学生,只有教不好的老师,我们希望无论是什么层次的学生,都能毫无障碍地看懂书中所讲内容。如果读者存在求职困惑或是对本书中的内容存在异议,都可以通过yuancoder@foxmail.com联系作者。
猿媛之家
于西安