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

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

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

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

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

1)HashMap 和 ConcurrentHashMap 的区别

  • 线程安全性:HashMap 是非线程安全的,而 ConcurrentHashMap 是线程安全的。
  • 锁机制:HashMap 使用的是悲观锁机制,即在对 HashMap 进行写操作时需要对整个 HashMap 进行加锁;而 ConcurrentHashMap 使用的是分段锁机制,将整个 HashMap 分成多个段,每个段都有自己的锁,不同的线程可以同时操作不同的段,从而提高并发性能。
  • 性能:在高并发的情况下,ConcurrentHashMap 的性能比 HashMap 更好,因为它支持并发读写操作,减少了线程竞争的情况。

2)ConcurrentHashMap 和 Hashtable 的区别?

  • 线程安全性:ConcurrentHashMap 是线程安全的,而 Hashtable 也是线程安全的。
  • 锁机制:ConcurrentHashMap 使用的是分段锁机制,而 Hashtable 使用的是同一把锁,即对整个 Hashtable 进行加锁,导致并发性能较差。
  • Null 值:ConcurrentHashMap 允许键和值都为 null,而 Hashtable 不允许键和值为 null。
  • 迭代器:ConcurrentHashMap 的迭代器是弱一致性的,而 Hashtable 的迭代器是强一致性的。

3)ConcurrentHashMap 底层具体实现知道吗?实现原理是什么?

  • ConcurrentHashMap 的底层数据结构是数组和链表/红黑树的组合,数组的每个元素称为一个桶,每个桶存储一个链表或红黑树,用于解决哈希冲突。
  • ConcurrentHashMap 使用了分段锁机制,将整个数组划分为多个段,每个段都有自己的锁。当进行读写操作时,只需要锁定对应的段,而不需要锁定整个 ConcurrentHashMap,从而提高并发性能。
  • 在读取操作时,不需要加锁,可以并发地进行;在写入操作时,只需要锁定对应的段,而不需要锁定其他段,从而减少了线程竞争的情况。
  • 在 JDK 8 及以上版本,ConcurrentHashMap 进一步引入了红黑树来优化链表,提高查找的效率,从而进一步提升并发性能。

4)Array 和 ArrayList 有何区别?

  • 数据类型:Array 可以存储基本数据类型和对象,而 ArrayList 只能存储对象。
  • 大小可变性:Array 的大小是固定的,一旦创建后不能改变;而 ArrayList 的大小是可变的,可以动态添加或删除元素。
  • 内存占用:Array 在创建时需要指定大小,会占用一定的内存空间;而 ArrayList 可以根据需要动态调整大小,节省内存空间。
  • 随机访问效率:Array 可以通过索引直接访问元素,速度较快;而 ArrayList 需要通过遍历来查找元素,速度较慢。

5)comparable 和 comparator的区别?

  • 接口类型:Comparable 是一个接口,需要实现 Comparable 接口并重写 compareTo 方法;而 Comparator 是一个接口,需要实现 Comparator 接口并重写 compare 方法。
  • 排序方式:Comparable 是内部排序方式,即在对象自身内部实现比较逻辑;而 Comparator 是外部排序方式,即通过外部的比较器来进行排序。
  • 对象类型:Comparable 用于对象自身的默认排序,需要在对象类中实现 Comparable 接口;而 Comparator 可以用于对不同类的对象进行排序,需要通过实现 Comparator 接口来自定义比较逻辑。
  • 使用场景:Comparable 适用于对对象自身进行排序的情况,比如对数字、字符串等对象进行排序;而 Comparator 适用于需要自定义排序规则的情况,比如对对象的某个属性进行排序。

6)Collection 和 Collections 有什么区别?

  • 类型:Collection 是一个接口,定义了一组集合操作的方法;而 Collections 是一个工具类,提供了一些静态方法来操作集合对象。
  • 功能:Collection 定义了集合的基本操作,比如添加、删除、遍历等;而 Collections 提供了一些静态方法,用于对集合进行排序、查找、替换等操作。
  • 集合类型:Collection 是一个接口,有多个实现类,比如 List、Set、Queue 等;而 Collections 是一个工具类,可以操作任意类型的集合对象。
  • 使用方式:Collection 是一个接口,需要通过实现类来创建对象;而 Collections 是一个工具类,直接调用其中的静态方法即可。

7)TreeMap 和 TreeSet 在排序时如何比较元素? Collections 工具类中的 sort()方法如何比较元素?

  • TreeMap 和 TreeSet 使用的是元素的自然顺序或者通过传入的 Comparator 对象来比较元素。在 TreeMap 中,元素需要实现 Comparable 接口或者通过构造方法传入的 Comparator 对象来进行比较。在 TreeSet 中,元素需要实现 Comparable 接口或者通过构造方法传入的 Comparator 对象来进行比较。
  • Collections 工具类中的 sort() 方法使用的是元素的自然顺序或者通过传入的 Comparator 对象来比较元素。在 sort() 方法中,元素需要实现 Comparable 接口或者通过传入的 Comparator 对象来进行比较。

8)CopyOnWriteArrayList 底层原理是什么?

CopyOnWriteArrayList 是一种线程安全的 List 实现,它的底层原理是在写操作时创建一个新的数组,并将原始数组的内容复制到新数组中,然后将新元素添加到新数组中。这样可以避免写操作对读操作的影响,读操作可以在不加锁的情况下并发进行。因为每次写操作都会创建一个新的数组,所以 CopyOnWriteArrayList 的写操作会比较耗费内存和时间,适用于读操作频繁、写操作较少的场景。

9)ConcurrentMarkSweepException 是怎么发生的?

ConcurrentMarkSweepException 是指在进行 Java 堆的垃圾回收时,发生了 Concurrent Mark Sweep (CMS) 垃圾回收器的异常。这种异常通常是由于堆内存不足或者垃圾回收器无法及时回收垃圾导致的。

10)怎么解决 ConcurrentMarkSweepException 的问题?

  • 增加堆内存大小,通过调整 JVM 的堆内存参数(如 -Xmx 和 -Xms)来增加堆内存的大小,从而减少发生内存不足的可能性。
  • 优化代码,减少内存的使用量,比如及时释放不再使用的对象,避免内存泄漏等。
  • 调整垃圾回收器的参数,比如调整 CMS 回收器的线程数、回收阈值等,以提高垃圾回收的效率。
  • 使用其他垃圾回收器,如 G1 垃圾回收器,它在并发标记和清理阶段采用了不同的算法,可以更好地处理大堆和高并发的情况。

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

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

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

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

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

相关文章

打造全网最全Doris面试题(100个问题2万字)

在大数据领域,Doris作为一款高性能、易扩展的MPP(Massively Parallel Processing)分析数据库,受到了越来越多企业的青睐。作为一名大数据架构师,了解Doris的核心特性和面试题是至关重要的。本文将为您提供一系列Doris面试题的参考答案,帮助您在面试中游刃有余,同时也为您…

PySide6-YOLO8目标检测、追踪可视化界面

目录 项目地址实现效果DetectTrack 项目地址 https://github.com/zhengjie9510/pyside-yolo 实现效果 Detect Track

windows安装ssh

一、下载ssh https://github.com/PowerShell/Win32-OpenSSH/releases/download/v8.1.0.0p1-Beta/OpenSSH-Win64.zip 二、安装ssh 解压到C:\Program Files\OpenSSH-Win64 配置环境变量 把 C:\Program Files\OpenSSH-Win64 加到path环境变量里面 C:\Program Files\OpenSSH-Win64&…

JDK1.8新特性——Stream流方法引用

文章目录 Stream流如何获取流水线Stream流中间方法Stream终结方法 方法引用引用静态方法引用成员方法引用构造方法类名引用成员方法引用数组构造方法 Stream流 Stream流是JDK8中提供的一种新特性 Stream流的使用步骤: 先得到Stream流,把数据放到流中使…

七、大模型-什么是Fine-tuning

好文推荐 推荐一篇比较透彻的介绍 对于深度学习模型中的 Fine-tuning(微调)操作,以下是详细介绍和原理说明: 什么是 Fine-tuning(微调)? Fine-tuning 是指在一个已经训练好的模型基础上&am…

Arcgis 导入经纬度坐标、导出经纬度坐标

目录 一、导入经纬度坐标 1、在excel中准备好经纬度坐标的数据表 2、将数据放入Acrgis的工作路径 3、在arcgis中添加数据 4、显示经纬度坐标点 5、导出为shp矢量文件 二、根据shp的经纬度坐标点导出成经纬度坐标 1、右键选择打开属性表 2、在属性表的菜单下拉栏里找到…

三、阅读器的开发--1、项目准备

1、项目准备 1.1、项目搭建 我用的脚手架是vue cli 5.0的,通过vue create 项目名称来创建的项目 上下箭头选的是最后那个,是指手动配置,然后回车 空格选中下面这些,然后回车 下图最后那个指我们所有的配置在哪里配置&#xff0…

c++ 线程池/Github 开源项目源码分析(progschj/ThreadPool)

c 线程池/Github 开源项目源码分析(progschj/ThreadPool) 前言[ThreadPool 项目地址](https://github.com/progschj/ThreadPool)项目源码:基本用法类成员变量类成员函数构造函数的签名创建线程线程默认的任务向任务队列中添加一个任务析构函数…

open images v7的600类别名称

英文: 0: Accordion1: Adhesive tape2: Aircraft3: Airplane4: Alarm clock5: Alpaca6: Ambulance7: Animal8: Ant9: Antelope10: Apple11: Armadillo12: Artichoke13: Auto part14: Axe15: Backpack16: Bagel17: Baked goods18: Balance beam19: Ball20: Balloon21…

【Rust】Shared-State Concurrency

Shared-State Concurrency channel类似于single ownership. 而shared memory类似与multiple ownership. multiple ownership是难于管理的. smarter pointer也是multiple ownership的. Rust的type system和ownership rules帮助实现正确的multiple ownership管理。 Using Mute…

百度智能云+SpringBoot=AI对话【人工智能】

百度智能云SpringBootAI对话【人工智能】 前言版权推荐百度智能云SpringBootAI对话【人工智能】效果演示登录AI对话 项目结构后端开发pom和propertiessql_table和entitydao和mapperservice和implconfig和utilLoginController和ChatController 前端开发css和jslogin.html和chat.…

MySQL 8.0-索引- 不可见索引(invisible indexes)

概述 MySQL 8.0引入了不可见索引(invisible index),这个在实际工作用还是用的到的,我觉得可以了解下。 在介绍不可见索引之前,我先来看下invisible index是个什么或者定义。 我们依然使用拆开来看,然后再把拆出来的词放到MySQL…

kali安装docker(亲测有效)

第一步:添加Docker官方的GPG密钥 curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - 第二步: 第二步更新源 echo deb https://download.docker.com/linux/debian stretch stable> /etc/apt/sources.list.d/docker.list…

数据结构——树与二叉树

目录 树与二叉树 1.树的定义 2.树的有关术语 3.二叉树(BinaryTree) 二叉树的性质: 特殊的二叉树 满二叉树: 完全二叉树 二叉树的存储结构 顺序存储结构 链式存储结构 二叉树以及对应接口的实现 1.二叉树架构搭建 2…

关于 Microsoft Visual Studio

关于 Microsoft Visual Studio References References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

hive学习记录

问题集合 Q:终端启动hive时报错:/tmp/hive on HDFS should be writable? A:hdfs dfs -chmod 777 /tmp/hive Q:hive: unable to create database path file…错误 A:在hive-site.xml里面添加以…

【机器学习300问】47、如何计算AUC?

一、AUC是什么? (1)文绉绉的定义 AUCArea Under the Curve中文直译叫“曲线下面积”,AUC名字里面的Curve曲线指的就是ROC曲线,关于ROC曲线的相关知识我已经在之前的文章中详细说过了,有需要的友友可以点击…

CI/CI实战-jenkis结合gitlab 4

实时触发 安装gitlab插件 配置项目触发器 生成令牌并保存 配置gitlab 测试推送 gitlab的实时触发 添加jenkins节点 在jenkins节点上安装docker-ce 新建节点server3 安装git和jdx 在jenkins配置管理中添加节点并配置从节点 关闭master节点的构建任务数

[Java安全入门]六.CC3

一.前言 前几天学了一下cc1和cc6,对于我来说有点小困难,不过经过几天沉淀,现在也是如拨开云雾见青天,经过一上午的复习对cc1和cc6又有深入的了解。所以,今天想多学一下cc3。cc3执行命令的方式与cc1和cc6不一样&#x…

C#基础-标识符命名规则

目录 1、标识符定义 2、遵循规则 3、标识符的例子 4、MSDN中英文解释 英文