Java岗面试题--Java基础(日积月累,每日三题)

news2025/1/9 18:54:33

目录

  • 面试题一:JDK、JRE、JVM之间的区别
  • 面试题二:hashCode()与equals()之间的关系
    • 追问:为什么重写 equals() 就一定要重写 hashCode() 方法?
  • 面试题三:String、StringBuffer、StringBuilder的区别
    • 追问一:String 字符串修改实现的原理?
    • 追问二:String 为什么要设计为不可变类?

面试题一:JDK、JRE、JVM之间的区别

  • JDK (Java SE Development Kit),Java 标准开发包,它提供了编译、运行 Java 程序所需的各种工
    具和资源
    ,包括Java编译器Java 运行时环境,以及常用的Java 类库等。
  • JRE ( Java Runtime Environment) ,Java 运行环境,用于运行 Java 的字节码文件。JRE 中包括了
    JVM 以及 JVM 工作所需要的类库,普通用户而只需要安装 JRE 来运行 Java 程序,而程序开发者必
    须安装 JDK 来编译、调试程序。
  • JVM (Java Virtual Machine),Java虚拟机,是JRE的一部分,它是整个 Java 实现跨平台的最核心
    的部分,负责运行字节码文件

    我们写 Java 代码,用 txt 就可以写,但是写出来的 Java 代码,想要运行,需要先编译成字节码,那就需要编译器,而 JDK 中就包含了编译器 javac ,编译之后的字节码,想要运行,就需要一个可以执行字节码的程序,这个程序就是 JVM(Java虚拟机),专门用来执行 Java 字节码的。
    如果我们要开发 Java 程序,那就需要 JDK ,因为要编译 Java 源文件。
    如果我们只想运行已经编译好的 Java 字节码文件,也就是 *.class 文件,那么就只需要 JRE。
    JDK 中包含了 JRE ,JRE 中包含了 JVM。
    另外,JVM 在执行 Java 字节码时,需要把字节码解释为机器指令,而不同操作系统的机器指令是有可能不一样的,所以就导致不同操作系统上的 JVM 是不一样的,所以我们在安装 JDK 时需要选择操作系统。
    另外,JVM 是用来执行 Java 字节码的,所以凡是某个代码编译之后是 Java 字节码,那就都能在 JVM 上运行,比如Apache Groovy , Scala and Kotlin 等等。
    在这里插入图片描述

面试题二:hashCode()与equals()之间的关系

HashCode 介绍:hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个 int 整数。这个哈希码的作用是确定该对象在哈希表中的索引位置
hashCode() 定义在 JDK 的 Object.java 中,Java 中的任何类都包含有 hashCode() 函数。
散列表存储的是键值对(key-value),它的特点是:能根据“键”快速的检索出对应的“值”。这其中就利用到了散列码(可以快速找到所需要的对象) 。

追问:为什么重写 equals() 就一定要重写 hashCode() 方法?

这个问题应该是有个前提,就是你需要用到 HashMap、HashSet 等 Java 集合,用不到哈希表的话,其实仅仅重写 equals() 方法也可以。而工作中的场景是常常用到 Java 集合,所以 Java 官方建议重写 equals() 就⼀定要重写 hashCode() 方法。
在 Java 中,每个对象都可以调用自己的 hashCode() 方法得到自己的哈希值(hashCode),相当于对象的指纹信息,通常来说世界上没有完全相同的两个指纹,但是在 Java 中做不到这么绝对,但是我们仍然可以利用 hashCode 来做一些提前的判断,比如:

  • 如果两个对象的 hashCode 不相同,那么这两个对象肯定不同的两个对象;
  • 如果两个对象的 hashCode 相同,不代表这两个对象一定是同一个对象,也可能是两个对象;
  • 如果两个对象相等,那么他们的 hashCode 就一定相同。

在 Java 的一些集合类的实现中,在比较两个对象是否相等时,会根据上面的原则,会先调用对象的 hashCode() 方法得到 hashCode 进行比较,如果 hashCode 不相同,就可以直接认为这两个对象不相同,如果 hashCode 相同,那么就会进一步调用 equals() 方法进行比较。而 equals() 方法,就是用来最终确定两个对象是不是相等的,通常 equals 方法的实现会比较重,逻辑比较多,而 hashCode() 主要就是得到一个哈希值,实际上就一个数字,相对而言比较轻,所以在比较两个对象时,通常都会先根据 hashCode 想比较一下。
所以我们就需要注意,如果我们重写了 equals() 方法,那么就要注意 hashCode() 方法,一定要保证能遵守上述规则。

面试题三:String、StringBuffer、StringBuilder的区别

  1. String 用于字符串操作,属于不可变类,如果尝试去修改,会新生成一个字符串对象,StringBuffer 和 StringBuilder 是可变的;

String 不是基本数据类型,是引⽤类型,底层用 char 数组实现的

  1. StringBuffer 是线程安全的,对⽅法加了同步锁,线程安全。

StringBuffer 中并不是所有方法都使用了 Synchronized 修饰来实现同步:

  1. StringBuilder 是线程不安全的,所以在单线程环境下 StringBuilder 效率会更高;
    执行效率:StringBuilder > StringBuffer > String。

追问一:String 字符串修改实现的原理?

当用 String 类型来对字符串进行修改时,其实现方法是首先创建⼀个 StringBuffer,其次调用 StringBuffer 的 append() 方法,最后调用 StringBuffer 的 toString() 方法把结果返回。

追问二:String 为什么要设计为不可变类?

  1. 字符串常量池的需要:字符串常量池是 Java 堆内存中⼀个特殊的存储区域,当创建⼀个 String 对象时,假如此字符串值已经存在于常量池中,则不会创建⼀个新的对象,而是引用已经存在的对象;
  2. 允许 String 对象缓存 HashCode:Java 中 String 对象的哈希码被频繁地使用,比如在 HashMap 等容器中。字符串不变性保证了 hash 码的唯⼀性,因此可以放心地进行缓存。这也是⼀种性能优化手段,意味着不必每次都去计算新的哈希码;
  3. String 被许多的 Java 类(库)用来当做参数,例如:网络连接地址 URL、文件路径 path、还有反射机制所需要的 String 参数等, 假若 String 不是固定不变的,将会引起各种安全隐患。

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

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

相关文章

vulfocus靶场通关(目录遍历)

uWSGI 目录穿越(CVE-2018-7490) uWSGI是一款Web应用程序服务器,它实现了WSGI、uwsgi和http等协议,并支持通过插件来运行各种语言,uWSGI 2.0.17之前的PHP插件,没有正确的处理DOCUMENT_ROOT检测,导致用户可以…

【运维】通过gotty实现网页代理访问服务器及K8S容器操作实践

Gotty 是Golang编写的可以方便的共享系统终端为web应用,是一个灵活强大的通过web访问终端的工具。本文将主要通过搭建Gotty实现对K8S容器的访问操作,开发如果想要正常的进行容器访问以及测试环境代码调试,最好是搭建一套与运维环境隔离的应用…

Gadget驱动程序框架

Gadget驱动程序框架 文章目录Gadget驱动程序框架参考资料:一、 怎样理解Gadget框架二、从硬件软件角度理解Gadget框架2.1 底层硬件操作_UDC驱动2.2 上层软件操作三、 从构造描述符的角度理解Gadget框架致谢参考资料: Linux下USB gadget设备详解Linux us…

Linux常用命令——quotaon命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) quotaon 激活Linux内核中指定文件系统的磁盘配额功能 补充说明 quotaon命令用于激活Linux内核中指定文件系统的磁盘配额功能。执行quotaon指令可开启用户和群组的才磅秒年空间限制,各分区的文件系统…

STM32——I2C外设总线

文章目录一、I2C外设简介二、I2C框图三、I2C基本结构四、主机发送五、主机接收六、I2C的中断请求七、软件/硬件波形对比八、硬件I2C读写MPU6050电路设计关键代码状态监控函数一、I2C外设简介 STM32内部集成了硬件I2C收发电路,可以由硬件自动执行时钟生成、起始终止条…

Go语言jwt无感刷新以及解决SSO单点登录限制

前言 为什么使用JWT? Jwt提供了生成token以及token验证的方法,而token是一种不用存储在服务端,只需要由用户携带即可实现认证的一种方式。在介绍JWT之前,我们也应该先了解cookie和session。 Cookie和Session 为每一位用户设定…

PLSQL Developer 代码助手卡顿优化

支持付费优化 原因分析 代码助手卡顿来源于(不考虑网络和软件版本等影响) A.从已连接的数据库的数据字典中,读取该表的列信息B.将读取到的列信息返回到plsql编辑器,并进行字符处理,然后显示如何优化B 这个勾勾是维…

【GPLT 二阶题目集】L2-034 口罩发放

为了抗击来势汹汹的 COVID19 新型冠状病毒,全国各地均启动了各项措施控制疫情发展,其中一个重要的环节是口罩的发放。 某市出于给市民发放口罩的需要,推出了一款小程序让市民填写信息,方便工作的开展。小程序收集了各种信息&#…

redis的配置文件

目录 介绍 1. 单位的设置方式 2. 可以包含其他文件内容 3. 网络配置相关 4. 通用 5. 安全 6. 限制 redis的配置文件名为redis.conf,一般会安装在/etc目录下。 如果找不到该文件可以使用find命令查找。 find . -name redis.conf 介绍 1. 单位的设置方式 只支持字…

client-go监听apiserver,监听http2逻辑分析

前言 最近做项目,需要写一个controller(k8s的插件),需要从k8s的apiserver取数据,就用了自带的client-go,但是client-go是怎么从apiserver获取数据的一直没有研究过,只是看网上,看官…

Hudi系列10:Flink流式插入

文章目录流式插入概述一. Hudi流式插入案例1(datagen)1.1 准备工作1.2 源端准备1.3 目标端表准备1.4 ETL准备1.5 数据验证1.6 通过SPARK SQL查看数据二. Hudi流式插入案例2(Kafka)2.1 准备工作2.2 源端准备2.2.1 创建kafka的topic (hudi_flink)2.2.2 Flink SQL Client消费kafka…

卷积神经网络中的权值共享和局部连接

卷积神经网络中的权值共享和局部连接卷积神经网络的两大特点权值共享全连接卷积神经网络的两大特点 权值共享,就是输入一张图,用一个filter去扫这张图,filter里面的数就叫权重,这张图每个位置都是被同样的filter扫的,…

Flink官方例子解析:WordCount

1. 简介 今天介绍的是官方子项目flink-examples-streaming里面的WordCount例子。 WordCount ,中文:单词统计,是大数据计算常用的例子。 2. WordCount需要实现的功能 监听指定目录下的文件,读取文件的文本内容;如果未…

Python继承机制及其使用

Python 类的封装、继承、多态 3 大特性,前面章节已经详细介绍了 Python 类的封装,本节继续讲解 Python 类的继承机制。继承机制经常用于创建和现有类功能类似的新类,又或是新类只需要在现有类基础上添加一些成员(属性和方法&#…

RASP技术进阶系列(三):重大漏洞自动化热修复

在上篇文章《RASP技术进阶系列(二):东西向Web流量智能检测防御》中提到,在企业日常安全运营以及HW场景下,应用漏洞攻击应急响应和恶意流量溯源分析是安全团队的重点工作。在恶意流量溯源方面,指向攻击来源的…

趁着你对象吃泡面的功夫,我修复了误删除的文件

文章目录前言一. linux下文件删除原理1.1 文件删除原理的简单介绍1.2 测试inode号是否容易被覆盖?二. 实验测试过程2.1 实验环境:2.2 新增一块硬盘测试2.3 对磁盘分区2.3.1 分区(使用fdisk分区)2.3.2 格式化,创建目录挂…

网络化多智能体系统的共识与合作

在所有参与者之间提供快速协议和团队合作的算法通过自组织网络系统实现有效的任务执行。By Reza Olfati-Saber, Member IEEE, J. Alex Fax, and Richard M. Murray, Fellow IEEE小于 翻译摘要:本文提供了一个理论框架,用于分析多智能体网络系统的共识算法…

Linux文件与目录的查看:ls

前言 ls作为我们在Linux系统中最常用的命令,因为我们常常需要去知道文件或是目录的相关信息,但我们Linux的文件所记录的信息实在是太多了,ls也没有需要全部都列出来,所以,当我们执行ls命令时,默认显示的只…

【数据结构】基础:二叉搜索树

【数据结构】基础:二叉搜索树 摘要:本文为二叉树的进阶,主要介绍其概念与基本实现(递归与非递归),再介绍其应用,主要介绍内容为KV模型。最后为简单的性能分析。 文章目录【数据结构】基础&#…

【数据结构】1.1 数据结构的研究内容

文章目录数据结构的研究内容数据结构研究的内容小结数据结构的研究内容 早期,计算机主要用于数值计算: 首先,分析问题、提取操作对象,然后,找出操作对象之间的关系,用数学语言加以描述,建立相应数学方程。…