当面试被问到jvm(Java虚拟机)时,如何将面试官引入自己的节奏?

本文目录

  • 前言
  • 快问快答
  • 抛砖引玉
  • 锦上添花
  • 好书推荐
  • 总结

前言

作为一名Java开发工程师,不管是校招还是社招jvm一定是必问必会的知识点。虽然说真正开发中用到的不多,甚至可以说用不到(对于刚入行或者Java初级),但是当面试官问出来,就是想考察你对知识的一个广度,如果你能答得很好,那么恭喜你,你已经赢得面试官的好感。在接下来的面试中你会很自信。
当然如果你对jvm了解的很深刻,你还可以将面试官引导到自己的节奏。在做自我介绍的时候可以可以强调自己熟悉jvm,那么面试官就有很大概率问到jvm。
这篇文章就来详细的介绍一下面试中遇到有关jvm相关面试题该怎么回答。虽说做不到吊打面试官,但是至少能和面试官有的聊,对于拿下offer就有了一份保障。

快问快答

如果你对jvm只是了解一点,可以先说jvm**是什么****有哪些功能**

你可以这样答

关于jvm呢,我只是简单了解过
JVM(Java 虚拟机)是Java平台的核心组件之一,它是一个能够执行Java字节码的虚拟机。JVM提供了Java程序运行的环境,使得跨平台的Java应用程序能够在不同的操作系统上运行。
JVM的主要功能包括以下几个方面:

  • 类加载:JVM负责将Java源代码编译后得到的字节码文件加载到内存中,并进行验证、准备和解析等步骤,最终将类信息存储在方法区中。
  • 内存管理:JVM管理程序运行所需的内存空间,包括堆内存、栈内存和方法区等。它负责内存的分配和回收,通过垃圾回收机制自动释放不再使用的对象占据的内存空间。
  • 执行引擎:JVM的执行引擎将载入内存的字节码文件解释或者编译为机器码,并执行程序指令。根据实现方式的不同,执行引擎可以采用解释执行或即时编译的方式来提高执行效率。
  • JIT编译器:JIT(Just-In-Time)编译器是JVM的一部分,在程序运行过程中,JIT编译器会对频繁执行的热点代码进行动态编译,以提高执行效率。
  • 异常处理:JVM提供了异常处理机制,用于捕获和处理程序中的异常情况,并提供相应的异常处理机制进行处理。
  • 安全机制:JVM提供了安全管理器,用于实施对运行在其中的Java应用程序进行安全限制和控制。

总之,JVM作为Java平台的核心组件,起到了解释和执行Java字节码的关键作用。它允许开发人员编写一次,然后在不同的操作系统和硬件平台上运行Java应用程序实现了Java的跨平台特性。

抛砖引玉

如果你对jvm很熟,那么你就可以大展身手了。

面试过程往往很短暂,Java相关的面试内容又很多我们需要去记住各种各样的内容,显然是很困难的,所以如果你想靠jvm来拿下面试官,那么我们可以耍一下小手段。对于面试官来说他想快速了解你对知识的掌握程度,让他出招往往防不胜防,所以我们需要再引导一下面试官的兴趣
说完,你还可以再说一说:

类的加载过程
Java的内存结构
jvm的垃圾回收机制
垃圾回收算法
垃圾回收器

你可以这样回答:

JVM包含两个子系统和两个组件,两个子系统为Class loader(类装载)、Execution engine(执行引擎);两个组件为Runtime data area(运行时数据区)、Native Interface(本地接口)。
同时呢我还了解:

根据下面内容说个大概。前提是你对这些内容有了解

  • 类的加载过程

类加载的过程主要分为三个部分:加载,链接,初始化,而链接又可以细分为三个小部分:验证,准备,解析。
加载:简单来说,加载指的是把class字节码文件从各个来源通过类加载器装载入内存中。
验证:主要是为了保证加载进来的字节流符合虚拟机规范,不会造成安全错误
准备:主要是为类变量(注意,不是实例变量)分配内存,并且赋予初值。
解析:将常量池内的符号引用替换为直接引用的过程
初始化:这个阶段主要是对类变量初始化,是执行类构造器的过程。
换句话说,只对static修饰的变量或语句进行初始化。

关于类的加载,这里面试官可能会问:
1.Java创建对象的过程
2.双亲委派机制
3.有哪些类的加载器
4.双清委派机制可以打破吗?如何打破?为什么要打破?举例说明。
5.什么时候会触发类的加载
(答案可以自己先整理:后续所有jvm相关面试题会整理成pdf文件更新至微信公众号:小尘要自信)

  • Java的内存结构

根据下图重点介绍一下运行时数据区有由哪些部分组成。
运行时数据区主要由堆,方法区,栈,程序计数器,本地方法栈组成,
在这里插入图片描述

这里面试官可能会问:
1.运行时数据区中哪些是线程私有?哪些是公共的?
2.方法区jdk1.8上有什么变化。
3.内存泄露和内存溢出了解吗
4.方法区和永久代,以及元空间的区别

  • jvm的垃圾回收机制

jvm垃圾回收机制采用的时分代回收思想,将内存区域划分为新生代和老年代。新生代又分为伊甸区和幸存区,幸存区又由大小相等的两个区组成。刚建立的对象会处于伊甸区,然后会经过GC进入幸存区1,再一次GC如果还没被清理,就会进入幸存区2.如果幸存区2.中再经历过GC还没被清理,又会进入幸存区1.在幸存区之间没转变一次。对象的年龄就会加一。当年龄达到15后会进入老年代。

这里面试官可能会问:
1.伊甸区和幸存区的默认大小比例
2.只有年为15的对象才会进入老年区吗?15可以改为16吗?
3.动态年龄判断了解吗
4.为啥Eden区比survivor区内存大很多

  • 垃圾回收算法

同时我还了解垃圾回收算法:标记整理,复制算法,标记清楚,分代收集算法。

这里面试官可能会问:
1.详细说一下复制算法
2.复制算法,标记整理,标记清除的区别
3.如何判断是不是垃圾对象

  • 垃圾回收器

我还了解一些垃圾回收器
新生代收集器(全部的都是复制算法):Serial、ParNew、Parallel Scavenge
老年代收集器:CMS(标记-清理)、Serial Old(标记-整理)、Parallel Old(标记整理)
整堆收集器: G1(一个Region中是标记-清除算法,2个Region之间是复制算法)

锦上添花

说一些jvm监控,故障处理工具

好书推荐

Java虚拟机核心技术一本通
作者:李博,资深架构师,InfoQ平台、阿里云社区专家博主,CSDN博客专家,51CTO讲师,慕课网讲师,Quarkus技术社区的热衷参与者,参与过多个开源项目(Skywalking、Nacos、Pulsar等)的开发和深入研究。目前担任公司内部架构委员会副主席,主要研究方向是“基于Quarkus的云原生Java微服务架构的推进”和“GraalVM虚拟机的内部化落地”。

本书主要以 Java 虚拟机的基本特性及运行原理为中心,深入浅出地分析 JVM 的组成结构和底层实现,介绍了很多性能调优的方案和工具的使用方法。最后还扩展介绍了 JMM 内存模型的实现原理和 Java 编译器的优化机制,让读者不仅可以学习 JVM 的核心技术知识,还能夯实 JVM 调优及代码优化的技术功底。

在这里插入图片描述

本书适合已具有一定 Java 编程基础的开发人员、项目经理、架构师及性能调优工程师参考阅读,同时,本书还可以作为广大职业院校、计算机培训班相关专业的教学参考用书。
通过实战案例+执行效果图+核心代码,剖析探索JVM核心底层原理,强化推动JVM优化落地,手把手教你吃透Java虚拟机深层原理!
传送门:查看链接

总结

关于jvm的内容很多,在和面试官的沟通中,会被问到各种各样的问题,但最终都离不开基础,只有我们掌握了基础,面对各种追问才能游刃有余。如果你喜欢通过看书来学习知识,那么你可以看一下《深入浅出Java虚拟机:JVM原理与实战》这本书。想获取更多Java相关面试题可后台私信我。大家一起学习,一起进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/92348.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis实现API访问频率限制

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

ffmpeg、ffplay在线安装,离线导出整个程序,移植到其他服务器使用(linux系统)

环境说明 以ubuntu系统作为说明 在线安装 下面命令会同时安装ffplay和ffmpeg sudo apt-get install ffmpeg怎么验证安装成功? 输入ffmpeg命令 ffmpeg,如图则说明安装成功 转储可执行程序和依赖的文件 找到安装路径,一般在/usr/bin目录…

Neo4j 与 Cypher 基础

更好的阅读体验 \huge{\color{red}{更好的阅读体验}} 更好的阅读体验 简介 Neo4j 是用 Java 实现的开源 NoSQL 图数据库。从2003年开始开发,2007年正式发布第一版,其源码托管于 GitHub。 与常见的关系型数据库不同,Neo4j 基于图图结构来表示…

10.01

服务器 #include<myhead.h> //键盘输入事件 int keybord_events(fd_set readfds) {char buf[128] "";int sndfd -1; //从终端获取一个文件描述符&#xff0c;发送数据给该文件描述符对应的客户端bzero(buf, sizeof(buf));int res scanf("…

CSP-J第二轮试题-2020年-1.2题

文章目录 参考&#xff1a;总结 [CSP-J2020] 优秀的拆分题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示样例 1 解释数据规模与约定 答案1答案2 [CSP-J2020] 直播获奖题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 …

AI伦理与机器道德:人工智能的道德挑战

文章目录 什么是AI伦理和机器道德&#xff1f;1. 隐私保护2. 歧视和不平等3. 透明度和解释性4. 安全性5. 社会影响 AI伦理和机器道德的重要性1. 保护个人权利2. 避免不平等和歧视3. 保持透明和责任4. 促进创新 AI伦理挑战和解决方案1. 隐私保护2. 歧视和不平等3. 透明度和解释性…

C++八股

1、简述一下C中的多态 在面向对象中&#xff0c;多态是指通过基类的指针或引用&#xff0c;在运行时动态调用实际绑定对象函数的行为&#xff0c;与之相对应的编译时绑定函数称为静态绑定。 静态多态 静态多态是编译器在编译期间完成的&#xff0c;编译器会根据实参类型来选择…

第80步 时间序列建模实战:GRNN回归建模

基于WIN10的64位系统演示 一、写在前面 这一期&#xff0c;我们使用Matlab进行GRNN模型的构建。 使用的数据如下&#xff1a; 采用《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Renal Syndrom…

使用SDKMAN在Linux系统上安装JDK

本文使用的Linux发行版为Rocky Linux 9.2&#xff0c;可以当做CentOS的平替产品。 SDKMAN是一个sdk包管理工具&#xff0c;通过自带的命令可以快速切换软件环境&#xff0c; 官网地址&#xff1a;https://sdkman.io/。 1、安装sdkman&#xff1a; # curl -s "https://ge…

SpringBoot整合RocketMQ笔记

SpringBoot版本为2.3.12.Release RocketMQ对比kafka 学习链接 https://zhuanlan.zhihu.com/p/335216381 代码实战 https://www.cnblogs.com/RedOrange/p/17401238.html Centos安装rocketmq https://blog.csdn.net/chuige2013/article/details/123783612 RocketMQ详细配置与…

【C语言深入理解指针(2)】

1. 数组名的理解 在上⼀个博客我们在使⽤指针访问数组的内容时&#xff0c;有这样的代码&#xff1a; int arr[10] {1,2,3,4,5,6,7,8,9,10}; int *p &arr[0];这⾥我们使⽤ &arr[0] 的⽅式拿到了数组第⼀个元素的地址&#xff0c;但是其实数组名本来就是地址&#x…

C++ - 开散列的拉链法(哈希桶) 介绍 和 实现

前言 之前我们介绍了&#xff0c;闭散列 的 开放地址法实现的 哈希表&#xff1a;C - 开放地址法的哈希介绍 - 哈希表的仿函数例子_chihiro1122的博客-CSDN博客 但是 闭散列 的 开放地址法 虽然是哈希表实现的一种&#xff0c;但是这种方式实现的哈希表&#xff0c;有一个很大的…

【操作系统】了解Linux操作系统中PCB进程管理模块与进程PID

本篇要分享的内容是有关于操作系统中进程的内容。 目录 1.进程的简单理解 2.了解task_struct&#xff08;进程控制模块&#xff09;内容分类 3.task_struct&#xff08;进程控制模块&#xff09;中的PID 4.调用查看PID的函数 1.进程的简单理解 首先我们需要理解的是什么是…

C++指针的使用

文章目录 1.C指针1.1 定义指针1.2 使用指针 2.空指针和野指针2.1 空指针2.2 野指针 3.指针所占空间4.使用const修饰指针4.1 const修饰指针4.2 const修饰常量4.3 const 既修饰指针也修饰常量 5.指针操作数组6.指针做函数参数7.使用指针知识实现冒泡排序 1.C指针 指针其实就是一…

SpringBoot整合数据库连接

JDBC 1、数据库驱动 JDBC&#xff08;Java DataBase Connectivity&#xff09;&#xff0c;即Java数据库连接。简而言之&#xff0c;就是通过Java语言来操作数据库。 JDBC是sun公司提供一套用于数据库操作的接口. java程序员只需要面向这套接口编程即可。不同的数据库厂商&…

Ubuntu配置深度学习环境(TensorFlow和pyTorch)

文章目录 一、CUDA安装1.1 安装显卡驱动1.2 CUDA安装1.3 安装cuDNN 二、Anaconda安装三、安装TensorFlow和pyTorch3.1 安装pyTorch3.2 安装TensorFlow2 四、安装pyCharm4.1 pyCharm的安装4.2 关联anaconda的Python解释器 五、VScode配置anaconda的Python虚拟环境 前言&#xff…

计算机竞赛 深度学习手势识别 - yolo python opencv cnn 机器视觉

文章目录 0 前言1 课题背景2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存 5 模型训练5.1 修…

数据结构:复杂度分析

目录 1 算法效率评估 1.1 实际测试 1.2 理论估算 2 迭代与递归 2.1 迭代 1. for 循环 2. while 循环 3. 嵌套循环 2.2 递归 1. 调用栈 2. 尾递归 3. 递归树 2.3 两者对比 3 时间复杂度 3.1 统计时间增长趋势 3.2 函数渐近上界…

MySQL学习笔记26

MySQL主从复制的搭建&#xff08;AB复制&#xff09; 传统AB复制架构&#xff08;M-S)&#xff1a; 说明&#xff1a;在配置MySQL主从架构时&#xff0c;必须保证数据库的版本高度一致&#xff0c;统一版本为5.7.31 环境规划&#xff1a; 编号主机名称主机IP地址角色信息1ma…

盛最多水的容器 接雨水【基础算法精讲 02】

盛雨水最多的容器 链接 : 11 盛最多水的容器 思路 : 双指针 &#xff1a; 1.对于两条确定的边界&#xff0c;l和r,取中间的线m与r组成容器&#xff0c;如果m的高度>l的高度&#xff0c;那么整个容器的长度会减小&#xff0c;如果低于l的高度&#xff0c;那么不仅高度可…