首页 > 编程语言 >JAVA面试八股文(上)

JAVA面试八股文(上)

时间:2024-10-08 21:22:26浏览次数:3  
标签:ConcurrentHashMap 八股文 HashMap jdk1.8 链表 面试 线程 table JAVA

Object有哪些方法?

hashcode ,equals ,wait(), tostring

hashcode 和equals有什么关系?

Java中规定,hashcode相同equals不一定相同,equals相同那么hashcode一定相同,如果违反这种规则hashMap和hashSet不能正常使用

wait和sleep有什么区别?

  1. sleep()方法线程不会释放对象锁,wait()方法线程会释放对象锁
  2. sleep可以在任何地方使用,而wait只能在同步方法或者同步块中使用
  3. sleep是Thread线程类的静态方法,而wait是Object顶级类的普通方法

String、StringBuilder和StringBuffer的区别?

  1. String类是不可变类,String对象一旦创建,其值是不能修改的
  2. StringBufferr类是可变类,用synchronized同步了,是线程安全的
  3. StringBuilder类是可变类,是非线程安全的

==equals的区别

  1. ==比较的是对象地址
  2. equals比较的是对象内容

Arraylist和Linkedlist有什么区别

Arraylist是基于数组的,在查询效率比较高,插入删除效率比较低

Linkedlist是基于链表的,插入删除效率比较高,查询效率比较低

对于添加和删除的时候,linkedlist优于arraylist,因为arraylist在做数据的添加和删除的时候需要有数据的位置的移动

List数据去重的几种有效方法?

HashSet去重

JDK1.8的distinct去重

BIO、NIO、AIO的区别

BIO:是同步阻塞式,是传统的IO,使用简单,但是没有办法处理并发

NIO:是同步非阻塞,是传统IO的升级,服务端和客户端通过channel通道,实现一个多路复用

AIO:是NIO的升级,也可以叫NIO2,是异步非阻塞,实现回调机制

重载和重写的区别?

重载是:方法名相同参数列表不同

重写是:方法名和参数列表都相同,一般是子类重写父类的方法

jdk1.7和jdk1.8有什么区别?

  1. jdk1.8新增了lambda表达式,还有stream流
  2. HashMap底层做了改进。jdk1.7是数组加链表,jdk1.8是数组加链表加红黑树
  3. jdk1.8的接口里面可以写默认的方法

对称加密和非对称加密有什么区别?

对称加密:加密和解密必须使用同一个密钥,算法有DES,AES

非对称加密:加密和解密不是同一个密钥,一般有一个公钥,一个私钥,公钥加密,私钥解密,算法有RSA

HashMap底层原理?

Jdk1.7是基于数据加链表实现,jdk1.8是数据加链表,长度大于8转红黑树

发生hash碰撞时,java 1.7 会在链表的头部插入,而java 1.8会在链表的尾部插入

Java的堆和栈分别存的什么

堆里面存的是new的对象

栈地址对象引用地址,8大基本数据类型(int,long,short,byte,char,double,float,boolean),线程运行栈,方法栈

HashMap 和 HashTable 有什么区别

HashMap 是线程不安全的,HashTable 是线程安全的;

由于线程安全,所以 HashTable 的效率比不上 HashMap;

HashMap最多只允许一条记录的键为null,允许多条记录的值为null,而 HashTable不允许;

HashMap 默认初始化数组的大小为16,HashTable 为 11,前者扩容时,扩大两倍,后者扩大两倍 +1

为什么 ConcurrentHashMap 比 HashTable 效率要高?

HashTable 使用一把锁(锁住整个链表结构)处理并发问题,多个线程竞争一把锁,容易阻塞;

ConcurrentHashMap

JDK 1.7 中使用分段锁(ReentrantLock + Segment + HashEntry),相当于把一个 HashMap 分成多个段,每段分配一把锁,这样支持多线程访问。锁粒度:基于 Segment,包含多个 HashEntry。

JDK 1.8 中使用 CAS + synchronized + Node + 红黑树。锁粒度:Node(首结点)(实现 Map.Entry<K,V>)。锁粒度降低了。

HashMap 的 table 的容量如何确定?loadFactor 是什么?该容量如何变化?这种变化会带来什么问题

table 数组大小是由 capacity 这个参数确定的,默认是16,也可以构造时传入,最大限制是1<<30;

loadFactor 是装载因子,主要目的是用来确认table 数组是否需要动态扩展,默认值是0.75,比如 table 数组大小为 16,装载因子为 0.75 时,threshold 就是12,当 table 的实际大小超过 12 时, table就需要动态扩容;

扩容时,调用 resize() 方法,将 table 长度变为原来的两倍(注意是 table 长度,而不是 threshold)

如果数据很大的情况下,扩展时将会带来性能的损失,在性能要求很高的地方,这种损失很可能很致命。

HashMap到jdk1.8为什么到8转红黑树?

之所以选择红黑树是为了解决二叉查找树的缺陷,二叉查找树在特殊情况下会变成一条线性结构(这就跟原来使用链表结构一样了,造成很深的问题),遍历查找会非常慢。

而红黑树在插入新数据后可能需要通过左旋,右旋、变色这些操作来保持平衡,引入红黑树就是为了查找数据快,解决链表查询深度的问题,我们知道红黑树属于平衡二叉树,但是为了保持“平衡”是需要付出代价的,但是该代价所损耗的资源要比遍历线性链表要少,所以当长度大于8的时候,会使用红黑树,如果链表长度很短的话,根本不需要引入红黑树,引入反而会慢。

HashMap负载因子为什么选择0.75?

如果负载因子过高,比如1的情况下,虽然空间开销减少了,提高了空间利用率

如果负载因子过低,例如0.5虽然可以减少时间的成本,但是空间利率用低

主要是时间和空间做一个权衡

Hashmap 与 ConcurrentHashMap区别?

hashmap本质是数组+链表  根据key去获取hash值 然后计算出对应的下标,如果有多个key对应同一个下标,就用链表的形式存储

ConcurrentHashMap在hashmap的基础上 ConcurrentHashMap将数据分成了多个数据段(segment 默认是16)  主要是对segment去加锁

hashmap的键值允许null值,但是ConcurrentHashMap不允许

在jdk1.7 ConcurrentHashMap是由segment数组和hashentry数组结构组成

在jdk1.8 ConcurrentHashMap放弃了segment用node+cas+synchronize保证

ConcurrentHashMap是线程安全, hashmap线程不安全

HashMap的线程不安全主要体现在下面两个方面

1、JDK1.7中,当并发执行扩容操作时会造成环形链和数据丢失的情况

2、JDK1.8中,当并发执行put的时候会对数据造成覆盖的情况

HashMap面试问题 https://mp.weixin.qq.com/s/GxD7ZW-meavkNc22bL85Zw

标签:ConcurrentHashMap,八股文,HashMap,jdk1.8,链表,面试,线程,table,JAVA
From: https://blog.csdn.net/C1226786216/article/details/142761382

相关文章

  • java JNDI 注入学习
    javaJNDI注入学习JavaNamingDirectoryInterface,Java命名和目录接口,是SUN公司提供的一种标准的Java命名系统接口。通过调用JNDI的API应用程序可以定位资源和其他程序对象。JNDI可访问的现有目录及服务包括:JDBC(Java数据库连接)、LDAP(轻型目录访问协议)、RMI(远程方法调用)、DNS(域......
  • Java多线程编程基础与高级特性
    在现代软件开发中,多线程编程是一个重要的概念,它能够充分利用多核处理器的能力,提高程序的执行效率。Java语言内置了对多线程的支持,使得开发者可以方便地创建和管理线程。创建线程1.继承Thread类这是最直接的方式,通过创建一个继承自Thread类的子类,并重写run()方法来定义线程......
  • 2024年Java最新面试题总结(五年经验)
    第一章、基础技术栈1.1)集合,string等基础问题1、arraylist,linkedlist的区别,为啥集合有的快有的慢①ArrayList它的底层是数组,有下标的概念,可以通过index下标直接定位元素,所以查询快;在增删时,会进行扩容判断和拷贝,所以增删慢。②LinkedList的底层是双向链表。每次查询都要循环......
  • springboot+vue【开题+程序+论文】基于javaweb的校友管理系统
    系统程序文件列表开题报告内容研究背景随着信息技术的迅猛发展和互联网的广泛普及,校友管理成为了各高校和校友会工作的重要组成部分。传统的校友管理方式,如纸质档案、电话沟通、邮件联络等,已难以满足当前高效、便捷、互动的管理需求。特别是在全球范围内,校友分布广泛,信息更......
  • java计算机毕业设计服装打版交易平台(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着电子商务的蓬勃发展和消费者个性化需求的日益增长,服装行业正经历着前所未有的变革。传统的服装设计与生产流程已难以满足市场对快速响应和定制化......
  • java计算机毕业设计宠物中心(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容宠物中心管理系统研究说明研究背景:随着社会经济的发展和人们生活水平的提高,宠物已经成为许多家庭的重要成员。宠物的健康、护理与福利问题日益受到人们的关......
  • java计算机毕业设计共享自习室管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今社会,随着教育资源的日益紧张和终身学习理念的深入人心,共享自习室作为一种新兴的学习空间形式,受到了越来越多学生的青睐。共享自习室不仅为学生......
  • java计算机毕业设计二手车交易网站(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着经济的持续发展和人民生活水平的不断提升,汽车已成为现代社会中不可或缺的交通工具。然而,随着新车市场的繁荣,二手车市场也逐渐崭露头角,成为消费者......
  • Java接口解读+场景分析
    文章目录1.接口快速入门2.接口基本介绍3.接口应用场景4.接口的使用细节5.接口VS继承6.接口的多态特性6.1多态的体现6.2多态的参数6.3多态数组6.4接口多态传递6.5接口继承的冲突1.接口快速入门我们的这个快速入门还是使用的这个日常生活里面的这个USB接口,我们下面的......
  • 每日学学Java开发规范,集合处理(附阿里巴巴Java开发手册(终极版))
    前言每次去不同的公司,码不同的代码,适应不同的规范,经常被老大教育规范问题,我都有点走火入魔的感觉,还是要去看看阿里巴巴Java开发规范,从中熟悉一下,纠正自己,码出高效,码出质量。想细看的可以去官网下载,或者下面自取阿里巴巴Java开发手册(终极版)五、集合处理【强制】关于ha......