写在前面的话
面试的时候才知道缺的点和地方在哪,也可以通过面试来检验自己的薄弱点和不足的地方,
针对性的进行学习和复习,这样的效果会比较明显。
在算法上面,首要考虑的是思维,要把思维转变过来。
题目
1.项目介绍
2.MQ消费如何保持幂等性和消息不丢失?
幂等性:
结合业务来思考,这里给几个思路。
1.如果你拿个数据要写库,你先根据主键id查一下。如这数据都有了,你就别插入了。update一下。
2.如果你拿个数据是要更新表里的字段,直接update就好,幂等的。
3.基于数据库的唯一性索引。因为有唯一性索引了。所以重复数据只会插入报错,不会导致数据库中出现重复的数据。
4.如果你是写redis,那没问题了。每次都是set,天然幂等。
5.如果不是上面的场景,那想的稍微复杂一点,需要生产者在发送消费的时候里面加一个全局性的唯一ID
(UUID或者雪花算法),类似于订单ID之间的东西,先根据这个ID去redis中查一下或者先去数据库查询一下,之
前消费过嘛?如果没有消费过你就处理,然后把这个唯一性ID写Redis。如果消费过了,就不处理了。
消息不丢失
确认机制+补偿重发
给数据一个状态值,消息队列都是有ACK确认机制的,配合事务,只有确认消费成功了,才修改状态标识该条数据消费了。同时在发生异常时还要支持消息重发。
3.MQ的作用?
4.Spring IOC的理解?
5.重写equals方法时为什么还要重写hashCode?
6.JVM的堆存的什么,栈里存的什么?
7.内存溢出和内存泄漏的区别?
8.两个对象相互引用时会被GC掉吗?
9.线程池的原理?线程到达什么时候会被拒绝?
10.索引的优缺点
11.查询数据,走索引快还是走主键查询快,为什么?聚簇索引是什么?
12.HashTable安全吗?它和HashMap的区别是什么?
13.ConcurrentHashMap和HashTable那个快,为什么?
14.一个10G大小的数字文件,内存只用1个G,如何对它进行排序?
解答
二面
一面感觉面试得不怎么好,已经做好pass的准备,联系人问我的时候我都说美国,没想到还过了,就约了今晚的二面。
二面更多的是聊项目上的东西,业务逻辑,使用场景什么的。技术上的反而要少一些,相对而言感觉技术问得基础些。