- 介绍一下自己
- 问一下如果一个业务的性能波动比较大,你有什么想法?(排查测试环境,应用自身原因,性能工具监控)
- 既然聊到了性能工具,能简单介绍一下有哪些以及他们的原理吗?(jprofiler,覆盖率检测)
- 如果一个可执行程序在 x86 机器上能跑但是在 ARM 的机器上不能跑,你认为有什么可能的原因?(系统架构,编译,代码问题)
- 如果一个 Java 程序出现了上述问题,具体可能会有什么原因?(JNI 调用,Magic code,面试官随后补充 JDK 版本原因)
- 如果需要让你验证一个程序包的健壮性,都会从哪些角度去验证(压力测试,内存泄漏)
- Linux 常用命令(`ls`, `pwd`, `rm`, `cd`)
- Linux 常用性能监控命令(只记得 `netstat`,面试官后续补充例如 `free` 等命令)
- 对软链接的了解(路径映射)
- Linux 权限相关了解(`chmod`,Linux 权限组成)
- Linux 设置环境变量(`export`,刚开始答成 PowerShell 的`$env` 了,被指正了以后改过来了)
- Java 函数分配原理(堆栈)
- 简述 Java 的堆和栈(对象创建在堆上,基本数据类型创建在栈上)
- 简述 Java 垃圾回收机制(标记,计数,G1新生代老年代)
- 如何判断对象是否存活?
- 对象标记是从 root 开始的,那么 root 是从哪些信息或者哪些变量里获得的
- 如何理解 STW,STW 会在什么情况下发生?
- 简单描述一下线程池(分配,调度线程)
- 协程和线程池的优缺点(用户态,占用小)
- 简述 Maven 和 Gradle 的功能或特点
- 如果希望在 Maven 项目中通过 JNI 加载并调用一个本地 `.so` 文件,应该如何配置 Maven(我没听懂这个题,瞎答了一通,实际上面试官想让我回答打包 JAR)
- 展开讲讲 JVM 的编译和解释执行(`.class`, `.java`, JIT, AOT,热点代码)
- JVM 是从什么角度进行了跨平台的适配(没答好)
- 对编译链接的了解(还是没答好)
- 对 x86 和 ARM 架构指令集的了解(不会)
- 简单讲讲项目经历
- 算法题:找出最大的湖(DFS,没做出来,全程被指导)