题库汇总目录 https://www.jianshu.com/p/172d63e0744a
Android大厂高频面试题目,所有题目都是来自于一线大厂真题,题目还会继续填充,答案正在完善中....
一、Android基础篇
二、Java基础篇
三、数据结构篇
四、高并发篇
五、性能优化篇
六、计算机网络篇
七、设计模式篇
八、编程/算法篇
九、开源代码篇
十、其他技术篇
十一、项目篇
十二、开放性题目篇
十三、HR篇
一、android系统篇
目前只给出题目,后面会逐渐完善答案。
AMS
参考资料:
binder讲解:https://blog.csdn.net/qq_30379689/article/details/79451596
binder Native:https://blog.csdn.net/Evan_Lo/article/details/78916042
AIDL使用:https://www.jianshu.com/p/29999c1a93cd
binder原理:https://www.jianshu.com/p/4920c7781afe?from=jiantop.com
binder原理和实现一次拷贝的流程:https://blog.csdn.net/AndroidStudyDay/article/details/93749470
【重点】Android跨进程通信:图文详解 Binder机制 原理: https://cloud.tencent.com/developer/article/1394290
- ActivityThread里面启动那个线程是干嘛的?
binder
- binder最大传输限制是1M-8KB
- 这种进程间通信的优势:
https://www.jianshu.com/p/a65b5cfcc418 - binder是不是异步的?
- linux有哪些线程间通信,android这种线程间通信有什么优势
- 安卓有进程通信方式有哪些
- binder的内存映射为什么只需要复制一次
handler
- handler的实现原理
- msg队列中没有消息线程处于什么状态、怎么唤醒的
- looper的阻塞是通过什么实现的
管道 - 怎么给线程创建looper的
- handler的定时任务的实现
- looper.loop做了什么
- 线程 looper hander 消息队列分别都会有几个
- message队列中没有消息后,当前线程处于什么状态,当消息再次来到的时候怎么通知当前线程
- 信号量唤起线程是怎么实现的
- Looper为什么不会造成ANR
首先不是一个概念looper阻塞不是进程就卡死了,而是等待消息来处理,一但有消息来到looper这里就会在主线程中处理,其次ANR的造成是由于事件没有及时被处理如点击事件长时间没有响应,或者这个事件处理的事件事件过长如这个Activity或service的生命周期执行方法过长。
二、四大组件
1.Activity
- Activity的生命周期
- activity生命周期,A到B按返回,生命周期顺序。
- B是SingleTop、B启动B会执行哪些生命周期方法
- A到B到C,C退出想跟A通信,怎么设计启动模式,如果A被回收了呢(有涉及onNewIntent)
会不会启动onResum? - Activity的启动模式有哪些
- Android为啥么要有Activity的存在
- Activity和window的关系
- Activity的启动流程
- 如何知道Activiyt渲染完成
- 在Activity的oncreate方法中调用finish都执行哪些生命周期 https://blog.csdn.net/fesdgasdgasdg/article/details/79138321
- fragment生命周期
- Fragment只能在Activity中运行吗
- Activity外部启动是否运行到其他进程、Activity的崩溃是否会影响其他进程的崩溃
- 怎么解决,如何设置只在自己的进程中运行
2.Service
- service的生命周期
- intentService和Service区别
- HandlerThread的实现和作用
- service和Thread的区别还有优缺点
- 一个app中两个service 一个服务进程 一个前台进程是否同时回收
- Service和Thread如何选择
Service优点:
1.长期Service,短期Thread
2.当Activity finish后容易产生野Thread
3.Service保活能力强
3.Broadcase
- 有哪几类广播
- LocalBroadcas的实现原理
4.ContentProvider
- 四大组件哪些是运行在主线程的
三、View相关
View的事件分发
- view事件分发原理
- view的cancel事件都什么时候触发
- view的cancel事件都什么时候触发
- 一个listenerview里面有button,当点击button以后再划出 抬起,整个事件是怎么分发的
- 两个view 、蓝色在外、红色在内,点击红色移动到蓝色,松手 哪个click事件执行了,事件怎么传递的
- 手指离开view时view收到的最后一个事件
- Activity可以做事件拦截吗,可以在开始就拦截吗,有dispatchTouchEvent吗
- 怎么解决滑动冲突
- 怎么加大view事件点击区域
view的绘制
- view的绘制流程
- view的三个重要方法的详细实现
- view和viewgroup中onLayout的区别
- 介绍一下mesure方法
- Measure三种模式的含义
- ondraw方法都什么时候调用
- 如何自定义一个ui组件,请举例介绍下
- 实现圆形头像的方法
- 自定义view,getWith和getMeasureWith什么区别,什么时候不一样,layout的时候给left和right的宽度如果跟getMeasureWith不一样会怎样
- 两个view在父布局中比重为1和2,显示结果是什么。(重点为2次measure,最终宽度为本身宽度+剩余父空间在比重所占的比例)
其他
- 怎么获取view的高度
- handler.post 能不能获取到高度
- onCreate设置了contentView之后,获取它里面的一个textview的宽高能获取吗,如果想获取宽高如何去做?
- 如果想让一个imageView高度跟着一个textview的高度变化怎么做
- onGlobalLayoutChange里能获取到宽高吗
-还在onCreate的时候用textView.post,之后再runnable中能获取宽高吗,为什么 - view.post有自己的队列吗
- view的x和left区别
- vsynch信号收到以后有没有做什么特殊处理
- view的requestLayout和Initlayout区别
动画
- 动画分哪几类。
- 动画总结。 重点是属性动画内部实现原理,差值器和估值器的使用
- 属性动画和补间动画的区别
- 怎么实现一个View怎么绕着圆心转
Window
- Activity,Window,DecorView之间的关系
- 一个Activity一定会有一个window吗,如果有什么时候创建的
- setContentView是加在DecorView的什么地方,DecorView是什么样的布局,什么样的结构
- 如何开启一个window
- popupwindow的原理
- Activity中的window是什么时候创建的
Activity的attach方法中 - DecorView是什么时候创建的
setContentView
sp
- 实现原理
- 是不是线程安全
- 是不是进程安全的
- 怎么实现进程安全
context
- android有哪些Context
两个虚拟机区别
Dalvik
- Dalvik基于寄存器
- jvm基于栈
- 执行的是dex字节码格式
- 多个class装载在一个dex文件
ART
- 应用在第一次安装的时候会预编译成机器码
- Dalvik每次启动都要编译、ART只需要首次。所以后面启动速度更快
- ART占用空间大(原始代码占用空间大)
- 减少编译、减少cpu使用频率
进程
- 进程之间的优先级。 前台进程、可见进程、后台进程、不可见进程与空进程
- 如何起多进程
- 起多进程有什么好处
- 实现跨线程通信和跨进程通信的方式
其他
- aar打包R文件怎么处理的
- 65535方法数限制的原理、及怎么解决
- android里面的序列化方式有哪些,分别有什么区别,性能上哪个好,为什么,parceable可以持久化到本地吗?
- AsyncTask内部实现原理
是串行还是并行
为什么是串行
怎么改成并行 - 安卓里有哪些ClassLoader,有用过pathClassLoader吗
- Serializable和Parcelable的区别,各自的优势
- 一个bitmap,怎么计算内存(RGB888)
- Android 4.0, Android5.0,Android8.0版本安装过程有啥区别
- 不同drawe文件加载在内存的区别
- 一个图片加载到内存占用占有多大内存
- 一个图片像素除了四个字节的表示还有什么表示方法
- recylerview缓存机制
- ASyncTask原理