前言
计算机技术博大精深,而且日新月异,Hadoop、GPU计算、移动互联网、模式匹配、图像识别、神经网络、蚁群算法、大数据、机器学习、人工智能、深度学习等新技术让人眼花缭乱,稍有不慎,就会被时代抛弃。于是,很多IT从业者开始困惑了,不知道从何学起,到底什么才是计算机技术的基石。其实,究其本质还是最基础的数据结构与算法知识:Hash、动态规划、分治、排序、查找等。所以,无论是世界级的大型企业还是几个人的小公司,在面试求职者的时候,往往都会考察这些最基础的知识,无论你的研究方向是什么,这些基础知识都应该熟练掌握。
本书正是从这些基础知识点出发,讲解了求职过程中常见的数据结构与算法的真题,从而让求职者能轻松应对算法类的面试笔试题目。本书对于算法的讲解,不仅使用图文并茂的方式,而且还辅以示例的讲解,目的就是为了使读者更容易读懂。为了能够写出精品书籍,我们对每一个技术问题都反复推敲,与算法大牛一起反复论证可行性;对文字,我们更是咬文嚼字,字斟句酌。所有这些付出,只为让读者能够在读完本书后有所收获。
虽然市面上同类型书籍很多,也都写得不错,但是我们相信,我们能够写出更适合读者胃口的高质量精品书籍。为了能够在有限的篇幅里面尽可能地全是“干货”,在题目的选择上也下了很多功夫:首先,通过搜集近3年以来几乎所有IT企业的面试笔试算法真题,包括已经出版的其他著作、技术博客、在线编码平台、刷题网站等,保证所选样本足够大。其次,我们选择题目的时候,尽可能不选择那种一眼就能知道结果的简单题,也没有选择那种怪题、偏题和很难的题,我们选题原则是难度适中或者看上去简单但实际并不容易。通过我们的努力,力求所选出来的算法真题能够最大限度地帮助读者。在真题的解析上,我们采用层层递进的写法,先易后难,层层深入,将问题抽丝剥茧,使得读者能够跟随我们的思路,一步步找到问题的最优解。
写作的过程是一个自我提高、自我认识、自我救赎的过程,很多知识,只有深入理解与剖析后,你才能领悟其中的精髓,掌握其中的技巧,程序员求职算法也不例外。本书不仅具备了其他书籍分析透彻、代码清晰合理的优点,还具备以下几个方面的优势:
第一,本套书籍分多种语言版本实现:C/C++、Java、C#、Python、PHP、Javascript、Kotlin、Go等,这样,无论读者侧重于哪一种语言,都能够有适合自己的书。本书中如果没有特别强调,代码实现均默认使用C/C++语言。
第二,每个题目除了循序渐进的分析以外,还对方法进行了详细阐述,针对不同方法的时间复杂度与空间复杂度,都进行了详细分析。除此之外,为了更具说服力,每一种方法几乎都对应有示例讲解辅以说明,对方法是一种更好的辅助。
第三,代码较为规范,完全参照华为编程规范、Google编程规范。小作坊编码的时代早已过去,程序员要想在一个团队中大展拳脚,就离不开合作,而合作的基础就是共同遵循统一的编码规范。不仅如此,规范化的编码往往有助于读者理解代码。
第四,除了对题目的讲解,还有部分触类旁通的题目供读者练习。本书不可能将所有的程序员求职类的数据结构与算法类题目囊括,但会尽可能地对一些常见的求职类算法题、具有代表性的算法题重点讲解,将其他一些题目以练习题的形式展现在读者面前,以供读者思考与学习。
本书中有部分思想来源于网络上的无名英雄,无法追踪到最原始的出处,在此对这些幕后英雄致以最崇高的敬意。没有学不好的学生,只有教不好的老师,我们希望无论是什么层次的学生,都能毫无障碍地看懂书中所讲内容。如果读者存在求职困惑或是对本书中的内容存在异议,都可以通过yuancoder@foxmail.com联系作者。
猿媛之家