2020年Java面试208题 001-请说一下JDK和JRE的区别

本文详细介绍了JDK和JRE的区别,指出JRE是Java运行时环境,供最终用户使用,而JDK包含了JRE并提供了开发工具。作者强调在开发阶段需要JDK,生产环境中根据是否需要编译和监控选择安装JDK或JRE,并分享了个人的经验和建议。

前言

面试是类似演讲演说的过程,网上的资料都是文字的,没法让面试者直观的体验到面试过程,本人已经将相关内容制作成音频节目,有兴趣的朋友可以去喜马拉雅搜索《2020年Java面试208题》收听音频版节目。

《2020年Java面试208题》整理了208个Java程序员的面试题,主要是针对三年以内开发经验的JAVA程序员提出的问题。

题目

今天要说的是《2020年Java面试208题》的第1题,面试官提问:请说一下JDK和JRE的区别。

知识点分析

这个问题比较简单,同时,这个问题其实我是存在真实性的疑问,因为我确实从来没听说哪个面试官提过这个问题的。不过不要紧,这可能不是一道真实的面试题,但一定是一个真实的问题,你可以当做一个Java冷知识来听,相信对你理解Java这个产品有所帮助。

 

下面我就演示回答一下这个问题:

演示面试

好的,面试官,我来说说JDK和JRE的区别,。

JRE:是英文Java Runtime Enviroment的缩写,中文是Java运行时环境,就是Java运行时需要的环境。

JDK:是英文Java Development Kit的缩写,中文是Java开发工具包。

 

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

 

而JDK是给开发者用的,其实JDK是完整包含JRE,也就是说JRE是JDK的子集,JDK相对于JRE多了一些编译和开发工具,比如编译器javac,监控工具jconsole,内存查看工具jps等,这些都是用于编译和辅助开发的。

 

对于应该安装JDK还是JRE,需要看具体的应用场景。在开发阶段一定要安装JDK,这个不需要讨论。而在生产环境,如果确信运行时不需要再执行编译的话是可以安装JRE的,因为一般来说生产环境下所有的java文件都被编译成最终的class文件。但也有特殊情况,比如项目中采用jsp文件作为前端页面,因为jsp是需要在运行的时候动态编译成class文件,这时候就必须存在编译环境,也就是需要安装JDK。当然,如果所有的jsp文件也已经完成了编译,那也是可以只安装JRE的,但其实真实项目是不会这么做的,因为jsp文件的编译普遍并不是采用maven编译生成class文件,而是在tomcat容器中运行的时候编译到work文件夹下面,因此不太可能有团队采用手动编译jsp的方式。

 

另外在项目运行中,有时候是需要监控查看生产环境下的内存、堆栈等,这个时候没有JDK会很不方便。反正我一般在服务器部署的时候也安装JDK,记忆中只曾经在一个客户那里部署JRE而没有安装JDK。

 

好了,以上就是我的演示面试,不知道是否让你满意。

 

我对自己答题的点评:

1 我说到JDK包含JRE的时候,用到了子集这个词,这个词儿是数学里面的,在面试的时候尽量用些能装逼的词儿。口语化的谈话让你的语言组织更容易流程,但高大上的词儿让你的逼格与众不同。类似的,假如你想要说一个x轴、y轴的坐标系的时候,你可以说笛卡尔坐标系,是否感觉自己都有点儿数学系大二学生的饱满感了?

 

2 核心问题答完了,能多说点儿就多说点儿,只要不是特别跑题,面试官不会觉得你偏题,而是觉得这家伙真的对这类问题游刃有余,又有实际经验。我在这个题目中就扩展了在开发时候和最终生产环境部署的时候应该安装JDK还是JRE的个人理解。

下期再见

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

 

面试包括以下十九部分:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。 目录: 一、Java 基础 1.JDK JRE 有什么区别? 2.== equals 的区别是什么? 3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? 4.final 在 java 中有什么作用? 5.java 中的 Math.round(-1.5) 等于多少? 6.String 属于基础的数据类型吗? 7.java 中操作字符串都有哪些类?它们之间有什么区别? 8.String str="i"与 String str=new String(“i”)一样吗? 9.如何将字符串反转? 10.String 类的常用方法都有那些? 11.抽象类必须要有抽象方法吗? 12.普通类抽象类有哪些区别? 13.抽象类能使用 final 修饰吗? 14.接口抽象类有什么区别? 15.java 中 IO 流分为几种? 16.BIO、NIO、AIO 有什么区别? 17.Files的常用方法都有哪些? 二、容器 18.java 容器都有哪些? 19.Collection Collections 有什么区别? 20.List、Set、Map 之间的区别是什么? 21.HashMap Hashtable 有什么区别? 22.如何决定使用 HashMap 还是 TreeMap? 23.一下 HashMap 的实现原理? 24.一下 HashSet 的实现原理? 25.ArrayList LinkedList 的区别是什么? 26.如何实现数组 List 之间的转换? 27.ArrayList Vector 的区别是什么? 28.Array ArrayList 有何区别? 29.在 Queue 中 poll() remove()有什么区别? 30.哪些集合类是线程安全的? 31.迭代器 Iterator 是什么? 32.Iterator 怎么使用?有什么特点? 33.Iterator ListIterator 有什么区别? 34.怎么确保一个集合不能被修改? 三、多线程 35.并行并发有什么区别? 36.线程进程的区别? 37.守护线程是什么? 38.创建线程有哪几种方式? 39.一下 runnable callable 有什么区别? 40.线程有哪些状态? 41.sleep() wait() 有什么区别? 42.notify() notifyAll()有什么区别? 43.线程的 run() start()有什么区别? 44.创建线程池有哪几种方式? 45.线程池都有哪些状态? 46.线程池中 submit() execute()方法有什么区别? 47.在 java 程序中怎么保证多线程的运行安全? 48.多线程锁的升级原理是什么? 49.什么是死锁? 50.怎么防止死锁? 51.ThreadLocal 是什么?有哪些使用场景? 52.一下 synchronized 底层实现原理? 53.synchronized volatile 的区别是什么? 54.synchronized Lock 有什么区别? 55.synchronized ReentrantLock 区别是什么? 56.一下 atomic 的原理? 四、反射 57.什么是反射? 58.什么是 java 序列化?什么情况下需要序列化? 59.动态代理是什么?有哪些应用? 60.怎么实现动态代理? 五、对象拷贝 61.为什么要使用克隆? 62.如何实现对象克隆? 63.深拷贝浅拷贝区别是什么? 六、Java Web 64.jsp servlet 有什么区别? 65.jsp 有哪些内置对象?作用分别是什么? 66.一下 jsp 的 4 种作用域? 67.session cookie 有什么区别? 68.一下 session 的工作原理? 69.如果客户端禁止 cookie 能实现 session 还能用吗? 70.spring mvc struts 的区别是什么? 71.如何避免 sql 注入? 72.什么是 XSS 攻击,如何避免? 73.什么是 CSRF 攻击,如何避免? 七、异常 74.throw throws 的区别? 75.final、finally、finalize 有什么区别? 76.try-catch-finally 中哪个部分可以省略? 77.try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗? 78.常见的异常类有哪些? 八、网络 79.http 响应码 301 302 代表的是什么?有什么区别? 80.forward redirect 的区别? 81.简述 tcp udp的区别? 82.tcp 为什么要三次握手,两次不行吗?为什么? 83.一下 tcp 粘包是怎么产生的? 84.OSI 的七层模型都有哪些? 85.get post 求有哪些区别? 86.如何实现跨域? 87.一下 JSONP 实现原理? 九、设计模式 88.一下你熟悉的设计模式? 89.简单工厂抽象工厂有什么区别? 十、Spring/Spring MVC 90.为什么要使用 spring? 91.解释一下什么是 aop? 92.解释一下什么是 ioc? 93.spring 有哪些主要模块? 94.spring 常用的注入方式有哪些? 95.spring 中的 bean 是线程安全的吗? 96.spring 支持几种 bean 的作用域? 97.spring 自动装配 bean 有哪些方式? 98.spring 事务实现方式有哪些? 99.一下 spring 的事务隔离? 100.一下 spring mvc 运行流程? 101.spring mvc 有哪些组件? 102.@RequestMapping 的作用是什么? 103.@Autowired 的作用是什么? 十一、Spring Boot/Spring Cloud 104.什么是 spring boot? 105.为什么要用 spring boot? 106.spring boot 核心配置文件是什么? 107.spring boot 配置文件有哪几种类型?它们有什么区别? 108.spring boot 有哪些方式可以实现热部署? 109.jpa hibernate 有什么区别? 110.什么是 spring cloud? 111.spring cloud 断路器的作用是什么? 112.spring cloud 的核心组件有哪些? 十二、Hibernate 113.为什么要使用 hibernate? 114.什么是 ORM 框架? 115.hibernate 中如何在控制台查看打印的 sql 语句? 116.hibernate 有几种查询方式? 117.hibernate 实体类可以被定义为 final 吗? 118.在 hibernate 中使用 Integer int 做映射有什么区别? 119.hibernate 是如何工作的? 120.get() load()的区别? 121.一下 hibernate 的缓存机制? 122.hibernate 对象有哪些状态? 123.在 hibernate 中 getCurrentSession openSession 的区别是什么? 124.hibernate 实体类必须要有无参构造函数吗?为什么? 十三、Mybatis 125.mybatis 中 #{} ${}的区别是什么? 126.mybatis 有几种分页方式? 127.RowBounds 是一次性查询全部结果吗?为什么? 128.mybatis 逻辑分页物理分页的区别是什么? 129.mybatis 是否支持延迟加载?延迟加载的原理是什么? 130.一下 mybatis 的一级缓存二级缓存? 131.mybatis hibernate 的区别有哪些? 132.mybatis 有哪些执行器(Executor)? 133.mybatis 分页插件的实现原理是什么? 134.mybatis 如何编写一个自定义插件? 十四、RabbitMQ 135.rabbitmq 的使用场景有哪些? 136.rabbitmq 有哪些重要的角色? 137.rabbitmq 有哪些重要的组件? 138.rabbitmq 中 vhost 的作用是什么? 139.rabbitmq 的消息是怎么发送的? 140.rabbitmq 怎么保证消息的稳定性? 141.rabbitmq 怎么避免消息丢失? 142.要保证消息持久化成功的条件有哪些? 143.rabbitmq 持久化有什么缺点? 144.rabbitmq 有几种广播类型? 145.rabbitmq 怎么实现延迟消息队列? 146.rabbitmq 集群有什么用? 147.rabbitmq 节点的类型有哪些? 148.rabbitmq 集群搭建需要注意哪些问? 149.rabbitmq 每个节点是其他节点的完整拷贝吗?为什么? 150.rabbitmq 集群中唯一一个磁盘节点崩溃了会发生什么情况? 151.rabbitmq 对集群节点停止顺序有要求吗? 十五、Kafka 152.kafka 可以脱离 zookeeper 单独使用吗?为什么? 153.kafka 有几种数据保留的策略? 154.kafka 同时设置了 7 天 10G 清除数据,到第五天的时候消息达到了 10G,这个时候 kafka 将如何处理? 155.什么情况会导致 kafka 运行变慢? 156.使用 kafka 集群需要注意什么? 十六、Zookeeper 157.zookeeper 是什么? 158.zookeeper 都有哪些功能? 159.zookeeper 有几种部署模式? 160.zookeeper 怎么保证主从节点的状态同步? 161.集群中为什么要有主节点? 162.集群中有 3 台服务器,其中一个节点宕机,这个时候 zookeeper 还可以使用吗? 163.一下 zookeeper 的通知机制? 十七、MySql 164.数据库的三范式是什么? 165.一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几? 166.如何获取当前数据库版本? 167.一下 ACID 是什么? 168.char varchar 的区别是什么? 169.float double 的区别是什么? 170.mysql 的内连接、左连接、右连接有什么区别? 171.mysql 索引是怎么实现的? 172.怎么验证 mysql 的索引是否满足需求? 173.一下数据库的事务隔离? 174.一下 mysql 常用的引擎? 175.一下 mysql 的行锁表锁? 176.一下乐观锁悲观锁? 177.mysql 问排查都有哪些手段? 178.如何做 mysql 的性能优化? 十八、Redis 179.redis 是什么?都有哪些使用场景? 180.redis 有哪些功能? 181.redis memecache 有什么区别? 182.redis 为什么是单线程的? 183.什么是缓存穿透?怎么解决? 184.redis 支持的数据类型有哪些? 185.redis 支持的 java 客户端都有哪些? 186.jedis redisson 有哪些区别? 。。。。。。。。。。。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小崔爱读书

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值