当前位置: 首页 > news >正文

【备战面试】每日10道面试题打卡-Day2

本篇总结的是Java基础知识相关的面试题,后续也会更新其他相关内容

文章目录

  • 1、== 和 equals 的区别是什么?
  • 2、你重写过 hashcode 和 equals 吗,为什么重写equals时必须重写hashCode方法?
  • 3、为什么Java中只有值传递?
  • 4、BIO、NIO、AIO 有什么区别?
  • 5、什么是反射机制?反射机制的应用场景有哪些?
  • 6、String有哪些特性?
  • 7、String和StringBuffer、StringBuilder的区别是什么?String 为什么是不可变的?
  • 8、集合和数组的区别是什么?
  • 9、List,Set,Map三者的区别?
  • 10、在使用 HashMap 的时候,用 String 做 key 有什么好处?


1、== 和 equals 的区别是什么?

答:

  • ==:它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象。(基本数据类型比较的是值,引用数据类型比较的是内存地址)
  • equals:它的作用也是判断两个对象是否相等。但它一般有两种使用情况:
    • 情况1:类没有覆盖equals() 方法。则通过 equals() 比较该类的两个对象时, 等价于通过“==”比较这两个对象
    • 情况2:类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来比较两个对象的内容是否相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。

String中的equals方法是被重写过的,因为object的equals方法是比较的对象的内存地址,而String的equals方法比较的是对象的值。
创建String类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它赋给当前引用。如果没有就在常量池中重新创建一个String对象。

2、你重写过 hashcode 和 equals 吗,为什么重写equals时必须重写hashCode方法?

答:如果我们只重写了equals方法没有重写hashcode方法的时候,就可能会导致两个对象通过equals方法比较之后判断相等,而两个对象的hashcode不同,因为它们的引用地址是不同的。

但是这时候就违背了hashcode 的规则:两个对象相等其 hash 值一定要相等,这样就会导致我们在使用hashcode计算存储地址的时候,两个相同的对象却存储在不同的位置,这显然是不合理的。所以我们在重写equals时,必须要重写hashCode方法。

如下:

public class Main {public static void main(String[] args) {// 对象 1Persion p1 = new Persion();p1.setName("Java");p1.setAge(18);// 对象 2Persion p2 = new Persion();p2.setName("Java");p2.setAge(18);// 创建 Set 对象Set<Persion> set = new HashSet<Persion>();set.add(p1);set.add(p2);// 打印 Set 中的所有数据set.forEach(p -> {System.out.println(p);});}
}class Persion {private String name;private int age;@Overridepublic boolean equals(Object o) {if (this == o) return true; // 引用相等返回 true// 如果等于 null,或者对象类型不同返回 falseif (o == null || getClass() != o.getClass()) return false;// 强转为自定义 Persion 类型Persion persion = (Persion) o;// 如果 age 和 name 都相等,就返回 truereturn age == persion.age &&Objects.equals(name, persion.name);}@Overridepublic int hashCode() {// 对比 name 和 age 是否相等return Objects.hash(name, age);}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Persion{" +"name='" + name + '\'' +", age=" + age +'}';}
}

如果你还不理解可以看这篇:文章

3、为什么Java中只有值传递?

答:当方法参数是基本数据类型时,我们进行参数传递的时候就是将这个基本数据类型复制一份然后作为参数传递。当方法参数是引用类型时,我们进行参数传递的时候就是将这个引用复制一份然后作为参数传递。

4、BIO、NIO、AIO 有什么区别?

答:

  • BIOBlock IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。
  • NIONon IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过
    Channel(通道)通讯,实现了多路复用。
  • AIOAsynchronous IONIO 的升级,也叫 NIO2,实现了异步非堵塞 IO
    ,异步 IO 的操作基于事件和回调机制。

5、什么是反射机制?反射机制的应用场景有哪些?

答:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

  • 静态编译:在编译时确定类型,绑定对象
  • 动态编译:在运行时确定类型,绑定对象

反射机制优缺点:

优点: 运行期类型的判断,动态加载类,提高代码灵活度
缺点性能瓶颈,反射相当于一系列解释操作,通知 JVM 要做的事情,性能比直接的java代码要慢很多。

反射机制的应用场景:

  • ①我们在使用JDBC连接数据库时使用Class.forName()通过反射加载数据库的驱动程序;
  • ②Spring框架也用到很多反射机制, 经典的就是xml的配置模式。Spring 通过 XML 配置模式装载 Bean
    的过程:
    • 将程序内所有 XML 或 Properties 配置文件加载入内存中
    • Java类里面解析xml或properties里面的内容,得到对应实体类的字节码字符串以及相关的属性信息;
    • 使用反射机制,根据这个字符串获得某个类的Class实例;
    • 动态配置实例的属性;

6、String有哪些特性?

答:

  • 不变性:String 是只读字符串,是一个典型的 immutable 对象,**对它进行任何操作,其实都是创
    建一个新的对象,再把引用指向该对象。**不变模式的主要作用在于当一个对象需要被多线程共享并
    频繁访问时,可以保证数据的一致性。
  • 常量池优化String 对象创建之后,会在字符串常量池中进行缓存,如果下次创建同样的对象时,
    会直接返回缓存的引用。
  • final:使用 final 来定义 String 类,表示 String 类不能被继承,提高了系统的安全性。

7、String和StringBuffer、StringBuilder的区别是什么?String 为什么是不可变的?

答:我们分别从可变性、线程安全性和性能三个方面来讲:

可变性:

  • String类中使用字符数组保存字符串private final char value[],但是使用了final关键字来修饰,所以 string对象是不可变的
  • StringBuilder类时继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串char[] value,StringBuilder对象都是可变的。
  • StringBuffer类时继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串char[] value,StringBuffer对象都是可变的。

线程安全性:

  • String中的对象是不可变的,也就可以理解为常量线程安全
  • StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。
  • StringBuilder没有对方法进行加同步锁,所以是非线程安全的。

性能:

  • String类型:每次对String 类型进行改变的时候,都会生成一个新的String对象,然后将指针指向新的String 对象。
  • StringBuffer类型:每次都会对StringBuffer对象本身进行操作,而不是生成新的对象并改变对象引用,所以性能强于String类型。
  • StringBuilder:StringBuilder类型与StringBuffer类型相似,但是由于StringBuilder没有对方法加锁,所以性能强于StringBuffer。

使用场景选择:

  • String :要操作少量的数据可以选择String;
  • StringBuilder单线程操作字符串缓冲区下操作大量数据
  • StringBuffer多线程操作字符串缓冲区下操作大量数据

8、集合和数组的区别是什么?

答:

  • 数组是固定长度的;集合可变长度的。
  • 数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型
  • 数组存储的元素必须是同一个数据类型;集合存储的对象可以是不同数据类型。

9、List,Set,Map三者的区别?

答:Java 容器分为 Collection 和 Map 两大类,Collection集合的子接口有Set、 List、Queue三种子接口。
我们比较常用的是Set、List,Map接口不是 collection的子接口

如下图:
在这里插入图片描述
图片来源:Java集合中List,Set以及Map等集合体系详解(史上最全)

Collection集合主要有List和Set两大接口:

  • List:一个有序(元素存入集合的顺序和取出的顺序一致)容器,元素可以重复可以插入多个
    null元素
    ,元素都有索引。
  • Set:一个无序(存入和取出顺序有可能不一致)容器,不可以存储重复元素只允许存入一个
    null元素
    ,必须保证元素唯一性。
  • Map是一个键值对集合,存储键、值和之间的映射。 Key无序,唯一value 不要求有序,允许重复。Map没有继承于Collection接口,从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。

List接口常用的实现类有 ArrayListLinkedListVector
Set接口常用的实现类有 HashSetLinkedHashSet 以及TreeSet
Map接口常用的实现类:HashMapTreeMapHashTableLinkedHashMapConcurrentHashMap

10、在使用 HashMap 的时候,用 String 做 key 有什么好处?

答:HashMap 内部实现是通过 key 的 hashcode 来确定 value 的存储位置,因为字符串是不可变的,所以
当创建字符串时,它的 hashcode 被缓存下来,不需要再次计算它的hashcode,所以相比于其他对象更快。

相关文章:

【备战面试】每日10道面试题打卡-Day2

本篇总结的是Java基础知识相关的面试题&#xff0c;后续也会更新其他相关内容 文章目录1、 和 equals 的区别是什么&#xff1f;2、你重写过 hashcode 和 equals 吗&#xff0c;为什么重写equals时必须重写hashCode方法&#xff1f;3、为什么Java中只有值传递&#xff1f;4、BI…...

“数字档案室测评”相关参考依据梳理

数字档案室建设无疑比数字档案馆建设应用范围更为广泛&#xff0c;涉及的单位类型和专业领域也更多。这一点从国家档案局的机构设置上也可以看出端倪&#xff1a; 国家档案局两个内设业务指导司中&#xff0c;档案馆(室)业务指导司主要针对档案馆和机关档案室&#xff0c;而经济…...

android 动态加载jar包

什么时候需要用到动态加载jar包呢&#xff1f; 减少apk本身大小&#xff0c;某些界面才需要用jar里的功能jar中的功能可以独立开发&#xff0c;不要依赖其它的东西&#xff0c;能适用各个项目和第三方公司合作&#xff0c;人家不提供项目源码给你&#xff0c;但又要开发他们使…...

JAVA版B2B2C商城源码多商户入驻商城

三勾商城多商户是开发友好的微信小程序商城&#xff0c;框架支持SAAS&#xff0c;支持发布 iOS Android 公众号 H5 各种小程序&#xff08;微信/支付宝/百度/头条/QQ/钉钉/淘宝&#xff09;等多个平台&#xff0c;不可多得的二开神器&#xff0c; 为大中小企业提供极致的移…...

测试人员如何在测试环境数据库批量生成测试数据?方案分享

测试人员为了测试某个特定场景&#xff0c;往往需要在测试环境数据库中插入特定的测试数据来满足需求&#xff1b;性能测试时&#xff0c;常需要在测试环境生成大量可用测试数据来支持性能测试&#xff1b;建设持续集成持续交付体系时&#xff0c;我们往往也需要在测试环境生成…...

【el】表单

elementUI中的表单相关问题一、用法1、动态表单调用接口返回表单&#xff0c;后端的接口返回值如下&#xff1a;这些是渲染后的效果页面使用&#xff08;父组件&#xff09;<el-button size"small" class"Cancelbtn" click"sub(true)">发起…...

【Flutter入门到进阶】Flutter基础篇---布局

1 GridView网格布局组件 1.1 说明 1.1.1 图例 1.1.2 说明 GridView网格布局在实际项目中用的也是非常多的&#xff0c;当我们想让可以滚动的元素使用矩阵方式排列的时 候。此时我们可以用网格列表组件GridView实现布局 GridView创建网格列表主要有下面三种方式 1、可以通过Gr…...

python海龟绘图

一、基础 &#xff08;一&#xff09;介绍 海龟绘图&#xff08;Turtle Graphics&#xff09;&#xff1a;“小海龟”turtle是Python语言中一个很流行的绘制图像的函数库&#xff0c;想象一个小乌龟&#xff0c;在一个横轴为x、纵轴为y的坐标系原点&#xff0c;(0,0)位置开始…...

【计算机网络】数据链路层

概述 封装成帧 差错检验 可靠传输 实现机制 可靠传输的实现机制 停止等待协议 回退N帧协议 选择重传协议 【计算机网络】MAC帧和PPP帧&#xff08;定义使用范围区别共同点&#xff09;_GPNU_Log的博客-CSDN博客_ppp帧 PPP帧和以太网帧 | Mixoo 数据链路层的协议有PPP协…...

使用groovy代码方式解开gradle配置文件神秘面纱

来到这里的是不是都有以下疑问&#xff1a; 1.build.gradle配置文件结构好复杂啊&#xff0c;怎么记&#xff1f; 2.内部是怎么进行分析和执行的&#xff1f; 3.为什么可以在配置文件里面写groovy代码&#xff0c;怎么识别的&#xff1f; 4.怎么才能很方便的记住和快速上手…...

kafka入门到实战二(使用docker搭建kafka集群)

使用Docker搭建kafka单机/集群 拉取镜像&#xff1a;2.8.0之前&#xff0c;kafka都需要依赖zookeeper docker pull wurstmeister/kafka docker pull wurstmeister/zookeeper运行zookeeper镜像 docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper运行ka…...

【简化开发】lombok的使用、编译后的代码及源码

lombok的使用导入依赖一、getter、Setter、toString1、getter、Setter分别生成getxxx()和setxxx()方法2、toString生成toString()方法&#xff0c;按顺序打印类名称以及每个字段&#xff0c;并以逗号分隔二、NoArgsConstructor、RequiredArgsConstructor、AllArgsConstructor1、…...

在线就能用的主图设计素材,免费分享!

如何给自己的店铺商品设计专属的节日活动主图&#xff1f;没有节日活动的主体素材要如何设计&#xff1f;下面小编就分享一个在线素材设计工具&#xff0c;打开乔拓云&#xff0c;平台里面不仅有许多能使用的电商设计素材&#xff0c;还有许多的设计工具和模板能帮助你快速的实…...

【测绘程序设计】——计算卫星位置

本文分享了根据广播星历计算卫星于瞬时地固系下位置的计算程序(C#版)(注:瞬时地球坐标系坐标经极移改正即可获得协议地球坐标系坐标),相关源代码(完整工程,直接运行;包含实验数据)及使用示例如下。 目录 Part.Ⅰ 使用示例Part.Ⅱ 代码分析Chap.Ⅰ 数据结构Chap.Ⅱ 计…...

山东双软认证的基本条件

​一、山东双软认证的基本条件 "双软认证"是指软件产品评估和软件企业评估;企业申请双软认证除了获得软件企业和软件产品的认证资质&#xff0c;同时也是对企业知识产权的一种保护方式&#xff0c;更可以让企业享受国家提供给软件行业的税收优惠政策&#xff1b;我们…...

TPM 2.0实例探索3 —— LUKS磁盘加密(4)

接前文&#xff1a;TPM 2.0实例探索2 —— LUKS磁盘加密&#xff08;3&#xff09; 本文大部分内容参考&#xff1a; Code Sample: Protecting secret data and keys using Intel Platform... 二、LUKS磁盘加密实例 4. 将密码存储于TPM的PCR TPM平台配置寄存器&#xff08;…...

Linux连接RDP远程服务工具集记录

目录 rdesktop 安装 实例 xfreerdp 安装 实例 remmia 介绍 rdesktop 安装...

离散事件动态系统

文章目录离散事件动态系统ppt离散事件系统建模离散事件动态系统的基本组成元素离散事件动态系统仿真具体建模petri建模实例离散事件动态系统 ppt ppt 仿真建模步骤 离散事件系统建模 from&#xff1a;离散事件系统建模 离散事件动态系统的基本组成元素 &#xff08;1&am…...

无线WiFi安全渗透与攻防(二)之打造专属字典

系列文章 无线WiFi安全渗透与攻防(一)之无线安全环境搭建 打造专属字典 什么在破解之前先准备专用字典&#xff0c;因为对于一般家庭来说&#xff0c;常用 一个是预共享密钥PSK&#xff0c;一个是PIN码。 也不是所有的路由都开起了PIN码&#xff0c;一般都会开启域共享密钥…...

拥抱 Spring 全新 OAuth 解决方案

以下全文 Spring Authorization Server 简称为: SAS 背景 Spring 团队正式宣布 Spring Security OAuth 停止维护&#xff0c;该项目将不会再进行任何的迭代目前 Spring 生态中的 OAuth2 授权服务器是 Spring Authorization Server 已经可以正式生产使用 作为 SpringBoot 3.0 的…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

GraphQL 实战篇:Apollo Client 配置与缓存

GraphQL 实战篇&#xff1a;Apollo Client 配置与缓存 上一篇&#xff1a;GraphQL 入门篇&#xff1a;基础查询语法 依旧和上一篇的笔记一样&#xff0c;主实操&#xff0c;没啥过多的细节讲解&#xff0c;代码具体在&#xff1a; https://github.com/GoldenaArcher/graphql…...

密码学基础——SM4算法

博客主页&#xff1a;christine-rr-CSDN博客 ​​​​专栏主页&#xff1a;密码学 &#x1f4cc; 【今日更新】&#x1f4cc; 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 ​编辑…...

机器学习的数学基础:线性模型

线性模型 线性模型的基本形式为&#xff1a; f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法&#xff0c;得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...

边缘计算网关提升水产养殖尾水处理的远程运维效率

一、项目背景 随着水产养殖行业的快速发展&#xff0c;养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下&#xff0c;而且难以实现精准监控和管理。为了提升尾水处理的效果和效率&#xff0c;同时降低人力成本&#xff0c;某大型水产养殖企业决定…...

【阅读笔记】MemOS: 大语言模型内存增强生成操作系统

核心速览 研究背景 ​​研究问题​​&#xff1a;这篇文章要解决的问题是当前大型语言模型&#xff08;LLMs&#xff09;在处理内存方面的局限性。LLMs虽然在语言感知和生成方面表现出色&#xff0c;但缺乏统一的、结构化的内存架构。现有的方法如检索增强生成&#xff08;RA…...

Linux入门(十五)安装java安装tomcat安装dotnet安装mysql

安装java yum install java-17-openjdk-devel查找安装地址 update-alternatives --config java设置环境变量 vi /etc/profile #在文档后面追加 JAVA_HOME"通过查找安装地址命令显示的路径" #注意一定要加$PATH不然路径就只剩下新加的路径了&#xff0c;系统很多命…...