标签:#精选Java面试题

你好,这里是《精选Java面试题》,我是希望能够帮你轻松搞定面试的二师兄,一名有五年开发经验的Java程序员,当做两年的技术面试官。
面试在我看来,它不像是学校里面的一场考试,考察一个问题,讲知识点罗列出来就行。
面试是一场人与人之间的对话,面试官并不仅仅是希望听到面试者简单罗列出来的知识点,而是更希望能够听到面试者由浅入深的、条理清晰的讲述他在实际项目中的是如何应用和思考这些问题的。

面试官提问:

JDK 和 JRE 有什么区别?

常规回答:

  • JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。
  • JRE:Java Runtime Environment 的简称,java 运行环境,为 java 的运行提供了所需环境

image.png
JDK 其实包含了 JRE,也就是说JRE是JDK的子集。JDK相对于JRE多了一些编译和开发工具,同时还包含了编译 java 源码的编译器 javac,还包含了很多 java 程序调试和分析的工具,比如监控工具jconsole,内存查看工具jps等,这些都是用于编译和辅助开发的。

从字面意思就可以理解JRE是JAVA程序在运行时候用的,也就是JAVA代码都编译好生成了class后缀的文件了,在生产环境下运行的时候需要的环境。因此,JRE是提供给最终使用者的。

简单来说如果你需要运行 java 程序,只需安装 JRE 就可以了,如果你需要编写 java 程序,需要安装 JDK。


进阶回答:

对于应该安装JDK还是JRE,需要看具体的应用场景。

在开发阶段一定要安装JDK,这个不需要讨论。
而在生产环境,如果确信运行时不需要再执行编译的话是可以安装JRE的,因为一般来说生产环境下所有的java文件都被编译成最终的class文件。

但也有特殊情况,比如项目中采用jsp文件作为前端页面,因为jsp是需要在运行的时候动态编译成class文件,这时候就必须存在编译环境,也就是需要安装JDK。

当然,如果所有的jsp文件也已经完成了编译,那也是可以只安装JRE的,但其实真实项目是不会这么做的,因为jsp文件的编译普遍并不是采用maven编译生成class文件,而是在tomcat容器中运行的时候编译到work文件夹下面,因此不太可能有团队采用手动编译jsp的方式。

一般来说在服务器部署的时候也安装JDK,在项目运行中,有时候是需要监控查看生产环境下的内存、堆栈等,这个时候没有JDK会很不方便。

面试考点分析:

  1. 先解释分析 JDK 和 JRE 是什么,并且需要用英文全称和中文名称来进行说明,这样显得你比较专业。
  2. 分析两者的关系,JDK 中包含了 JRE,也就是说 JRE 是 JDK 的一个子集。
  3. 分析两个的不同之处,在什么情况使用 JDK ,什么情况使用 JRE,以及你在实际项目当中是如何使用的,这样说明你有实际项目的运行部署经验,能准确的区分它们的不同之处。

本人技术有限,凭借自己的热情希望给程序员面试提供一点帮助,必有不足之处,希望业内人士积极批评指正,在留言区留言就是对我的最大鼓励。希望批评中肯一些,不要存在人身攻击,更不要波及到家人,善意中肯的批评我都能够虚心接受。我们下期再见。


音频文稿:

jdk jr e jvm 三者区别和联系,那么这道题呢,其实对于我们很多的家务程序员来说,对接 vm 了可能非常之熟悉啊,因为接 vm 呢,本身就是一个面试的热点,但是呢对于,很多的程序员来说,那么阶 tk 跟 jr,e 他的这个区别和联系呢,很多人都说不清啊,我们接下来来看一下这三者啊,他到底是什么样的一个关系,首先呢我们来看一下这个 jdk 啊,jdk 他的这个全全,全英文啊他是属于叫做什么呢,加瓦开发工具啊 dy 了,我们的 tta,也说加瓦的开发工具,那么意意味着什么呢,他是一个开发工具,是提供给开发人员来用的啊,那么 gdk 是提供给开发人员来用的,而加益呢,加益叫做呢,加瓦运行是环境对吧让他一万稳的,那么这个运行是环境什么意思呢,实际上是提供给啊,运行加瓦程序的用户来用的,也就是说了谁需要运行加瓦程序,那么你就需要了安装加压抑啊,而不是,像我们开发人员一样开发人员呢,必须安装接替 k 对吧,那么如果你不是开发人员,你只是想运行加瓦程序,那么你安装接压抑就可以了,jvm 呢是属于一个虚拟机,虚拟机是用来干什么的呢,是用来了编映我们的这个,解释我们的这个克拉斯文件啊,解释成这个机器码对吧然后呢,解释成这个机器码对吧然后呢
让这个操作系统呢能够执行啊,那么下面呢,我们就是通过一张图,啊来解释这三者的关系,那么其实啊,细心的同学可能会发现啊,就是在我们的这个 jdk 中啊,就是我们下载的这个 jdk 的,这个包里面啊,其实呢就能够看出一些东西啊,我们看这是一个 jdk 对吧,那么这个 jdk 里面呢,实际上是包含了一个加 e 的,而这个加1里面呢,有两个核心文件夹,一个并文件夹一个内部文件夹对吧,那么这两个文件夹分别是什么呢,其实我们来看一下啊,那么实际上在加1中,那么这个并文件夹,实际上就是我们的 jvm,然后这个内部呢就是我们的,jdk 开发的这个内裤啊,就是我们的开发工具包啊,我们比如说我们的 rt 点价啊,t 点价其实就在这个内部目录,下面啊,所以说这里面放了我们很多的,加瓦的核心的内证,都在这里啊,那么这个是加印,所以你可以认为了这个并目录啊,也就是我们的 jvm,加上这个例如目录,实际上就是我们的加印啊,好那么 jdk,除除了这个加 e 这一块呢,还有什么呢,还有就是我们的加瓦工具啊,什么加瓦工具呢,比如说我们的加瓦 c 加瓦还有呢,比如说接空扫啊,比如说接空扫啊

还有个什么 gsd adjust等等等等啊,这些工具,那么 jdk 呢,相当于是由加1加上这些工具组成的,也就是我们的组成的,我们整个 jdk,所以呢,我们可以让能够发现这个一个最,简单的一个关系就是了 jdk 了,包含了加1对吧,然后加1了又包含了 jvm,好那么这个 jvm 呢再简单的说一下,首先呢是我们这个点加瓦文件对吧,就是我们程序员去开发的,这个原码文件啊,点加瓦文件,然后呢,由我们的这个加瓦工具中的这个加瓦,c 对吧,然后呢,编一层我们的点克拉斯文件啊,编1层点克拉斯文件,然后呢这个点克拉斯文件呢,会放到我们这个 jvm 上面,然后这个 jvm 呢,有分的是版本的,有 v 6是版本的对吧,那么这个就是我们这个,加瓦的所谓的什么,呃一处变异到处运行的这个,原因其实就在这里啊,其实就是因为了这个 jvm,有不同版本啊,他适配了很多的操作系统,所以呢这个点克拉斯文件呢,只需要了放到不管是放的就是这一份,相同的一个点克拉斯文件啊,不管是放到 windows 版的,接 va 母上也好,还是 nt60s 版的接 vui,上也好他都可以去运行啊,因为这个 jvm 本身做了适配啊,因为这个 jvm 本身做了适配啊

所以说我们只不过是这个点,closs 文件,它是可以的,到处运行的啊,不代表说我们的 jvm,可以到处运行啊,好那么 jvm,再拿到了这个点 closs 文件之后,那么他呢,会根据这个例不误录中的这些内裤啊,就是我们这个例不误录加意,下面的这个例不误,这些内裤呢,去解释我们的克拉斯文件,将我们的克拉斯文件呢,翻译成这个机器码对吧,翻译成机器码,然后呢映射到我们的操作系统,然后调动这个操作系统啊,最终呢让我们这个程序呢,能够正常的跑起来好,那么以上呢就是这个 jdk jr e 啊,以及 jv em 这三者的这个,关系区别和联系啊,