## 二、Android面试知识框架
![Android面试知识框架](http://www.icode9.com/i/li/?n=2&i=images/20210712/1626042428886826.jpg)
## 三、Java 基础叩关
**3.1 数据结构与算法**
**3.1.1 常用的数据结构有哪些?**
**3.1.2 数组**
(1).如何在一个1到100的整数数组中找到丢失的数字?
(2).如何在给定的整数数组中找到重复的数字? 小米
(3).如何在未排序整数数组中找到最大值和最小值? 字节跳动
(4).在Java中如何从给定数组中删除多重复制?
(5).大数相加(今日头条)
**3.1.3 链表**
(1).那查询第一个跟倒数第二个呢?(这就不一样了,第一个直接给了头结点,倒数第二个需要从倒数第一个开始查询,走两步) 腾讯
(2).arrayList底层原理 滴滴 字节跳动
(3).如何在一次遍历中找到单个链表的中值? 中国平安
(4).如何证明给定的链表是否包含循环?如何找到循环的头节点? 优酷
(5).两个有交叉的单链表,求交叉点 华为
(6).如何得到单链表的长度? 360
(7).如何在不使用递归的情况下逆转单链表? 小米/美团
(8).怎么判断链表有环? 滴滴
**3.1.4 队列&堆栈**
(1).如何使用栈实现队列的功能?(广州荔枝FM)
(2).两个栈实现一个队列 蘑菇街
(3).两个队列实现一个栈 腾讯
(4).对比一下队列和栈,以及它们底部实现 腾讯
**3.1.5 二叉树**
(1).如何在给定的二叉树中执行先序遍历?百度
(2).如何实现后序遍历算法? 百度
(3).如何在给定数组中执行二分法搜索? 苏宁
(4).已知前序遍历为{1,2,4,7,3,5,6,8},中序遍历为{4,7,2,1,5,3,8,6},它的二叉树是怎么样的? 58
(5).输入两棵二叉树 A 和 B,判断 B 是不是 A 的子结构。 爱奇艺
(6).请实现两个函数,分别用来序列化二叉树和反序列化二叉树。 YY
(7).平衡二叉树和红黑树的区别?字节跳动
(8).什么是平衡二叉树,它有什么特征 美团
(9).B 树,B+树
**3.1.6 HashMap**
(1).HashMap的底层原理是什么?线程安全么? 百度 美团
(2).HashMap中put是如何实现的? 滴滴
(3).谈一下hashMap中什么时候需要进行扩容,扩容resize()又是如何实现的?
(4).什么是哈希碰撞?怎么解决? 滴滴 美团
(5).HashMap和HashTable的区别 小米
(6).HashMap中什么时候需要进行扩容,扩容resize()是如何实现的? 滴滴
(7).hashmap concurrenthashmap原理 美团
(8).arraylist和hashmap的区别,为什么取数快?字节跳动
**3.1.7图**
?(1).旋转输出矩阵
(?2).给定一个矩阵 int matrixA
[m][n],每行每列都是增序的,实现一个算法去寻找矩阵中的某个元素 element. 搜狗
**3.1.8排序算法有哪些?**
(1).top-k排序(堆排序,位图法) 美团
(2).冒泡排序的手写 华捷艾米
(3).堆排序算法的手写 华捷艾米
(4).椭圆形场地有两个赛道,可以同时提供两匹马比赛,两匹马比赛后,可以获知两匹马中跑的快的那匹马,但是没有计时工具。问题,如何最优的算法(比赛次数最少),获知10匹马中速度最快的三匹马 阿里
(5).输入一个整型无序数组,对堆排序的方法使得数组有序 阿里
(6).如何使用快速排序算法对整数数组进行排序? CVTE
**3.1.9 查找算法**
(1).有序数组的二分查找算法 百度
**3.1.10 串**
(1).给定一个字符串,请你找出其中不含有重复字符的 最长子串的长度。 字节跳动
(2).给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
**3.1.11 请写出以下算法的时间复杂度**
冒泡排序法 插入排序法 堆排序法 二叉树排序法
**3.1.12 其他算法**
(1).常用的对称加密算法,有什么同? 字节跳动
(2).如何在无序(有负数)的数组中查找是否存在和为target的两个数组合,twoSum(); 字节
**3.2 Java基础**
(1).什么情况下会发生栈内存溢出?
(2).如果让你写一段栈溢出的代码你会什么写,一个栈大概有多大,为什么?每个线程都有这样大小的一个栈吗? (美团)
(3).JVM中一次完整的GC流程是怎样的,对象如何晋升到老年代?
(4).介绍下GC回收机制与分代回收策略。
(5).Java中有几种引用关系,它们的区别是什么?
(6).GC收集算法有哪些?它们的特点是什么?
(7).如何判断一个对象是否被回收,有哪些GC算法,实际虚拟机使用最多的是什么GC算法?(美团)
(8).Jvm内存 结构说一下。
a.描述JVM内存模型。(东方头条)
(9).JVM DVM ART的区别(360)
(10).描述GC机制。Class会不会回收?用不到的Class怎么回收?(东方头条)
(11).*与OOM的区别?分别发生在什么时候,JVM栈中存储的是什么,堆存储的是什么?(美团)
(12).Java虚拟机和Dalvik虚拟机的区别?
(13).请描述new一个对象的流程。
(14).Java对象会不会分配到栈中?
(15).String, Stringbuffer, StringBuilder 的区别是什么?(东方头条)
a.String StringBuffer StringBuilder在进行字符串操作时的效率;这里主要考察String在内存中是如何创建的。(字节跳动)
(16).String为什么是不可变的?(字节跳动)
a.String为什么设计成final的?
(17).final?、finally、finalize?区别。
(18).抽象类和接口的区别。
(19).重载和重写的区别 (京东)
(20).什么是值传递和引用传递,Java 是值传递还是引用传递?
(21).String s = new String(“”);创建了几个对象?
(22).java里 equals和== 区别。
(23).try-catch-finally,try里有return,finally还执行么?
(24).Excption与Error区别。
(25).Static class 与non static class的区别。
(26).PathClassLoader与DexClassLoader的区别是什么?
(27).什么是双亲委托机制,为什么需要双亲委托机制?
(28).描述JVM类加载过程。
(29).动态代理是什么?如何实现?
(30).动态代理的方法怎么初始化的?(字节跳动)
(31).CGLIB动态代理(字节跳动)
(32).说说反射的应用场景,哪些框架,原理是什么?
(33).Java泛型的特点与优缺点,泛型擦除是怎么回事?
(34).List
能否转为List