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的一道小题 先开开 ...
随机推荐
- RocketMQ系列2:领域模型和技术概念
★消息队列16篇 1 领域模型 Apache RocketMQ 是一款典型的分布式架构下的消息中间件产品,使用异步通信方式和发布订阅的消息传输模型. Apache RocketMQ 产品具备异步通信的 ...
- 【分块】LibreOJ 6277 数列分块入门1
前言 分块是一种优雅的暴力,将数组按块长 \(\sqrt{n}\) 进行分块,可实现区间加法.区间求和和区间逆序对计数等场景,进行 \(m\) 次操作的时间复杂度:\(O(m\sqrt{n})\). ...
- CoFile 企业云盘大焕新啦!
一.域名升级,更好记 俗话说的好,好记性不如字数少 cofile.net 指尖一敲,快乐来到 别拦着我,我就要用 CoFile 企业云盘 二.架构优化,不止更快 底层优化,加载提速,更快响应,加倍安全 ...
- 从混沌到秩序:Python的依赖管理工具分析
Python 的依赖管理工具一直没有标准化,原因主要包括: 历史发展的随意性:Python发展早期对于依赖管理的重视程度不足,缺乏从一开始就进行统一规划和设计的意识 社区的分散性:Python社区庞大 ...
- DSB的数字正交解调
1.DSB调制过程 DSB信号是一种双边带调幅调制信号,又叫双边带调幅,通过改变载波的振幅来实现基带数据的传输. 其函数表达式如下: \[s(t) = m(t)*cos(2\pi ft + \va ...
- 【MyBatis】学习笔记04:配置文件模板
[Mybatis]学习笔记01:连接数据库,实现增删改 [Mybatis]学习笔记02:实现简单的查 [MyBatis]学习笔记03:配置文件进一步解读(非常重要) 目录 IDEA配置模板的地方 核心 ...
- 开源产品测评之 SQL 上线能力
背景 近期,我司准备引入一款 SQL 审核产品来供内部流程使用,解决目前 SQL 人工上线的流程管控问题,目标是对业内的开源产品进行调研,选型一款作为落地方案,后期如果内部有需求可能会进行二次开发.我 ...
- Qt编写安防视频监控系统57-子模块1设备列表
一.前言 近期在经历过这次UI大重构以后,很多拆分的功能都以单独的模块的形式出现,以悬停窗体的形式嵌入或者悬浮在主窗体中,这种方式极大的增强了系统的拓展性,客户想要什么模块就开启什么模块,放置到合适的 ...
- Qt开源作品13-三套样式表
一.前言 在做各种各样的项目中,难免遇到需要设定自己界面风格样式的时候,而Qt提供的qss就是牛逼的为了实现定制各种各样的皮肤的,其实一个完美的UI界面,主要由两大块组成,一个是颜色搭配,一个是布局, ...
- Windows7-64环境中部署OpenLayers6.4.3详细步骤
注意:OL5以后,OpenLayers采用ES6,以前OL4那种简单的加库的方法已经不适用了. Windows7-64环境中部署OpenLayers6.4.3详细步骤: 1.官方教程(英文版) 2.中 ...