Android面试计划指南

如下是我的秋季面试知识点指南,就要去新公司上班了,现在就把这个指南开放出来,希望对正在找工作的有些同仁们有用,作个参考。

一、Java知识

1、基础知识点

链接1
接口和抽象类有什么区别
大厂Android面试题汇总(一)JAVA基础
大厂Android面试题汇总(二)JAVA源码级

1、socket

2、java反射

深入理解 Java 反射
插件化知识详细分解及原理 之代理,hook,反射

3、Java的异常体系

Java异常体系简析

4、解析与分派

【深入理解JVM】:解析与分派

5、注解

Java 进阶巩固:什么是注解以及运行时注解的使用
使用编译时注解简单实现类似 ButterKnife 的效果
探究 ButterKnife 的注解处理以及代码生成

6、依赖注入

控制反转IoC(Inversion of Control)是说创建对象的控制权进行转移,以前创建对象的主动权和创建时机是由自己把控的,而现在这种权力转移到第三方,比如转移交给了IoC容器,它就是一个专门用来创建对象的工厂,你要什么对象,它就给你什么对象,有了 IoC容器,依赖关系就变了,原先的依赖关系就没了,它们都依赖IoC容器了,通过IoC容器来建立它们之间的关系。

7、泛型原理,并举例说明

1,泛型,即“参数化类型”
2,只在编译时有效,运行时擦除(反射取值可知)
3,泛型类,泛型接口,泛型方法
java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一

8、ClassLoader

Android解析ClassLoader(一)Java中的ClassLoader
Android解析ClassLoader(二)Android中的ClassLoader

9、Java8函数式编程

Android 知识体系脑图「java篇」

10、线程

线程阻塞的原因

二、Android知识

Android方面基础知识点,就是四大组件。关于Activity的启动流程和启动模式可以说是必须掌握的,中间牵扯到进程间通信,所以关于binder跨进程通信这方面的知识点也是需要深入了解。

对于系统服务的了解,比如ActivityManagerService、WindowManagerService和其他各种系统服务的过程,多了解多加分。关于跨进程通信binder这块的知识点建立在理论上的会比较多,但是别担心,可以在理解了一遍之后去看AIDL服务,根据AIDL可以更好的理解binder的使用。

Android 知识体系脑图「android篇」

1、基础知识

链接1
链接2
链接3
链接4
链接5
链接6

2、Handler机制

Android的Handler可以说是Android通信的核心,所以关于这块的原理简直是基础必备。但是需要注意的是Handler中有牵扯到ThreadLocal的使用,所以关于ThreadLocal也需要看和理解下。还有HandlerThread和IntentService的使用等等。

Android中为什么主线程不会因为Looper.loop()里的死循环卡死?
ThreadLocal 的原理分析
你真的懂Handler.postDelayed()的原理吗?

3、自定义View

关于View,比如自定义View的绘制,SurfaceView的原理,view的onMeasure、onLayout和onDraw的方法执行意义等。还有关于手势事件的分发机制和滑动冲突的处理。其他的一些系统常用控件的源码分析也很必要,比如ListView和RecyclerView的区别缓存机制、viewPager的页数缓存实现原理等等。

SurfaceView原理简述
SurfaceView的工作原理
Android SurfaceView(二、实现原理)
Android 5.0(Lollipop)中的SurfaceTexture,TextureView, SurfaceView
Android的UI底层是用CPU绘图的还是GPU绘图的呢?以及surfaceview,window,普通view是如何实现的?

RecyclerView原理分析
Android ListView 与 RecyclerView 对比浅析:缓存机制
基于滑动场景解析RecyclerView的回收复用机制原理
RecyclerView使用踩坑全过程
关于RecyclerView你知道的不知道的都在这了(上)

ViewPager缓存策略
ViewPager 全面剖析及使用详解

4、项目架构 MVC,MVP,MVVM

5、事件分发机制

6、WebView

7、AIDL机制

8、进程间通信

Android跨进程通信:图文详解 Binder机制 原理
写给 Android 应用工程师的 Binder 原理剖析
Android Binder设计与实现 - 设计篇

9、冷启动和热启动

10、内存溢出

Android中图片压缩方案详解
Android 高清加载巨图方案 拒绝压缩图片

11、内存泄漏

LeakCanary,30分钟从入门到精通

12、ANR

ANR机制要点总结
基于android7.0流程分析anr产生原因
理解Android ANR的触发原理
安卓软件开发的Android ANR原理分析
Android ANR原理分析

13、性能优化(如内存优化、网络优化、布局优化、电量优化、业务优化)

剩下的基本功就是性能优化方面了,各种死丢丢(AS)工具的使用比如Android Profiler, Lint,查看ViewTree啊,还有MAT啊,LeakCanary啊(这个的实现原理能搞懂最好)等等。布局的优化和内存泄露的查找,大图片的处理。对了,还有图片的处理和图片框架的缓存原理包括LruCache的实现原理,和DiskLruCache、列表的优化方案等等。

LruCache的实现原理:LinkedHashMap
Android DiskLruCache完全解析,硬盘缓存的最佳方案

Android 性能优化之常用优化点
性能优化之内存泄漏分析
性能优化之卡顿分析
UI卡顿
Bitmap
Android 性能优化的方方面面
Google《Android性能优化》学习笔记
【腾讯Bugly干货分享】Android内存优化总结&实践
android–垃圾回收与内存优化
[Android技术专题]应用开发进阶必经之路之性能优化(下)
android–垃圾回收与内存优化
Android客户端性能优化(魅族资深工程师毫无保留奉献)
Android性能优化来龙去脉总结
Android 性能优化 - UI 性能优化
Android 和 Java 性能优化最佳实践
eclipse MAT - Memory Analyzer Tool 使用进阶

14、动态加载

15、插件化

奇虎360:RePlugin
阿里巴巴手机淘宝:atlas
嘀嘀:VirtualAPK
开源组织Wequick:Small

16、热更新

17、进程保活

【腾讯Bugly干货分享】Android进程保活招式大全
关于 Android 进程保活,你所需要知道的一切

18、架构设计

关于项目开发的整体架构的理解,比如MVC、MVP和MVVM。关于市面上主流的插件化和组件化开发的设计思想和实现方案的理解等。

三、并发编程

线程方面的,比如线程的同步机制、线程的几种状态、锁和volatile、线程池的使用和管理、甚至到AsyncTask的源码以及在不同版本的变化。

1、马士兵高并发编程笔记一之关键字概念
2、Java 并行之线程的常用操作
3、Java并发之ReentrantLock
4、Java并发之信号量、倒计数门闩和循环栅栏
Java并发之信号量、倒计数门闩、循环栅栏和LockSupport
5、马士兵高并发编程笔记四之生产者/消费者
6、马士兵高并发编程笔记二之容器读写同步
Java并发之锁的优化
Java并发之并发容器
Java并发之线程池
线程阻塞的原因

四、虚拟机

Jvm虚拟机这一块的内容,比如执行过程、JMM模型、java的Gc回收原理、类加载器等等。

Java虚拟机之String Pool
Java虚拟机之垃圾收集过程
Java虚拟机之堆 VS 栈
Dalvik与ART虚拟机
Java虚拟机之内存区域概述
Java虚拟机之垃圾收集算法
Android GC 原理探究

1、JVM

1、Java内存区域概述
JDK8废弃永久代
2、Java虚拟机垃圾收集算法
如何回答Android面试中java垃圾回收机制

2、Davilk与ART

1、Dalvik与ART虚拟机
内存管理
GC

五、设计模式

1、线程安全的单例模式的常用四种创建方式
23种设计模式和面向对象的六大原则
《Android源码设计模式解析》读书笔记——Android中你应该知道的设计模式

六、数据结构

Java方面的一些基础问题,比如HashMap的原理以及HashTable的区别、Android方面的SparseArray的实现、ArrayList和LinkedList的实现原理等等。

判断两个链表是否相交并找出第一个相交节点

链接1
经常被问到的有深度有内涵的数据结构面试题
Algorithms
大厂Android面试题汇总(三)数据结构
Android客户端面试基础(五)-数据结构与算法
android面试——数据结构
Android 数据结构以及常用的算法
Android算法面试题(1)
大厂面试题(四)数据结构和算法

Java 容器.md
ArrayList、Vector、HashMap、HashTable是如何扩容

线性表
栈和队列
散列查找
排序
树的基础
其他常见树

七、网络

网络通信方面,一些基础的协议概念。比如TCP的握手挥手问题,Http和Https的区别以及Https传输过程中用到的加密方式,Http1.0、Http2.0和SPDY之间的区别,Http2.0做了哪些优化等。

浏览器中输入url后发生了什么
输入一个新的网址后到完全显示页面,浏览器做了哪些工作?
DNS解析过程和DNS挟持

计算机网络

TCP/IP
TCP的三次握手与四次挥手(详解+动图)
TCP与UDP
Android网络编程面试题集
一篇文章带你熟悉 TCP/IP 协议(网络协议篇二)

Http
HTTP
Android 网络编程1 Http协议
Android网络编程(一)HTTP协议原理
HTTP和SOCKT关系 短长链接
一篇文章带你详解 HTTP 协议(网络协议篇一)

Https
HTTPS 理论基础及其在 Android 中的最佳实践
HTTPS详细解析

计算机网络面试题链接
Android网络编程面试题集

八、开源项目

然后就是关于你项目中使用到的一些开源库,关于你用到的开源库,一定要深入到源码去理解其中的实现方案。我拿Retrofit打比方,大概需要掌握到的深度是Retrofit的设计风格、Restful Api的概念、Retrofit核心实现方式动态代理,优缺点(比如动态代理不能代理抽象类,和用到了反射),如何优化(比如CgLib,和依赖注入的方案)。这个其实就是考核你对技术的研究深度到底到什么程度。所以你项目中使用到的技术一定要深入了解,大厂是不需要知其然不知其所以然的人。

Android百大框架排行榜

EventBus 原理简单记录
EventBus使用详解
EventBus原理源码分析和使用
EventBus的使用与深入学习
Android 框架学习2:源码分析 EventBus 3.0 如何实现事件总线

这可能是最好的RxJava 2.x 入门教程(二)
ReactiveX文档中文翻译
RxJava 2.x 使用最佳实践
Android 高级开发——响应式编程框架 RxJava2 解析

OkHttp使用完全教程
OkHttp使用进阶 译自OkHttp Github官方教程
这是一份很详细的 Retrofit 2.0 使用教程(含实例讲解)
网络加载框架 - Retrofit

Glide V4

九、Kotlin

十、Gradle 构建

Android Gradle使用总结
Jenkins实现Android自动化打包

十一、公司项目

项目结构,项目中的技术等

你可能感兴趣的:(Android)