快手后端2面的一些问题讨论

面试中答得不好的,求解答。

1.为什么重写equal一定要重写hashcode,我把之前看过的都答上了,说我没答到点子上

2.线程池的singel创建方法,和不用线程池一个一个创建比,有什么好处

3. MVCC解决了幻读没有? 关于这个我记得有一个结论是部分解决,但是的确记不太清楚了。感觉这个问题挺高频了
我的一个笼统的理解是:快照读可以通过mvcc避免幻读;当前读的时候需要配合间隙锁

#快手##面试题目#
全部评论
1.提高存储效率,使用hashcode方法进行提前校验,可以避免每一次对比都调用equals方法,尤其是对于Hashset方法这类可能对于一个新来的数据 要比较N次(假设n个数据),如果使用hash那么定位到位置只需要进行一次比较就行,定位到如果存在hash冲突,那么就调用equals比较 2.重新equals方法后,可能会出现a.equals(b)=ture情况,但是可能之前是两个new的对象,那么这两个hashcode不相等。但是重新之后要遵循如果a.equals(b)=true 那么a.hashcode=b.hashcode,这样子就矛盾了
1 回复 分享
发布于 2020-08-10 19:56
因为相同的对象必须要有相同的hashcode,我面试被问到这么答的,面试官也说不对,不知道哪有问题
点赞 回复 分享
发布于 2020-08-05 23:07
我认为hashcode代表一个类的某些特征,原生的hashcode根据类的地址算出来的,重写了equals就要重写hashcode来满足实际的业务需求。(相同的类hashcode相等)
点赞 回复 分享
发布于 2020-08-07 09:27
我的理解是在hashmap或者hashset中需要使用hashcode()计算哈希值来确定元素存储的位置。只有两个Object哈希值相同,这两个Object的“值”才可能相等。在实际hashmap或hashset中在调用equals()方法的操作也是比较哈希值相同的(也就是在同一个LinkedList或红黑树)的数据。如果你的hashcode()方法都不能保证这两个Object能存到同一个LinkedList或红黑树中,那他们就不可能相等。 综上,所以如果想利用equals()方法判断两个Object相等,必须先重写hashcode()方法。
点赞 回复 分享
发布于 2020-08-07 11:19
Next-key吧
点赞 回复 分享
发布于 2020-08-07 12:30
需要用hashcode定位到equals相同的桶,集合里用到
点赞 回复 分享
发布于 2020-08-24 22:00
问了这么少吗
点赞 回复 分享
发布于 2020-08-24 23:50
m
点赞 回复 分享
发布于 2020-08-24 23:57
mvcc可以解决脏读和不可重复读,幻读是用间隙锁来解决的
点赞 回复 分享
发布于 2020-08-25 00:06
2、线程池算是一种异步处理的方式吧,感觉可以从这个角度考虑,而且将等待处理的线程转换为阻塞队列中的Node,可以节省内存 3、RR中,幻读通过mvcc + 间隙锁来解决,但是仍然存在问题,感觉可结合MySql的可串行化考虑
点赞 回复 分享
发布于 2020-08-25 09:31

相关推荐

11-08 10:39
门头沟学院 C++
点赞 评论 收藏
分享
2 28 评论
分享
牛客网
牛客企业服务