其他分享
首页 > 其他分享> > 面试大厂JVM被毙后,每天花2小时恶补腾讯T4专家建议学习的JVM性能调优全系列,四面腾讯终于成功上岸美团

面试大厂JVM被毙后,每天花2小时恶补腾讯T4专家建议学习的JVM性能调优全系列,四面腾讯终于成功上岸美团

作者:互联网

当Java程序性能达不到既定目标,并对于程序优化技巧已用尽,应如何通过JVM知识对GC优化?

对于众多参数各自优点增加了调优的难度,GC优化过程应如何结合现有业务进行适合的参数优化呢?

JVM数据运行区,哪些会造成OOM的情况?

JVM在性能调优中使用非常广泛,无论什么级别的Java从业者,JVM是进阶时必须迈的坎。如果不懂JVM的话,薪酬会非常吃亏。除了面试,学习JVM有利于更深入地理解 Java 这门语言,学好JVM,为未来排查线上问题打下坚实的基础。

因为我也是一名 Java 从业者,虽然近些年来,无论是使用规模、开发者人数,还是技术生态成熟度、相关工具的丰富程度,Java 都当之无愧是后端开发语言中不可撼动的王者,也是开发各类业务系统的首选语言。

而且薪资也不菲

你曾经因为JVM被毙掉过吗?搞懂JVM性能调优,面试官:我自闭了

但我总有种坐不动的感觉。项目还好说,让我用 Java 写系统代码都没有问题,但是如果有人问我 Java 程序运行起来以后内部发生了什么,可以怎么让它运行得更好的话,我就真的有点答不上来。

如果答不好,真的会影响薪酬的多少。

所以了解 JVM 则是深入学习 Java 必不可少的一环,也是 Java 开发人员迈向更高水平的一个阶梯。

之前面试因为jvm被毙掉,所以在那段时间疯狂的恶补JVM的面试题及资料,有需要的朋友可以点赞+收藏后私信“JVM”得到获取方式

随着互联网的发展,高并发高可用、快速响应成为软件的必须,而JVM与这些有着密切关联。之前JVM系列好多都是一些由于STW影响到快速响应问题,忽然网站慢一下(抖动下)等问题,下面谈谈最近通过JVM排查到的高并发高可用问题。(在高可用高并发下面问题原因可能会很多,比如cpu异常高、磁盘IO高、SWAP空间等,有可能很多问题都是综合性的问题)

以前在我的认知里面,如果服务运行有问题,最简单有效快速的办法就是重启,最近遇到了问题打破了我对该方法的认知。

很能很多人认为线上出现问题可以排查继续解决问题的人牛逼,其实错了,真正牛逼的人都是在问题产生前就解决了(需要意识里面转变和学习思考提高的地方)。

下面看个例子就明白了,我觉得放在这里特别合适:

春秋战国时期,有位神医被尊为“医祖”,他就是“扁鹊”。一次,魏文王问扁鹊说:“你们家兄弟三人,都精于医术,到底哪一位最好呢?”扁鹊答:“长兄最好,中兄次之,我最差。”文王又问:“那么为什么你最出名呢?”扁鹊答:“长兄治病,是治病于病情发作之前,由于一般人不知道他事先能铲除病因,所以他的名气无法传出去;中兄治病,是治病于病情初起时,一般人以为他只能治轻微的小病,所以他的名气只及本乡里;而我是治病于病情严重之时,一般人都看到我在经脉上穿针管放血,在皮肤上敷药等大手术,所以因为我的医术高明,名气因此响遍全国。”

如果能在编码时候就考虑到JVM,做到面向JVM编程那就更牛逼了,如果能在上线前查阅到此类JVM问题或者是OOM问题以及一些其他问题那也就好了。

综述:因此这些成为必不可少的技能,所以面试需要了解,因为公司可能会面临该问题。

现在不像以前了,以前会点html都好找工作,现在由于学习软件的人越来越多,而且每年大学生都在毕业(而老一辈的也很少换工作)人只会越来越多,有个笑话,随便在大街上扔硬币砸到的那个可能就是搞软件的,现在人员太多,公司为了区分,会多添加维度,每多一个维度可能就会刷掉一批人,核心供大于求,所以我们也必须朝着这些大的方向努力,使得自己的竞争力比别人强。

如果是这样,我觉得我们大家先想清楚“自己想要什么”最为重要

我的建议就是一定要有规划的去学习,这是腾讯T4专家整理的一份JVM的学习路线,我觉得这么学下来很顺畅,分享给大家,需要高清大图以及路线图上附带的学习视频的朋友点赞+收藏然后私信“JVM”得到获取方式。

 

腾讯四面流程

第一面:

第一面主要考察项目,通过项目提出基础问题。

之前有微服务经验,面试官就详细问到微服务的架构、框架的实现、服务治理、分布式一致性等问题。

之前有玩过日志监控系统,首先还是考察架构,ELK的相关知识,重点描述Elasticsearch的一些架构原理,比如倒排索引的原理。

问消息队列的相关知识,接触过Kafka,问了Kafka中消息可以被多个消费者消费吗?;以及选举机制和HW机制。

开放性问题,讲一个之前遇到的问题,并如何解决的。这个描述生产过程中运行的问题,并描述排查问题。

数据库和Redis相关问题,数据库考察索引的原理以及几种事务的区别。Redis问数据结构,延时队列如何实现,分布式锁原理。

时间30分钟。

第二面:

第二面是组长和总监面试,聊解题思路和项目,这面的特点是根据项目经验问相关的问题,要求广度,尤其考察架构广度,会将目前的项目量级扩大几十倍,重新设计架构,同时涉及到一些压力面试。

感觉如果不紧张,熟悉项目的话,问题不大。

会有很多开放性题目,包括平时遇到问题的解题思路、同事之间的协作等。

被问到的知识点有负载均衡算法,ngnix如何做限流,四层LVS和七层Ngnix的区别,JVM性能调优,以及微服务架构的设计思路。

一些问到的面试题

1.JVM运行时数据区包含哪些?

程序计数器:行号指示器,通过改变该值,以选取下一步的指令

Java虚拟机栈:局部变量、方法出口等,为JVM服务

本地方法栈:局部变量、方法出口等,为本地Native方法服务

堆区:内存最大的一块,所有的对象实例都在这里分配内存

方法区:常量、静态变量等

2.JVM垃圾回收机制,何时触发MinorGC等操作

分代垃圾回收机制:不同的对象生命周期不同。把不同生命周期的对象放在不同代上,不同代上采用最合适它的垃圾回收方式进行回收。

JVM中共划分为三个代:年轻代、年老代和持久代,

年轻代:存放所有新生成的对象;

年老代:在年轻代中经历了N次垃圾回收仍然存活的对象,将被放到年老代中,故都是一些生命周期较长的对象;

持久代:用于存放静态文件,如Java类、方法等。

新生代的垃圾收集器命名为“minor gc”,老生代的GC命名为”Full Gc 或者Major GC”.其中用System.gc()强制执行的是Full Gc.

判断对象是否需要回收的方法有两种:

1.引用计数

当某对象的引用数为0时,便可以进行垃圾收集。

2.对象引用遍历

果某对象不能从这些根对象的一个(至少一个)到达,则将它作为垃圾收集。在对象遍历阶段,gc必须记住哪些对象可以到达,以便删除不可到达的对象,这称为标记(marking)对象。

触发GC(Garbage Collector)的条件:

1)GC在优先级最低的线程中运行,一般在应用程序空闲即没有应用线程在运行时被调用。

2)Java堆内存不足时,GC会被调用。

3.GC的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分别用在什么地方,如果让你优化收集方法,有什么思路?

4.java类加载过程?

5.什么是类加载器,类加载器有哪些?

6.Eden和Survivor的比例分配等

7.volatile的语义,它修饰的变量一定线程安全吗

8.JVM 对象创建步骤流程是什么?

9.什么是 Class 文件? Class 文件主要的信息结构有哪些?

10.什么是内存溢出,内存泄漏

面试时间在20-30分钟。

第三面技术委员会面试

第三面是面委,技术面试,难度非常大。

1.考察系统设计和架构设计。要求知识的深度理解

主要是系统设计,问了秒杀系统的如何设计,分接入层、接口层、消息队列层、逻辑层四个方面讲解,接入层可以做服务治理相关事情,接口层做抢购开关、黑白名单、随机拒绝等处理,逻辑层具体抢购逻辑实现,涉及到redis分布式锁以及DB和Redis的一致性问题。

从秒杀系统还引申出分布式事务的几种实现,二段式、三段式、补偿型(TCC)、基于可靠消息服务的消息队列实现。重点讨论了这几种的实现和区别,要求画出基于可靠消息服务的消息队列实现分布式事务的架构图,以及上游服务和下游服务如何保证消息可靠性和一致性。

2.考察微服务架构,服务拆分的原则、RPC框架原理、配置管理(etcd)的一致性协议raft选举原理。

3.考察服务治理,服务限流算法,服务降级的指标和恢复指标,服务熔断。

开放性问题,遇到印象最深的问题,以及如何解决的。

第四面HR面,主要就是问问你的人生规划

JVM学习资料

需要的朋友可以点赞+收藏后私信“JVM”得到获取方式

相关的电子书,项目资料

放在最后

总的来说,自己如果有想要去的大公司,一定要提升好自己,让自己的能力和素质与公司匹配的上,我也一直相信,机会永远是留给有准备的人。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

以上学习资料均免费放送,最后祝愿各位身体健康,顺利拿到心仪的offer!

 

标签:服务,恶补,对象,问题,GC,JVM,腾讯,Java
来源: https://blog.51cto.com/u_15254813/2855364