栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

常见面试题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

常见面试题

1.重写equals为什么重写hashcode

1因为hash比equals的速度快得多,判断对象是否相等先进行hashcode进行比较,如果hashcode不相等了,那么就没有必要进行equals的比较了。

2equals相等的话,hashcode有可能不相同,如果是hash类型的容器,就会出现问题。

public class HashSetDemo {

    public static void main(String[] args) {
        Set set = new HashSet<>();
        User s1 = User.builder().name("s").age("1").build();
        User s2 = User.builder().name("s").age("1").build();
        set.add(s1);
        set.add(s2);
        System.out.println(set.size()); // 输出2
    }

}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
class User {
    private String name;
    private String age;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return name.equals(user.name) && age.equals(user.age);
    }
    // 如果不重写hashcode的话,使用hash类型的容器时,会认为两个对象不相等
//    @Override
//    public int hashCode() {
//        return Objects.hash(name, age);
//    }
}
2.ReentrantLock公平锁和非公平锁哪个效率高,为什么

非公平锁效率高。

公平锁维护一个有序队列,后来的线程要获取锁时,即使锁空闲,也要检查队列是否为空。如果不为空,那么自己也要进入队列挂起,然后唤醒队列首部的线程。挂起和唤醒消耗资源较高。

非公平锁每个线程获取锁的顺序是随机的,后来的线程获取锁时,不会检查队列,先通过CAS获取锁,如果此时锁空闲。直接获取到锁,避免了挂起和唤醒的过程。

参考:

公平锁与非公平锁+效率差异原因_rootkiss的博客-CSDN博客_非公平锁为什么比公平锁快

3.Eden from to 为什么要有个eden

如果没有新生代,那么进行fullgc的效率太低。

4.hashmap为什么线程不安全,通过代码演示一下

线程1:map.put(1,2);

线程2:map.get(1);

线程1:map.put(1,3);

线程1进行map.put(1,2)执行之后

线程2进行get操作到一半的时候,正常应该获取到2,但是执行到一半停止了

线程1继续进行map.put(1,3)成功

此时线程2继续执行就获取到了3,和预期的不一样

5.spring采用哪种注入方式,为什么

6.msyql中锁的分类

7.串行化是怎么解决幻读的

8.Entry和Node的区别

9.JDK7和8中concurrentHashmap区别
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/759178.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号