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的一道小题 先开开 ...
随机推荐
- word操作类
public class WordUtility { private _Application wordApp = null; private _Document wordDoc = null; pu ...
- 技术实践|数据迁移中GBK转UTF8字符集问题分析
导语:在国产化创新的大背景下,数据库迁移项目逐渐增多,在数据库迁移过程中,源数据库和目标数据库字符集有时会不同,这时如何进行字符集转换则成为了一个重要的问题,同时在转换过程中还需要确保数据的完整性和一 ...
- AOP中动态代理详解
动态代理概述 什么是代理 代理模式(Proxy pattern): 为另一个对象提供一个替身或占位符以控制对这个对象的访问 什么是动态代理? 动态代理就是,在程序运行期,创建目标对象的代理对象,并对目 ...
- MySQL启动时自动创建数据库
一.背景及分析 MysqL容器启动时,会自动创建一些必要的数据库,比如MysqL,这是官方默认的做法.但是,在实际中,还需要让MysqL自动创建我们自定义的数据库.本文就此应用场合进行探究. 一般的做 ...
- 龙哥量化:通达信macd黄白线变色公式macd金叉怎么写macd死叉怎么写(需要继续优化,各种变色方式)
你提出的任何逻辑要求,只要是软件能实现的,我都能用通达信写出来,我レメLong622889通达信.大智慧.文华.博易的编程逻辑差不多,只是个别函数不一样.TB交易开拓者.金字塔和文华8,都是专业的期货 ...
- Qt音视频开发24-ffmpeg音视频同步
一.前言 用ffmpeg来做音视频同步,个人认为这个是ffmpeg基础处理中最难的一个,无数人就卡在这里,怎么也不准,本人也是尝试过网上各种demo,基本上都是渣渣,要么仅仅支持极其少量的视频文件比如 ...
- Qt5离线安装包无法下载问题解决办法
1.前言 Qt5离线安装包目前在国内已经被墙了,无法下载,只能下载在线安装包: 直接访问会显示Download from your IP address is not allowed: 本文就提出两种 ...
- 《AutoCAD2020中文版基础教程》和《从零开始—AutoCAD 2020中文版基础教程》配套资源下载
<AutoCAD2020中文版基础教程>作者:姜春峰//武小紅//魏春雪中国青年出版社配套资源链接:https://pan.baidu.com/s/1kPGNKZEw2kOTGqZyXjp ...
- 在 .NET Core中如何使用 Redis 创建分布式锁
在 .NET Core WebApi 中使用 Redis 创建分布式锁可以通过 StackExchange.Redis 库来实现.分布式锁用于确保在分布式系统中,同一时间只有一个进程可以执行某段代码. ...
- LCR 170. 交易逆序对的总数
交易逆序对的总数 在股票交易中,如果前一天的股价高于后一天的股价,则可以认为存在一个「交易逆序对」.请设计一个程序,输入一段时间内的股票交易记录 record,返回其中存在的「交易逆序对」总数. 示例 ...