面试题
黑化小陈
恒。
展开
-
重写ThreadLocal的initialValue方法时,如果返回的是同一个对象实例,不同线程在调用get方法时获取到的是同一个对象
如果initialValue方法返回的是同一个对象实例,那么这个对象实例就会被所有线程共享。在使用ThreadLocal时,每个线程都会有一个独立的ThreadLocal变量副本,每个线程对该变量的操作互不影响。但是,当我们重写ThreadLocal的initialValue方法时,如果返回的是同一个对象实例,不同线程在调用get方法时获取到的确实是同一个对象。如果我们希望每个线程都获取到不同的对象实例,可以在initialValue方法中返回一个新的对象,而不是同一个对象实例。// 对obj进行操作…原创 2023-09-24 13:38:36 · 96 阅读 · 1 评论 -
为什么重写equals方法时,也必须重写hashCode方法
因此,为了保持一致的行为和正确的数据存储,当你重写equals()方法时,必须同时重写hashCode()方法,以确保相等的对象具有相等的哈希码。常见的做法是,在hashCode()方法中使用与equals()方法中使用的字段相同的字段来计算哈希码,以保持一致性。在哈希集合和哈希映射中,如果两个对象被equals()方法判断为相等,那么它们的哈希码也必须相等。不一致的行为: 如果两个对象在equals()方法中被判断为相等,但它们的哈希码却不相等,那么在哈希集合或哈希映射中,它们将被视为不同的对象。原创 2023-09-17 20:45:17 · 140 阅读 · 1 评论 -
Redis在删除数据后,为什么内存占用率还是很高
然而,过期键的删除不是实时进行的,而是通过一种称为"定期删除"和"惰性删除"的机制来处理。删除操作是惰性的: Redis中的删除操作通常是惰性执行的,即在删除数据时,并不会立即释放内存。当Redis删除一些较大的键时,会产生内存碎片,即被删除键的空间可能无法完全重组在一起,而是分散在多个碎片中。虽然总体占用的内存可能没有减少,但内存碎片化可能导致无法连续分配足够大的内存块,限制了新数据的存储。虽然删除操作不会立即释放内存,但一旦Redis需要更多内存来存储新的数据,它会优先释放被删除数据占用的内存空间。原创 2023-09-17 20:39:53 · 138 阅读 · 1 评论 -
关于List去重的问题
回答 2:当 List 中的元素是自定义对象时,需要确保自定义对象正确实现了 equals() 和 hashCode() 方法,以便正确比较和判断对象的相等性。使用 Set 数据结构:将 List 转换为一个 Set,由于 Set 不允许重复元素,重复的元素会自动被去除。使用 Java 8+ 的 Stream API:使用 distinct() 方法去除重复元素。问题 2:如果 List 中的元素是自定义对象,如何去除重复元素?问题 3:如果要保持原始 List 的顺序,如何去除重复元素?原创 2023-09-17 13:12:37 · 173 阅读 · 1 评论 -
Java面试题
8、假如一个提交订单的过程,A:扣减库存,B:支付,A和B是两个方法,在B中调用A方法,如果B支付成功了,怎么保证消息不丢失,消息可靠性,是怎么实现的?在A报错了,扣减失败,A的事务回滚了,但是B没有回滚,这个要怎么处理?5、项目的分布式锁是怎么实现,比如zookeeper的分布式锁。6、项目中哪些地方用到了设计模式,有哪些设计模式,是怎么使用的。3、高并发量,同时大量用户访问同一个接口,是怎么处理并发的?1、在项目中redis用在哪些方面,是怎么实现的。4、redis的分布式锁是怎么实现的,原创 2023-09-14 14:45:52 · 74 阅读 · 1 评论