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的一道小题 先开开 ...
随机推荐
- vtkDelaunay2D 错误 Edge not recovered, polygon fill suspect
vtkDelaunay2D 在设定SetSourceData边界处理凹多边形时,不稳定,有概率会出现"Edge not recovered, polygon fill suspect&quo ...
- 【处理元组有关的题型的技巧】codeforces 1677 A. Tokitsukaze and Strange Inequality
题意 第一行输入一个正整数 \(T(1 \leq T \leq 1000)\),代表共有 \(T\) 组测试用例,对于每组测试用例: 第一行输入一个正整数 \(n(4 \leq n \leq 5000 ...
- NVM管理多个Node版本
在项目中,我们常常会遇到node版本问题的一些报错,像是vue 3需要node10以上版本,不同的 node-sass 版本需要安装不同的 node.js 版本,为了统一管理node版本,我们需要用 ...
- 在 PdfSharp 中使用私有字体
在 PdfSharp 中使用私有字体 在 PdfSharp 1.5 中提供了在 Web 服务器上使用私有字体的示例,见:http://www.pdfsharp.net/wiki/(X(1)S(mg0w ...
- 启用Linux防火墙日志记录和分析功能
防火墙的基本功能是阻止来自可疑网络/来源的连接.它会检查所有连接的源地址.目的地址和端口,并决定是否允许或阻止流量.防火墙的每个操作都会记录为日志数据.监控和分析这些日志对于保护您的网络免受攻击至关重 ...
- Qt编写可视化大屏电子看板系统29-模块7品质管理
一.前言 品质管理模块是在送检合格模块的基础上增加了统计而来,总共包括了三个子模块:品质占比.班组合格率.每日合格率统计,其中品质占比子模块采用饼图控件显示对应的百分比,不同百分比颜色不一样,这个饼图 ...
- Qt编写安防视频监控系统64-子模块8飞行轨迹
一.前言 飞行轨迹子模块是专为无人机打造的模块,也可以作为机器人移动模块,通过传入一个经纬度值,实时更新设备的位置和绘制轨迹,模块已经内置了接口进行处理,支持不同设备不同的轨迹颜色(这个功能好). 这 ...
- 清除 TortoiseSVN已存储的连接URL地址
Eclipse 清除 SVN 的 URL 历史记录1.关闭 Eclipse2.进入 工程目录 \.metadata\.plugins\org.tigris.subversion.subclipse.c ...
- Docker安装Redis并设置密码
1. 镜像下载 docker pull redis 2. 创建目录 mkdir -p /etc/redis/redis.conf mkdir -p /data/redis 3. 启动容器 docker ...
- github-链接地址
------------------------------------------------------ https://github.com/seata https://github.com/a ...