前言
又到了一年一度的金三银四黄金跳槽时节,也是互联网大厂疯狂招人的时期,现在应该有很多Android程序员已经按耐不住了。但是现在网上的面试题资料太多了,而且有些面试题已经过时甚至是漏洞百出。今天结合自己前段时间的面试经历和几位大厂大佬交流讨论总结出这份2023年Android中高级最全面试题来帮助大家轻松搞定offer。话不多说,直接上干货!!!
面试题
一、Activity的启动方式
standard 不管有没有已存在的实例,都生成新实例
singleTop 如果发现有对应的Activity实例位于栈顶,则重复利用,否则创建实例
singleTask a)栈内复用,复用时具有clearTop机制 b)single taskAffinity in task
singleInstance a)启用一个新的栈结构,将Activity放置于栈结构中,并保证不会有其
它Activity实例进入 b)方便多个应用共享全局唯一的实例
二、Handler防止内存泄露
原因 a).声明Handler为静态类,同时对于Activity的this引用封装成WeakReference
否则会导致匿名类引用了外部Activity,导致Activity不能被回收 b).如果这时对手机硬
件进行横竖屏切换,讲导致Activity被创建,却不能被回收
措施
a).public void onDestroy()
{
mHandler.removeCallbacksAndMessages(null);
}
static class MyHandler extends Handler {
WeakReference<Activity > mActivityReference;
MyHandler(Activity activity) {
mActivityReference= new WeakReference<Activity>(activity);
}
@Override
public void handleMessage(Message msg) {
final Activity activity = mActivityReference.get();
if (activity != null) {
mImageView.setImageBitmap(mBitmap);
}
}
}
三、SoftReference跟WeakRefrence的区别
WeakRefrence => 与强引用对象的生命周期一致,不会增加引用计数
SoftReference => 内存不足时才进行回收
四、如何避免OOM
减少内存对象的占用
- ArrayMap/SparseArray代替hashmap
- 避免在android里面使用Enum
- 减少bitmap的内存占用
- 减少资源图片的大小,过大的图片可以考虑分段加载
五、Devik 进程,linux 进程,线程的区别
Dalvik进程。
每一个android app都会独立占用一个dvm虚拟机,运行在linux系统中。
所以dalvik进程和linux进程是可以理解为一个概念。
六、Framework 工作方式及原理,Activity 是如何生成一个 view 的,机制是什么
Framework是android 系统对 linux kernel,lib库等封装,提供WMS,AMS,bind机制,handler-message机制等方式,供app使用。
简单来说framework就是提供app生存的环境。
- Activity在attch方法的时候,会创建一个phonewindow(window的子类)
- onCreate中的setContentView方法,会创建DecorView
- DecorView 的addview方法,会把layout中的布局加载进来。
由于篇幅原因,以上面试题只抽取部分内容展示,需要更多章节面试题内容的可以继续往下看哦,扫描下方二维码,领取完整版。
第一章 Java方面
- Java基础部分
- Java集合
- Java多线程
- Java虚拟机
第二章 Android方面
- Android四大组件相关
- Android异步任务和消息机制
- Android UI绘制相关
- Android性能调优相关
- Android中的IPC
- Android系统SDK相关
- 第三方框架分析
- 综合技术
- 数据结构方面
- 设计模式
- 计算机网络方面
- Kotlin方面
第三章 音视频开发高频面试题
- 为什么巨大的原始视频可以编码成很小的视频呢?这其中的技术是什么呢?
- 怎么做到直播秒开优化?
- 直方图在图像处理里面最重要的作用是什么?
- 数字图像滤波有哪些方法?
- 图像可以提取的特征有哪些?
- 衡量图像重建好坏的标准有哪些?怎样计算?
- …
第四章 Flutter高频面试题
- Dart部分
- Flutter部分
第五章 算法高频面试题
- 如何高效寻找素数
- 如何运用二分查找算法
- 如何高效解决雨水问题
- 如何去除有序数组的重复元素
- 如何高效进行模幂运算
- 如何寻找最长回文子串
- …
第六章 Andrio Framework方面
- 系统启动流程面试题解析
- Binder面试题解析
- Handler面试题解析
- AMS面试题解析
第七章 企业常见174道面试题
- SD卡
- Android的数据存储方式
- Broadcast Receiver
- sp频繁操作会有什么后果?sp能存多少数据?
- dvm与jvm的区别
- ART
- Activity的生命周期
- Application能不能启动Activity
- …
结语
希望这份面试题,能帮助大家把握住机会,找到自己心仪的工作!!