面试的几个问题

2024-01-07 18:58:31

1.HashMap出现死锁的场景
2.JAVA对象头结构
3.int和integer的区别
4.java中String s = new String("hello")创建了几个对象


1.hashmap是线程不安全的,多线程时候容易造成死锁

HashMap是Java中的一个线程不安全的集合类,因此并不会出现真正意义上的死锁场景。然而,如果多个线程同时对HashMap进行读写操作,可能会出现一些并发问题,比如数据丢失、数据不一致等。

以下是一个可能导致并发问题的场景:

1. 假设有两个线程A和B同时对HashMap进行写操作。

2. 线程A执行put操作,向HashMap中添加一个元素。

3. 线程B同时执行put操作,也尝试向HashMap中添加一个元素。

4. 由于HashMap是线程不安全的,线程A和线程B可能同时修改HashMap的内部结构,导致数据覆盖或数据丢失。

为了避免这种并发问题,可以使用线程安全的HashMap实现类,比如ConcurrentHashMap。ConcurrentHashMap使用了锁分段技术,在不同的段上进行加锁,从而实现更好的线程安全性能。

2.JAVA对象头结构

java对象头结构,是指一个Java对象在内存中的形式。一个Java对象的头结构由三部分组成:Mark Word、Klass Pointer和Array Length。对象头中存储了对象是很多java内部的信息,如hash码,对象所属的年代,对象锁,锁状态标志,偏向锁(线程)ID,偏向时间等

3.int和Integer的区别

????????1、Integer是int的包装类,int则是java的一种基本数据类型?

????????2、Integer变量必须实例化后才能使用,而int变量不需要?

????????3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值?

????????4、Integer的默认值是null,int的默认值是0

4.在Java中,使用??String s = new String()??创建了两个对象。

第一个对象是字符串常量池中的空字符串对象,它是在Java虚拟机启动时就被创建并放入常量池中的。
第二个对象是通过构造函数??new String()??在堆内存中创建的新字符串对象。由于没有传入参数,所以该对象的内容也是空字符串。内容与常量池中的空字符串一致。 因此,使用??String s = new String()??创建了两个对象,一个位于常量池中,另一个位于堆内存中。内容一致,地址值不同,是不同的对象。

文章来源:https://blog.csdn.net/m0_66631425/article/details/135423131
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。