反射配置与 AOT 编译

共 18 题
#

1. Spring AOP 与 Native Image 的兼容性处理

A Spring AOT 只优化启动速度,对 AOP 无效
B Spring AOP 在 Native 中会自动生成代理,无需任何配置
C Native 完全支持所有动态代理,无需处理
D Spring AOP 依赖动态代理,需靠 Spring AOT 在构建期预生成代理并配置代理/反射元数据 ✓ 正确答案
#

2. GraalVM 的 @ReflectionRegister 注解与代理配置

A @ReflectionRegister 用于声明类的反射需求,动态代理通过 proxy-config 或相关注解声明 ✓ 正确答案
B 代理配置不是必需的,反射即可覆盖
C 注解只能用于接口,不能用于类
D 注解在运行时生效,与构建无关
#

3. 使用 Tracing Agent 自动生成反射配置

A Agent 只能生成字节码,无法生成配置
B 生成配置后无需再将其提供给构建
C 采集时无需覆盖所有使用路径
D 通过 -agentlib:native-image-agent 采集运行期动态调用并输出 JSON 配置,用于构建 ✓ 正确答案
#

4. Hibernate 在 Native Image 中的字节码增强处理

A Hibernate 在 Native 中无需任何配置即可运行
B 字节码增强在运行时自动生成,无需处理
C Hibernate 与 Native 完全不兼容,无法使用
D Hibernate 依赖字节码增强、反射与序列化,需在构建期注册相应配置并利用框架的 Native 支持 ✓ 正确答案
#

5. Tracing Agent 在哪些场景捕获不到反射调用(构建期初始化、Lambda、第三方线程)及其补充手段

A Agent 能捕获所有可能的反射调用
B Lambda 中的反射一定被捕获
C 构建期初始化、未执行路径的反射、后台线程等场景可能无法被捕获,需手动配置或注解补充 ✓ 正确答案
D 只需一次运行即可生成完整配置
#

6. JNI 在 Native Image 中的使用与限制

A 需通过 jni-config 声明 Java 侧回调边界,并确保 native 库平台匹配 ✓ 正确答案
B Native 完全禁止 JNI
C JNI 在 Native 中无需任何配置
D JNI 库在任意平台都可直接复用
#

7. Native Image 中的 ResourceBundle 与国际化

A 需通过 resource-config 声明并保证运行期可按 Locale 加载,动态新增 locale 需构建期已知 ✓ 正确答案
B 国际化资源无需打包即可加载
C Native 不支持任何国际化
D ResourceBundle 在 Native 中自动全量可用
#

8. Native Image 中的序列化(Serialization)支持与限制

A 序列化在 Native 中无需配置
B 所有类都会被自动注册为可序列化
C 序列化只影响性能,不影响正确性
D 序列化类需通过 serialization-config 在构建期注册,动态传入任意类在 Native 中不可行 ✓ 正确答案
#

9. 反射/动态代理的 AOT 限制,为何需要 reflect-config.json,Spring 如何自动收集?

A 基于字符串的反射与动态代理在 AOT 中不可见,需 reflect-config/proxy-config 声明,Spring AOT 会静态化装配并自动收集这些元数据 ✓ 正确答案
B Spring AOT 无需收集任何配置
C 动态代理在运行时自动生成,无需 pre-声明
D AST 分析能自动发现所有反射调用
#

10. Jackson 在 Native Image 中的反射与序列化配置(ParameterNamesModule、Jandex 索引)

A 参数名保留对 Jackson 无影响
B Jackson 在 Native 中无需任何配置
C Jandex 索引用于运行时动态编译
D 需反射配置声明 JSON 类,ParameterNamesModule 利用参数名反序列化,Jandex 索引辅助构建期类扫描 ✓ 正确答案
#

11. AOT 编译阶段 ServiceLoader 的预解析策略?

A ServiceLoader 在 Native 中自动扫描所有服务
B 需在构建期声明服务接口与实现并纳入可达性闭包,避免运行时发现不到服务 ✓ 正确答案
C 服务实现无需注册即可被发现
D 预解析只影响启动速度,不影响正确性
#

12. Native Image 下 Security Manager 与 sun.misc.Unsafe 的禁用路径?

A Unsafe 在 Native 中所有能力都可用
B Security Manager 在 Native 中完全可用
C Security Manager 在 Native 中不受支持,Unsafe 的部分能力受限,建议用受控 API 替代 ✓ 正确答案
D 这些 API 与 Native 无关,无需关注
#

13. 动态代理(Dynamic Proxy)在 Native Image 中的配置

A 动态代理在运行时自动生成,无需配置
B 需通过 proxy-config 声明代理的接口组合,接口组合须在构建期已知 ✓ 正确答案
C 代理配置只影响镜像体积
D 任意接口组合都能在运行时动态生成
#

14. GraalVM 的 reachability metadata,features 与 resource-config 的配置方式如何?

A resource-config 无法声明资源
B Feature 只能用于正则表达式
C 可通过 Feature 编程式注册反射/资源,也可通过 resource-config 声明式配置资源 ✓ 正确答案
D 只有一种配置方式
#

15. GraalVM 的配置生成工具,native-image-agent 的追踪模式与手动合并如何?

A Agent 只能输出一份固定配置
B 追踪模式采集运行期动态调用并输出 JSON,可指定 merge 目录合并多轮采集结果 ✓ 正确答案
C 追踪模式不采集任何反射
D 合并只能手动,无法自动
#

16. Spring 的 AOT 处理,Bean 定义、条件注解在构建期的评估如何?

A Spring AOT 不处理任何 Bean
B 条件注解在运行时重新评估,与构建无关
C Bean 定义在 Native 中完全动态扫描
D 构建期静态化 Bean 定义并在构建期评估条件注解,因此构建环境需与运行环境一致 ✓ 正确答案
#

17. Spring AOT 处理中的 proxy 与 lambda,native 化的序列化边界如何?

A AOT 生成的 proxy/lambda 对象若需序列化,其类须被注册到序列化配置,否则运行期会失败 ✓ 正确答案
B 所有对象在 Native 中自动可序列化
C lambda 在 Native 中无法序列化也无需注册
D 序列化边界只影响性能
#

18. 反射配置的版本漂移(代码演进后配置过期)与 CI 校验

A 配置过期不会导致运行期错误
B 配置一旦生成就永久有效
C 版本漂移只影响构建时间
D 代码演进会让配置过期,需在 CI 中重新采集并 diff,确保配置与代码同步 ✓ 正确答案