当前位置: 首页 > 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 的…...

前端开发与vscode开发工具介绍

文章目录1、前端开发2、vscode安装和使用2.1、下载地址2.2、插件安装2.3、设置字体大小2.4、开启完整的Emmet语法支持2.5、创建项目2.6、保存工作区2.7、新建文件夹和网页1、前端开发 前端工程师“Front-End-Developer”源自于美国。大约从2005年开始正式的前端工程师角色被行…...

C++---最长上升子序列模型---友好城市(每日一道算法2023.3.2)

注意事项&#xff1a; 本题为"线性dp—最长上升子序列的长度"的扩展题&#xff0c;所以dp思路这里就不再赘述。 题目&#xff1a; Palmia国有一条横贯东西的大河&#xff0c;河有笔直的南北两岸&#xff0c;岸上各有位置各不相同的N个城市。 北岸的每个城市有且仅有…...

maven高级知识。

目录 一、分模块开发 1、分模块开发设计 2、依赖管理 二、继承和聚合 1、聚合 2、继承 三、属性 1、基本介绍 2、版本管理 四、多环境配置与应用 1、多环境开发 2、跳过测试 五、私服 1、私服安装 2、私服仓库分类 一、分模块开发 1、分模块开发设计 ▶ 示意图 …...

Python 之 Pandas 处理字符串和apply() 函数、applymap() 函数、map() 函数详解

文章目录一、处理字符串1. 向量化字符串操作简介2. str 方法的简介二、apply() 函数详解三、applymap() 函数详解四、map() 函数详解一、处理字符串 当我们遇到一个超级大的 DataFrame&#xff0c;里面有一列类型为字符串&#xff0c;要将每一行的字符串都用同一方式进行处理&…...

汇川AM402和上位机C#ModebusTcp通讯

目录 一、测试任务 二、测试环境 三、PLC工程 1、组态配置 2、ip地址、端口号 3、全局变量定义 四、C#端Winform程序创建 1创建主界面 2、创建子窗口 3、运行生成&#xff0c;界面效果 4、Modebus协议说明 5、Modebus操作说明 六、测试 1、寄存器读测试 2、MW1300寄…...

给你一个电商网站,你如何测试?功能测试及接口测试思路是什么?

功能测试思路 1、注册测试&#xff1a; 测试注册表单是否可以正确提交用户信息&#xff1b; 测试注册表单是否有输入限制&#xff0c;例如密码长度、邮箱格式等&#xff1b; 测试注册后是否可以正常登录。 2、登录测试&#xff1a; 测试登录表单是否可以正确提交用户信息&…...

Spring Boot 3.0系列【5】基础篇之应用配置文件

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot版本3.0.3 源码地址:https://gitee.com/pearl-organization/study-spring-boot3 文章目录 前言应用配置文件文件格式YAML获取配置属性方式1:@Value方式2: @ConfigurationProperties方式3: @PropertySource方式4…...

SQLyog图形化界面工具【超详细讲解】

目录 一、SQLyog 介绍 二、SQLyog 社区版下载 三、SQLyog 安装 1、选择Chinese后点击OK 2、点击“下一步” 3、选择“我接受”后点击“下一步” 4、点击“下一步” 5、修改安装位置&#xff08;尽量不要安装在C盘&#xff09;&#xff0c;点击“安装” 6、安装后点击“…...

Linux: 中断只被GIC转发到CPU0问题分析

文章目录1. 前言2. 分析背景3. 问题4. 分析4.1 ARM GIC 中断芯片简介4.1.1 中断类型和分布4.1.2 拓扑结构4.2 问题根因4.2.1 设置GIC SPI 中断CPU亲和性4.2.2 GIC初始化&#xff1a;缺省的CPU亲和性4.2.2.1 boot CPU亲和性初始化流程4.2.2.1 其它非 boot CPU亲和性初始化流程5.…...

模电学习10. MOS管简单应用电路

模电学习10. MOS管简单使应用电路一、开关和放大器1. 开关电路2. 放大电路二、时序电路中作为反相器使用三、双向电平转换电路1. 原理图2. 工作状态分析&#xff08;1&#xff09;分析SDA&#xff0c;信号从左向右&#xff08;2&#xff09;分析SDA&#xff0c;信号从右向左四、…...

网站建设能在家工作室/制作网站用什么软件

使用JSON&#xff0c;在SERVLET或者STRUTS的ACTION中取得数据时 如果会出现异常&#xff1a;Java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher 原因是少了JAR包&#xff0c;造成类找不到 还必须有其它几个依赖包&#xff1a; commons-logging-1.0.4.jar commons-lang-2…...

网站多少图片怎么做超链接/个人接广告的平台

本文作者是法国里尔大学Inria SequeL团队的博士生&#xff0c;Yannis Flet-Berliac&#xff0c;他在本文中对分层强化学习&#xff08;HRL&#xff09;的研究进行了总结&#xff0c;文章首先回顾了强化学习&#xff08;RL&#xff09;的基本原理&#xff0c;并阐述了其目前所面…...

网站模板下载模板下载安装/什么是网络营销渠道

在myeclipse中deploy&#xff1a;选择了一个工程&#xff0c;添加一个新的deploy工程时&#xff0c;不能正常出现deploy Location&#xff0c;可能的原因是没有在mymatadata中添加context-root"/"&#xff0c;另外webrootdir属性也要设置正确。一个常见的配置如下&am…...

手机如何创造网站/百度网站优化软件

网络上下载下来的图片自适应&#xff1a;android:adjustViewBounds"true"&#xff08;其详细解释在下面&#xff09;<ImageViewandroid:id"id/dynamic_item_image"android:layout_width"wrap_content"android:layout_height"wrap_conten…...

哪个网站做供求信息/百度浏览器官网下载并安装

前言可能每一个前端工程师都想要理解浏览器的工作原理。我们希望知道从在浏览器地址栏中输入 url 到页面展现的短短几秒内浏览器究竟做了什么&#xff1b;我们希望了解平时常常听说的各种代码优化方案是究竟为什么能起到优化的作用&#xff1b;我们希望更细化的了解浏览器的渲染…...

做网络歌手的网站/百度一下你就知道123

比explain更加详细的分析计划&#xff1a;Query Profiler 2019-05-10 14:47:45 阅读&#xff1a;78 来源&#xff1a; 互联网 标签&#xff1a;profile show explain sql profiles Profiler query Query 一、前言 这篇博客是之前总结的一个知识点&#xff0c;也是偶然看别人…...