Android反射类加载与动态代理面试题汇总(含详细解析 二)

275 阅读3分钟

Android并发编程高级面试题汇总最全最细面试题讲解持续更新中👊👊 👀你想要的面试题这里都有👀 👇👇👇

这道题想考察什么?

类加载机制中类加载的过程

考察的知识点

  1. 类加载过程
  2. 类加载时机

考生应该如何回答

Android加载类的方式实际上就是Java的类加载。虚拟机把描述类的信息从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终才能够变成可以被虚拟机直接使用的 Java 类型。 类加载过程见 《5.1 描述JVM类加载过程》

类加载时机

在以下情况下,类会自动加载:

  1. 使用 new 实例化对象,创建子类的实例会首先加载其父类
  2. 访问类的静态方法
  3. 访问类的静态属性
  4. 对类进行反射调用
  5. 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的有可能的原因是什么?(阿里)

这道题想考察什么?

类加载流程

考察的知识点

  1. 反射机制
  2. 反射在框架中的应用
  3. 获取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中高级面试题汇总+解析》

目录

img

第一章 Java方面

  • Java基础部分
  • Java集合
  • Java多线程
  • Java虚拟机

img

第二章 Android方面

  • Android四大组件相关
  • Android异步任务和消息机制
  • Android UI绘制相关
  • Android性能调优相关
  • Android中的IPC
  • Android系统SDK相关
  • 第三方框架分析
  • 综合技术
  • 数据结构方面
  • 设计模式
  • 计算机网络方面
  • Kotlin方面

img

第三章 音视频开发高频面试题

  • 为什么巨大的原始视频可以编码成很小的视频呢?这其中的技术是什么呢?
  • 怎么做到直播秒开优化?
  • 直方图在图像处理里面最重要的作用是什么?
  • 数字图像滤波有哪些方法?
  • 图像可以提取的特征有哪些?
  • 衡量图像重建好坏的标准有哪些?怎样计算?

img

第四章 Flutter高频面试题

  • Dart部分
  • Flutter部分

img

第五章 算法高频面试题

  • 如何高效寻找素数
  • 如何运用二分查找算法
  • 如何高效解决雨水问题
  • 如何去除有序数组的重复元素
  • 如何高效进行模幂运算
  • 如何寻找最长回文子串

img

第六章 Andrio Framework方面

  • 系统启动流程面试题解析
  • Binder面试题解析
  • Handler面试题解析
  • AMS面试题解析