Android并发编程高级面试题汇总最全最细面试题讲解持续更新中👊👊 👀你想要的面试题这里都有👀 👇👇👇
这道题想考察什么?
类加载机制中类加载的过程
考察的知识点
- 类加载过程
- 类加载时机
考生应该如何回答
Android加载类的方式实际上就是Java的类加载。虚拟机把描述类的信息从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终才能够变成可以被虚拟机直接使用的 Java 类型。 类加载过程见 《5.1 描述JVM类加载过程》 。
类加载时机
在以下情况下,类会自动加载:
- 使用 new 实例化对象,创建子类的实例会首先加载其父类
- 访问类的静态方法
- 访问类的静态属性
- 对类进行反射调用
- Java程序中定义了main的类,在启动main方法时该类会被加载
以上五种情况都会触发类的加载并且完成对类的初始化。除了以上情况之外,我们也可以主动调用ClassLoader#loadClass(name) 或者Class.forName(name) 进行加载。实际上Class.forName(name)也是通过ClassLoader完成对指定类的加载。
public static Class<?> forName(String className) throws ClassNotFoundException {
//得到调用者的类,如main方法所在类
Class<?> caller = Reflection.getCallerClass();
//ClassLoader.getClassLoader(caller):获得main方法所在类的类加载器,使用其完成className的加载
return forName0(className, true, ClassLoader.getClassLoader(caller), caller);
}
但是ClassLoader#loadClass(name)与Class.forName(name) 不同的是,后者除了完成类加载之外,还会对类进行初始化,执行类中的static块。而 ClassLoader#loadClass只会完成类的加载。
当然 ,我们也可以使用:Class.forName(String name, boolean initialize, ClassLoader loader)。通过第二个参数initialize ,从而选择是否需要对类进行初始化。
ClassNotFound的有可能的原因是什么?(阿里)
这道题想考察什么?
类加载流程
考察的知识点
- 反射机制
- 反射在框架中的应用
- 获取Class类的主要方式
考生应该如何回答
ClassNotFoundException表示虚拟机加载指定的类时,如果没有找到对应的Class文件时,抛出的异常。以Android为例,出现此异常的原因可能有:
1、APK中dex未包含需要加载的类数据,导致类加载器无法加载;
2、Android Dalvik下,使用dex分包,在Secondary DEX 加载之前,需要使用不在主dex中的类
3、类数据不合法验证失败导致加载失败。此时能够在Log中看到:
Failure to verify dex file '/data/app/xxxxx/base.apk'
更多Android面试题 可以详细Vx关注公众号:Android老皮 解锁 《2023最新Android中高级面试题汇总+解析》
目录
第一章 Java方面
- Java基础部分
- Java集合
- Java多线程
- Java虚拟机
第二章 Android方面
- Android四大组件相关
- Android异步任务和消息机制
- Android UI绘制相关
- Android性能调优相关
- Android中的IPC
- Android系统SDK相关
- 第三方框架分析
- 综合技术
- 数据结构方面
- 设计模式
- 计算机网络方面
- Kotlin方面
第三章 音视频开发高频面试题
- 为什么巨大的原始视频可以编码成很小的视频呢?这其中的技术是什么呢?
- 怎么做到直播秒开优化?
- 直方图在图像处理里面最重要的作用是什么?
- 数字图像滤波有哪些方法?
- 图像可以提取的特征有哪些?
- 衡量图像重建好坏的标准有哪些?怎样计算?
第四章 Flutter高频面试题
- Dart部分
- Flutter部分
第五章 算法高频面试题
- 如何高效寻找素数
- 如何运用二分查找算法
- 如何高效解决雨水问题
- 如何去除有序数组的重复元素
- 如何高效进行模幂运算
- 如何寻找最长回文子串
第六章 Andrio Framework方面
- 系统启动流程面试题解析
- Binder面试题解析
- Handler面试题解析
- AMS面试题解析