面试题-01

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.hqwc.cn/news/473694.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python爬虫之自动化测试Selenium#7

爬虫专栏:http://t.csdnimg.cn/WfCSx 前言 在前一章中,我们了解了 Ajax 的分析和抓取方式,这其实也是 JavaScript 动态渲染的页面的一种情形,通过直接分析 Ajax,我们仍然可以借助 requests 或 urllib 来实现数据爬取…

数学建模【非线性规划】

一、非线性规划简介 通过分析问题判断是用线性规划还是非线性规划 线性规划:模型中所有的变量都是一次方非线性规划:模型中至少一个变量是非线性 非线性规划在形式上与线性规划非常类似,但在数学上求解却困难很多 线性规划有通用的求解准…

h5和微信小程序实现拍照功能(其中h5暂时无法调用闪光灯)

代码如下 <template><view class"camera"><!-- #ifdef MP --><camera ref"myCamera" id"myCamera" device-position"back" :flash"flash" error"error" style"display: block;"&…

Vue2:组件间通信框架Vuex

一、原理图及作用 功能介绍&#xff1a; 简单说就是Vue项目中&#xff0c;各个组件间通信的一种框架 相较于之前的全局事件总线&#xff0c;该框架更实用&#xff01; 提高了代码的复用率&#xff0c;把核心业务代码&#xff0c;集中到store中&#xff0c;这样&#xff0c;一处…

Java Lambda表达式:简化编程,提高效率

Java Lambda表达式&#xff1a;简化编程&#xff0c;提高效率 1. 使用Lambda表达式进行集合遍历1.1 未使用Lambda表达式&#xff1a;1.2 使用Lambda表达式&#xff1a; 2. 使用Lambda表达式进行排序2.1 未使用Lambda表达式&#xff1a;2.2 使用Lambda表达式&#xff1a; 3. 使用…

市场复盘总结 20240208

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 二进三&#xff1a; 进级率中 25% 最常用的…

Practical User Research for Enterprise UX

2.1 Why It’s Hard to Get Support for Research in Enterprises 2.1.1 Time and Budget Instead of answering the question “What dowe gain if we do this research?”, ask instead “What do we stand to lose if we don’t do the research?” 2.1.2 Legacy Thinkin…

Mysql第二关之存储引擎

简介 所有关于Mysql数据库优化的介绍仿佛都有存储引擎的身影。本文介绍Mysql常用的有MyISAM存储引擎和Innodb存储引擎&#xff0c;还有常见的索引。 Mysql有两种常见的存储引擎&#xff0c;MyISAM和Innodb&#xff0c;它们各有优劣&#xff0c;经过多次优化和迭代&#xff0c;…

数据结构对链表的初步认识(一)

已经两天没有更新了&#xff0c;今天就写一篇数据结构的链表吧&#xff0c;巩固自己也传授知识&#xff0c;不知道各位是否感兴趣看看这一篇有关联表的文章。 目录 链表的概念与结构 单向链表的实现 链表各个功能函数 首先我在一周前发布了一篇有关顺序表的文章&#xff0c;…

漏洞原理 | CORS跨域学习篇

本文由掌控安全学院 - 帆先生 投稿 0x01&#xff1a;原理 1、 什么是CORS 全称跨域资源共享&#xff0c;用来绕过SOP(同源策略)来实现跨域访问的一种技术。 CORS漏洞利用CORS技术窃取用户敏感信息 2、 同源策略简介 同源策略是浏览器最核心也是最基本的安全功能&#xff0…

Netty中的内置通信模式、Bootstrap和ChannelInitializer

内置通信传输模式 NIO:io.netty.channel.socket.nio 使用java.nio.channels包作为基础–基于选择器的方式Epoll:io.netty.channel.epoll由JNI驱动的epoll()和非阻塞IO.这个传输支持只有在Linux上可用的多种特性&#xff0c;如果SO_REUSEPORT&#xff0c;比NIO传输更快&#xf…

layui表格中使用cascader后导致表格滚动条消失

修改前&#xff0c;受影响页面 修改后最终想要的效果 修改方法