Java基础常见知识、面试题总结 (上)
Java语言有哪些特点
简单易学;
面向对象(封装,继承,多态);
平台无关性( Java 虚拟机实现平台无关性);
支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 Java 语言却提供了多线程支持)(C++ 在2011年 c++11 的时候引用了多线程库 在windows linux macos 上都可以使用 以下语法来创4*5建线程、参考链接:http://www.cplusplus.com/reference/thread/thread/?kw=thread )
std::thread 、std::async
可靠性、安全性、支持网络编程、(Java语言设计的初衷就是为简化网络编程设计的、因此Java语言不仅支持网络编程而且很方便)
编译与解释共存
拓展:
“Write Once, Run Anywhere(一次编写,随处运行)”这句宣传口号,真心经典,流传了好多年!以至于,直到今天,依然有很多人觉得跨平台是 Java 语言最大的优势。实际上,跨平台已经不是 Java 最大的卖点了,各种 JDK 新特性也不是。目前市面上虚拟化技术已经非常成熟,比如你通过 Docker 就很容易实现跨平台了。在我看来,Java 强大的生态才是!
JVM ? JDK ? JRE ?
JVM:
Java虚拟机(JVM)、是运行Java字节码的虚拟机、JVM有针对不同系统的特定实现(Windows Linux MacOs)、目的是使用相同的字节码、它们都会有相同的结果。 字节码和不同的系统是JVM实现Java语言 “一次编译、随处运行”的关键所在。
JVM并不是只有一种的、只要满足JVM规范、每个公司、组织或者个人都有可以开发专属的JVM、就是我们平常接触的HotSpot VM 也仅仅 是JVM规范一种实现而已。
常见的JVM虚拟机:除了我们平时最常用的 HotSpot VM 外,还有 J9 VM、Zing VM、JRockit VM 等 JVM 。维基百科上就有常见 JVM 的对比:Comparison of Java virtual machinesopen in new window ,感兴趣的可以去看看。并且,你可以在 Java SE Specificationsopen in new window 上找到各个版本的 JDK 对应的 JVM 规范。
历史背景:
Sun公司在java1.0的时候发布了一款名为:Sun Classic VM 的Java虚拟机、它是世界上第一款商用的Java虚拟机、2000年JDK1.3版本发布的时候、HotSpot VM虚拟机成为了默认的虚拟机、延续至今;
JVM虚拟机 是一款软件、用来执行一系列虚拟计算指令。大体上虚拟机可以分为、系统虚拟机和程序虚拟机、大名鼎鼎的Visual Box 、VMWare 就是系统虚拟机、它们完全是对物理计算机的仿真、提供了一个可运行 操作系统的软件平台、程序虚拟机的典型代表就是Java虚拟机、他专门为执行单个计算机程序而设计、在Java虚拟机中执行的指令我们成为Java字节码指令、Java虚拟机拥有独力的运行机制、其运行的Java字节码未必由Java语言编译而成.JVM平台的各种语言可以共享Java虚拟机带来的 跨平台性、优秀的垃圾回收机制、可靠的即时编译器、可以说Java技术的核心就是Java虚拟机、因为所有的Java程序 都运行在Java虚拟机内部。
Java 虚拟机的特点:Java虚拟机就是二进制字节码的运行环境、负责装载字节码到其内部、解释和编译为对应的平台上的机器指令执行、每一条Java指令虚拟机规范都有详细的定义、怎么取操作数、怎么处理操作数、处理结果放在那里、等等、Java虚拟机的三大特征:一次编译随处运行、自动内存管理、自动垃圾回收机制。
JDK与JRE
JDK是Java开发工具包.Java Development Kit的英文缩写,它是功能最齐全的Java SDK 、它拥有JRE 所拥有的一起功能,还有Java编译工具javac和工具javadoc、 jdb。能够创建和编译程序。
什么是字节码? 为什么使用字节码?
字节码
是一种二进制的文件、类似于机器指令。但是并不能在真机上运行,需要借助虚拟机,而虚拟机就可以理解为一种在计算机上模拟出来的一台CPU指令集为字节码的虚拟计算机。
Java中的字节码
在Java种JVM可以理解的代码就叫做字节码(就是拓展名为.class的文件),它不面向任何特定的处理器,仅面向虚拟机,Java通过编译字节码的方式,在一定的程度上解决了 传统解释性语言效率低的问题。同时曲线救国的保留了传统解释性语言可移植性的特点。性能而言比比较 Go Rust C++ 还有提升的空间。
插一嘴
什么是编译型语言?
答:
1.代码编写完毕、直接打包成 对应各个OS的包、直接在OS运行.
2.代表:C、golang 、C++
3.通俗点来说:在Windows环境下写的代码、c/c++/go 打包后拓展名为 .exe; windows下的软件拓展名也是.exe 双击直接运行在Dos窗口了。无需安装任何环境。 什么是解释型语言?
答:
1.代码编写完毕不需要编译、执行的时候通过语言的解释器进行翻译+执行
2.代表:Python、JavaScript、Ruby
3.通俗点来说就是 代码编写完毕 执行时,对应会存在一个解释器去翻译代码、像JavaScript中是运行在浏览器的、对应的解释器就是 浏览器内核 像 Chrome的V8、IE的Chakra、Safari的Jscore,用于翻译代码并执行。 Java属于那种?
答:Java属于 编译+解释
1.何为编译?
Java需要通过javac命令 将.java 文件编译成 .class文件。
2.何为解释?
编译后的.class文件是无法直接在OS平台上运行的、需要借助Java的JVM环境。在JVM中进行逐行解释、逐行运行。因执行效率相对较慢。其中部分代码是经常需要被加载的、也称之为热代码。后JVM引用了 JIT技术(just-in-time compilation)技术、将热代码翻译成机器码后 保存下来。后期直接调用不在进行翻译。以提升部分效率。 JDK 9 引入了一种新的编译模式 AOT(Ahead of Time Compilation),它是直接将字节码编译成机器码,这样就避免了 JIT 预热等各方面的开销。JDK 支持分层编译和 AOT 协作使用。 为什么不直接使用AOT? 长话短说,这和 Java 语言的动态特性有千丝万缕的联系了。举个例子,CGLIB 动态代理使用的是 ASM 技术,而这种技术大致原理是运行时直接在内存中生成并加载修改后的字节码文件也就是 .class 文件,如果全部使用 AOT 提前编译,也就不能使用 ASM 技术了。为了支持类似的动态特性,所以选择使用 JIT 即时编译器。
Java 从源代码 到 运行的过程 如下:

Java基础常见知识、面试题总结 (上)的更多相关文章
- Java 基础常见知识点&面试题总结(上),2022 最新版!| JavaGuide
你好,我是 Guide.秋招即将到来,我对 JavaGuide 的内容进行了重构完善,公众号同步一下最新更新,希望能够帮助你. 基础概念与常识 Java 语言有哪些特点? 简单易学: 面向对象(封装, ...
- Java 基础常见知识点&面试题总结(下),2022 最新版!
你好,我是 Guide.秋招即将到来,我对 JavaGuide 的内容进行了重构完善,同步一下最新更新,希望能够帮助你. 前两篇: Java 基础常见知识点&面试题总结(上),2022 最新版 ...
- Java 集合常见知识点&面试题总结(上),2022 最新版!
你好,我是 Guide.秋招即将到来(提前批已经开始),我对 JavaGuide 的内容进行了重构完善,公众号同步一下最新更新,希望能够帮助你. 你也可以在网站(javaguide.cn)上在线阅读, ...
- Java 基础常见知识点&面试题总结(中),2022 最新版!| JavaGuide
你好,我是 Guide.秋招即将到来,我对 JavaGuide 的内容进行了重构完善,公众号同步一下最新更新,希望能够帮助你. 上篇:Java 基础常见知识点&面试题总结(上),2022 最新 ...
- Java基础语法知识你真的都会吗?
第一阶段 JAVA基础知识 第二章 Java基础语法知识 在我们开始讲解程序之前,命名规范是我们不得不提的一个话题,虽说命名本应该是自由的,但是仍然有一定的"潜规则",通过你对命名 ...
- 第3节:Java基础 - 必知必会(上)
第3节:Java基础 - 必知必会(上) 本篇是基础篇的第一小节,我们从最基础的java知识点开始学习.本节涉及的知识点包括面向对象的三大特征:封装,继承和多态,并且对常见且容易混淆的重要概念覆盖和重 ...
- Java基础常见英语词汇
Java基础常见英语词汇(共70个) ['ɔbdʒekt] ['ɔ:rientid]导向的 ['prəʊɡræmɪŋ]编程 OO: object ...
- Java英文单词Java基础常见英语词汇
Java英文单词Java基础常见英语词汇(共70个) ...
- Java基础入门知识
Java编程入门知识 知识概要: (1)Java入门基本常识 (2)Java的特性跨平台性 (3)Java的编程环境的搭建 (4)Java的运行机制 (5)第一个Java小程序入门 (1)Java ...
- 关于Java基础的一些笔试题总结
针对近期腾讯.京东.网易等公司的笔试,遇到一些有关Java基础的问题,在此总结,希望能通过这几道经典问题题发散,举一反三,借此打牢基础!自己总结,望提出宝贵意见! 一.关于null的一道小题 先开开 ...
随机推荐
- Winform窗体控件双向绑定数据模拟读写PLC数据
1.用Modbus工具模拟PLC 2.创建一个实体类 点击查看代码 internal class Data : INotifyPropertyChanged { ushort[] ushorts = ...
- 《JavaScript 模式》读书笔记(5)— 对象创建模式3
这一篇,我们主要来学习了解下沙箱模式以及静态成员的相关内容. 五.沙箱模式 沙箱模式(sandbox pattern)解决了命名空间模式的如下几个缺点: 对单个全局变量的依赖变成了对应用程序的全局变量 ...
- DSL 和 reactive 噩梦
Kotlin 之美-DSL篇 - 掘金 像 Compose 那样写代码 :Kotlin DSL 原理与实战_fundroid_方卓的博客-CSDN博客 先找好一个靶子: val yesterday = ...
- 2024年1月Java项目开发指南11:axios请求与接口统一管理
axios中文网:https://www.axios-http.cn/ 安装 npm install axios 配置 在src下创建apis文件夹 创建axios.js文件 配置如下: // src ...
- mac上遇到的错误sed command a expects followed by text
上简单的替换操作 sed -i 's/apple/mac/g' full-path-file 执行后报错,"sed: 1: command a expects \ followed by t ...
- Exception:统一异常处理
异常包括:全局异常.特定异常和自定义异常. 第一步,创建一个异常处理类,并在类上添加 @ControllerAdvice 注解 第二步,在类中添加出现异常时要执行的方法,并在方法上添加对应注解,指定出 ...
- Qt/C++加载不同的地图控件/地图类型/缩放标尺/缩略图/比例尺/实时路况/全景视图等
一.前言说明 在展示地图的时候,有些常规的操作,比如调整地图的缩放级别,切换到卫星图等,希望能够在地图上直接操作实现,于是就有了一堆地图控件,可以根据自己的需求动态的添加和删除,这样就更直接更快捷,而 ...
- Mac系统Obsidian和Typora更换霞鹜文楷字体
在github上发现了一款非常好看的字体LXGW WenKai / 霞鹜文楷,这里记录下Mac电脑如何安装这个字体,以及我用到的笔记软件更换字体的过程. Mac安装字体 # 增加代理,不加代理下载速度 ...
- hhhhhhomework 验证码界面(非全部自己完成)
import javax.swing.*;//import 代表"引入" //javax.swing 代表"路径" (在javax文件夹下的swing文件夹) ...
- 前端学习openLayers配合vue3(加载线上数据源)
现在我们学习一下加载网上的线上数据再加上点矢量图层,紧接着上一步 关键代码 layers: [ //瓦片图层source第三方,或者自带的,地图的底层 new TileLayer({ // sourc ...