Java面试(1)Java概述

news2024/11/17 19:51:23

文章目录

  • Java 概述
    • 1.什么是Java
    • 2. JDK1.5 之后的三大版本
    • 3. Jdk和Jre和JVM的区别
    • 4. 什么是跨平台性?原理是什么
    • 5. Java 语言有哪些特点?
    • 6. 什么是字节码?采用字节码的最大好处是什么
    • 7. 为什么不全部使用 AOT(since JDK9) 呢?
    • 8. 为什么说 Java 语言“编译与解释并存”?
    • 9. Oracle JDK vs OpenJDK

Java 概述

1.什么是Java

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C+里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

2. JDK1.5 之后的三大版本

  • Java SE (J2SE,Java 2 Platform Standard Edition,标准版):Java SE以前称为J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的Java应用程序。Java SE包含了支持Java Web服务开发的类,并为JavaEE和Java ME提供基础.
  • Java EE (J2EE,Java 2 Platform Enterprise Edition,企业版):Java EE以前称为J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端Java应用程序。Java EE是在Java SE的基础上构建的,它提供Web服务、组件模型、管理和通信API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和Web2.0应用程序。2018年2月,Eclipse宣布正式将JavaEE更名为JakartaEE。
  • Java ME (J2ME,Java 2 Platform Micro Edition,微型版):Java ME以前称为J2ME。Java ME为在移动设备和嵌入式设备(比如手机、PDA、电视机打印机)上运行的应用程序提供一个健壮且灵活的环境。Java ME包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于JavaME规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能。

3. Jdk和Jre和JVM的区别

在这里插入图片描述

4. 什么是跨平台性?原理是什么

  • 所谓跨平台性,是指java语言编写的程序,一次编译后,可以在多个系统平台上运行。
  • 实现原理:Java程序是通过java虚拟机在系统平台上运行的,只要该系统可以安装相应的java虚拟机,该系统就可以运行java程序。

5. Java 语言有哪些特点?

  1. 简单易学;
  2. 面向对象(封装,继承,多态);
  3. 平台无关性( Java 虚拟机实现平台无关性);
  4. 支持多线程( C++ 11开始(2011年的时候),C++才引入了多线程库);
  5. 可靠性;
  6. 安全性;
  7. 支持网络编程并且很方便( Java 语言诞生本身就是为简化网络编程设计的,因此 Java 语言不仅支持网络编程而且很方便);
  8. 编译与解释并存;

6. 什么是字节码?采用字节码的最大好处是什么

字节码: Java源代码经过javac编译器编译后产生的文件(即扩展为.class的文件),它不面向任何特定的处理器,只面向虚拟机。

采用字节码的好处: Java语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以java程序运行时比较高效,而且,由于字节码并不针对一种特定的机器,因此,Java 程序无须重新编译便可在多种不同操作系统的计算机上运行。
在这里插入图片描述
我们需要格外注意的是 .class->机器码 这一步。在这一步 JVM 类加载器首先加载字节码文件,然后通过解释器逐行解释执行,这种方式的执行速度会相对比较慢。而且,有些方法和代码块是经常需要被调用的(也就是所谓的热点代码),所以后面引进了 JIT(just-in-time compilation) 编译器,而 JIT 属于运行时编译。当 JIT 编译器完成第一次编译后,其会将字节码对应的机器码保存下来,下次可以直接使用。而我们知道,机器码的运行效率肯定是高于 Java 解释器的。这也解释了我们为什么经常会说 Java 是编译与解释共存的语言 。

HotSpot 采用了惰性评估(Lazy Evaluation)的做法,根据二八定律,消耗大部分系统资源的只有那一小部分的代码(热点代码),而这也就是 JIT 所需要编译的部分。JVM 会根据代码每次被执行的情况收集信息并相应地做出一些优化,因此执行的次数越多,它的速度就越快。JDK 9 引入了一种新的编译模式 AOT(Ahead of Time Compilation),它是直接将字节码编译成机器码,这样就避免了 JIT 预热等各方面的开销。JDK 支持分层编译和 AOT 协作使用。

7. 为什么不全部使用 AOT(since JDK9) 呢?

AOT 可以提前编译节省启动时间,那为什么不全部使用这种编译方式呢?

长话短说,这和 Java 语言的动态特性有千丝万缕的联系了。举个例子,CGLIB 动态代理使用的是 ASM 技术,而这种技术大致原理是运行时直接在内存中生成并加载修改后的字节码文件也就是 .class 文件,如果全部使用 AOT 提前编译,也就不能使用 ASM 技术了。为了支持类似的动态特性,所以选择使用 JIT 即时编译器。

AOT是Ahead-of-Time的缩写,是一种编译方式。在AOT编译中,程序代码在运行之前被编译成本地机器代码,而不是在运行时通过解释器逐行解释执行。这种编译方式可以提高程序的执行效率和性能,因为编译后的本地代码可以更快地执行。

AOT编译在JDK中是从JDK 9版本开始引入的。JDK 9引入了一个新的工具,称为jaotc,用于将Java应用程序编译为本地代码。此外,JDK 9还引入了一个实验性的特性,称为AOT编译器,它允许在Java应用程序启动时使用AOT编译器生成本地代码。

随后的JDK版本也继续改进了AOT编译的性能和可用性。例如,JDK 10增加了对Windows和Linux x64平台的AOT编译支持,JDK 11中提供了对macOS和Linux AArch64平台的AOT编译支持。在JDK 16中,AOT编译被认为是正式的功能,并且被视为JVM生态系统的一部分。

8. 为什么说 Java 语言“编译与解释并存”?

我们可以将高级编程语言按照程序的执行方式分为两种:

  • 编译型 :编译型语言 会通过编译器将源代码一次性翻译成可被该平台执行的机器码。一般情况下,编译语言的执行速度比较快,开发效率比较低。常见的编译性语言有 C、C++、Go、Rust 等等。
  • 解释型 :解释型语言会通过解释器一句一句的将代码解释(interpret)为机器代码后再执行。解释型语言开发效率比较快,执行速度比较慢。常见的解释性语言有 Python、JavaScript、PHP 等等。
    在这里插入图片描述

为了改善编译语言的效率而发展出的即时编译技术,已经缩小了这两种语言间的差距。这种技术混合了编译语言与解释型语言的优点,它像编译语言一样,先把程序源代码编译成字节码。到执行期时,再将字节码直译,之后执行。Java与LLVM是这种技术的代表产物。
相关阅读: Java 即时编译器原理解析及实践

为什么说 Java 语言“编译与解释并存”?
这是因为 Java 语言既具有编译型语言的特征,也具有解释型语言的特征。因为 Java 程序要经过先编译,后解释两个步骤,由 Java 编写的程序需要先经过编译步骤,生成字节码(.class 文件),这种字节码必须由 Java 解释器来解释执行。

9. Oracle JDK vs OpenJDK

原文连接:https://javaguide.cn/java/basis/java-basic-questions-01.html#oracle-jdk-vs-openjdk

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

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

相关文章

马赛克处理

去取马赛克的网址: Redact • Photo - Free And Private Image Redaction In The Browser https://redact.photo/ REDACT.PHOTO (照片马赛克处理在线工具)简介 REDACT.PHOTO是一个照片马赛克处理在线工具,能够帮助我们非常方便…

2023自动化测试的10个最佳实践(建议收藏)

虽然大家都知道坚果是非常健康和有营养的,但是,当你尝试吃它的时候,我猜测过程都不会很顺利。现实就是那么相似,我们都知道测试自动化对软件开发有好处(就像坚果对我们的身体一样!),…

arcgis插件-带属性TXT转SHP数据(支持独立图层、追加到图层)

20230512记录更新 arcgis插件-带属性TXT转SHP数据(支持独立图层、追加到图层) 这个版本省略掉新建面图层,再在界面进行选择图层的操作。 界面简化到只需要一步操作,选择(或者复制)TXT文件所在路径&#x…

机器学习(二)决策树原理剖析及python实现

本篇介绍第二个机器学习算法:决策树算法,我们经常使用决策树处理分类问题,近来的调查表明决策树也是最经常使用的数据挖掘算法。 图1所示的流程图就是一个决策树,长方形代表判断模块(decision block)&…

[Android]AsyncChannel介绍

背景 在WifiManager.java中,随处可见这样的方法调用实现: 代码路径:frameworks/base/wifi/java/android/net/wifi/WifiManager.java public void connect(int networkId, ActionListener listener) {...getChannel().sendMessage(CONNECT_NE…

你真的会跟 ChatGPT 聊天吗?(下)

接《你真的会跟 ChatGPT 聊天吗?(上)》,本文下半部分没有无毛猫那么搞笑的内容啦!即使如此,哪怕你对文中提及的技术不大了解,也可以毫无压力地看完这篇,描述如何更好地获得 ChatGPT …

视频怎么压缩到20M以内

视频怎么压缩到20M以内?我们知道在很多聊天软件中是限制传输的内容大小的,比如说视频大小会限制20M以内。还有就是我们在发一些邮件时,我们在上传附件的时候也是限制视频大小在20M以内。所以说我们有需要把视频压缩到20M以内的情况。那么针对…

记录一次Windows7操作系统渗透测试

#本文档仅用于实验,请勿用来使用恶意攻击! 《中华人民共和国网络安全法》中,恶意破坏计算机信息系统罪在第二十七条被明确规定,规定内容为: 第二十七条 任何单位和个人不得为达到破坏计算机信息系统安全的目的&#x…

Linux发行版新秀:基于Ubuntu、系统核心 “不可变”

Vanilla OS 是近期才公开发布的 Linux 发行版,基于 Ubuntu 构建,免费且开源,默认桌面环境是 GNOME。虽然 Vanilla OS 的底层是 Ubuntu,但它并不是简单地基于 Ubuntu 进行 "remix",而且外观看起来也不像 Ubun…

FreeRTOS:列表和列表项

要想看懂 FreeRTOS 源码并学习其原理,有一个东西绝对跑不了,那就是 FreeRTOS 的列表和列表项。列表和列表项是FreeRTOS的一个数据结构, FreeRTOS 大量使用到了列表和列表项,它是 FreeRTOS 的基石。要想深入学习并理解 FreeRTOS&am…

【LeetCode】环形链表II+结论证明

题目链接:环形链表II 题目:给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表…

Grafana系列-统一展示-7-ElasticSearch数据源

系列文章 Grafana 系列文章 ElasticSearch 数据源 Grafana内置了对Elasticsearch的支持。你可以进行多种类型的查询,以可视化存储在Elasticsearch中的日志或指标,并使用存储在Elasticsearch中的日志事件对图表进行注释。 配置 ES 数据源 关键的几项…

在两道多线程基础题“顺序打印”中对比一下Java中的wait()和join()

目录 一、基础 二、进阶 一、基础 有三个线程,线程名称分别为:a,b,c,每个线程打印自己的名称。 需要让他们同时启动,并按 c,b,a的顺序打印。 这道题要求打印 cba,且只打…

开发中proc文件系统的简单使用

使用proc文件系统 文章目录 使用proc文件系统1.meminfo文件2. free命令3、创建 /proc 节点4、使用 file_operations 实现 proc 文件读写 导向内核信息5、使用 seq_file 实现 proc 文件的读取 在Linux系统中, “/proc”文件系统十分有用, 它被内核用于向用…

可视化图表API格式要求有哪些?Sugar BI详细代码示例(4)

Sugar BI中的每个图表可以对应一个数据 API,用户浏览报表时,选定一定的过滤条件,点击「查询」按钮将会通过 API 拉取相应的数据;前面说过,为了确保用户数据的安全性,Sugar BI上的所有数据请求都在Sugar BI的…

进击数据基础设施新蓝海,厂商如何“择木而栖”?

文 | 螳螂观察 作者 | 李永华 多样的应用需求,倒逼底层存储能力不断升级; 复杂的数据状况,要求存储能够“兼容并蓄”; 客户企业在数字化方面的战略转型升级,总是触及到存储…… 当数据基础设施成为新的蓝海&#…

大学计算机基础-题库刷题-精选

题库刷题: 写在前面: 这个是我准备应对学校转专业考试而刷的题库, 也是大学计算机的题库,同样适用于大学计算机这门课的期末考试。 精选了一些重要的题目。 目录 题库刷题: 写在前面: 题目1&#x…

内卷时代,大厂产品经理仅用3步破局

本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"! 作者:申悦|慕课网讲师 在当下互联网环境下,产品经理究竟要如何破局? 我认为,既然要破局…

RocketMQ学习笔记:生产者Producer

DefaultMQProducer 根据上文:RocketMQ学习笔记:消息Message - 掘金 (juejin.cn),我们定位到Producer中的这一行代码: java 复制代码 DefaultMQProducer producer new DefaultMQProducer("ProducerGroupName"); pro…

2023年3月GESP能力等级认证C++一级真题

一、单选题(每题2分,共30分) 1.以下不属于计算机输入设备的有(B )。(2分) A.键盘 B.音箱 C.鼠标 D.传感器 2.计算机系统中存储的基本单位用 B 来表示,它…