Java后端
·07-24 21:16Day 106
✅ 今天做了:
1. 背单词√
2. 面试题:√
总结:
单词复习:
认识:69,模糊:21,忘记:24,顽固:3
问题:
ArrayBlockingQueue 与 LinkedBlockingQueue 在并发性能和锁机制上有何区别?ArrayBlockingQueue 用单锁,生产与消费互斥,适合固定容量、需公平控制的场景;LinkedBlockingQueue 用双锁分离入队/出队,可并行操作,吞吐量更高,但默认无界有 OOM 风险。
线程池内任务调度时 BlockingQueue 的作用是什么?在线程池中,BlockingQueue 用于缓冲待执行任务,并在生产者(提交任务的线程)与消费者(工作线程)间做流量控制与同步。队列满时阻塞提交,空时阻塞取任务,从而避免忙等和资源过载,是线程池任务调度的核心缓冲与协调机制。
使用 put 方法与 offer 方法处理队列满时有何不同表现?put 会无限期阻塞生产者线程直至有空间,offer 则立即返回 false 不阻塞。前者用于强一致、必须入队的场景,后者适用于需快速失败或可降级的流控场景。
自动装箱/拆箱发生的常见场景:1.赋值2.方法调用3.算术运算4.集合操作
自动装箱/拆箱陷阱:NullPointerException、性能开销、== 运算符在用于对象时,比较的是内存地址;而 .equals() 方法(如果被正确重写)比较的是对象的内容(值)。Integer 缓存:默认情况下,对于 -128 到 127 之间的整数,通过自动装箱(或 Integer.valueOf())创建的 Integer 对象会被缓存。如果值在这个范围内,你会得到指向同一个缓存对象的引用。
int与Integer的区别在以下几点:存储的位置,性能,默认值,类型,比较方式,使用场景
默认的 equals() 方法比较的是两个对象的内存地址,即判断它们是否为同一个对象的引用。这被称为“引用相等性”
equals() 方法的重写协定:1.自反性:一个对象必须等于它自己。2.对称性3.一致性:只要对象的状态不变,equals() 的结果就不应该改变。4.传递性5.非空性:任何对象都不等于 null。
写了 equals() 方法,那么你必须重写 hashCode() 方法,hashCode() 用于为对象生成一个整数“哈希码”。
- 如果两个对象根据 equals() 相同,hashCode也必须相同
- 如果两个对象根据 equals() 方法是不相等的,它们的 hashCode() 不一定相同,但最好不相同,提高哈希表的性能。
如果没有重写hashCode会导致,本来两个内容一样的对象会导致hashCode不同,在放到hashMap时,会分配到不同的桶,会导致找不到原先的对象。
重写equals:1先==比较两个对象是否是同一个引用,2检查参数是否为 null,以及类型是否匹配,使用 getClass() 而不是 instanceof 可以确保比较的对象是完全相同的类3.将参数转换为正确的类型,对用到的关键字进行比较。
hashCode重写:使用Objects.hash(Object... values),传入的参数是equals里用到的所有字段。
如果你使用的是 Java 14 或更高版本,使用这个public record PersonRecord(String name, int age) {}
3
1
分享
操作
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
