26年2月汉朔信息科技 Java开发工程师 二面

分布式ID生成中,美团Leaf的segment模式如何避免号段耗尽时的阻塞?

思路

重点讲:双号段机制、异步预加载、阈值触发、业务无感知这四点。

回答示例

Leaf 的 segment 模式用双号段 + 异步预加载来避免号段用尽时阻塞业务线程。

首先它本地会维护当前号段和下一个号段,当当前号段消耗到一定阈值,比如 10% 的时候,就会异步去数据库加载下一个号段。

在下一个号段加载完成之前,业务还能用当前号段,完全不阻塞。

等当前号段真的用完了,直接切换到已经准备好的下一号段,整个过程业务线程是无感知的,不会因为取号段而卡住。

RocketMQ事务消息中,Half Message存储位置及回查触发机制?

思路

先讲 Half 消息存在哪里,再讲回查的触发条件、时机、流程。

回答示例

Half 消息也就是半消息,会先存在 RMQ_SYS_TRANS_HALF_TOPIC 这个系统内置主题里。

回查的触发机制是:生产者发送半消息成功后,如果没有及时给 Broker 返回提交或回滚的状态,Broker 就会定时扫描这些半消息。

默认每隔一段时间,比如 60 秒,就会主动回查生产者,询问本地事务的最终状态,然后根据返回结果决定是提交消息让消费者消费,还是回滚丢弃消息。

Spring Cloud Gateway的过滤器链执行顺序如何确定?

思路

按 order 排序,区分全局过滤器和路由过滤器,讲执行流程。

回答示例

Gateway 过滤器的执行顺序是按 order 值从小到大执行,值越小越先执行。

全局过滤器 GlobalFilter 和路由过滤器 GatewayFilter 会合并成一条链,一起按 order 排序。

执行流程是:请求进来先走全局前置过滤器,再走路由过滤器,处理完业务后,再走后置的全局过滤器,最后返回响应。

JVM参数-XX:SurvivorRatio=8时,Eden与单个Survivor区比例是多少?

思路

记住默认比例 Eden:S0:S1=8:1:1,直接对比 Eden 和单个 Survivor。

回答示例

当 SurvivorRatio=8 时,新生代的比例是 Eden:S0:S1=8:1:1

所以 Eden 和单个 Survivor 的比例就是 8:1

Elasticsearch倒排索引中,跳表(Skip List)如何加速文档定位?

思路

讲倒排表是有序 docId 链表,跳表建立多层索引,实现跳跃式查找。

回答示例

ES 的倒排索引里,词对应的文档 ID 是一个有序链表

跳表会给这个链表建立多层索引,查询的时候不需要一个个遍历,而是可以大步跳过不匹配的文档 ID。

在多条件查询比如 AND、OR 的时候,能快速对齐和过滤文档,大大提升查询效率。

Zookeeper实现分布式锁时,Watcher机制如何避免羊群效应?

思路

关键点:只监听前一个节点,而不是监听锁本身,避免惊群。

回答示例

Zookeeper 利用 Watcher 避免羊群效应,核心是每个竞争者只监听它前面的一个节点,而不是一起监听锁节点。

当某个

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏

全部评论
哇,你问的都是很专业的Java开发问题呢!看起来你在准备汉朔信息科技的面试,很棒呀!关于Leaf的segment模式避免阻塞,你回答得非常专业,双号段机制、异步预加载、阈值触发和业务无感知这四个点都讲得很清楚。 其他问题如RocketMQ事务消息、Spring Cloud Gateway过滤器链、JVM参数等也都回答得很准确。你对分布式系统、中间件和JVM的理解很深入,面试官应该会印象深刻! 如果你需要进一步准备面试,或者想了解更多关于Java开发的知识,可以点击我的头像私信我哦,我很乐意帮你一起准备!
点赞 回复 分享
发布于 03-20 12:05 AI生成

相关推荐

评论
点赞
收藏
分享

创作者周榜

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