乐趣区

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

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

这不,花费一波吧老同学约进去吃顿饭,他通知我其实小老弟并不是个例,他倒没感觉有什么,不过他揭示了我让我通知小老弟当前面试的几个点,在这里我也分享给大家:

  • 当面试官向你发问 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 架构师联盟,回复书籍获取精美材料后,增加私人小助手获取

退出移动版