前言:
本文资料是由阿里工作十年架构师提供,属于纯干货篇,总结了最新2020整理收集的一些面试题(都整理成文档,附答案),涵盖了阿里巴巴、腾讯、字节跳动、京东、华为等大厂的Android面试真题,和资深架构师学习路线以及Android架构文档。
不管你是要面试大厂还是普通的互联网公司,这些面试题对你肯定是有帮助的,毕竟大厂一定是行业的发展方向标杆,很多公司的面试官同样会研究大厂的面试题。也会对你的架构师之路带来帮助,文中更是有详细的学习规划图,给你带来不一样的阅读感。
干货献上:
第一部分:(Android中高级篇)
1.Android基础:
1.什么是Activity?
2.请描述一下Activity 生命周期
3.常见的Activity类型有FragmentActivitiy,ListActivity,TabAcitivty等。请描述一下Activity 生命周期
4.如何保存Activity的状态或者(Activiy 重启怎么保存数据?)
5.两个Activity之间跳转时必然会执行的是哪几个方法?
6.横竖屏切换时Activity的生命周期()
7.如何将一个Activity设置成窗口的样式
8.如何退出Activity?如何安全退出已调用多个Activity的Application?
9.Activity的四种启动模式,singletop和singletask区别是什么?一般书签的使用模式是singletop,那为什么10.不使用singletask?
11.Android中的Context, Activity,Appliction有什么区别?()
12.两个Activity之间传递数据,除了intent,广播接收者,content provider还有啥?
13.Context是什么?,一个应用有多少个Context(2019.5.5)()
14.activity 之间还有 activity 和 service 之间如何传值, 可以传图片吗?
15.Service是否在main thread中执行, service里面是否能执行耗时的操作?()
16.Activity怎么和Service绑定,怎么在Activity中启动自己对应的Service?
17.请描述一下Service的生命周期()
18.什么是IntentService?有何优点?()
19.请描述一下BroadcastReceiver()
20.在manifest和代码中如何注册和使用BroadcastReceiver
21.BroadCastReceiver的生命周期
22.请介绍下ContentProvider是如何实现数据共享的()
23.为什么要用ContentProvider?它和sql的实现上有什么差别?()
24.说说ContentProvider、ContentResolver、ContentObserver之间的关系()
25.使用 contentProvider 获取本地所有的音频文件(上海)()
26.ListView如何提高其效率?()
27.当ListView数据集改变后,如何更新ListView
28.ListView如何实现分页加载()
29.ListView可以显示多种类型的条目吗()
30.ListView如何定位到指定位置
31.如何在ScrollView中如何嵌入ListView()
32.ListView中如何优化图片()
33.ListView中图片错位的问题是如何产生的()
34.如何刷新ListView中单个item的数据,不刷新整个ListView的数据?
2.Android 高级:
1.如何对Android应用进行性能分析()
2.什么情况下会导致内存泄露()
3.如何避免OOM异常()
4.Android中如何捕获未捕获的异常()
5.ANR是什么?怎样避免和解决ANR()
6.Android线程间通信有哪几种方式()
7.Devik进程,linux进程,线程的区别()
8.描述一下android的系统架构?
9.android应用对内存是如何限制的?我们应该如何合理使用内存?()
10.简述android应用程序结构是哪些?()
11.请解释下Android程序运行时权限与文件系统权限的区别?()
12.Framework工作方式及原理,Activity是如何生成一个view的,机制是什么?()
13.多线程间通信和多进程之间通信有什么不同,分别怎么实现?()
14.说下你所知道的设计模式与使用场景
15.java语言的特点与OOP思想
16.说下java中的线程创建方式,线程池的工作原理。
17.说下handler原理
18.内存泄漏的场景和解决办法
19.如何避免OOM?
20.说下Activity的启动模式,生命周期,两个Activity跳转的生命周期,如果一个Activity跳转另一个22.Activity21.再按下Home键在回到Activity的生命周期是什么样的
23.启动模式
24.onRestart的调用场景
25.是否了解SurfaceView,它是什么?他的继承方式是什么?他与View的区别(从源码角度,如加载,绘制等)。
26.如何实现进程保活
27.说下冷启动与热启动是什么,区别,如何优化,使用场景等。
28.为什么冷启动会有白屏黑屏问题?
29.Android中的线程有那些,原理与各自特点
30.ANR的原因
31.三级缓存原理
32.LruCache底层实现原理:
33.说下你对Collection这个类的理解。
34.JVM老年代和新生代的比例
35.jvm,jre以及jdk三者之间的关系?JDK(Java Development Kit)是针对Java开发员的产品,是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。
36.谈谈你对 JNIEnv 和 JavaVM 理解?
37.Serializable与Parcable的区别?
3.Android源码相关分析:
- Android动画框架实现原理
- Android各个版本API的区别
- Requestlayout,onlayout,onDraw,DrawChild区别与联系
- invalidate和postInvalidate的区别及使用
- Activity-Window-View三者的差别
- 谈谈对Volley的理解
- 如何优化自定义View
- 低版本SDK如何实现高版本api?
- 描述一次网络请求的流程
- HttpUrlConnection 和 okhttp关系
- Bitmap对象的理解
- looper架构
- ActivityThread,AMS,WMS的工作原理
- 自定义View如何考虑机型适配
- 自定义View的事件
- AstncTask+HttpClient 与 AsyncHttpClient有什么区别?
- LaunchMode应用场景
- AsyncTask 如何使用?
- SpareArray原理
- 请介绍下ContentProvider 是如何实现数据共享的?
- AndroidService与Activity之间通信的几种方式
- IntentService原理及作用是什么?
- 说说Activity、Intent、Service 是什么关系
- ApplicationContext和ActivityContext的区别
- SP是进程同步的吗?有什么方法做到同步?
- 谈谈多线程在Android中的使用
- 进程和 Application 的生命周期
- 封装View的时候怎么知道view的大小
- RecycleView原理
- AndroidManifest的作用与理解
第二部分高级开发技术面试题
1.图片:
1、图片库对比
2、LRUCache原理
3、图片加载原理
4、自己去实现图片库,怎么做?
5、Glide源码解析
6、Glide使用什么缓存?
7、Glide内存缓存如何控制大小?
2.网络和安全机制:
1.网络框架对比和源码分析
2.自己去设计网络请求框架,怎么做?
3.网络请求缓存处理,okhttp如何处理网络缓存的
4.从网络加载一个10M的图片,说下注意事项
5.TCP的3次握手和四次挥手
6.TCP与UDP的区别
7.TCP与UDP的应用
8.HTTP协议
9.HTTP1.0与2.0的区别
10.HTTP报文结构
11.HTTP与HTTPS的区别以及如何实现安全性
12.如何验证证书的合法性?
13.https中哪里用了对称加密,哪里用了非对称加密,对加密算法(如RSA)等是否有了解?
14.client如何确定自己发送的消息被server收到?
15.谈谈你对WebSocket的理解
16.WebSocket与socket的区别
17.谈谈你对安卓签名的理解。
18.请解释安卓为啥要加签名机制?
19.视频加密传输
20.App 是如何沙箱化,为什么要这么做?
21.权限管理系统(底层的权限是如何进行 grant 的)?
3.数据库:
1.Sqlite升级,增加字段的语句
2.数据库框架对比和源码分析
3.数据库的优化
4.数据库数据迁移问题
4.插件化、模块化、组件化、热修复、增量更新、Gradle:
1.对热修复和插件化的理解
2.插件化原理分析
3.模块化实现(好处,原因)
4.热修复、插件化
5.项目组件化的理解
6.描述清点击 Android Studio 的 build 按钮后发生了什么
5.架构设计和设计模式:
1.谈谈你对Android设计模式的理解
2.MVC MVP MVVM原理和区别
3.你所知道的设计模式有哪些?
4.项目中常用的设计模式
5.手写生产者/消费者模式
6.写出观察者模式的代码
7.适配器模式,装饰者模式,外观模式的异同?
8.用到的一些开源框架,介绍一个看过源码的,内部实现过程。
9.谈谈对RxJava的理解
10.Rxjava发送事件步骤
11.RxJava的作用,与平时使用的异步操作来比的优缺点
12.说说EventBus作用,实现方式,代替EventBus的方式
13.从0设计一款App整体架构,如何去做?
14.说一款你认为当前比较火的应用并设计(比如:直播APP,P2P金融,小视频等)
15.谈谈对java状态机理解
16.Fragment如果在Adapter中使用应该如何解耦?
17.Binder机制及底层实现
18.对于应用更新这块是如何做的?(解答:灰度,强制更新,分区域更新)?
19.实现一个Json解析器(可以通过正则提高速度)
20.统计启动时长,标准
6.性能优化:
1.启动 app 黑白屏优化
2.稳定——内存优化
3.流畅——卡顿优化
4.节省——耗电优化
5.安装包——APK 瘦身
6.冷启动与热启动
7.内存泄漏的场景和解决办法
8. Bitmap 优化
9.LRU 的原理
10.webview 优化
11.如何避免 OOM?
7.Android Framework
1.Android 系统架构
2.View 的事件分发机制?滑动冲突怎么解决?
3.View 的绘制流程?
4.跨进程通信
5.Android 系统启动流程是什么?
6.启动一个程序,可以主界面点击图标进入,也可 以从一个程序中 跳转过去,二者有什么区别?
7.AMS 家族重要术语解释
8.用到的一些开源框架,介绍一个看过源码的,内部实现过程。
8.Android优秀三方库源码:
1.网络底层框架:OkHttp 实现原理
2.网络封装框架:Retrofifit 实现原理
3.响应式编程框架:RxJava 实现原理
4.图片加载框架:Glide 实现原理
5.事件总线框架:EventBus 实现原理
6.内存泄漏检测框架:LeakCanary 实现原理
7.依赖注入框架:ButterKnife 实现原理
8.依赖全局管理框架:Dagger2 实现原理
9.数据库框架:GreenDao 实现原理
Android高级架构师学习规划路线:
作为一Android架构师这些是Android的必会重点知识点:
1.高级UI,自定义View
2.NDK开发
3.数据结构与算法:
4.Java内核原理
5.Flutter
6.性能优化
UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。
不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!
2.NDK开发
音视频,人工智能,这些是未来没办法阻挡的发展大趋势。我们可以在猎聘网上看那些招聘岗位,要求精通NDK的薪资都在30-60K+。追求高薪岗位的小伙伴别错过
3.数据结构与算法:
字节跳动面试,算法不过关被拒。就想换一家算法要求不高的大厂不就行了?
结果去阿里,去腾讯,去华为,小米等公司面试,不料也都被拒绝了!
4.Java内核原理
百分之百,大大小小所有公司,面试必问
5.Flutter
火了一年多了,你工作不一定要用到。但是你出去面试(初级很少要求会),肯定会问到的。
关于Flutter是不是未来,我没法确定告诉你,我能确定的就是你要去面试高薪岗位,你得掌握这种主流的新技术(大厂最看重的除了基础,技术水平外,就是你的学习能力。)
6.性能优化
听说大公司的末位淘汰制专为代码质量差性能低的员工准备的。怎么样写一手高性能的代码?怎样进行性能调优呢?
除了以上资料小编还整理了Android核心高级技术PDF文档,BAT大厂面试真题解析,都是免费分享给大家的,只需点此处即可直达领取方式。
本文已收录GitHub,需要文中资料也可点此GitHub免费下载。
整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
你的支持,我的动力;祝各位前程似锦,offer不断!!!记得三连哦!