[TOC]

文章参考:https://blog.csdn.net/singwhatiwanna/article/details/106846308

文章参考:https://blog.csdn.net/huangqili1314/article/details/79824830

文章参考:https://blog.csdn.net/chuhe1989/article/details/104385096

文章参考:https://www.cnblogs.com/huangjialin/p/12411842.html

文章参考:https://juejin.im/post/6844903891625050119

文章参考:https://www.jianshu.com/p/5e5908ab3ea9

概述

但是发现纯看面试题是不行的,因为靠背的东西是记不牢的,需要知识成体系才可以,所以笔者整理了一份复习大纲,基本涵盖了 Android 中高级工程师面试所必须知识点,希望可以通过此文帮助一些想换工作的朋友更好的复习,准备面试。
本文只罗列出大纲内容,至于每个模块的详细内容,网上很多资料,可自行查阅,后序有时间会放一些我复习时看的资料,这样复习起来知识更成体系,事半功倍。

一、Java基础相关

  1. 内存模型

  2. 垃圾回收算法(JVM)

3、类加载过程(需要多看看,重在理解,对于热修复和插件化比较重要)

深入理解Java类加载器(ClassLoader):https://blog.csdn.net/javazejian/article/details/73413292

【深入Java虚拟机】之四:类加载机制:https://blog.csdn.net/ns_code/article/details/17881581

  1. 反射

  2. 多线程和线程池

线程池的种类

二、Android 基础

Activity相关

问题:简述一下Activity的生命周期方法

Service相关

BroadcastReceiver相关

ContentProvider相关

Handler消息机制

问题:简单介绍一下Handler消息机制的原理。

问题:描述一下Handler消息机制中的同步消息和异步消息机制。

  • 1、 View与ViewGroup事件源码分析
  • 2、dispatchTouchEvent事件发送深度解析
  • 3、TouchTarget实现事件触摸优化
  • 4、从零实现最真实的Android事件机制(永不会忘的事件模型)
  • 5、RecyclerView中如何判断滑动事件与点击事件
  • 6、onInterceptTouchEvent拦截机制
  • 7、onMeasure与onLayout 渲染与绘制流程
  • 8、从零实现RecyclerView(永不会忘的点击事件与滑动事件的冲突解决办法)
  • 9、滑动方向不同,解决冲突的外部解决法【以ScrollView与ViewPager为例 】
  • 10、滑动方向不同,解决冲突的内部解决法【以ScrollView与ViewPager为例 】
  • 11、滑动方向相同,解决冲突的外部解决法【解决ScrollView和RecycleView滑动冲突】
  • 12、解决ScrollView和ViewPager,RecycleView滑动冲突

View绘制相关

问题:简述一下View的绘制流程。重点介绍一下onMeasure()、onLayout()、onDraw()等方法。

问题:onMeasure与onLayout渲染与绘制流程。

问题:View的绘制流程是怎样的?onMeasure的职责是做什么的?

问题:Activity的onResume方法中度量宽高有效吗?(字节)

问题:线程中view.setText一定会报错吗?(贝壳)

问题:View和绘制流程中都是使用的同一个canvas吗?(小米)

View事件分发相关

问题:onInterceptTouchEvent拦截机制。

问题:简述一下Android的View的事件分发机制。

问题:Activity中的View的事件是怎么来的?

问题:Activity是如何与Window和View进行分工合作的?(阿里)

FrameWork层的源码

问题:简述setContentView的逻辑流程,重点介绍一下View是怎么被添加进去的?

二、Java基础相关

2.1、基础数据类型

2.2、String相关

2.3、泛型擦除

三、Java面向对象

四、Java进阶相关

3.1、Java之JVM相关

3.1.1、Java内存模型

具体参见:《Java内存模型学习》

四、Android进阶相关

1、性能优化

Android性能优化之启动速度优化

Android性能优化之布局优化

Android性能优化之内存优化

Android性能优化之内存优化

Android性能优化之卡顿优化

Android性能优化的ANR问题排查

Android性能优化之稳定性优化

Android性能优化之电量优化

Android性能优化之网络优化

五、设计模式相关

Java 设计模式:六大原则、23 种设计模式的基础学习

5.1、六大原则

5.2、单例模式

六、算法与数据结构

6.1、ArrayList相关

6.2、LinkedList相关

6.3、HashMap相关

6.4、HashTable相关

6.5、HashSet相关

6.6、ArrayMap

6.7、SparseArray

七、开源框架学习

7.1、OKHttp的源码学习

7.2、Retrolfit的源码学习

7.2、RxJava的源码学习

7.3、Dagger2的源码学习

图像渲染

OpenGL ES

https://developer.android.com/guide/topics/graphics/opengl

openCL

https://zh.wikipedia.org/wiki/OpenCL

Vulkan

AI技术学习

数学基础知识

机器学习

深度学习

工具学习

1、说一下setContentView的逻辑流程,重点介绍一下View是怎么被添加进去的

2、说一下Https的握手连接流程。

3、说一下安卓的事件分发流程。(我说完之后Activity->Window->DecorView-View) 他又问我Activity的事件是从哪里来的??

4、知道CAS吗?说一下concurrentHashMap保证同步的逻辑原理

5、说一下面向对象的理解,封装、继承、多态等各种理解

6、知道BIO,NIO吗?谈一下你对他们的理解

7、说一下线程池的实现逻辑,创建线程和添加队列的逻辑。 CPU密集型和IO密集型的线程池应该怎么设计

8、谈一下对象的equels和==的区别。说说一下对象的equels()和hashCode的方法。

9、说一下Handler的原理吧。具体说一下sendMsgDelay的实现原理。比如:我同时发送一个延迟消息和即时消息他们入队列的实现原理是怎么做的。

10、性能优化你做了哪些工作?? 用到哪些工具?(说完之后,他说我做的太浅了,各种BitMap优化、长列表优化都太浅)

11、你们是怎么监控ANR的。我说到BlockCanary. 他说BlockCanary是监控卡顿的。ANR怎么来监控??怎么来做上报??

12、内存泄漏怎么去监控,怎么去上报,怎么去排查。(我说到咱们做压测,发现对象泄漏,他说还是太慢,太浪费精力,有没有其他的监控排查方案)

13、Activity弹出Dialog的声明周期有什么变化??为什么是这样的变化,说一下实现的原理?知道WindowToken吗??

腾讯车联网面试题目:

1.TranslationTooLarge 异常
binder 传输大小限制

2.BadToken 异常
例如非 activity context 启动 dialog

3.DeadObject 异常,如何避免

4.AIDL 是否可以内部通信

5.AIDL oneWay 用法

6.view .x 和 .left 区别

7.泛型的斜变与逆变

8.图片加载所占用内存

9.如何定位导致 cpu 异常的代码

10.getX、 getLet、getRawX

11.View 异常时如何保存之前的状态

onSaveInstanceState

度小满
1.binder 如何传递超过 1M 数据
有关键字可以去除冗余字段

2.java 运行结果、C++ 运行结果

1
2
3
4
5
6
7
8
9
int main(int argc, char* argv[]){
int i = 0;
int arr[3] = {0};
for(; i<=3; i++){
arr[i] = 0;
printf("hello world\n");
}
return 0;
}

3.链表和数组区别?数组为什么遍历快?数组如何替换元素
找到数组的第一个元素,只需要内存后续找

4.classLoader 实现原理
(类加载器)就是将Class文件加载到内存,把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是类加载器的作用

5.JVM 模型结构
1 Class Loader(类加载器)就是将Class文件加载到内存,再说的详细一点就是,把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型

2 Run Data Area(运行时数据区) 就是我们常说的JVM管理的内存了,也是我们这里主要讨论的部分。运行数据区是整个JVM的重点。我们所有写的程序都被加载到这里,之后才开始运行。

3 Execution engine(执行引擎) 是Java虚拟机最核心的组成部分之一。执行引擎用于执行指令,不同的java虚拟机内部实现中,执行引擎在执行Java代码的时候可能有解释执行(解释器执行)
和编译执行(通过即时编译器产生本地代码执行,例如BEA JRockit),也有可能两者兼备。任何JVM specification实现(JDK)的核心都是Execution engine,
不同的JDK例如Sun 的JDK 和IBM的JDK好坏主要就取决于他们各自实现的Execution engine的好坏。

4 Native interface 与native libraries交互,是其它编程语言交互的接口。当调用native方法的时候,就进入了一个全新的并且不再受虚拟机限制的世界,
所以也很容易出现JVM无法控制的native heap OutOfMemory。

6.Https 如何保证信息安全的同时进行快速请求

7.volatile、synchronized
volatile 原子可见性、防止指令重排
synchronized 在 JDK 1.7,JDK 1.8 做了什么优化、
锁加在对象上和方法上有什么区别,具体是如何锁的
和 ReentrantLock 区别

8.线程池优化

9.工厂模式弊端,抽象工厂为了解决什么问题

10.GC 回收和哪些可达区域

11.AIDL 原理如何实现的
除了 binder ,具体通信方式为什么可以通过代理对象调用服务端方法~

12.线程实现方式
thread
runnable
通过Callable和FutureTask创建线程
线程池

13.java 内存区域如何划分的,哪些是线程共有,哪些是线程私有
jvm 模型结构的运行区域:栈、堆、方法区、程序计数器、

14.LeakCanary 原理

度小满二面

  1. 为什么重写 hashcode
    2.native 如何加载多 so 库
    3.如何判断两个文件相等
    4.算法题

度小满三面
1.股票波浪曲线如何收益最高

新浪面试:
1.栈的亲和性
2.okHttp 原理和设计模式,Application 拦截器,Network 拦截器
3.LeakCanary 原理
4.线程池使用
5.链表和数组
6.等 java 和 android 问题,问的很详细但不难

二面
1.线程池使用
2.设计模式都有多少:说了十多种

去哪儿面试:
1.安全性
2.性能优化
3.自定义 View 如何解决 OOM 问题
4.IPC 方式和 Binder 原理
5.线上 crash 总结
6.设计模式:单例如何写,优劣势
7.锁的几种方式和差别
8.红黑树和合并两个有序链表

搜狗面试:
1.HashMap 如何存储和查找的
A:key 的 hashcode 存储指定位置,再根据 euqals 遍历链表查找结果。不过面试细问具体方法

2.final 修饰 int 类型时什么时候不被赋值

3.锁的几种形式和如何实现的
A:monitorEnter,monitorExit 后细问,公平锁和非公平锁

4.应用是如何性能优化的

5.内存泄露原因

6.热修复原理
A:classLoader 在数组中遍历符合的 dex 后,细问具体如何查找的

7.FrameWork 层如何优化的

小米面试(一面二面)
1.算法题 tree 和数组中三个数累加为 0
2.ArraySet 原理,synchionzed 原理
3.Volatile 作用和原理
4.JVM 结构和 JMM
5.内存泄露,GcRoots 根,什么是程序计数器
6.https 和 http 区别是否可以分块传输,okHttp、retrofit 源码解析
7.ca 证书如何校验,ssl 是如何加密的
8tree 遍历

猎豹面试
1.Android 最多可以创建多少线程
2.UTF-8 汉字占多少字节
3.线程池用法
4.导致 ANR 几种情况
5.广播阻塞如何解决~
6.组件 ANR 时长,前台进程 ANR 和后台进程 ANR 时长是否一致
activity 5s,广播超时时间为 10s,前台 service 超时时间为 20s,后台 service 超时时间为 200s

7.hashcode 和 equals 区别,和为什么重写 hashCode
8.混淆、加固、多渠道打包