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