一、概述
最近在准备面试的东西,整理了一些读书笔记分享给各位 百度网盘地址,大家可以自由下载,以下内容完全原创。
前两部分是对于一些 经典书籍的读书笔记 和 面试题,都是上学看书的时候觉得比较重要的部分,就通过Word
文档的形式记录下来了。因为一直从事的是Android
方面的相关工作,因此还是围绕着Android
展开,包括了Java
、C++
、网络、数据结构等等。
最后一部分是面试时候的算法题,根据问题的类型分为了数组、数字、字符串、图、树等等。
先扯点题外话,这些基础知识虽然很久没看了,不过幸亏有这些笔记,现在看起来很快,像C++ Primer
和Java
面向对象编程这样很厚的书,通过看这些笔记两个小时就能复习完了。因此也建议大家平时看书的时候,多用文档和博客的形式记录下来,对于未来很有用。
我平时在学习的时候,一直秉承着要建立一个完整的架构体系,就像今年定的目标,要把之前两年的工作都总结一下,梳理成一个完整的框架,所以才有了 Android 知识梳理目录 - 好吧,这是一个很"干"的标题 这篇文章,洋洋洒洒写了半年多,已经有28W
字了,每次完成一篇文章,就点亮了知识体系上的一个小点。
二、第一部分
-
Java
面向对象编程 -
Unix
网络编程 -
Linux
程序设计 C++ Primer
C
-
TCP
高效编程 -
STL
源码解析 -
C++
面试题 Android
- 终极版笔记
三、第二部分
-
C++
高效编程 - 计算机网络
- 算法导论
- 腾讯笔试题
- 终极版笔记
- 设计模式
- 数据结构
- 深度搜索
C++
对象模型 - 操作系统
- 海量数据处理
- 程序员面试宝典
四、第三部分
这一部分是上学时候学习算法的 程序记录,都是通过C++
来实现的,题目来自于编程之美、编程珠玑、网上的面试题等等,基本上囊括了所有可能会问到的算法题,大家可以当作复习的大纲。比较遗憾的是当时只记录了实现的代码,当时没有写下解答的思路以及分析,这个会在之后的博客中慢慢完善。
4.1 字符串
- 替换字符串中的空格
- 输入一个字符串,打印出该字符串的所有排列
- 第一个只出现一次的字符
- 翻转句子
- 计算字符串之间的距离
- 最短摘要生成
- 查找字符串中的最长重复子串
- 在字符串中找出最长的连续数字串
- 字符串转换成整数输出
- 在字符串中删除指定字符
- 判断一个字符串是否是对称的
- 将字符串中的移到前部,并且不改变非的顺序
- 不开辟用于交换的空间,完成字符串的逆序
LCS
- 字符串相关的操作函数
4.2 图
- 广度优先搜索
- 深度优先搜索
-
Bellman-Ford
算法 -
Dijkstra
算法 -
Floyed-Warshall
算法 -
Johnson
算法
4.3 数字
- 斐波那契数列(循环算法)
- 斐波那契数列(矩阵算法)
- 跳台阶问题
- 数值的整数次方
- 打印
1
到最大的n位数 - 计算从
1
到n
中1
出现的个数 - 求两个数的二进制表示中有多少个是不同的
- 给定一个整数
N
,求N!
的末尾有多少个0
- 给定一个整数
N
,求N!
的二进制表示中最低位1的位置 - 最大公约数
- 精确地表达浮点数
- 任意给定一个正整数
N
,求一个最小的正整数M
,使得N*M
的十进制表示里仅含有0
和1
- 计算
1+2+..n
4.4 栈
- 创建一个空栈
- 压入
- 返回栈顶元素
- 弹出
- 打印栈内元素
- 获得栈中最小元素
- 将栈内元素反向
- 判断出栈顺序是否正确
- 利用两个栈实现队列
4.5 数组
- 二维数组的整数查找
- 旋转数组中的最小数字(旋转数组中的最大数字)
- 调整数组使奇数位于偶数之前
- 找出数组中出现次数超过一半的数字
- 找到最小的
k
个数 - 连续子数组的最大和
- 连续子数组的最大和(二维)
- 求数组当中的逆序对
- 查找数组中数字出现的次数
- 查找数组中只出现一次的两个数字
- 在有序数组中查找和为
s
的两个数 - 查找和为
s
的连续整数 - 求数组当中的最长递增子序列(求数组当中的最长递减子序列)
- 数组分割
- 数组当中的最大最小值
- 区间重合判断
- 一个整数数组,长度为
n
,将其分为m
份,使各份的和相等,求m
的最大值
4.6 排序
- 插入排序
- 希尔排序
- 选择排序
- 冒泡排序
- 计数排序
- 基数排序
- 归并排序
- 快速排序
- 双向扫描的快速排序
- 堆排序
4.7 链表
- 新建链表
- 反转链表(非递归)
- 反转链表(递归)
- 获得链表倒数第k个结点
- 获得链表的中间结点
- 删除链表结点
- 交换链表结点
- 获得带环链表中进入环的第一个元素
- 获得相交链表的结点
- 反向打印链表
- 链表排序
4.8 二分查找
- 普通二分查找
- 查找关键字第一次出现的位置
- 查找关键字最后一次出现的位置
- 查找小于关键字的最大数字出现的位置
- 查找大于关键字的最小数字出现的位置
- 在经过移位的有序数组中查找关键字出现的位置
4.9 二叉查找树
- 初始化
- 插入
- 搜索
- 最小值
- 删除
- 非递归先序遍历
- 非递归中序遍历
- 非递归后序遍历
4.10 二叉树
- 创建二叉树
- 递归先序遍历二叉树
- 递归中序遍历二叉树
- 递归后序遍历二叉树
- 分层打印二叉树
- 打印二叉树第N层
- 统计二叉树叶结点个数
- 统计二叉树的高度
- 获得二叉树的镜像
- 判断元素是否存在于二叉树中
- 打印二叉树中和为s的路径
- 获得二叉树的最大距离
- 判断二叉树是否是平衡树
- 将二叉树转换成为链表
- 判断数组是否为二叉树的后序遍历
- 判断某树是否是另一棵树的子树
- 根据前序和中序序列重建二叉树
- 把一个有序数组插入到二叉树中
4.11 动态规划
- 建立最优二叉查找树
- 矩阵链乘法
- 钢条切割问题
- 饮料问题
- 背包问题
- ·
KMP
算法
更多文章,欢迎访问我的 Android 知识梳理系列:
- Android 知识梳理目录:http://www.jianshu.com/p/fd82d18994ce
- 个人主页:http://lizejun.cn
- 个人知识总结目录:http://lizejun.cn/categories/