新書推薦:
《
天才留步!——从文艺复兴到新艺术运动(一本关于艺术天才的鲜活故事集,聚焦艺术史的高光时刻!)
》
售價:HK$
154.6
《
双城史
》
售價:HK$
110.9
《
冯友兰和青年谈心系列:不是问题的问题(哲学大师冯友兰和年轻人谈心,命运解读)
》
售價:HK$
55.8
《
月与蟹(青鲤文库)荣获第144届直木奖,天才推理作家经典作品全新译本。一部青春狂想曲,带你登上心理悬疑之巅。
》
售價:HK$
50.4
《
索恩丛书·盛清统治下的太监与皇帝
》
售價:HK$
88.5
《
透过器物看历史(全6册)
》
售價:HK$
490.6
《
我在台北故宫博物院读名画
》
售價:HK$
109.8
《
尼罗河往事:古埃及文明4000年
》
售價:HK$
76.2
|
編輯推薦: |
使用当下新版Scala,真题库2020年全面更新,作者就职名企,培训经验丰富
介绍大数据开发语言Scala核心算法应用及在分布式框架中的应用。
大量代码的编写操作,具有较强的可操作性,便于读者学习和理解。
Scala相关领域面试、笔试、经验心得、算法、考点、难点、真题解析一应俱全,获取高薪必备
|
內容簡介: |
《Scala程序员面试算法宝典》是一本讲解Scala程序员面试算法的书籍,在写法上,除了讲解如何解答算法问题外,还引入了实例辅以说明,让读者能够更好地理解本书内容。
《Scala程序员面试算法宝典》将Scala程序员面试、笔试过程中各类算法类真题一网打尽。在题目的广度上,本书收集了近三年来几乎所有IT企业面试、笔试算法高频题目,所选择题目均为企业招聘使用题目。在题目的深度上,本书由浅入深,细致地分析每一个题目,并提炼归纳。同时,引入实例与源代码、时间复杂度与空间复杂度的分析,而这些内容是其他同类书籍所少有的。此外,本书根据真题所属知识点进行分门别类,力图做到结构合理、条理清晰,对于读者进行学习与检索意义重大。
《Scala程序员面试算法宝典》是一本计算机相关专业毕业生面试、笔试的求职用书,也可以作为本科生、研究生学习数据结构与算法的辅导书,同时也适合期望在计算机软、硬件行业大显身手的计算机爱好者阅读。
|
目錄:
|
前言
面试、笔试经验技巧篇
经验技巧1 如何巧妙地回答面试官的问题2
经验技巧2 如何回答技术性的问题3
经验技巧3 如何回答非技术性问题4
经验技巧4 如何回答快速估算类问题5
经验技巧5 如何回答算法设计问题6
经验技巧6 如何回答系统设计题8
经验技巧7 如何解决求职中的时间冲突问题11
经验技巧8 如果面试问题曾经遇见过,是否要告知面试官12
经验技巧9 在被企业拒绝后是否可以再申请12
经验技巧10 如何应对自己不会回答的问题13
经验技巧11 如何应对面试官的激将法语言13
经验技巧12 如何处理与面试官持不同观点问题14
经验技巧13 什么是职场暗语14
面试、笔试真题解析篇
第1章 链表19
1.1 如何实现链表的逆序20
1.2 如何从无序链表中移除重复项24
1.3 如何计算两个单链表所代表的数之和27
1.4 如何对链表进行重新排序30
1.5 如何找出单链表中的倒数第k个元素32
1.6 如何检测一个较大的单链表是否有环36
1.7 如何把链表相邻元素反转38
1.8 如何把链表以k个结点为一组进行反转40
1.9 如何合并两个有序链表43
1.10 如何在只给定单链表中某个结点的指针的情况下删除该结点(不包括尾结点)45
1.11 如何判断两个单链表(无环)是否交叉47
1.12 如何展开链接列表50
第2章 栈与队列53
2.1 如何实现栈53
2.2 如何实现队列57
2.3 如何反转栈的所有元素60
2.4 如何根据入栈序列判断可能的出栈序列64
2.5 如何用O1的时间复杂度求栈中最小元素65
2.6 如何用两个栈模拟队列操作67
2.7 如何设计一个排队系统68
2.8 如何实现LRU缓存方案70
2.9 如何从给定的车票中找出旅程71
2.10 如何从数组中找出满足a b=c d的两个数对73
第3章 二叉树75
3.1 二叉树基础知识75
3.2 如何把一个有序的整数数组放到二叉树中77
3.3 如何从顶部开始逐层打印二叉树结点数据78
3.4 如何求一棵二叉树的最大子树和80
3.5 如何判断两棵二叉树是否相等82
3.6 如何把二叉树转换为双向链表83
3.7 如何判断一个数组是否是二元查找树后序遍历的序列85
3.8 如何找出排序二叉树上任意两个结点的最近共同父结点87
3.9 如何复制二叉树92
3.10 如何在二叉树中找出与输入整数相等的所有路径93
3.11 如何对二叉树进行镜像反转95
3.12 如何在二叉排序树中找出第一个大于且数值最接近中间值的结点96
3.13 如何在二叉树中找出路径最大的和98
3.14 如何实现反向DNS查找域名99
第4章 数组102
4.1 如何找出数组中唯一的重复元素102
4.2 如何查找数组中元素的最大值和最小值107
4.3 如何找出旋转数组的最小元素110
4.4 如何找出数组中丢失的数113
4.5 如何找出数组中出现奇数次的数115
4.6 如何找出数组中第k小的数117
4.7 如何求数组中两个元素的最小距离120
4.8 如何求解最小三元组距离122
4.9 如何求数组中绝对值最小的数126
4.10 如何求数组连续最大和129
4.11 如何找出数组中出现一次的数132
4.12 如何旋转数组134
4.13 如何在不排序的情况下求数组中的中位数135
4.14 如何求集合的所有子集137
4.15 如何对数组进行循环移位140
4.16 如何在有规律的二维数组中进行高效的数据查找142
4.17 如何寻找最多的覆盖点144
4.18 如何判断请求能否在给定的存储条件下完成145
4.19 如何按要求构造新的数组147
4.20 如何获取最好的矩阵链相乘方法148
4.21 如何求解迷宫问题150
4.22 如何从三个有序数组中找出它们的公共元素152
4.23 如何求两个有序集合的交集153
4.24 如何对有大量重复的数字的数组排序156
4.25 如何对任务进行调度159
4.26 如何对磁盘分区160
第5章 字符串162
5.1 如何求一个字符串的所有排列162
5.2 如何求两个字符串的最长公共子串166
5.3 如何对字符串进行反转169
5.4 如何判断两个字符串是否为换位字符串171
5.5 如何判断两个字符串是否具有包含关系173
5.6 如何对由大小写字母组成的字符数组排序175
5.7 如何消除字符串的内嵌括号176
5.8 如何判断字符串是否是整数177
5.9 如何实现字符串的匹配180
5.10 如何求字符串里的最长回文子串183
5.11 如何按照给定的字母序列对字符数组排序189
5.12 如何判断一个字符串是否包含重复字符191
5.13 如何找到由其他单词组成的最长单词193
5.14 如何统计字符串中连续重复字符个数195
5.15 如何求最长递增子序列的长度196
5.16 如何求一个串中出现的第一个最长重复子串197
5.17 如何求解字符串中字典序最大的子序列199
5.18 如何判断一个字符串是否由另外一个字符串旋转得到202
5.19 如何求字符串的编辑距离203
5.20 如何在二维数组中寻找最短路线205
5.21 如何截取包含中文的字符串207
5.22 如何求相对路径209
5.23 如何查找到达目标词的最短链长度210
第6章 基本数字运算213
6.1 如何判断一个自然数是否是某个数的二次方213
6.2 如何判断一个数是否为2的n次方215
6.3 如何不使用除法操作符实现两个正整数的除法216
6.4 如何只使用 操作符实现加减乘除运算220
6.5 如何根据已知随机数生成函数计算新的随机数222
6.6 如何判断1024!末尾有多少个0224
6.7 如何按要求比较两个数的大小225
6.8 如何求有序数列的第1500个数的值226
6.9 如何把十进制数(long型)分别以二进制和十六进制形式输出227
6.10 如何求二进制数中1的个数228
6.11 如何找最小的不重复数230
6.12 如何计算一个数的n次方233
6.13 如何在不能使用库函数的条件下计算正数n的算术平方根235
6.14 如何不使用^操作实现异或运算235
6.15 如何不使用循环输出1~100237
第7章 排列组合与概率238
7.1 如何求数字的组合238
7.2 如何拿到最多金币240
7.3 如何求正整数n所有可能的整数组合241
7.4 如何用一个随机函数得到另外一个随机函数243
7.5 如何等概率地从大小为n的数组中选取m个整数244
7.6 如何计算1、2、5这三个数使其和为100的组合个数245
7.7 如何判断还有几盏灯泡亮着246
第8章 大数据249
8.1 如何从大量的url中找出相同的url249
8.2 如何从大量数据中找出高频词250
8.3 如何找出某一天访问百度网站最多的IP251
8.4 如何在大量的数据中找出不重复的整数251
8.5 如何在大量的数据中判断一个数是否存在252
8.6 如何查询最热门的查询串253
8.7 如何统计不同电话号码的个数254
8.8 如何从5亿个数中找出中位数255
8.9 如何按照query的频度排序256
8.10 如何找出排名前500的数257
|
內容試閱:
|
计算机技术博大精深,而且日新月异,Hadoop、GPU计算、移动互联网、模式匹配、图像识别、神经网络、蚁群算法、大数据、机器学习、人工智能、深度学习等新技术让人眼花缭乱,稍有不慎,就会被时代所抛弃。于是,很多IT从业者就开始困惑了,不知道从何学起,到底什么才是计算机技术的基石。其实,究其本质还是最基础的数据结构与算法知识:Hash、动态规划、分治、排序、查找等,所以无论是世界级的大型IT企业还是小公司,在面试求职者时,往往都会考察这些最基础的知识,无论研究方向是什么,这些基础知识都是必须熟练掌握的。
本书在写作风格上推陈出新,对于算法的讲解,不仅文字描述,更以实例佐证,让读者能够更好地读懂本书内容。为了能够写出精品书籍,我们对每一个技术问题,都反复推敲,与算法精英一起反复论证可行性;对文字,我们咬文嚼字、字斟句酌,所有这些付出,只为让读者能够对书中技术点放心,文字描述舒心。
市面上同类型书籍很多,但是,我们相信,我们能够写出更适合读者的高质量精品书籍。为了能够在有限的篇幅里面尽可能地展示干货,作者在选择题目上下了很大的工夫。首先,我们通过搜集近三年来几乎所有IT企业的面试、笔试算法真题,包括已经出版的其他著作、技术博客、在线编码平台、刷题网站等,保证所选样本足够全面。其次,在选择题目时,尽可能不选择那种一眼就能知道结果的简单题,也没有选择那种怪题、偏题、难题。我们的原则是选择那些难度适中或者看上去简单但实际容易中陷阱的题目。我们力求遴选出来的算法真题能够最大限度地帮助读者。在真题的解析上,采用层层递进的写法,先易后难,将问题抽丝剥茧,使得读者能够跟随作者的思路,一步步找到问题的最优解。
写作的过程是一个自我提高、自我认识的过程,很多知识,只有深入理解与剖析后,才能领悟其中的精髓,掌握其中的技巧,程序员求职算法也不例外。本书不仅具备了其他书籍分析透彻、代码清晰合理等优点,还具备以下几个方面独有的优势。
第一,系列书分多种语言版本实现:CC 、Java、Python等,不管读者侧重于哪一种语言,都能够找到适合自己的版本。本书中如果没有特别强调,则代码实现均默认使用Scala语言。
第二,每个题目除了有循序渐进的分析以外,还对方法进行了详细阐述,针对不同方法的时间复杂度与空间复杂度都进行了详细的分析。除此之外,为了更具说服力,每一种方法几乎都对应有示例讲解辅以说明。
第三,代码较为规范,完全参照华为、Google编程规范和编码规范。程序员要想在团队中大展拳脚,就离不开合作,而合作的基础就是共同遵循统一的编码规范。不仅如此,规范化的编码往往有助于读者理解代码。
第四,除了题目讲解,还有部分触类旁通的题目供读者练习。本书不可能将所有的程序员求职类的数据结构与算法类题目囊括,但是会尽可能地将一些常见的求知类算法题、具有代表性的算法题重点讲解,将其他一些题目以练习题的形式展现在读者面前,以供读者思考与学习。
数据结构与算法知识博大精深,非一本或是几本著作就能将其讲解透彻的。尽管我们力求将所有程序员求职过程中出现的面试、笔试题一网打尽,试图做到知识覆盖面广,内容知识全,但仍然无法做到面面俱到,百分之百的读者满意率是本书以及后续改版奋斗与追求的目标,希望读者能够体谅。有兴趣的读者可以参阅《算法导论》《编程珠玑》等国外知名专家编写的专著进行知识的扩展与延伸。
本书不仅可以作为程序员求职的应试类书籍,还可以作为数据结构与算法的教辅书籍。书中的很多思想和方法对于提高对数据结构与算法的理解是大有裨益的,不管是本科生还是研究生,不管是低年级学生还是高年级学生,不管对计算机底层知识或是当前的计算机前沿知识是否了解,都不影响你学好本书。
本书是作者历经四年时间打造的一本技术类图书,限于作者水平原因,书中不足之处在所难免,在恳请读者原谅的同时,也希望读者们能够将这些问题进行反馈,以便于未来继续改进与提高,为读者提供更加优秀的作品。
本书中引用的部分内容来源于网络上的无名英雄,无法追踪到最原始的出处,在此对这些幕后英雄致以最崇高的敬意。没有学不好的学生,只有教不好的老师,我们希望无论是什么层次的学生,都能毫无障碍地看懂书中所讲内容。如果读者存在求职困惑或是对本书中的内容存在异议,都可以通过yuancoder@foxmail.com联系作者。
|
|