- 介绍一下自己- 问一下如果一个业务的性能波动比较大,你有什么想法?(排查测试环境,应用自身原因,性能工具监控)- 既然聊到了性能工具,能简单介绍一下有哪些以及他们的原理吗?(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,没做出来,全程被指导)