Java小厂面经
只记得几个比较深刻的问题
1. 使用消息队列怎么能确保生产者把消息发送成功,消费者怎么确保消费成功确保数据一致性 ?当时确实没想出来,最后憋出来个发送消息后将messageID存到Redis的set,然后定时任务检查消息是否被处理 但是查了一下生产者端好像可以可以设置发布确认模式,消息发送完收到响应才确保发送成功,然后只要却保暖能达到broker 然后消息队列开启持久化,消费者端就手动ack加死信队列,还有一种方案就是消息全存数据库,和数据库的具体事务一起提交,然后定时任务筛选转态为未处理的消息进行处理
2.还考了个streamapi中的map操作为什么不能更改方法外定义的变量(必须将外面的变量设置为final) 我查了是因为lambda表达式处理的时候用的不是对变量的引用而是直接使用传入的值,然后修改就会发生到底是修改引用的变量的值还是修改的是传入的副本的值,并且还要考虑的是如果stream开启了并行线程,线程并发去修改这个变量就会出问题,所以会报错
3.三层的B+树最多能存多少条记录,想都没想直接回答两千万条记录,然后提醒我不是,还要根据记录的字段数来判断,一个数据页要除一条记录的每条数据的大小
4.还考了个内存操作为什么不能用B-树(B-树和B+树的区别是B-树中间节点还要存值 并未叶子节点没用链表相连),没想出来为啥,当时连B-树是啥都不知带,查了下,好像是B-树的平衡操作要使用节点分裂合并(需要做很多复杂操作)红黑树平衡方式简单,B-树查找还是要用在一个节点中的多次键比较,要用二分查找或线性扫描,红黑树查找每次比较只用比较一个键,要么往左要么往右。
#牛客AI配图神器#
1. 使用消息队列怎么能确保生产者把消息发送成功,消费者怎么确保消费成功确保数据一致性 ?当时确实没想出来,最后憋出来个发送消息后将messageID存到Redis的set,然后定时任务检查消息是否被处理 但是查了一下生产者端好像可以可以设置发布确认模式,消息发送完收到响应才确保发送成功,然后只要却保暖能达到broker 然后消息队列开启持久化,消费者端就手动ack加死信队列,还有一种方案就是消息全存数据库,和数据库的具体事务一起提交,然后定时任务筛选转态为未处理的消息进行处理
2.还考了个streamapi中的map操作为什么不能更改方法外定义的变量(必须将外面的变量设置为final) 我查了是因为lambda表达式处理的时候用的不是对变量的引用而是直接使用传入的值,然后修改就会发生到底是修改引用的变量的值还是修改的是传入的副本的值,并且还要考虑的是如果stream开启了并行线程,线程并发去修改这个变量就会出问题,所以会报错
3.三层的B+树最多能存多少条记录,想都没想直接回答两千万条记录,然后提醒我不是,还要根据记录的字段数来判断,一个数据页要除一条记录的每条数据的大小
4.还考了个内存操作为什么不能用B-树(B-树和B+树的区别是B-树中间节点还要存值 并未叶子节点没用链表相连),没想出来为啥,当时连B-树是啥都不知带,查了下,好像是B-树的平衡操作要使用节点分裂合并(需要做很多复杂操作)红黑树平衡方式简单,B-树查找还是要用在一个节点中的多次键比较,要用二分查找或线性扫描,红黑树查找每次比较只用比较一个键,要么往左要么往右。
#牛客AI配图神器#
全部评论
忍耐王
求面经
相关推荐
投票
点赞 评论 收藏
分享
06-13 10:46
辽宁大学 营销 点赞 评论 收藏
分享