Android 面试文档分享

207 阅读6分钟

一、概述

最近在准备面试的东西,整理了一些读书笔记分享给各位 百度网盘地址,大家可以自由下载,以下内容完全原创。

前两部分是对于一些 经典书籍的读书笔记面试题,都是上学看书的时候觉得比较重要的部分,就通过Word文档的形式记录下来了。因为一直从事的是Android方面的相关工作,因此还是围绕着Android展开,包括了JavaC++、网络、数据结构等等。

最后一部分是面试时候的算法题,根据问题的类型分为了数组、数字、字符串、图、树等等。

先扯点题外话,这些基础知识虽然很久没看了,不过幸亏有这些笔记,现在看起来很快,像C++ PrimerJava面向对象编程这样很厚的书,通过看这些笔记两个小时就能复习完了。因此也建议大家平时看书的时候,多用文档和博客的形式记录下来,对于未来很有用。

我平时在学习的时候,一直秉承着要建立一个完整的架构体系,就像今年定的目标,要把之前两年的工作都总结一下,梳理成一个完整的框架,所以才有了 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位数
  • 计算从1n1出现的个数
  • 求两个数的二进制表示中有多少个是不同的
  • 给定一个整数N,求N!的末尾有多少个0
  • 给定一个整数N,求N!的二进制表示中最低位1的位置
  • 最大公约数
  • 精确地表达浮点数
  • 任意给定一个正整数N,求一个最小的正整数M,使得N*M的十进制表示里仅含有01
  • 计算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 知识梳理系列: