Java基础面试题(1)—Java优势(JVM,JRE,JIT,Java类,方法)

前言

在学习项目的过程中,我觉得自己有点太急功近利了一直跟着视频敲没有自己的思考(主要是最近在牛客读到了一位大佬👍👍👍,程序员牛肉的文章),🙌学技术不是一味的复制粘贴,特别是做项目,要边学边思考,一个功能的实现,我学会了什么技术,还有没有更好的可以替代它

之前学的基础知识其实也没有学完,像集合,线程... 都还不知道是啥就开始学JavaWeb做项目了,在项目中使用队列存储我都一脸懵,在这里以问题的形式写一个学习笔记🤔,不仅仅是复习,也为以后的面试做准备 ,还有还有我的刷题网站是面试鸭呦🦆🦆🦆

1.你认为Java的优势是什么?(我觉得这道题可以让我们更全面的了解Java)

主要从四个方面来讲:

  1. 面向对象

java是一种严格的面向对象的编程语言,具有清晰的类,对象,继承,接口等概念,支持封装,继承,多态等OOP特性,有助于代码的可维护性和可扩展性。

  1. 跨平台:

Java因为加了一层中间层JVM,可以做到一次编写多个平台(如Windows,Linux,MacOS)运行。

不同平台执行的机器码不同:编译执行的过程是先把java源代码编译成字节码,字节码由JVM解释或JIT编译执行,而因为JIT编译时需要预热,所以还提供了AOT,可以把字节码转成机器码(这里可能会不太懂😵‍💫,我做一个扩展)

🧩扩展:JDK,JRE,JVM,JIT

从Java代码的编译来看是这样:

JDK (Java Development Kit)是一个功能齐全的 Java 开发工具包,供开发者使用,用于创建和编译 Java 程序。它包含了 JRE(Java Runtime Environment),以及编译器 javac 和其他工具,如 javadoc(文档生成器)、jdb(调试

器)、jconsole(监控工具)、javap(反编译工具)等。

JRE 是运行已编译 Java 程序所需的环境,主要包含以下两个部分:
1. JVM : 也就是 Java 虚拟机,提供了。
2. Java 基础类库(Class Library) :一组标准的类库,提供常用的功能和 API(如 I/O 操作、网络通信、数据结构

等)。

**JIT:**编译器是一种在程序运行时将字节码转换为机器码的技术

  1. 垃圾回收

java还提供垃圾自动回收功能,在内存较充裕的当下,将内存的管理交给GC来做。

  1. 生态

java拥有丰富的第三方类库,网上全面的资料,企业框架等等。

2.JDK和JRE有什么区别 ?

**JDK:**可以视为JRE的超集,是用于开发Java程序的完整开发环境,包含JRE,以及用于开发,调试,监控Java应用程序的工具。

**JRE:**指的是Java运行环境,包含JVM,核心类库和其他支持运行Java程序的文件。

3.为什么Java不支持多重继承?

主要是因为多继承会出现菱形继承问题

✌️先了解一下继承

继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类(子类拥有父类对象所有的属性和方法)。

菱形继承(这里截的面试鸭的图🤪,这会不会有点违规啊):

如果是多继承如图:BC继承A,然后D继承了BC,假设此时要调用D内定义在A的方法,BC中可能有不同的实现,此时就会出现歧义。

🧩扩展:接口

接口主要用于对类的行为进行约束,你实现了某个接口就具有了对应的行为。

一个类只能继承一个类(包括抽象类),因为 Java 不支持多继承。但一个类可以实现多个接口,一个接口也可以继承多个其他接口。

4.接口和抽象类有什么区别?

  1. 多继承:

一个类只能继承一个类(包括抽象类),因为 Java 不支持多继承。但一个类可以实现多个接口,一个接口也可以继承多个其他接口。(抽象类只能单继承,接口可以多继承)

  1. 设计动机上:

接口的设计是自上而下的,我们知晓某一行为,于是基于这些行为约束定义了接口 ,一些类需要有这些行为,因此实现对应接口。

抽象类的设计是自下而上的。我们写了很多类,发现他们之间有共性,很多代码可以复用,因此将公共逻辑封装成一个抽象类。

接口主要用于对类的行为进行约束,你实现了某个接口就具有了对应的行为。抽象类主要用于代码复用,强调的是所属关系。

5.方法重载和方法重写之间的区别是什么?

重载:发生在同一个类 中(或者父类和子类之间),方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同(重载就是同一个类中多个同名方法 根据不同的传参 来执行不同的逻辑处理)。

重写:重写发生在运行期,是子类对父类的允许访问的方法的实现过程进行重新编写(重写就是子类对父类方法的重新改造,外部样子不能改变,内部逻辑可以改变。)。

小白啊!!!写的不好轻喷啊🤯如果觉得写的不好,点个赞吧🤪(批评是我写作的动力)

...。。。。。。。。。。。...

...。。。。。。。。。。。...

相关推荐
俄城杜小帅25 分钟前
QML与C++交互的方式
开发语言·c++·交互
用户849137175471635 分钟前
JDK 17 实战系列(第3期):性能优化与系统增强详解
java·后端·性能优化
Asu52021 小时前
思途spring学习0807
java·开发语言·spring boot·学习
遇见火星1 小时前
Jenkins全链路教程——Jenkins用户权限矩阵配置
java·矩阵·jenkins
埃泽漫笔1 小时前
什么是SpringBoot
java·spring boot
zhang1062091 小时前
PDF注释的加载和保存的实现
java·开发语言·pdf·pdfbox·批注
码银2 小时前
什么是逻辑外键?我们要怎么实现逻辑外键?
java·数据库·spring boot
VBA63372 小时前
VBA之Word应用第四章第一节:段落集合Paragraphs对象(一)
开发语言
SugarFreeOixi2 小时前
Idea打包可执行jar,MANIFEST.MF文件没有Main-Class属性:找不到或无法加载主类
java·jar
Mr Aokey2 小时前
从BaseMapper到LambdaWrapper:MyBatis-Plus的封神之路
java·eclipse·mybatis