Java小厂面经

只记得几个比较深刻的问题
1. 使用消息队列怎么能确保生产者把消息发送成功,消费者怎么确保消费成功确保数据一致性 ?当时确实没想出来,最后憋出来个发送消息后将messageID存到Redis的set,然后定时任务检查消息是否被处理 但是查了一下生产者端好像可以可以设置发布确认模式,消息发送完收到响应才确保发送成功,然后只要却保暖能达到broker 然后消息队列开启持久化,消费者端就手动ack加死信队列,还有一种方案就是消息全存数据库,和数据库的具体事务一起提交,然后定时任务筛选转态为未处理的消息进行处理

2.还考了个streamapi中的map操作为什么不能更改方法外定义的变量(必须将外面的变量设置为final) 我查了是因为lambda表达式处理的时候用的不是对变量的引用而是直接使用传入的值,然后修改就会发生到底是修改引用的变量的值还是修改的是传入的副本的值,并且还要考虑的是如果stream开启了并行线程,线程并发去修改这个变量就会出问题,所以会报错

3.三层的B+树最多能存多少条记录,想都没想直接回答两千万条记录,然后提醒我不是,还要根据记录的字段数来判断,一个数据页要除一条记录的每条数据的大小

4.还考了个内存操作为什么不能用B-树(B-树和B+树的区别是B-树中间节点还要存值 并未叶子节点没用链表相连),没想出来为啥,当时连B-树是啥都不知带,查了下,好像是B-树的平衡操作要使用节点分裂合并(需要做很多复杂操作)红黑树平衡方式简单,B-树查找还是要用在一个节点中的多次键比较,要用二分查找或线性扫描,红黑树查找每次比较只用比较一个键,要么往左要么往右。
#牛客AI配图神器#
全部评论
小厂也要问B-树了嘛
1 回复 分享
发布于 06-22 16:04 河北
忍耐王
1 回复 分享
发布于 06-14 05:27 重庆
求面经
点赞 回复 分享
发布于 06-14 03:39 重庆

相关推荐

11-17 01:10
门头沟学院 Java
1.项目介绍2.看你做过支付,你怎么确保账单和资金流水对得上?具体怎么设计对账系统3.jvm知道吧,对象在堆上分配内存时,MarkWord里都存了哪些标志位?为什么在偏向锁状态下对象头会变化4. 那如果一个对象正在偏向锁状态,被别的线程抢了,会经历哪些锁升级过程?5. 你能画出从偏向锁 → 轻量级锁 → 重量级锁这整个过程的结构图吗?每一步触发条件是什么6.GC时stw到底是谁发起的7. 你知道SafePoint吗?为什么线程必须在SafePoint 才能安全停下8.你觉得对象分配为什么需要TLAB9.如果我告诉你一个接口平均延迟是30ms,但99分位延迟是900ms,你能从GC的角度分析可能的原因吗13.MySQL熟悉么,如果两个事务,一个更新,一个查询,说一下它们在 RC和 RR下的可见性14.说一下MySQL事务的隔离级别有哪些15. 你在项目里用 Redis 的 zset 做延时任务,那我问你:如果Redis挂了,你的任务是不是全没了?怎么做容灾16.如果Redis 里的延时任务量非常大(上百万),你每次都扫一遍?17.你提到用LRU淘汰策略,那你知道 Redis 的 LRU 是精确的吗18. 看你项目里有用分布式锁,你知道Redisson的Watchdog是怎么续期的?19.如果 Redis 掉线了,锁自动失效了,任务没执行完,怎么办20.redisson分布式锁是不是绝对安全的?它可能出什么问题?21. 我现在有一段多线程的代码,我要去一个主线程去启动3个子线程去执行100个任务,由这个子线程去执行100个任务,然后我主线程它是肯定是要等这100个任务执行完它才会继续往下面走,你要怎么去实现这个逻辑22. 假如有一个接口,里面有ab两个方法,这个接口有两个实现类,那么这个时候我a方法是做一种逻辑,b方法可能做多种业务逻辑,怎么样才能让这种情况更解耦22.手撕:给一个链表,求出每个节点后面下一个大于它的值,如果没有则为0(要求:时间复杂度O(n);不能翻转链表23. 那如果是求每个节点后面最大的值呢?
点赞 评论 收藏
分享
评论
6
37
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务