面试 Java 基础八股文十问十答第二十二期

news/2024/5/1 3:05:50/文章来源:https://blog.csdn.net/qq_67358181/article/details/137581453

面试 Java 基础八股文十问十答第二十二期

作者:程序员小白条,个人博客

相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!

⭐点赞⭐收藏⭐不迷路!⭐

1)ArrayList和LinkedList的区别:

  • 数据结构
    • ArrayList基于数组实现,内部以动态数组的形式存储元素,支持随机访问。
    • LinkedList基于链表实现,每个元素都包含对前后元素的引用,不支持随机访问,但在插入和删除操作上效率更高。
  • 访问效率
    • ArrayList支持通过索引进行快速访问,时间复杂度为O(1)。
    • LinkedList需要从头部或尾部开始遍历链表以查找指定位置的元素,时间复杂度为O(n)。
  • 插入和删除操作
    • 在ArrayList中,插入和删除元素时可能需要移动其他元素,因此效率较低,时间复杂度为O(n)。
    • 在LinkedList中,插入和删除元素时只需修改相邻元素的指针,效率较高,时间复杂度为O(1)。
  • 内存占用
    • ArrayList需要预先分配一定大小的内存空间,可能会造成内存浪费。
    • LinkedList在每个元素中存储指向前后元素的引用,可能会占用更多的内存空间。

2)HashMap和HashTable的区别:

  • 线程安全性
    • HashMap是非线程安全的,不支持多线程并发操作,需要外部进行同步处理。
    • HashTable是线程安全的,内部的方法都经过同步处理,可以直接用于多线程环境。
  • 性能
    • HashMap相对于HashTable,在无需考虑线程安全的情况下性能更好。因为HashTable的所有方法都是同步的,会在多线程情况下带来性能损失。
  • null键和null值
    • HashMap允许键和值都为null,且允许多个键为null的entry。
    • HashTable不允许键和值为null,否则会抛出NullPointerException。
  • 继承关系
    • HashMap继承自AbstractMap类,实现了Map接口。
    • HashTable继承自Dictionary类,实现了Map接口,并且是Hashtable的子类。

3)Collection包结构,与Collections的区别:

  • Collection包结构
    • Collection是Java集合框架的顶层接口,定义了一组集合的基本操作和行为。
    • Collection包括List、Set和Queue这三种主要的集合类型。
  • Collections工具类
    • Collections是Java提供的一个工具类,提供了一系列静态方法,用于操作各种集合。
    • Collections包括对集合进行排序、查找、同步化等常见操作的方法。
  • 区别
    • Collection是Java集合框架的一部分,定义了集合的基本行为和操作,是所有集合类的根接口。
    • Collections是一个工具类,提供了一系列静态方法,用于对集合进行操作和处理,如排序、查找、同步化等。

4)Java的四种引用:

  1. 强引用(Strong Reference)
    • 强引用是指在程序中普遍存在的引用,即通过new关键字创建的对象的默认引用类型。
    • 只有当没有任何强引用指向一个对象时,该对象才会被垃圾回收器回收。
  2. 软引用(Soft Reference)
    • 软引用用于描述一些还有用但非必须的对象。
    • 当系统内存不足时,垃圾回收器会根据软引用的情况来决定是否回收这部分对象,从而避免OutOfMemoryError的发生。
  3. 弱引用(Weak Reference)
    • 弱引用是一种比软引用更弱的引用类型。
    • 即使有弱引用指向一个对象,只要垃圾回收器运行时,不论内存是否足够,该对象都会被回收。
  4. 虚引用(Phantom Reference)
    • 虚引用是最弱的一种引用类型。
    • 它不能单独使用,必须和引用队列(ReferenceQueue)一起使用。
    • 当虚引用指向的对象被垃圾回收器回收时,会将虚引用插入到引用队列中。

5)泛型常用特点:

  • 类型安全:泛型提供了编译时类型检查机制,可以在编译阶段捕获到类型不匹配的错误,从而提高了代码的安全性。
  • 代码复用:通过泛型,可以编写出更加通用、灵活的代码,减少代码的重复编写,提高代码的可复用性。
  • 减少类型转换:使用泛型可以避免手动进行类型转换,使代码更加清晰简洁。
  • 提高性能:由于泛型在编译时进行类型检查,避免了运行时的类型转换,因此可以提高程序的性能。

6)Java创建对象有几种方式?

Java中创建对象的方式主要有以下几种:

  1. 使用new关键字:使用new关键字直接调用类的构造函数来创建对象,例如:MyClass obj = new MyClass();
  2. 使用反射机制:通过Class类的newInstance()方法或Constructor类的newInstance()方法来动态创建对象。
Class<?> clazz = Class.forName("com.example.MyClass");
MyClass obj = (MyClass) clazz.newInstance();
  1. 使用clone()方法:在类中实现Cloneable接口并重写clone()方法,然后通过调用clone()方法来复制对象。
MyClass obj1 = new MyClass();
MyClass obj2 = (MyClass) obj1.clone();
  1. 使用对象序列化:将对象转换成字节流,并保存到文件或在网络中传输,然后再从字节流中反序列化出对象。
// 将对象序列化到文件
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("object.ser"));
out.writeObject(obj);
out.close();// 从文件中反序列化对象
ObjectInputStream in = new ObjectInputStream(new FileInputStream("object.ser"));
MyClass newObj = (MyClass) in.readObject();
in.close();
  1. 使用工厂方法:通过工厂方法创建对象,可以根据不同的参数返回不同类的实例。
public class MyClassFactory {public static MyClass createObject() {return new MyClass();}
}MyClass obj = MyClassFactory.createObject();

7)有没有可能两个不相等的对象有相同的hashCode

是的,这是可能的。根据哈希算法的设计,不同的对象可能会生成相同的哈希码。这种情况称为哈希冲突。哈希冲突的出现是正常的,而哈希算法的目标是尽量减少冲突的概率。在哈希表中,一般会使用一种解决冲突的方法,比如链地址法或开放寻址法。

8)深拷贝和浅拷贝的区别是什么?

  • 浅拷贝(Shallow Copy):浅拷贝会创建一个新对象,然后将原对象的非静态字段的值复制到新对象中。如果字段是基本类型,则拷贝其值;如果字段是引用类型,则拷贝引用而不是对象本身。因此,原对象和浅拷贝对象中的引用类型字段仍然指向相同的对象。
  • 深拷贝(Deep Copy):深拷贝会创建一个新对象,并递归地将原对象及其所有引用的对象的字段都复制到新对象中。这样,原对象和深拷贝对象中的所有引用类型字段都指向不同的对象,彼此之间互不影响。

简而言之,区别在于是否复制引用对象本身以及引用对象内部的所有对象。

9)final有哪些用法?

final关键字在Java中有多种用法:

  1. 修饰变量:用于声明一个常量,一旦赋值就不能修改。

    final int NUM = 10;
    
  2. 修饰方法:用于声明方法不能被子类重写。

    public final void method() {// 方法体
    }
    
  3. 修饰类:用于声明类不能被继承。

    public final class MyClass {// 类体
    }
    
  4. 修饰成员变量:用于在多线程环境下保证线程安全。

    private final Object lock = new Object();
    

10)static都有哪些用法?

static关键字在Java中有以下主要用法:

  1. 静态变量(类变量):用于声明类的静态变量,所有对象共享该变量的内存空间。

    public static int count;
    
  2. 静态方法:用于声明类的静态方法,可以直接通过类名调用,无需实例化对象。

    public static void print() {// 方法体
    }
    
  3. 静态代码块:用于在类加载时执行一次性的初始化操作。

    static {// 静态代码块的初始化操作
    }
    
  4. 静态内部类:用于声明一个嵌套在外部类中的静态内部类。

    public class OuterClass {static class StaticInnerClass {// 静态内部类的成员}
    }
    
  5. 静态导入:用于直接导入静态成员,可以使代码更简洁。

    import static java.lang.Math.PI;
    
  6. 静态常量:用于声明不可改变的常量。

    public static final double PI = 3.14159;
    

开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system

前后端总计已经 900+ Star,1.5W+ 访问!

⭐点赞⭐收藏⭐不迷路!⭐

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

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

相关文章

Idea集成Docker的快捷部署

Idea集成Docker的快捷部署 配置Docker远程访问1.1 修改 `/lib/systemd/system/docker.service`1.2 替换`ExecStart`1.3 重启docker服务1.4 监听端口是否被占用1.5 服务器防火墙开启2375端口1.6 测试配置IDEA2.1 下载docker插件2.2 添加docker连接2.3 配置容器镜像加速器2.4 配置…

Gradle 在 Spring 中的使用ApiHug准备-工具篇-006

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace ApiHug …

Redis Cluster集群模式

目录 一、理论 1.1 概念 1.2 集群的作用 1.3 redis集群的数据分片 1.4 Redis集群的主从复制模型 二、实践 2.1 Redis集群模式的搭建 2.1.1 cluster集群前期工作 2.1.2 开启群集功能 2.1.3 启动redis节点 2.1.4 启动集群 2.2 测试集群 总结 一、理论 1.1 概念 集群&a…

vulhub之Webmin篇

Webmin是功能最强大的基于Web的Unix系统管理工具。管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理动作。Webmin支持绝大多数的Unix系统&#xff0c;这些系统除了各种版本的linux以外还包括&#xff1a;AIX、HPUX、Solaris、Unixware、Irix和FreeBSD等。 影响版本&…

JVM、maven、Nexus

一、jvm简介 1.应用程序申请内存时出现的三种情况&#xff1a; ①OOM:内存溢出&#xff0c;是指应用系统中存在无法回收的内存或使用的内存过多&#xff0c;最终使得程序运行要用到的内存大于能提供的最大内存。此时程序就运行不了&#xff0c;系统会提示内存溢出&#xff0c…

自己动手封装axios通用方法并上传至私有npm仓库:详细步骤与实现指南

文章目录 一、构建方法1、api/request.js2、api/requestHandler.js3、api/index.js 二、测试方法1、api/axios.js2、main.js3、app.vue4、vue.config.js5、index.html 三、打包1、配置package.json2、生成库包3、配置发布信息4、发布 四、使用1、安装2、使用 五、维护1、维护和…

基于FPGA的DDR相关知识导航界面

个人觉得想要真正理解DDR&#xff0c;那就要从SDRAM入手&#xff0c;SDRAM读写控制器也可以作为入门FPGA的一个判断标准&#xff0c;说实话I2C、UART、SPI这些接口难度太低了&#xff0c;会写这些接口说明不了什么。 很常见的问题&#xff0c;现在DDR3、SDRAM、DDR4官方都有IP&…

数据结构——二叉树链式结构的实现

大家好我是小锋&#xff0c;今天我们来学习的是二叉树链式结构的实现 首先我们来学习一下二叉树的基本操作 在看二叉树基本操作前我们来回顾下二叉树的概念&#xff0c; 二叉树是&#xff1a; 1. 空树 2. 非空&#xff1a;根节点&#xff0c;根节点的左子树、根节点的右…

【THM】Exploit Vulnerabilities(利用漏洞)-

介绍 在这个房间里,我们将讨论一些识别漏洞的方法,并结合我们的研究技能来了解这些漏洞是如何被滥用的。 此外,您还会发现一些公开可用的资源,这些资源是您在执行漏洞研究和利用时的技能和工具的重要补充。然后,您将在房间的最后将所有这些应用到实际挑战中。 自动化与…

如何监控容器或K8s中的OpenSearch

概述 当前 OpenSearch 使用的越来越多, 但是 OpenSearch 生态还不尽完善. 针对如下情况: 监控容器化或运行在 K8s 中的 OpenSearch 我查了下, 官方还没有提供完备的方案. 这里如何监控 K8s 中的 OpenSearch, 包括安装 exporter 插件、采集、展示全环节。 OpenSearch 简介…

红豆Cat 1开源|项目三: 从0-1设计一款HTTP版本RTU(支持GNSS)产品的软硬件全过程

HTTP版RTU&#xff08;支持GNSS&#xff09;项目概述 RTU&#xff08;Remote Terminal Unit&#xff09;&#xff0c;中文即远程终端控制系统&#xff0c;负责对现场信号、工业设备的监测和控制。RTU是构成企业综合自动化系统的核心装置&#xff0c;通常由信号输入/出模块、微…

蓝桥杯-单片机基础16——利用定时计数中断进行动态数码管的多窗口显示

综合查阅了网络上目前能找到的所有关于此技能的代码&#xff0c;最终找到了下述方式比较可靠&#xff0c;且可以自定义任意显示的数值。 传统采用延时函数的方式实现动态数码管扫描&#xff0c;在题目变复杂时效果总是会不佳&#xff0c;因此在省赛中有必要尝试采用定时计数器中…

洪水预警:如何通过数据可视化提前应对灾害

数据可视化在应对洪涝灾害问题中发挥着重要作用。洪涝灾害是一种常见而严重的自然灾害&#xff0c;给人们的生命、财产和生活带来了巨大的威胁和损失。而数据可视化技术通过将海量的数据转化为直观、易懂的图表、图像或地图等形式&#xff0c;帮助人们更好地理解洪涝灾害的发生…

微服务-2 Eureka

Eureka 启动页面&#xff1a; 同理再注册完order-service后&#xff0c;刷新启动页面&#xff1a; userservice 启动多台服务&#xff1a; [ 代码 ]&#xff1a;orderService.java&#xff08;用 RestTemplate 调其他服务&#xff0c;用 userservice 代替 localhost:8081&…

视频图像的两种表示方式YUV与RGB(4)

本篇主要讲YUV与RGB之间的转换&#xff0c;包括YUV444 颜色编码格式 转为 RGB 格式 &#xff0c;RGB颜色编码格式转为 YUV444 格式。 一、 YUV与RGB之间的转换 YUV与RGB颜色格式之间进行转换时 , 涉及一系列的数学运算 ; YUV 颜色编码格式转为RGB格式的转换公式 取决于 于 YUV …

数据结构——线性表(顺序存储结构)

语言&#xff1a;C语言软件&#xff1a;Visual Studio 2022笔记书籍&#xff1a;数据结构——用C语言描述如有错误&#xff0c;感谢指正。若有侵权请联系博主 一、线性表的逻辑结构 线性表是n个类型相同的数据元素的有限序列&#xff0c;对n>0&#xff0c;除第一元素无直接…

电能质量问题有几类?再怎样进行谐波治理

一、为什么要进行电能质量的治理 电能质量是指电力系统中电能的质量。理想的电能应该是完美对称的正弦波。一些因素会使波形偏离对称正弦&#xff0c;由此便产生了电能质量问题。一方面我们研究存在哪些影响因素会导致电能质量问题&#xff0c;一方面我们研究这些因素会导致哪…

如何用electron(vue)搜索电脑本地wifi

对于搜索本地 WiFi 网络&#xff0c;可以使用 Electron 结合 Node.js 来编写一个简单的应用程序。 以下是一个基本的示例&#xff0c;它使用 Node.js 的 wifi 模块来搜索并列出附近的 WiFi 网络&#xff1a; 首先&#xff0c;确保你已经安装了 Node.js 和 Electron。 然后&am…

linux 搭建Samba服务

Samba简介 SAMBA是⼀个实现不同操作系统之间⽂件共享和打印机共享的⼀种SMB协议的免费软件&#xff0c; SMB(Server Message block)协议是window下所使⽤的⽂件共享协议&#xff0c;我们在linux系统或 者其类unix系统当中可以通过samba服务来实现SMB功能。 &#xff08;1&…

【SpringBoot】-- mapstruct进行类型转换时Converter实现类不能自动生成代码问题解决

问题描述 我的问题如下&#xff1a; 应该在红色区域生成对应的转换细节&#xff0c;但是这里只返回了一个空对象 问题解决 加入lombok-mapstruct-binding依赖,也要注意依赖引用顺序问题 <dependency><groupId>org.projectlombok</groupId><artifactId&…