前言
程序员,一类听起来神秘看上去却普普通通的人群,写着那些密密麻麻的常人看不懂的代码,领着一份让很多人都羡慕的薪水。也许每个人心中对程序员的理解都不尽相同,也许每个程序员的生活状态各有千秋,但毋庸置疑,在程序员是否是一个高大上的职业上,他们还是惊人的一致:是。
在信息技术高度发达的今天,很难想象,离开了程序员,这个社会会是什么样子。从手机、计算机、电视机、洗衣机等日常生活用品到宇宙飞船、空间站、飞机、坦克、大炮,都离不开计算机程序。计算机程序已然渗透到生活中的方方面面。虽然计算机程序是一个软实体,看不见摸不着,人们也感知不到它的存在,但是你们是否知道,没有了操作系统与应用程序,手机就是一个废物;没有了计算机程序,大炮、飞机、航空母舰就是一个铁疙瘩;没有了计算机程序,洗衣机、空调就是一个摆设。
计算机程序有多么重要,也许上面说的还不清楚,在此举两个简单例子就可以说明。当前,智能手机高度发展,但是手机的Android操作系统是由软件巨头谷歌(Google)研发的,所有使用Android系统的手机厂商都受制于Google。诺基亚(Nokia)手机曾经是世界上销量非常好的手机,由于没能跟上Android的步伐,最终走向了覆灭,被另一家软件巨头微软(Microsoft)公司收购了。苹果(Apple)智能设备之所以很受欢迎,除了其良好的外形设计以外,另一个重要原因就是其苹果操作系统(iOS)的独一无二。这些都是软件打败硬件的例子。
计算机技术博大精深,而且日新月异,Hadoop、GPU计算、移动互联网、模式匹配、图像识别、神经网络、蚁群算法、大数据、机器学习、人工智能、深度学习等新技术让人眼花缭乱,稍有不慎,就会被时代所抛弃。于是,很多IT从业者就开始困惑了,不知道从何学起,到底什么才是计算机技术的基石。其实,究其本质还是最基础的数据结构与算法知识:Hash、动态规划、分治、排序、查找等,所以无论是世界级的大型IT企业还是小公司,在面试求职者时,往往都会考察这些最基础的知识,无论研究方向是什么,这些基础知识都是必须熟练掌握的。
本书在写作风格上推陈出新,对于算法的讲解,不仅文字描述,更以示例佐证,让读者能够更好地读懂本书内容。为了能够写出精品书籍,我们对每一个技术问题,都反复推敲,与算法精英一起反复论证可行性;对文字,我们咬文嚼字、字斟句酌,所有这些付出,只为让读者能够对书中技术点放心,文字描述舒心。
市面上同类型书籍很多,但是,我们相信,我们能够写出更适合读者的高质量精品书籍。为了能够在有限的篇幅里面尽可能地全是“干货”,作者在选择题目上下了很大的工夫。首先,我们通过搜集近三年来几乎所有IT企业的面试、笔试算法真题,包括已经出版的其他著作、技术博客、在线编码平台、刷题网站等,保证所选样本足够全面。其次,在选择题目时,尽可能不选择那种一眼就能知道结果的简单题,也没有选择那种怪题、偏题、难题。我们的原则是选择那些难度适中或者看上去简单但实际容易中陷阱的题目。我们力求遴选出来的算法真题能够最大限度地帮助读者。在真题的解析上,采用层层递进的写法,先易后难,将问题抽丝剥茧,使得读者能够跟随作者的思路,一步步找到问题的最优解。
写作的过程是一个自我提高、自我认识的过程,很多知识,只有深入理解与剖析后,才能领悟其中的精髓,掌握其中的技巧,程序员求职算法也不例外。本书不仅具备了其他书籍分析透彻、代码清晰合理等优点,还具备以下几个方面独有的优势。
第一,本书分多种语言版本实现:C/C++、Java、C#等,不管读者侧重于哪一种语言,都能够从书中找到适合自己的内容。后续可能还有PHP等其他语言描述的图书出现。本书中如果没有特别强调,则代码实现均默认使用Java语言。
第二,每个题目除了有循序渐进的分析以外,还对方法进行了详细阐述,针对不同方法的时间复杂度与空间复杂度都进行了详细的分析。除此之外,为了更具说服力,每一种方法几乎都对应有示例讲解辅以说明。
第三,代码较为规范,完全参照华为编程规范、Google编程规范和编码规范。程序员要想在团队中大展拳脚,就离不开合作,而合作的基础就是共同遵循统一的编码规范。不仅如此,规范化的编码往往有助于读者理解代码。
第四,除了题目讲解,还有部分触类旁通的题目供读者练习。本书不可能将所有的程序员求职类的数据结构与算法类题目囊括,但是会尽可能地将一些常见的求知类算法题、具有代表性的算法题重点讲解,将其他一些题目以练习题的形式展现在读者面前,以供读者思考与学习。
数据结构与算法知识博大精深,非一本或是几本著作就能将其讲解透彻的。尽管我们力求将所有程序员求职过程中出现的面试、笔试题一网打尽,试图做到知识覆盖面广,内容知识全,但仍然无法做到面面俱到,百分之百的读者满意率是本书以及后续改版奋斗与追求的目标,希望读者能够体谅。有兴趣的读者可以参阅《算法导论》《编程珠玑》等国外知名专家编写的专著进行知识的扩展与延伸。
其实,本书不仅可以作为程序员求职的应试类书籍,还可以作为数据结构与算法的教辅书籍。书中的很多思想和方法对于提高对数据结构与算法的理解是大有裨益的,不管是本科生还是研究生,不管是低年级学生还是高年级学生,不管对计算机底层知识或是当前的计算机前沿知识是否了解,都不影响你学好本书。
本书是作者历经四年时间打造的一本技术类精品图书,尽管我们尽最大努力希望做到百分之百的准确性,但百密一疏,书中不足之处在所难免,在恳请读者原谅的同时,也希望读者们能够将这些问题进行反馈,以便于未来继续改进与提高,为读者提供更加优秀的作品。
本书中引用的部分内容来源于网络上的无名英雄,无法追踪到最原始的出处,在此对这些幕后英雄致以最崇高的敬意。没有学不好的学生,只有教不好的老师,我们希望无论是什么层次的学生,都能毫无障碍地看懂书中所讲内容。如果读者存在求职困惑或是对本书中的内容存在异议,都可以通过yuancoder@foxmail.com联系作者。
猿媛之家