0
点赞
收藏
分享

微信扫一扫

分享一些重要的Android面试题,GitHub标星8k

sin信仰 2022-01-31 阅读 32

2.ScheduledThreadPoolExecutor:可以延时调用线程或者延时重复调度线程。

3.GC相关:重要

1.搜索算法:

1.引用计数

2.图搜索,可达性分析

2.回收算法:

1.标记清除复制:用于青年代

2.标记整理:用于老年代

3.堆分区:

1.青年区eden 80%、survivor1 10%、survivor2 10%

2.老年区

4.虚拟机栈分区:

1.局部变量表

2.操作数栈

3.动态链接

4.方法返回地址

5.GC Roots:

1.虚拟机栈(栈桢中的本地变量表)中的引用的对象

2.方法区中的类静态属性引用的对象

3.方法区中的常量引用的对象

4.本地方法栈中JNI的引用的对象

JAVA类加载过程:

1.加载时机:创建实例、访问静态变量或方法、反射、加载子类之前
2.验证:验证文件格式、元数据、字节码、符号引用的正确性
3.加载:根据全类名获取文件字节流、将字节流转化为静态储存结构放入方法区、生成class对象
4.准备:在堆上为静态变量划分内存
5.解析:将常量池中的符号引用转换为直接引用
6.初始化:初始化静态变量
MVC、MVP、MVVM:

1.mvc:数据、View、Activity,View将操作反馈给Activity,Activitiy去获取数据,数据通过观察者模式刷新给View。循环依赖
1.Activity重,很难单元测试
2.View和Model耦合严重
2.mvp:数据、View、Presenter,View将操作给Presenter,Presenter去获取数据,数据获取好了返回给Presenter,Presenter去刷新View。PV,PM双向依赖
1.接口爆炸
2.Presenter很重
3.mvvm:数据、View、ViewModel,View将操作给ViewModel,ViewModel去获取数据,数据和界面绑定了,数据更新界面更新。
1.viewModel的业务逻辑可以单独拿来测试
2.一个view 对应一个 viewModel 业务逻辑可以分离,不会出现全能类
3.数据和界面绑定了,不用写垃圾代码,但是复用起来不舒服
APK瘦身:

1.classes.dex:通过代码混淆,删掉不必要的jar包和代码实现该文件的优化

2.资源文件:通过Lint工具扫描代码中没有使用到的静态资源

3.图片资源:使用tinypng和webP,下面详细介绍图片资源优化的方案,矢量图

4.SO文件将不用的去掉,目前主流app一般只放一个arm的so包

ANR的形成,各个组件上出现ARN的时间限制是多少

1.只要是主线程耗时的操作就会ARN 如io

2.broadcast超时时间为10秒 按键无响应的超时时间为5秒 前台service无响应的超时时间为20秒,后台service为200秒

SERIALIZABLE和PARCELABLE 的区别

1.P 消耗内存小

2.网络传输用S 程序内使用P

3.S将数据持久化方便

4.S使用了反射 容易触发垃圾回收 比较慢

SHAREDPREFERENCES源码简述

1.储存于硬盘上的xml键值对,数据多了会有性能问题

2.ContextImpl记录着SharedPreferences的重要数据,文件路径和实例的键值对

3.在xml文件全部内加载到内存中之前,读取操作是阻塞的,在xml文件全部内加载到内存中之后,是直接读取内存中的数据

4.apply因为是异步的没有返回值, commit是同步的有返回值能知道修改是否提交成功

5.多并发的提交commit时,需等待正在处理的commit数据更新到磁盘文件后才会继续往下执行,从而降低效率; 而apply只是原子更新到内存,后调用apply函数会直接覆盖前面内存数据,从一定程度上提高很多效率。 3.edit()每次都是创建新的EditorImpl对象.

ANR的形成,各个组件上出现ARN的时间限制是多少

1.只要是主线程耗时的操作就会ARN 如io

2.broadcast超时时间为10秒 按键无响应的超时时间为5秒 前台service无响应的超时时间为20秒,后台service为200秒

APK瘦身:

1.classes.dex:通过代码混淆,删掉不必要的jar包和代码实现该文件的优化

2.资源文件:通过Lint工具扫描代码中没有使用到的静态资源

3.图片资源:使用tinypng和webP,下面详细介绍图片资源优化的方案,矢量图

4.SO文件将不用的去掉,目前主流app一般只放一个arm的so包

Android群653583088进群私聊管理员可以免费获得Android架构资料和源码解析资料以及10年经验大佬讲解

最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

[外链图片转存中…(img-oprgOZIJ-1643542441661)]

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

举报

相关推荐

0 条评论