当前位置: 首页 > news >正文

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. 设计动机上:

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

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

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

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

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

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

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

…。。。。。。。。。。。…请添加图片描述

…。。。。。。。。。。。…

http://www.dtcms.com/a/316656.html

相关文章:

  • RHCA04--系统模块管理与资源限制
  • 91、【OS】【Nuttx】【启动】栈溢出保护:配置项添加
  • 第13届蓝桥杯Scratch_选拔赛_初级组_真题2022年1月22日
  • GPTs和AssistantAPl和Alagent的区别联系
  • 8月5号打卡
  • 智慧社区(八)——社区人脸识别出入管理系统设计与实现
  • 1panel服务器管理工具
  • QML开发:QML的第一个程序
  • Qt Quick 之动态旋转刻度盘(无人机中指南针 Demo )
  • 400V降24V,200mA,应用领域:从生活到工业的 “全能电源管家”WD5208
  • 华清远见25072班C语言学习day2
  • Z20K118库中寄存器及其库函数封装-CLOCK库
  • Boosting 知识点整理:机制、对比与应用场景
  • TDengine 中 TDgp 中部署时序基础模型
  • Android10 系统休眠调试相关
  • 力扣热题100-------169.多数元素
  • 工作相关: 预刷真值与人工标注的真值之间的关系 以及 真值与原始数据的关系,
  • 站在JS的角度,看鸿蒙中的ArkTs
  • 从汇编角度揭秘C++构造函数(1)
  • 数据安全——解读大数据安全架构设计方案【附全文阅读】
  • 力扣-283.移动零
  • Claude Code实战体验:AI智能编程助手如何重塑开发工作流?
  • MyBatis-Plus主键回填详解:插入数据后自动获取主键值
  • WSN - Wirth syntax notation 沃斯语法符号
  • 模板的进阶
  • JAVA,ThreadLocal
  • 浮动路由和BFD配置
  • 瀑布模型与敏捷开发的选择分析
  • 如何在nuxt项目中使用scss
  • 数据库SQL高阶操作1——Mysql8转换DM8相关sql语法写法优化调整,包括递归,函数,以及方言等特殊操作的改造支持