自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(2021)
  • 资源 (1)
  • 收藏
  • 关注

原创 干货 | Java8 新特性指导手册

本教程翻译整理自 https://github.com/winterbe/java8-tutorial目录:一、接口内允许添加默认实现的方法二、Lambda 表达式三、函数式接口 Functional Interface四、便捷的引用类的构造器及方法五、Lambda 访问外部变量及接口默认方法5.1 访问局部变量5.2 访问成员变量和静态变量5.3 访问接口的默认方法...

2019-01-15 19:29:19 838

原创 面试官:什么是代理模式?应用场景有哪些?

面试时先说概念,再对比静态/动态代理的区别,重点展开 JDK 动态代理和 CGLIB 的原理差异,最后结合 Spring AOP、MyBatis、RPC 三个实际场景举例。静态代理的缺点很明显——一个接口就得写一个代理类,如果项目里有 50 个 Service,你就得写 50 个代理类,这谁顶得住?:面试官不仅仅是想知道代理模式的定义,更是想知道你是否理解它的核心思想——"不直接访问目标对象,通过代理间接访问",以及为什么要这么设计。:代理模式就是给目标对象提供一个 "替身",由替身控制对目标对象的访问。

2026-05-09 10:36:17 333

原创 百度面试官:你项目中同时写了 “策略模式”+ “工厂模式”,搭配在一起用的好处是?我:大家都这么用的...

策略模式和工厂模式的核心区别就是 "行为选择" vs "对象创建"。能把 "工厂负责找策略,策略负责执行" 这句话讲清楚,面试官就知道你不只是背了概念,而是真的在项目中用过。:面试官不仅仅是想知道两种模式的定义差异,更是想看你能否一句话讲清各自的核心意图——策略模式解决 "怎么做" 的问题,工厂模式解决 "谁来创建" 的问题。**工厂负责 "找到正确的策略",策略负责 "执行正确的计算"**。一句话区分:**策略模式让你灵活切换 "做事的方式",工厂模式让你不用关心 "对象怎么创建的"**。

2026-05-08 16:36:54 497

原创 滴滴面试官:@Autowired 和 @Resource 注解有啥区别?你这项目怎么还混着用呢?

Spring 先按类型去容器里找,如果只找到一个,直接注入,皆大欢喜。但如果找到多个同类型的 Bean,Spring 会尝试用字段名去匹配 Bean 名称,匹配上了就用。:面试官不仅仅是想知道这两个注解 "不一样",更是想看你能不能从来源、匹配策略、使用方式等多个维度做系统对比,而不是只背出 "一个是 Spring 的,一个是 JDK 的"。:考察你在项目中如何选择这两个注解,是否了解 Spring 官方的推荐做法,以及新版 Spring Boot 中的变化。这是一个趋势,面试的时候提一下很加分。

2026-05-07 14:38:15 224

原创 面试官:公平锁和非公平锁的区别?

你看,非公平锁省掉了 "唤醒 B" 和 "B 恢复执行" 两次昂贵的上下文切换。:面试官不仅仅是想知道 "公平锁排队、非公平锁插队" 这个表面区别,更是想知道你是否理解 "公平" 的代价是什么——线程上下文切换的开销。这就是 "公平" 的代价。公平锁按线程等待顺序获取锁(先到先得),非公平锁允许新来的线程直接尝试 "插队" 获取锁,失败了再排队。:考察你是否知道 Java 默认用非公平锁,以及为什么绝大多数场景下非公平锁才是更好的选择。公平锁和非公平锁的核心区别在于获取锁时是否检查等待队列。

2026-05-06 09:03:37 354

转载 告别乱切片!Java + LangChain4j 实现高质量 RAG 文档拆分

这时候就需要设置一个 10% 到 20% 的重叠区,比如 Chunk 2 的开头,实际上是 Chunk 1 的末尾,用冗余的方式强行维持语境连贯。业务中 RAG 召回率高不高,其实数据源头就占了很大原因,数据切片 Chunking 的质量,决定了整个系统召回率的上限,而用的各种昂贵大模型和神级 Prompt,仅仅是在无限逼近这个上限而已。用户提问,无论是匹配前半句的特征还是后半句的特征,召回引擎都大概率找不到这块被破坏的文本,召回率肯定是不高的。大模型拿到这句话,根本不知道这是几几年的案子、什么犯罪类型。

2026-05-06 09:03:37 8

转载 2026年,java离职潮彻底消失了....

已是开发架构师,薪资也已经拿到48K,但由于在一个赛道久了,也早已遇到瓶颈,王大哥也不甘于此,了解到AI上限高、薪资高、机会更多,经过身边专业的朋友认可后果断加入学习,后面经过某手多轮面试最终拿下大模型架构,K4a级别,张同学是金融专业的大三学生,并且是普通本科,因为自己对计算机行业比较热爱,加上AI是趋势,不管来自任何行业、任何专业,都有一试的机会,张同学通过系统学习,最终用能力证明。的学员,也是想向大家说明:凭借着当下行业对AI人才的海量需求,只要具备AI相关技术能力,就业是自然而然的事情!

2026-05-06 09:03:37 8

原创 面试官:MyBatis 是如何进行分页的?分页插件的原理是什么?

面试官不仅仅是想知道你 "用过 PageHelper",更是想考察你是否理解逻辑分页和物理分页的区别,以及为什么生产环境必须用物理分页。:生产环境使用物理分页,最常用的方案是 PageHelper 或 MyBatis-Plus 分页插件,底层原理是利用 MyBatis 的。生产环境使用 PageHelper 或 MyBatis-Plus 分页插件,底层原理是利用 MyBatis 的。:MyBatis 执行完整的 SQL 查询,将所有结果加载到内存后,通过。等子句限制返回的数据量,数据库只返回一页的数据。

2026-04-29 09:31:31 545

原创 小红书面试:Redis 怎么实现延迟消息?我:啊?我一般都用 MQ 来实现...

取 score 最小的那条消息,如果它的 score 大于当前时间,说明队列中没有到期消息,就 sleep(score - 当前时间),醒来后再检查。:面试官不仅仅是想知道你会用 Sorted Set,更是想知道你是否理解延迟消息的核心本质 —— "到时间才能被消费",以及如何利用 Redis 数据结构来实现时间排序 + 定时轮询。:过期事件只通知 Key 的名称,不携带 Value,所以需要把业务数据编码到 Key 中(或用 Key 去 Redis 查 Value,但 Key 已过期了)。

2026-04-28 15:57:37 520

转载 曾经的王,Springboot倒下了

已是开发架构师,薪资也已经拿到48K,但由于在一个赛道久了,也早已遇到瓶颈,王大哥也不甘于此,了解到AI上限高、薪资高、机会更多,经过身边专业的朋友认可后果断加入学习,后面经过某手多轮面试最终拿下大模型架构,K4a级别,张同学是金融专业的大三学生,并且是普通本科,因为自己对计算机行业比较热爱,加上AI是趋势,不管来自任何行业、任何专业,都有一试的机会,张同学通过系统学习,最终用能力证明。的学员,也是想向大家说明:凭借着当下行业对AI人才的海量需求,只要具备AI相关技术能力,就业是自然而然的事情!

2026-04-27 09:02:55 20

原创 面试官:Nacos 如何实现服务注册与发现的?

Nacos Server 收到注册请求后,根据实例类型(临时/持久)决定存储方式——临时实例存内存(AP,Distro 协议),持久实例存磁盘(CP,Raft 协议)。Nacos 1.x 通过 HTTP 接口发送心跳(每 5s 一次),Nacos 2.x 通过 gRPC 长连接自动保活,不再需要单独的心跳请求。:用于持久实例的数据同步。的调用链,最终通过 HTTP 或 gRPC(Nacos 2.x)向 Nacos Server 发送注册请求,携带 IP、端口、服务名、集群名、权重等信息。

2026-04-27 09:02:55 591

原创 面试官:父子线程之间如何共享、传递数据?

通过 "捕获-恢复-还原" 三步机制完美解决了线程池场景的上下文传递问题,是生产级方案。,所以根本不会触发拷贝。更严重的是,复用的线程可能还保留着上一次任务的上下文数据,导致 "串数据"这在生产环境是致命的——用户 A 看到了用户 B 的数据,直接就是安全事故。的数据隔离特性——它只对当前线程可见,子线程天然拿不到父线程的数据。:线程池中的线程执行任务前,先把捕获的值设置到当前线程,同时。JDK 自带方案,思路很简单——创建子线程时,把父线程的。:拷贝发生在创建线程时,创建之后父线程再改值,子线程看不到。

2026-04-26 18:04:03 530

原创 百度面试官:ThreadLocal 为什么会导致内存泄漏?我:现在还要背八股文吗...

后,这个 Entry 变成了一个 "key 为 null、value 还在" 的孤儿 Entry。:面试官不仅仅是想知道 "会泄漏" 这个结论,更是想看你能不能把强引用、软引用、弱引用、虚引用的区别说清楚,特别是。内存泄漏的根本原因是 Entry 的 "key 弱 value 强" 设计:key 被 GC 回收后变成。对象的弱引用,而 value 是强引用。这种 "key 弱、value 强" 的组合,就是泄漏的根源。线程池场景尤其严重。面试时能把引用链推导清楚、把弱引用的设计取舍讲明白,这道题就拿满了。

2026-04-25 15:50:13 535

转载 还在用 JDK 原生集合? FastUtil 高性能集合快 2 ~ 5 倍!

改用 new Object2ObjectOpenHashMap<String, Object>() + referenceEquality()已完结,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...,已完结,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...,,内存占用降低 **40%~70%**。》已完结, 基于 Spring AI + Spring Boot 3.x + JDK 21。

2026-04-24 15:56:20 6

原创 面试官:ThreadLocalMap 和 HashMap 的区别是什么?

清理过程中发现的脏 Entry 会被清除,同时把后面有效的 Entry 重新 hash(rehash)到更接近其理想位置的地方。这种清理是轻量级的,每次操作触发,开销小。这种方式的优势是数据全部在数组里,缓存局部性好,访问速度快。是一个为 ThreadLocal 定制的、极度简化的、单线程专用的 Map 实现,用开放定址法解决冲突,用弱引用 key 来辅助 GC 回收**。指针,对于 ThreadLocal 这种 "每个线程可能就存几个变量" 的场景,这些额外开销完全没有必要。所以用更低的负载因子(

2026-04-23 09:31:32 593

原创 腾讯面试官:线上出现了死锁,你怎么排查?我:我写代码质量很高,不可能 ...

线程已经持有至少一把锁,还在请求另一把锁,且不释放已经持有的锁。线上系统出现死锁,通常的表现是:某些接口响应极慢甚至完全卡死,CPU 使用率不高(因为线程都阻塞了),线程 dump 中能看到大量的。如果必须在一个锁里请求另一个锁,说明设计可能有问题,考虑重构一下逻辑,把嵌套锁拆成独立的锁操作。是指两个或多个线程互相持有对方需要的锁,又都不肯释放自己手中的锁,导致所有线程永远阻塞的现象。:多个线程之间形成环形等待链——A 等 B 的锁,B 等 A 的锁。锁的代码块越大,持有锁的时间越长,死锁概率就越高。

2026-04-22 16:14:44 572

原创 美团二面:线程池队列满了怎么办?不能拒绝!我沉默了...

考察你是否具备从线程池层面 → 架构层面 → 中间件层面的多维度思考能力,以及是否理解 "背压(Backpressure)" 机制在高并发系统中的重要性。:这道题源于真实的生产场景,考察你在面对 "任务不能丢" 这种业务约束时,能否给出多层次的解决方案,而不是只会说 "换更大的队列"。:面试官不仅仅是想知道你会不会配置线程池,更是想知道你是否理解线程池的执行流程、队列机制以及 4 种拒绝策略的触发时机和各自特点。关键点在于:数据库是最后的保障,即使系统重启也能恢复任务,实现 "最终一致性"。

2026-04-21 16:32:22 534

原创 面试官:什么是守护线程,和普通线程有什么区别?

守护线程是为普通线程提供后台服务的线程,当所有普通线程结束后 JVM 会直接退出并强制销毁守护线程。:面试官不仅仅是想知道守护线程的定义,更是想考察你是否理解 JVM 退出的条件——当所有非守护线程结束时,不管守护线程有没有跑完,JVM 都会退出。:不管守护线程有没有执行完、执行到哪一步,只要普通线程全结束了,JVM 就会直接退出,守护线程被。当所有普通线程(非守护线程)都结束后,JVM 会直接退出,不管守护线程有没有执行完。:守护线程是 "配角",普通线程是 "主角",主角全走了,配角也就散场了。

2026-04-20 09:31:05 573

转载 只改了五行代码,接口吞吐量提升了10多倍!

另外,已经关注到了另外一个点:CPU 使用率,减少了线程数量后,CPU 的使用率并没有明显的下降,这里是很有问题的,当时认为 CPU 的使用率主要与开启的线程数量有关,之前线程多,CPU 使用率较高可以理解。理论上,在 CPU 资源利用率较低的场景,调大 Tomcat 线程数,以及并发数,能够有效的提升吞吐量。要做的事情有很多,比如 Bean 的初始化,依赖注入其他类,而且中间还有一些前后置处理器执行、代理检查等等,总之是一个耗时方法,所以都是在程序启动时去扫描,加载,完成 Bean 的初始化。

2026-04-19 16:34:18 49

原创 面试官:线程池有几种创建方式?

核心是理解 “核心线程 → 队列 → 非核心线程 → 拒绝” 的执行流程,根据 CPU 密集型(N+1)或 IO 密集型(2N)合理配置线程数,选择有界队列和合适的拒绝策略。:如果你只会调用 API 创建,但不理解线程池的执行流程(核心线程 → 队列 → 非核心线程 → 拒绝)和 7 个核心参数的含义,说明只是 “会用” 而非 “懂原理”。:先用正式员工(核心线程),忙不过来就排队(队列),队列满了招临时工(非核心线程),实在不行就拒绝(拒绝策略)。如果是,则直接创建新的核心线程来执行任务,不需要排队。

2026-04-18 15:39:54 385

转载 SpringBoot 快速实现 api 加密,一个轮子搞定!

所以在实际应用中,要根据情况使用,也可以同时使用加密和签名,比如 A 和 B 都有一套自己的公钥和私钥,当 A 要给 B 发送消息时,先用 B 的公钥对消息加密,再对加密的消息使用 A 的私钥加签名,达到既不泄露也不被篡改,更能保证消息的安全性。在这个过程中,只有 2 次传递过程,第一次是 A 传递加签的消息和消息本身给 B,第二次是 B 获取 A 的公钥,即使都被敌方截获,也没有危险性,因为只有 A 的私钥才能对消息进行签名,即使知道了消息内容,也无法伪造带签名的回复给 B,防止了消息内容的篡改。

2026-04-18 15:39:54 47

转载 很抱歉,今年没有金三银四!

往期学员通过我们的内推,入职都特别高效,内推很多都是大厂,只有帮助大家学习到技术,找到一份好工作,我们才能收获好的口碑。等等不同的应用场景,在整个授课过程中,老师更加注重是业务与思想的传播,让你轻松应对工作中的问题并且有举一反三的能力。中,把理论和实践相结合,帮助学员用最短的时间进入AI领域并掌握相关知识,快速上手主流深度学习开发框架,这些领域,各家公司都给足了诚意,AI人才全面扩招,岗位薪资也大幅增长,一般中大厂算法岗的年薪都能达到。口碑对于一家教育公司是非常重要的,所以我们也非常注重结果,对结果负责。

2026-04-16 09:31:48 18

原创 面试官:为什么 MyBatis 的 Mapper 接口不需要写实现类?

Mapper 接口与 SQL 的关联依赖于一个核心约定:**接口的全限定名 + 方法名 = Mapper XML 中的。:看你能否说清楚 Mapper 接口方法是如何与 XML 中的 SQL 关联起来的,这个 "桥梁" 是怎么架起来的。Mapper 接口不需要实现类,是因为 MyBatis 使用 JDK 动态代理在运行时为接口生成代理对象。(CGLIB 通过生成子类实现代理,接口没有实现类,无法生成子类)。这是最自然、最合适的方案。Mapper 接口能 "自动" 找到 XML 中的 SQL,靠的是一个。

2026-04-16 09:31:48 516

原创 拼多多二面:为什么有了线程,还需要协程?我:额,协程是啥...

面试答这道题,三层递进:先用一句 "进程是资源分配单位、线程是调度单位、协程是用户态线程" 给出核心结论,再从切换开销角度讲清楚三者的性能差异(关键点:内核态 vs 用户态),最后点一下 Java 21 虚拟线程作为加分项。:能不能把进程、线程、协程和 Java 的实际应用联系起来,比如 JVM 进程模型、Java 线程与 OS 线程的映射关系、Java 19 虚拟线程(协程的 Java 实现)。:当虚拟线程遇到 IO 阻塞(网络请求、文件读写等)时,自动让出底层的平台线程,给其他虚拟线程用。

2026-04-15 16:25:49 556

转载 【突击必备】疯传Java界,堪称最强面试合集!

直击底层,深度拆解Spring AI的核心原理与源码架构,帮你从根源理解技术逻辑。,把大厂面试官的提问逻辑、评分标准、高频考点全拆解,耗时打磨出这份。篇幅有限,暂时只展示这么多,想要全套资料的自己。等技术栈,随手截了部分资料,大家先看下,,这里也给大家推荐一个免费技术课程——,深挖近3个月一线互联网、科技公司的。六、SpringCloud相关知识点。本课程由图灵课堂的两位大佬共同主讲,有时间的强烈建议学习一下,七、Redis相关知识点。九、MySQL相关知识点。八、并发编程相关知识点。

2026-04-14 15:12:38 18

原创 面试官:谈谈 InnoDB 中的表级锁、页级锁、行级锁?(修订版)

面试官不仅仅是想知道你背过这三种锁的名字,更是想知道你是否理解不同锁粒度对并发性能和数据安全的影响,能否在设计上做出合理权衡。:考察你是否清楚 InnoDB 默认使用行级锁,以及什么情况下会 "意外" 升级为表级锁(这可是生产事故的高发区)。行级锁包括记录锁、间隙锁、临键锁等,通过意向锁实现多粒度锁定的协调。实现高并发,但在无索引查询、全表扫描等场景会升级为表级锁,需特别注意避免 "锁表" 事故。:是否理解共享锁(S 锁)和排他锁(X 锁)的兼容矩阵,以及意向锁在多粒度锁定中的作用。

2026-04-14 15:12:38 625

转载 最近AI圈爆火的Hermes到底是什么?

作为从 2026 年 2 月底才发布的开源项目,Hermes Agent 在不到两个月的时间里,GitHub 总星标已突破 4.7 万,贡献者数百人,并在多日内持续霸榜全球开源榜单第一。和传统 Agent 不同,Hermes 试图成为一个能够持续积累经验的长期系统:它会从已经完成的任务中学习,在不同会话、不同平台之间保留记忆,并逐渐形成一套属于用户自己的能力结构。更重要的是,Skill 在使用过程中会自我迭代——当你使用某个 Skill,Agent 发现更优的方法,会自动更新 Skill 文档。

2026-04-13 09:37:21 212

转载 最近,Java招聘市场已经疯掉了。。。

Mysql、Spring、Mybatis、Redis、MQ、Zookeeper、Netty、Dubbo、Spring Boot、Spring Cloud、数据结构与算法、设计模式、网络与操作系统、三高架构、线上疑难问题、大厂面试场景题、项目亮点和难点、K8S云原生。本次课程将带你基于Spring框架集成DeepSeek大模型,实战开发智能对话、图像生成、语音翻译等AI场景,并深入。AI的程序员,正在被会AI的程序员淘汰;,还有足够震撼到每一个Java程序员的,可以称之为全网最详细的,

2026-04-13 09:37:21 22

原创 美团二面:生产环境 RocketMQ 消费延迟很高怎么办?我只答出加消费者...

其中 80% 以上的堆积根因在消费端,所以日常开发中要格外关注消费逻辑的性能。上图展示了消息转发方案的核心思路:用一个轻量级的临时消费者快速将堆积消息从原 Topic 转发到新 Topic,然后由新的消费者集群按照自己的节奏慢慢消费。:面试官不仅仅是想知道你怎么 "救火",更是想知道你是否能快速定位消息堆积的根因——是消费端太慢、还是生产端太猛、还是 Broker 出了问题。广播模式下每个消费者都会消费所有消息,堆积只和单个消费者自身消费能力有关,扩容消费者并不能分担压力,需要通过优化消费逻辑来解决。

2026-04-12 15:47:36 503

原创 阿里面试官:并发和并行的区别是什么?这都说不清楚吗?

面试答这道题,三层递进:先说清楚定义(逻辑同时 vs 物理同时),再从 CPU 调度角度解释底层机制(时间片轮转 vs 多核执行),最后点明它们不是对立概念——并发是程序结构,并行是执行方式。关键点是:只有一个 CPU(厨师),靠频繁切换来营造 "同时" 的错觉。就像两个厨师各做各的菜:厨师 A 做西红柿炒蛋,厨师 B 做宫保鸡丁,两个人真正同时在工作,互不干扰。**并发是 "同时应对",并行是 "同时干活"**。多核 CPU 上,每个核心可以独立执行一个线程,是真正的物理并行,不需要来回切换。

2026-04-11 14:56:49 571

原创 面试官:Dubbo 和 Feign 有什么区别?

从上到下分为 Proxy(代理层)、Cluster(集群容错层)、LoadBalance(负载均衡层)、Protocol(协议层)、Exchanger(信息交换层)、Transport(网络传输层),每一层都可以灵活替换,形成了完整的 RPC 链路。随机(Random)、轮询(RoundRobin)、最少活跃调用数(LeastActive)、一致性哈希(ConsistentHash),默认随机。:考察你是否理解 RPC 与 HTTP 调用在协议层面的差异,以及序列化、负载均衡、服务治理等核心机制。

2026-04-10 09:06:28 643

原创 华为面试官:Redis 挂了数据会丢失吗?如何保证数据不丢?我:缓存而已,丢了就丢了...

实际生产中,建议同时开启,用 AOF 保证数据安全,用 RDB 做冷备。:面试官不仅仅是想知道 RDB 和 AOF 的全称,更是想知道你是否理解 Redis 作为内存数据库,为什么需要持久化,以及两种方案各自的实现原理和触发机制。,用 RDB 格式存储全量数据保证恢复速度,用 AOF 命令记录增量变更保证数据完整性,实现两者的优势互补。:定期快照,体积小恢复快,但可能丢数据 —— "像拍照,抓住某个瞬间的状态"。:追加日志,数据更安全,但文件大恢复慢 —— "像录像,记录每一个动作"。

2026-04-09 15:51:49 645

原创 得物二面:Redis 中某个 Key 访问量特别大怎么办?我:Redis 能顶得住...

对于可预期的热点(如秒杀、大促),可以提前将热点数据加载到本地缓存中,活动开始前就预热好。:面试官不仅仅是想知道热点 Key 的定义,更是想知道你是否能区分热点 Key 和大 Key 的不同(一个是 "访问太多",一个是 "数据太大"),以及热点 Key 对 Redis 集群的具体影响。两者可能同时存在(比如一个又大又被频繁访问的 Key),但解决思路完全不同:热点 Key 要分散访问,大 Key 要拆分数据。:增加从节点,读请求分散到多个从节点,热点 Key 的读压力被多个节点分担,适合读多写少的场景。

2026-04-08 16:48:15 1094

原创 面试官:ZSet 的底层实现是什么?(修订版)

字典实现 O(1) 按 member 查 score,跳表实现 O(logN) 的范围查询和排名计算。:跳表的最底层就是完整的有序链表,定位起点后直接向后遍历即可,内存连续访问对 CPU 缓存友好。:先用跳表定位到起始 score(O(logN)),然后沿 Level 1 链表向后遍历 M 个元素。跳表负责按分数范围查询(O(logN)),字典负责按成员查分数(O(1)),两者配合实现了 ZSet 的所有操作。listpack 去掉了。:先找到插入位置,然后随机生成新节点层数,更新每层的前后指针。

2026-04-07 09:32:00 578

原创 百度面试官:Redis 内存满了怎么办?你有想过吗?

如果这 20 个 Key 中过期的比例超过 25%,说明当前过期 Key 很多,就再随机抽 20 个继续清理,直到过期比例降到 25% 以下,或者执行时间超过上限(默认 25ms)。定时删除需要为每个设置了过期时间的 Key 维护一个定时器,如果同时有几十万个 Key 设置了过期时间,就会有几十万个定时器同时运行,如果有些 Key 没有设置过期时间,或者过期策略清理速度跟不上新 Key 的写入速度,内存还是会满。如果过期 Key 数量非常多,而随机抽取的概率有限,仍然会有大量过期 Key 残留在内存中。

2026-04-06 16:52:25 663

原创 滴滴二面:你项目为什么选择 RocketMQ,而不是 Kafka? 我:支支吾吾....

场景(电商、金融、订单等)下,RocketMQ 提供了事务消息、延迟消息、高可靠同步双写等 Kafka 和 RabbitMQ 不具备或不擅长的特性,同时全 Java 技术栈降低了团队的学习和运维成本。(电商、金融、订单),只要满足 "事务消息、延迟消息、高可靠、Java 栈" 中任意一个需求,RocketMQ 就是最优解。,追求极致吞吐,但在业务消息场景(如订单、支付)下的可靠性、功能丰富度不如 RocketMQ。订单超时取消(延迟消息)、分布式事务(事务消息)、异步解耦(普通消息)、数据同步(广播消费)

2026-04-05 16:09:13 733

原创 得物二面:Redis 如何高效安全的遍历所有 Key?(修订版)

后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,Spring Cloud Alibaba 等等,遍历期间新增的 Key 有可能不会被返回。因为游标算法是按照固定的跳跃顺序遍历桶,如果新 Key 被放入了已经遍历过的桶中,就会被跳过。当遍历过程中发生了 rehash(哈希表扩容或缩容),某些 Key 可能从旧位置迁移到了新位置,导致被访问两次,返回重复。:能否给出完整的遍历方案(如批量删除匹配的 Key、大 Key 扫描),并知道如何处理。

2026-04-04 21:20:23 1846

转载 流程引擎的架构设计

对于组织架构而言,需要考虑,系统本身要具备 OU 存储的能力,对于没有组织架构的用户,可以直接在系统的组织架构中新建组织架构。另一种方式是使用流程引擎来实现,流程引擎对接应用场景所需数据,如加班申请,流程引擎对接 SSO、OU、审批人配置、权限等,实现这样一个流程,只需要关心流程配置、流程节点和流程表单即可,流程流转以及流程的数据处理,都通过流程引擎来完成。而在流程执行过程中,流程数据、不是路程的相关人也都不应该看到流程,处理过流程的审批人,不可以再对流程进行处理等,都是权限方面要考虑的问题。

2026-04-04 21:20:23 31

原创 滴滴二面:怎么解决 Redis 缓存和数据库的一致性问题?

再加上缓存 TTL 兜底,即使所有重试都失败了,缓存过期后也会从 DB 加载最新值。:只有 "读请求写缓存" 的速度比 "写请求更新 DB + 删除缓存" 还慢时才会出问题,而写 DB 一般比读 DB 慢得多(涉及锁、磁盘 IO),所以实际中几乎不会发生。线程 A 先更新了数据库(20),但还没来得及更新缓存时,线程 B 已经完成了数据库和缓存的更新(30)。:面试官不仅仅是想知道 "先删缓存" 还是 "后删缓存",更是想知道你是否能分析出每种方案在并发场景下的数据不一致问题,以及背后的时序原因。

2026-04-03 16:00:00 830

原创 得物二面:什么是缓存击穿、缓存穿透、缓存雪崩?(修订版)

布隆过滤器判断 "存在" 时有一定误判率(可能实际不存在),但判断 "不存在" 时是 100% 准确的。:穿透是 "查的东西根本不存在",击穿是 "一个热点 Key 过期了",雪崩是 "一堆 Key 同时过期或 Redis 挂了"。:面试官不仅仅是想知道这三个概念的定义,更是想知道你是否能清晰区分它们的触发场景("查不到" vs "过期了" vs "集体过期"),以及各自对应的解决方案。:击穿是 "一个热点 Key 过期",雪崩是 "大量 Key 集体过期",范围更广,危害更大。这是最简单也最有效的手段。

2026-04-02 15:41:48 1477

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除