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和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏
查看14道真题和解析