由 ChatGPT 生成的文章摘要
博主最近参加了字节跳动的测开实习岗位面试,并分享了面试经历。面试问题涵盖了自我介绍、性能波动原因、性能工具、程序在不同机器上无法运行的原因、Java程序问题排查、程序的健壮性验证、常用Linux命令和性能监控命令等多个方面。在回答过程中遇到了困难和回答不上来的问题,整体感觉自己不够好,最后的算法题也没有做出来。博主对于自己面试表现不满意,打算后续继续学习和提升。
面试经历 - 字节跳动测开实习
前几天用某位朋友的内推码投递了字节的“测试开发实习生-系统架构”一职,本来泡池子了,结果硬是被这位朋友捞起来了,于是昨天下午收到了字节 HR 打来的约面电话,了解了一些基本信息后,约定了在今日下午五点进行面试。
不得不说字节的面试体验确实很好,但是掩盖不住我太菜了,感觉答得都不好,算法题也没做出来。🥲🥲🥲🥲
下面是问的一些问题:
- 介绍一下自己
- 问一下如果一个业务的性能波动比较大,你有什么想法?(排查测试环境,应用自身原因,性能工具监控)
- 既然聊到了性能工具,能简单介绍一下有哪些以及他们的原理吗?(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 是从什么角度进行了跨平台的适配(没答好,只说了中间字节码)
- 对编译链接的了解(还是没答好,他其实问的是 JVM 的链接,但我没答)
- 对 x86 和 ARM 架构指令集的了解(不会)
- 简单讲讲项目经历
- 算法题:找出最大的湖(DFS,没做出来,全程被指导)
感觉应该一面挂了🥲,⑧说了,回炉重造去了。
呜呜呜,我啥都不会