面试字节跳动,简历上没有精通这个技术,你连面试机会都不会有

前段时间,帮一个小老弟联系了一下字节的老同学,内推了一波,在一面的时候,表现相当不错,毕竟这玩意咱内推也怕推的人过去了不能满足需求打脸不是,可是在二面的时候出了问题,问这小子也不说,没办法,只能去联系一下老同学了

这不,破费一波吧老同学约出来吃顿饭,他告诉我其实小老弟并不是个例,他倒没觉得有什么,不过他提醒了我让我告诉小老弟以后面试的几个点,在这里我也分享给大家:

  • 当面试官向你提问JVM的实战问题时,你是否感觉到无所适从?
  • 想解决生产环境中的GC问题,你是否感觉到狗咬刺猬,无处下嘴?
  • 面对JVM的海量参数,你是否感觉到迷茫无助?
  • 看过很多的JVM文章,但当遇到了生产环境中真实问题的时候,你是否依然不知道如何进行分析排查?

如果是这样,我觉得我们大家先想清楚在金九银十这个时间段“自己想要什么”最为重要

当时跟朋友聊了半天,其实最重要的还是“实战”!   先来点初级的资料

帮助大家回顾一下基础知识吧,是什么玩意引起的我们需要进行jvm调优?

1.什么是垃圾

C语言申请内存:malloc free

C++: new delete

Java: new ?

自动内存回收,编程上简单,系统不容易出错,手动释放内存,容易出两种类型的问题:

忘记回收

多次回收

没有任何引用对象的一个对象或者多个对象(循环引用)

2.如何定位垃圾

  1. 引用计数
  2. 根可达算法

3.常见的垃圾回收算法

  1. 标记清除 - 位置不连续 产生碎片
  2. 拷贝算法 - 没有碎片,浪费空间
  3. 标记压缩 - 没有碎片,效率偏低

4.JVM内存分代模型(用于分代垃圾回收算法)

  1. 部分垃圾回收器使用的模型
  2. 新生代 + 老年代 + 永久代(1.7)/ 元数据区(1.8) Metaspace永久代 元数据 - Class永久代必须指定大小限制 ,元数据可以设置,也可以不设置,无上限(受限于物理内存)字符串常量 1.7 - 永久代,1.8 - 对MethodArea逻辑概念 - 永久代、元数据
  3. 新生代 = Eden + 2个suvivor区 YGC回收之后,大多数的对象会被回收,活着的进入s0再次YGC,活着的对象eden + s0 -> s1再次YGC,eden + s1 -> s0年龄足够 -> 老年代 (15 CMS 6)s区装不下 -> 老年代
  4. 老年代顽固分子老年代满了FGC Full GC
  5. GC Tuning (Generation)尽量减少FGCMinorGC = YGCMajorGC = FGC

5.常见的垃圾回收器

  1. Serial 年轻代 串行回收
  2. PS 年轻代 并行回收
  3. ParNew 年轻代 配合CMS的并行回收
  4. SerialOld
  5. ParallelOld
  6. ConcurrentMarkSweep 老年代 并发的, 垃圾回收和应用程序同时运行,降低STW的时间(200ms)
  7. G1(10ms)
  8. ZGC (1ms) PK C++
  9. Shenandoah
  10. Eplison

1.8默认的垃圾回收:PS + ParallelOld

6.JVM调优第一步,了解生产环境下的垃圾回收器组合

  • JVM参数分类标准: - 开头,所有的HotSpot都支持非标准:-X 开头,特定版本HotSpot支持特定命令不稳定:-XX 开头,下个版本可能取消-XX:+PrintCommandLineFlags -XX:+PrintFlagsFinal 最终参数值-XX:+PrintFlagsInitial 默认参数值

怎么样,看完上面的内容之后又没有什么感觉呢?是不是打开了尘封的记忆,那继续往下看

上面总结的GC的一些基础知识,那除了GC之外,JVM还有哪些知识可以询问呢?

我把这些知识整理成相应的知识图谱,对每一个知识点进行了相应的整理以及内容的概括,但是还是需要各位学习的朋友根据自己的情况进行整理

以这张脑图为中心,这些知识点你在面试之前要注意一下

第一部分

  1. 什么是垃圾?
  2. 如何定位垃圾?
  3. 常用垃圾回收算法
  4. 常用垃圾回收器
  5. 系统上线前预估系统的内存占用情况
  6. 系统上线前预估系统的并发访问情况
  7. 根据预估值设定JVM初始参数
  8. 压力测试方法论
  9. 根据压测结果调整参数值
  10. 系统上线后设定日志参数
  11. 定期观察日志情况
  12. 根据日志解决实战问题

第二部分

  1. 为什么一个百万级TPS系统会频繁GC?
  2. 定位JVM问题的实用参数设置
  3. 用top命令观察系统运行情况
  4. 用jps定位虚拟机进程
  5. 用jstat定位JVM问题
  6. 用jmap导出内存转储文件
  7. 用jstack定位问题线程
  8. 用jhat分析转储文件
  9. 其他给力的工具visual VM,MAT,Arthas介绍
  10. 实际操作(这是重点,毕竟绝知此事要躬行,不实践,有些是根本没办法确定会出现哪些问题

这两部分的内容,我已经整理好了相应的视频

需要这些视频资料的,关注+转发后,私信“资料”即可查看获取方法


不过,我不知道各位怎么想,反正我身边有人是这样,喜欢看书不喜欢看文档,没关系,只要能帮到你,我乐意,jvm书籍奉上,这也是我再整理思维导图的时候参考最多的书籍,内容包括:jvm架构、参数、垃圾回收、内存分配、性能监控工具、Java堆、Class文件结构、Class装载系统、字节码执行、实战

详细内容展示

篇幅原因,就展示这一些吧,这些资料已经准备好了,

 关注公众号:Java架构师联盟,每日更新技术好文,后台回复书籍获取精美资料后,添加小助手:msbxq2020免费获取

部分资料已经上传到我的git仓库中:有需要的可以下载

https://gitee.com/biwangsheng/mxq

原文地址:https://www.cnblogs.com/bwscode/p/13436020.html