面试题-01

news2025/3/13 7:26:33

1、JDK 和 JRE 和 JVM 分别是什么,有什么区别?

JDK(Java Development Kit,Java 软件开发工具包)

JDK(Java Development Kit):JDK 是 Java 开发⼯具包,包含了编写、编译、调试和运⾏ Java 程序所需的所有⼯具和组件(包含了JRE和一些java开发工具),⽐如编译器(javac)、Java API、调试⼯具等。JDK 是针对 Java 开发⼈员的,它包含了 JRE,还有编译器和其他⼯具,可以⽤来编写和调试 Java 程序。

JRE(Java Runtime Environment,Java 运行环境) 

JRE 是 Java 运⾏时环境,包括了 Java 虚拟机(JVM)和 Java 标准类 库(Java API)。JRE 是针对 Java 应⽤程序的,它提供了在计算机上运⾏ Java 应⽤程序所需的最⼩环境。

JVM(Java Virtual Machine,Java 虚拟机)

JVM 是 Java 虚拟机,JVM是JRE的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。在Java虚拟机上⽣成可运⾏的字 节码,移植到在其他平台上时可不加修改地运⾏

三者之间区别:

        1.JDK是Java开发工具包含了java运行环境和java开发工具

        2.JRE是Java运行时环境,包括了java核心类库。

        3.JVM是java环境(jre)的一部分,是跨平台核心部分,可运行java核心代码

Java开发⼯具包=Java 运⾏环境+Java开发⼯具

Java 运⾏环境=Java虚拟机+Java核⼼类库

 2、什么是字节码?采用字节码的最大好处是什么?

字节码是JVM可以理解的代码就叫做字节码(即源程序(.java文件)通过编译产生的产物(.class文件)),它不面向任何特定的处理器,只面向JVM,而且,由于字节码并不针对一种特定的机器,因此,Java 程序无须重新编译便可在多种不同操作系统的计算机上运行

好处:

  • 可移植性:由于字节码是中间代码,并不针对一种特定的机器,因此Java程序无须重新编译就可以在多种操作系统的计算机上运行(不同的操作系统和硬件平台可能需要不同的JVM实现,但是它们都可以执行相同的字节码程序)。
  •  安全性:由于字节码需要在JVM中运行,所以可以对字节码进行安全检查,以确保程序不会对系统造成威胁
  •  性能:由于字节码是⼀种紧凑的⼆进制格式,相⽐于直接编译为机器码,可以更快地加载和传输,同时也可以 在运⾏时进⾏动态优化,提⾼程序的执⾏效率。
  • 可读性:相⽐于直接编译为机器码,字节码具有更好的可读性,可以⽅便地进⾏反汇编和调试。

3、什么是数据库事务?讲一下事务的 ACID 特性?

事务是若干个SQL语句构成的一个操作序列,这些操作表示一个完整的功能,并且需要保证功能的完整性,因此要求在该事务中要求所有的sql要么都执行,要么都不执行,是一个不可分割的整体单位。(简单来说就是由多个小任务的组成的任务)

事务的ACID特性

  • 原子性(Atomicity):事务是一个不可分割的整体,所有操作要么全做,要么全不做;只要事务中有一个操作出错,回滚到事务开始前的状态的话,那么之前已经执行的所有操作都是无效的,都应该回滚到开始前的状态。
  • 一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。
  • 隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱结束前,B不能向这张卡转账。
  • 持久性(Durability):事务一旦被提交后,事务对数据库的所有更新将被永远保存到数据库,不能回滚。

4、Java 和 C++、Go 语⾔的区别,各⾃的优缺点?

Java优点:

  •  平台性强(跨平台):Java 虚拟机(JVM)可以在不同的操作系统上运⾏ Java 程序,使得开发者可以编写⼀次代 码并在多个平台上运⾏
  • 安全性⾼:Java 有很多安全特性,例如⾃动内存管理、类的访问权限控制、异常处理等,可以有效避免⼀些 常⻅的安全漏洞;
  • ⽣态系统完备:Java 的⽣态系统⾮常完善,有很多成熟的框架和⼯具可以帮助开发者快速构建复杂的应⽤。

        缺点:

  • 由于JVM的存在,运⾏速度相对较慢
  • 对于实时性要求较⾼的场景,Java的表现可能不如C++和Go

go语言优点:

  • ⾼并发,天⽣⽀持协程,能够轻松编写⾼效的并发程序
  • 简单易学,语法简洁,上⼿容易
  • 静态类型语⾔,可以避免⼀些潜在的运⾏时错误
  • 快速编译,可以快速构建和部署应⽤程序

        缺点:

  • 缺乏丰富的类库,与 Java 和 C++ 相⽐有些不⾜
  • 在⼀些性能要求极⾼的场景中可能不如 C++ 表现
  • 语⾔本身还⽐较年轻,相关⽣态和⼯具还需要进⼀步完善 

 C++优点:

  • 速度快,适合编写需要⾼性能的应⽤程序
  • 应⽤⼴泛,特别是在游戏开发、操作系统和嵌⼊式系统开发⽅⾯
  • 灵活性⾼,可以直接访问硬件和内存

        缺点:

  • 学习难度较⾼,需要掌握指针、内存管理等底层知识
  • 容易出现内存泄漏和指针错误等问题
  • 编写代码过程中需要更多的⼿动管理,相⽐ Java 更容易出错

5、Java 中 final 关键字有什么用?

1.final 修饰类,表示该类不能被继承。final 类中的⽅法默认都是 final 的,不能被⼦类重写。

2. final 修饰⽅法,表示该⽅法不能被⼦类重写。

3. final 修饰变量,表示该变量只能被赋值⼀次。final 修饰的变量必须在声明时或构造函数中初始化,且不能再 被修改。常⽤于定义常量。

4.确保对象引⽤不可变,在对象引⽤声明前加上 final 关键字,可以确保该引⽤指向的对象不能被改变,但是该对象的内容可以被改变。例如,final MyClass obj = new MyClass(); 将 obj 声明为⼀个不可变引⽤,指向⼀个可变的 MyClass 对象。

何为"不可变的对象引用"呢?

        final只保证引用类型变量所引用的地址不会改变,即一直引用同一个对象,但是这个对象的内容(对象的非final成员变量的值可以改变)完全可以发生改变(比如final int[] intArray;,intArray不允许再引用其他对象,但是intArray内的int值却可以被修改) 

使⽤ final 修饰的变量在编译时就已经确定了其值,因此在运⾏时访问时⽐⾮ final 变量更快。 

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

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

相关文章

政安晨:【完全零基础】认知人工智能(一)【超级简单】的【机器学习神经网络】 —— 预测机

开个头 很多小伙伴们很想亲近人工智能与机器学习领域,然而这个领域里的核心理论、算法、工具给人感觉都太过“高冷”,让很多小伙伴们望而却步,导致一直无法入门。 如何捅破这层窗户纸? 让高冷的不再高冷,让神秘的不…

jwt+redis实现登录认证

项目环境&#xff1a;spring boot项目 pom.xml引入jwt和redis <!-- jwt --><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>4.3.0</version></dependency><!-- redis坐标-->…

使用redis-insight连接到服务器上的redis数据库

一、安装redis&#xff1a; 安装 Redis。你可以通过运行下面的命令来使用 yum 安装 Redis&#xff1a; sudo yum install redis 启动 Redis 服务。安装完成后&#xff0c;你可以通过运行下面的命令来启动 Redis 服务&#xff1a; sudo systemctl start redis 设置 Redis 服务…

Eclipse - 查看工程或者文件的磁盘路径

Eclipse - 查看工程或者文件的磁盘路径 1. Help -> Eclipse Marketplace -> Find: Explorer -> Eclipse Explorer 4.1.0 -> Install2. right-click -> Open in ExplorerReferences 1. Help -> Eclipse Marketplace -> Find: Explorer -> Eclipse Explo…

数据结构-邻接矩阵

介绍 邻接矩阵&#xff0c;是表示图的一种常见方式&#xff0c;具体表现为一个记录了各顶点连接情况的呈正方形的矩阵。 假设一共有以下顶点&#xff0c;其连接关系如图所示 那么&#xff0c;怎么表示它们之间的连接关系呢&#xff1f; 我们发现&#xff0c;各条边所连接的都…

春节专题|产业7问:区块链厂商的现在和未来——数字资产厂商

2023转瞬即逝&#xff0c;不同于加密领域沉寂一整年后在年末集中爆发&#xff0c;对于我国的区块链厂商而言&#xff0c;稳中求胜才是关键词&#xff0c;在平稳发展的基调下&#xff0c;产业洗牌也悄无声息的到来。 从产业总体而言&#xff0c;在经过了接近3年的快速发展后&…

Linux命令-netstat

用于端口和服务之间的故障排除 格式&#xff1a;netstat [常用参数] | grep 端口号/进程名称 -n&#xff1a;显示接口和端口的编号 -t&#xff1a;显示TCP套接字 -u&#xff1a;显示UDP套接字 -l&#xff1a;显示监听中的套接字 -p&#xff1a;显示端口对应的进程信息 -a&a…

蓝桥杯:C++队列、优先队列、链表

C普通队列 算法竞赛中一般用静态数组来模拟队列&#xff0c;或者使用STL queue。使用C的STL queue时&#xff0c;由于不用自己管理队列&#xff0c;因此代码很简洁。队列的部分操作如下。 C优先队列 很多算法需要用到一种特殊的队列&#xff1a;优先队列。它的特点是最优数据…

详解自定义类型:枚举与联合体!

目录 ​编辑 一、枚举类型 1.枚举类型的声明 2.枚举类型的优点 3.枚举类型的使用 二、联合体类型(共用体&#xff09; 1.联合体类型的声明 2.联合体的特点 3.相同成员的结构体和联合体的对比 4.联合体大小的计算 5.用联合体判断大小端 三.完结散花 悟已往之不谏&…

从零开始学习数据结构—【链表】—【探索环形链的设计之美】

环形链表 文章目录 环形链表1.结构图2.具体实现2.1.环形链表结构2.2.头部添加数据2.2.1.具体实现2.2.2.测试添加数据 2.3.尾部添加数据2.3.1.具体实现2.3.2.添加测试数据 2.4.删除头部数据2.4.1.具体实现2.4.2.测试删除数据 2.5.删除尾部数据2.5.1.具体实现2.5.2.测试删除数据 …

【leetcode】深搜、暴搜、回溯、剪枝(C++)3

深搜、暴搜、回溯、剪枝&#xff08;C&#xff09;3 一、解数独1、题目描述2、代码3、解析 二、单词搜索1、题目描述2、代码3、解析 三、黄金矿工1、题目描述2、代码3、解析 四、不同路径III1、题目描述2、代码3、解析 一、解数独 1、题目描述 leetcode链接 2、代码 class…

BIG DATA —— 大数据时代

大数据时代 [英] 维克托 迈尔 — 舍恩伯格 肯尼斯 库克耶 ◎ 著 盛杨燕 周涛◎译 《大数据时代》是国外大数据研究的先河之作&#xff0c;本书作者维克托迈尔舍恩伯格被誉为“大数据商业应用第一人”&#xff0c;他在书中前瞻性地指出&#xff0c;大数据带来的信息…

微服务—DSL基础语法与RestClient操作

本博客为个人学习笔记&#xff0c;学习网站&#xff1a;黑马程序员SpringCloud 2021教程 目录 DSL语法 索引库操作 mapping属性 创建索引库 字段拷贝 查询、删除、修改索引库 文档操作 新增文档 查询、删除文档 修改文档 全量修改 增量修改 DSL文档语法小结 Rest…

Mac配置Python3最简单的方法

此文介绍Mac用Anaconda配置Python3 达成效果 能让你目前只装有Python2的Mac装上Python3&#xff0c;同时拥有很多科学计算库 anaconda介绍 anaconda 是一个python的发行版&#xff0c;包括了python和很多常见的软件库, 和一个包管理器conda。常见的科学计算类的库都包含在里…

美国突然致敬中本聪

作者&#xff1a;秦晋 有点看不懂美国的神操作。 2月16日&#xff0c;据《Bitcoin Magazine》报道&#xff0c;比特币的竞争对手、美国参议员伊丽莎白-沃伦对比特币的立场突然180度大转弯。由反对立场转为支持立场。让很多行业媒体出乎意料&#xff0c;甚至惊掉下巴。 报道称&a…

【测试】JUnit

目 录 一.注解二.断言三.用例的执行顺序四.参数化五.测试套件 自动化就是 selenium 脚本来实现的 junit 是 java 的单亓测试工具&#xff0c;只不过我们在实现自动化的时候需要借用一下下 junit 库里面提供的一些方法 引入依赖 Junit 5 <!-- https://mvnrepository.com/a…

php 数组函数

php 数组函数 1. 常用的php数组函数 1. 常用的php数组函数 array_pop() 删除数组中最后一个元素 array_push() 将一个或多个元素插入到数组的末尾 array_keys <?php $arr array("刘岩" > 30, "范冰冰" > 31, "娜扎" > 31);$…

DS:八大排序之堆排序、冒泡排序、快速排序

创作不易&#xff0c;友友们给个三连吧&#xff01;&#xff01; 一、堆排序 堆排序已经在博主关于堆的实现过程中详细的讲过了&#xff0c;大家可以直接去看&#xff0c;很详细,这边不介绍了 DS&#xff1a;二叉树的顺序结构及堆的实现-CSDN博客 直接上代码&#xff1a; …

备战蓝桥杯---图论之最小生成树

首先&#xff0c;什么是最小生成树&#xff1f; 他就是无向图G中的所有生成树中树枝权值总和最小的。 如何求&#xff1f; 我们不妨采用以下的贪心策略&#xff1a; Prim算法&#xff08;复杂度&#xff1a;&#xff08;nm)logm)&#xff1a; 我们对于把上述的点看成两个集…

MAC VSCODE g++编译器无法编译C++11语法的 解决办法(CodeRunner版本)

如果你是使用的 codeRunner 这个插件&#xff0c;就是这个按钮 coderunner的原理大致是&#xff1a;先判断你这是什么语言&#xff0c;然后有一个 code-runner.executorMap 来对应各个语言是用什么执行语句 我发现&#xff0c;我修改之前&#xff08;无法执行C11语法的原因是&a…