作品简介

本书是一本讲解Go语言程序员面试笔试真题的书籍,在写法上,除了讲解如何解答算法问题以外,还引入了例子辅以说明,让读者能够更加容易理解。

本书将程序员面试笔试过程中各类算法类真题一网打尽,在题目的广度上,通过各种渠道收集了近3年来IT企业面试笔试算法高频题目,所选择题目均为企业招聘使用题目。在题目的深度上,本书由浅入深、庖丁解牛般地分析每一个题目,并提炼归纳,同时引入例子与源代码、时间复杂度与空间复杂度的分析,而这些内容是其他同类书籍所没有的。本书根据真题所属知识点进行分门别类,结构合理、条理清晰,对读者学习与检索意义重大。

本书是一本计算机相关专业毕业生面试笔试的求职用书,可以作为本科生、研究生学习数据结构与算法的辅导书籍,同时也适合期望在计算机软硬件行业大显身手的计算机爱好者阅读。

猿媛之家、董良松、楚秦编著。

作品目录

  • 前言
  • 面试笔试经验技巧篇
  • 经验技巧1 如何巧妙地回答面试官的问题
  • 经验技巧2 如何回答技术性的问题
  • 经验技巧3 如何回答非技术性问题
  • 经验技巧4 如何回答快速估算类问题
  • 经验技巧5 如何回答算法设计问题
  • 经验技巧6 如何回答系统设计题
  • 经验技巧7 如何解决求职中的时间冲突问题
  • 经验技巧8 如果面试问题曾经遇见过,是否要告知面试官
  • 经验技巧9 被企业拒绝后是否可以再申请
  • 经验技巧10 如何应对自己不会回答的问题
  • 经验技巧11 如何应对面试官的“激将法”
  • 经验技巧12 如何处理与面试官持不同观点这个问题
  • 经验技巧13 什么是职场暗语
  • 面试笔试真题解析篇
  • 第1章 链表
  • 1.1 如何实现链表的逆序
  • 1.2 如何从无序链表中移除重复项
  • 1.3 如何计算两个单链表所代表的数之和
  • 1.4 如何对链表进行重新排序
  • 1.5 如何找出单链表中的倒数第k个元素
  • 1.6 如何检测一个较大的单链表是否有环
  • 1.7 如何把链表相邻元素翻转
  • 1.8 如何把链表以k个结点为一组进行翻转
  • 1.9 如何合并两个有序链表
  • 1.10 如何在只给定单链表中某个结点指针的情况下删除该结点
  • 1.11 如何判断两个单链表(无环)是否交叉
  • 1.12 如何展开链接列表
  • 第2章 栈、队列与哈希
  • 2.1 如何实现栈
  • 2.2 如何实现队列
  • 2.3 如何翻转栈的所有元素
  • 2.4 如何根据入栈序列判断可能的出栈序列
  • 2.5 如何用O(1)的时间复杂度求栈中最小元素
  • 2.6 如何用两个栈模拟队列操作
  • 2.7 如何设计一个排序系统
  • 2.8 如何实现LRU缓存方案
  • 2.9 如何从给定的车票中找出旅程路线
  • 2.10 如何从数组中找出满足a+b=c+d的两个数对
  • 第3章 二 叉 树
  • 3.1 二叉树基础知识
  • 3.2 如何把一个有序整数数组放到二叉树中
  • 3.3 如何从顶部开始逐层打印二叉树结点数据
  • 3.4 如何求一棵二叉树的最大子树和
  • 3.5 如何判断两棵二叉树是否相等
  • 3.6 如何把二叉树转换为双向链表
  • 3.7 如何判断一个数组是否是二元查找树后序遍历的序列
  • 3.8 如何找出排序二叉树上任意两个结点的最近共同父结点
  • 3.9 如何复制二叉树
  • 3.10 如何在二叉树中找出与输入整数相等的所有路径
  • 3.11 如何对二叉树进行镜像反转
  • 3.12 如何在二叉排序树中找出第一个大于中间值的结点
  • 3.13 如何在二叉树中找出路径最大的和
  • 3.14 如何实现反向DNS查找缓存
  • 第4章 数组
  • 4.1 如何找出数组中唯一的重复元素
  • 4.2 如何查找数组中元素的最大值和最小值
  • 4.3 如何找出旋转数组的最小元素
  • 4.4 如何找出数组中丢失的数
  • 4.5 如何找出数组中出现奇数次的数
  • 4.6 如何找出数组中第k小的数
  • 4.7 如何求数组中两个元素的最小距离
  • 4.8 如何求解最小三元组距离
  • 4.9 如何求数组中绝对值最小的数
  • 4.10 如何求数组连续最大和
  • 4.11 如何找出数组中出现1次的数
  • 4.12 如何旋转数组
  • 4.13 如何在不排序的情况下求数组中的中位数
  • 4.14 如何求集合的所有子集
  • 4.15 如何对数组进行循环移位
  • 4.16 如何在有规律的二维数组中进行高效的数据查找
  • 4.17 如何寻找最多的覆盖点
  • 4.18 如何判断请求能否在给定的存储条件下完成
  • 4.19 如何按要求构造新的数组
  • 4.20 如何获取最好的矩阵链相乘方法
  • 4.21 如何求解迷宫问题
  • 4.22 如何从三个有序数组中找出它们的公共元素
  • 4.23 如何求两个有序集合的交集
  • 4.24 如何对有大量重复的数字的数组排序
  • 4.25 如何对任务进行调度
  • 4.26 如何对磁盘分区
  • 第5章 字 符 串
  • 5.1 如何求一个字符串的所有排列
  • 5.2 如何求两个字符串的最长公共子串
  • 5.3 如何对字符串进行反转
  • 5.4 如何判断两个字符串是否为换位字符串
  • 5.5 如何判断两个字符串的包含关系
  • 5.6 如何对由大小写字母组成的字符数组排序
  • 5.7 如何消除字符串的内嵌括号
  • 5.8 如何判断字符串是否是整数
  • 5.9 如何实现字符串的匹配
  • 5.10 如何求字符串里的最长回文子串
  • 5.11 如何按照给定的字母序列对字符数组排序
  • 5.12 如何判断一个字符串是否包含重复字符
  • 5.13 如何找到由其他单词组成的最长单词
  • 5.14 如何统计字符串中连续重复字符的个数
  • 5.15 如何求最长递增子序列的长度
  • 5.16 求一个串中出现的第一个最长重复子串
  • 5.17 如何求解字符串中字典序最大的子序列
  • 5.18 如何判断一个字符串是否由另外一个字符串旋转得到
  • 5.19 如何求字符串的编辑距离
  • 5.20 如何在二维数组中寻找最短路线
  • 5.21 如何截取包含中文的字符串
  • 5.22 如何求相对路径
  • 5.23 如何查找到达目标词的最短链长度
  • 第6章 基本数字运算
  • 6.1 如何判断一个自然数是否是某个数的平方
  • 6.2 如何判断一个数是否为2的n次方
  • 6.3 如何不使用除法操作符实现两个正整数的除法
  • 6.4 如何只使用++操作符实现加减乘除运算
  • 6.5 如何根据已知随机数生成函数计算新的随机数
  • 6.6 如何判断1024!末尾有多少个0
  • 6.7 如何按要求比较两个数的大小
  • 6.8 如何求有序数列的第1500个数的值
  • 6.9 如何把十进制数(long型)分别以二进制和十六进制形式输出
  • 6.10 如何求二进制数中1的个数
  • 6.11 如何找最小的不重复数
  • 6.12 如何计算一个数的n次方
  • 6.13 如何在不能使用库函数的条件下计算n的算术平方根
  • 6.14 如何不使用^操作实现异或运算
  • 6.15 如何不使用循环输出1到100
  • 第7章 排列组合与概率
  • 7.1如何求数字的组合
  • 7.2 如何拿到最多金币
  • 7.3 如何求正整数n所有可能的整数组合
  • 7.4 如何用一个随机函数得到另外一个随机函数
  • 7.5 如何等概率地从大小为n的数组中选取m个整数
  • 7.6 如何组合1,2,5这三个数使其和为100
  • 7.7 如何判断还有几盏灯泡还亮着
  • 第8章 排序
  • 8.1 如何进行选择排序
  • 8.2 如何进行插入排序
  • 8.3 如何进行冒泡排序
  • 8.4 如何进行归并排序
  • 8.5 如何进行快速排序
  • 8.6 如何进行希尔排序
  • 8.7 如何进行堆排序
  • 8.8 各种排序算法有什么优劣
  • 第9章 大数据
  • 9.1 如何从大量的url中找出相同的url
  • 9.2 如何从大量数据中找出高频词
  • 9.3 如何找出访问百度最多的IP
  • 9.4 如何在大量的数据中找出不重复的整数
  • 9.5 如何在大量的数据中判断一个数是否存在
  • 9.6 如何查询最热门的查询串
  • 9.7 如何统计不同电话号码的个数
  • 9.8 如何从5亿个数中找出中位数
  • 9.9 如何按照query的频度排序
  • 9.10 如何找出排名前500的数
展开全部