自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 Kafka:消息队列界的“瑞士军刀“,这些场景你不会还没用过吧?

Kafka 作为一个老牌消息队列,在这些经典场景下还是相当能打的:异步解耦:让服务之间各玩各的,新增下游不改上游削峰填谷:用缓冲应对瞬时高并发,保护后端脆弱的数据库延迟消息:有点勉强,但能绕弯子实现(真刚需建议上 RocketMQ)事务消息:配合本地消息表做最终一致性,稳如老狗积压处理:加分区加消费力 + 批量优化 + 监控告警,三件套走起当然,上面很多方案是走"最终一致性"路线的,如果你的业务要求强一致性(比如银行转账),那就得多掂量掂量了,不能啥都往 Kafka 里怼。

2026-06-12 09:01:40 199

原创 扒一扒 Kafka 的“四大天王“:Broker、Topic、Partition、Replica 到底啥关系?

来来来,咱把四者关系串起来:Kafka 概念生活类比Broker货架(服务器),实际存包裹的Topic货品分类标签(生鲜区、电器区)Partition一个分类下的多个货架层(每层独立放货、独立取货)Replica同一层货物的备份(这层坏了,备份层的货顶上)举个具体的例子:- 我们有一个 3 个 Broker 的集群(Broker 0、Broker 1、Broker 2)- 创建了一个叫`order`的 Topic,设置了3 个分区,2 个副本。

2026-06-11 08:48:57 855 6

原创 SingleFlight 到底是个啥玩意儿?为啥它能成为缓存击穿的“救世主“?

我们要存啥捏?一个正在进行中的请求,以及它的结果。其他相同 key 的请求来了之后,等着这个结果就行。/*** 单机版 SingleFlight* 核心思路:同一个 key 的并发请求,只让第一个去实际执行,其他请求共享结果*/// 用来存每个 key 对应的"正在执行中的请求"/*** 执行一个操作,同一个 key 保证只有一个在执行* @param key 请求的唯一标识(比如缓存 key)* @param func 真正要执行的逻辑(比如查数据库)

2026-06-10 20:05:01 544 6

原创 分布式锁三巨头掰手腕:Redis vs Zookeeper vs 数据库乐观锁,你的项目到底该用谁?

比如常规的商品下单,不太适合秒杀这种请求密度爆炸的场景。

2026-06-08 14:40:54 1091 6

原创 Redis能做消息队列?不仅能,还能整出好几种姿势!

大家在日常搬砖的时候,应该经常听到一句话:"消息队列?上 RabbitMQ、Kafka 啊!" 这话没毛病,但问题是——有时候咱的项目体量就那么一丢丢,为了一个简单的异步任务就整一套 RabbitMQ,属实有点大炮打蚊子了。更何况,光搭建和维护的成本就够你喝一壶的。这时候咱瞅一眼旁边正在勤勤恳恳干活的 Redis,心想:这玩意儿我本来就有啊,能不能让它顺便把消息队列的活也给干了?今天咱就来盘一盘 Redis 实现消息队列的几种姿势,以及每种方式适合啥场景。

2026-06-07 02:37:04 558 6

原创 一个分布式锁把面试官整emo了,Redis的锁原来这么多花样?

今天我们从一个简陋的`SETNX`开始,一路升级到 Redisson 全家桶 + RedLock,把 Redis 分布式锁的进化历程捋了一遍。核心要点记住这几个就行:1.单机锁管不了分布式环境,必须用中间件来协调2.手写分布式锁坑太多:过期时间、删错锁、原子性、续期……没点功力真兜不住3.Redisson 是版本答案:看门狗续期 + 可重入 + Lua 原子操作,开箱即用4.RedLock 存在争议,大多数场景不需要5.锁粒度要细、范围要小、超时要设。

2026-06-04 09:49:49 259 8

原创 随机TTL防抖,Redis还能这么用?接口重复提交直接拿捏

今天咱从防抖的概念唠起,讲到用 Redis 实现防抖,再到加随机 TTL 防止集体过期,最后整了个功能比较完整的防抖工具出来。核心要点再划一划:防抖就是用 `SETNX` 在 Redis 里占个坑,坑还在就不让过随机 TTL 是为了防止大量 key 同时过期,把瞬时压力打散key 的设计要够细,带上用户、操作、唯一标识等维度加降级逻辑,Redis 挂了不能拖累主业务能主动释放就主动释放,别死等 TTL 过期其实你会发现,"随机 TTL 防抖"这东西本质上就是个轻量级的分布式互斥锁。

2026-06-03 02:24:04 628 5

原创 Codex免费额度从周刷新变月刷新,OpenAI这是在憋什么大招?

Codex这次免费额度的调整,对白嫖党来说确实是个坏消息。但回过头想想,AI编程工具这一年来突飞猛进,免费让我们用了这么久其实也挺良心了。商业公司要盈利是天经地义的,只是这个"温水煮青蛙"式的缩减方式,确实让人有点不舒服。不过话说回来,只要竞争还在,免费就不会完全消失。Claude Code、Cursor、GitHub Copilot都还在抢用户呢,OpenAI也不敢一刀把免费全砍了。只是以后的免费,大概率会越来越"意思意思"就完事了。

2026-06-02 14:29:37 823 6

原创 库存超卖?别慌,乐观锁和悲观锁来救场了!

乐观锁和悲观锁这两个东西,说到底没有绝对的谁好谁坏,关键看你的业务场景适合哪个。就像出门穿衣服一样,大冬天穿短袖会冻死,大夏天穿羽绒服会热死——合不合适要看实际情况。我们一般在项目里两个都会用到,不同的接口根据业务特点选择不同的锁方案。如果一个方案让系统变卡了或者数据不准了,那就果断换另一个试试,没必要死磕。以上是个人的一些经验分享,希望能帮到正在面临同样困惑的朋友们。当然,如果有哪里有什么错误的地方也请大佬们指出,咱一起进步哈~本文完结撒花!!!🎉。

2026-06-01 02:51:08 519 8

原创 HTTP Client 到底是个啥?让咱的 Java 也能丝滑地发送网络请求

来盘一盘给我们带来的好处:1.JDK 原生自带,零依赖开箱即用:Java 11 以上直接用,不用纠结选哪个第三方库2.API 设计优雅:Builder 模式 + 链式调用,读代码跟读句子一样流畅,再也不用写样板代码了3.同步异步双模式:同步简单直接,异步性能拉满,想用哪个用哪个4.原生支持 HTTP/2 和 WebSocket:跟上了时代,不再是老古董5.响应体处理灵活:String、byte[]、File、Stream……各种姿势都能接住。

2026-05-31 15:41:56 770 7

原创 Spring Task 是个啥嘞?让定时任务变得跟闹钟一样简单

用 Spring Task 虽然简单,但也有一些容易踩的坑,提前告诉大家,少走弯路 (ಥ_ಥ)来盘一盘 Spring Task 给我们带来了什么便利:1.零依赖开箱即用:Spring 自带,不用额外引入任何 Jar 包2.注解驱动极简配置:一个打开开关,一个标记任务,完事儿3.三种调度方式覆盖各种场景:fixedRate 固定频率、fixedDelay 固定延迟、cron 精确定时4.开发效率嗷嗷高。

2026-05-30 02:53:39 1098 6

原创 面试官问我缓存击穿是啥,我反手就是一个比喻把他整笑了

就算缓存全挂了,数据库也不能被打死。加个限流和熔断// 使用 Sentinel 或者 Resilience4j 做熔断降级// 正常查缓存 -> 查数据库的逻辑// 降级方法:数据库扛不住的时候返回兜底数据log.warn("数据库扛不住了,返回兜底数据!// 返回一个默认对象或者从本地缓存取.id(id).name("商品加载中...").build();这就好比:小卖部门口排队的人太多了,保安直接拉警戒线:"一次只能进来5个人!",虽然慢了点,但小卖部至少不会塌。

2026-05-29 03:35:41 347 6

原创 搓完项目没人看?手把手让你的项目“上线接客“

部署这事儿说白了就三个核心步骤:1.找一台有公网 IP 的机器(租云服务器 / 用 PaaS 平台 / 用 GitHub 的免费服务)2.把项目放上去跑起来(打包 jar 丢上去 / Docker 镜像 / 平台自动部署)3.让别人能访问(绑定域名 / 配置 Nginx / SSL 证书)第一次动手部署的时候可能会觉得步骤多、容易错,这太正常了。咱第一次部署的时候一个安全组端口没开,愣是排查了俩小时,差点怀疑人生 (╯‵□′)╯︵┻━┻ 但搞过一次之后就会觉得:哦,就这?也就那回事嘛。

2026-05-28 03:52:09 397 5

原创 ThreadLocal:每个线程的“私人小金库“,用过的都说香

朋友们好呀,今天我们来聊一个 Java 并发编程里特别实用的家伙——**ThreadLocal**。不知道大伙们有没有遇到过这种场景:多个线程同时访问一个变量,你加锁嘛怕性能拉胯,不加锁嘛又怕数据错乱。这时候就有人跟你说:"用 ThreadLocal 啊!"然后你一脸懵逼——这玩意儿到底是个啥?它跟加锁有啥区别?别急,今天咱就把 ThreadLocal 从头到尾、从里到外给它扒个明明白白 (ง •_•)งThreadLocal 是 Java 提供的一种线程本地变量机制。

2026-05-27 17:55:23 393 7

原创 没有公网IP还想让别人访问你的项目?内网穿透了解一下

内网穿透这东西,本质上就是想办法让"里面的人"和"外面的人"能对上话。方式有好多种,简单的 ngrok 一行命令完事,自由度高的 frp 想咋折腾咋折腾,想组网的 ZeroTier 默默干活。选择哪个,取决于你的实际场景和手里有啥资源。临时调试用 ngrok,长期服务用 frp,自家设备用 ZeroTier,各司其职,一点都不冲突。以上是个人的一些经验分享,希望能帮到正在折腾内网穿透的朋友们。如果有哪里有什么错误的地方也请大佬们指出,咱一起学习进步!

2026-05-26 03:45:08 1050 4

原创 还在用HTTP轮询?WebSocket让你前后端实时“贴贴“不香吗?

WebSocket这个技术,说白了就是让HTTP从一问一答进化成了随时交流。它最大的贡献就是让服务器也能主动找前端搭话,这样才能做出真正实时交互的Web应用。在实际项目中,咱一般不会裸写原生WebSocket,而是套一层STOMP,配合SpringBoot的`@MessageMapping`,写起来跟普通接口差别不大,很轻松。以上是个人的一些经验分享,希望能帮到正在捣腾实时通信的朋友们。如果有哪里有什么错误的地方也请大佬们指出,咱一起进步!本文完结撒花!!!

2026-05-25 02:41:27 894 7

原创 MyBatis-Plus 到底是个啥?为什么用了之后 CRUD 写得我想哭

我们来盘一盘 MyBatis-Plus 到底给我们带来了啥:1.单表 CRUD 零代码:BaseMapper 一把梭,增删改查一个接口全包了,再也不用写无聊的重复 XML2.条件构造器:类型安全的 Lambda 链式调用,动态条件优雅到不像写 Java3.分页开箱即用:一个插件注册,物理分页自动搞定4.Service 层封装:链式查询一路点到底5.各种插件:逻辑删除、乐观锁、自动填充、防全表更新……全是实际开发中高频用到的东西说白了,MyBatis-Plus 的思路就是——

2026-05-24 21:49:49 762 5

原创 SpringBoot 的简化开发,爽到飞起!

不知道朋友们刚学 Spring 的时候有没有被各种 XML 配置文件支配过。我还记得之前为了整一个 SSM 项目,光配置就得搞半天——web.xml、applicationContext.xml、springmvc-servlet.xml……各种 xml 堆在一起,看的人都麻了。更别说还要手动配置 Tomcat、手动管理依赖版本、手动搞各种 Bean 的注入,简直像是在玩拼图游戏,还是那种没有参考图的那种。

2026-05-23 02:42:23 1729 1

原创 AOP 是啥?为啥它能让项目代码瞬间“清爽到起飞”?

这个注解只能放在方法上。value() 用来写操作名称。我们今天聊了 AOP 的思想以及它在项目中的一些巧妙用法。AOP 的核心思想其实很简单:把和核心业务无关、但很多地方都需要的公共逻辑抽出来,统一管理,自动织入。它可以让我们的代码从这样:权限校验();记录日志();开启事务();执行业务();提交事务();记录结果();变成这样:执行业务();其他公共逻辑交给切面处理。这样业务代码更清爽,公共逻辑也更好维护。不过朋友们也要记住,AOP 不是万能胶。

2026-05-21 03:27:19 484 1

原创 还在用 BeanUtils?试试 MapStruct,快得让你怀疑人生!

Mapper// 单例实例// 字段名一样 → 自动映射,一行都不用写// 字段名不一样 → 用 @Mapping 指定// 反向转换就这么简单!连实现类都不用写,MapStruct 编译时会自动生成。@Mapper// 日期格式化// 数字格式化// 自定义转换方法return "未知";BeanUtils` 这玩意儿吧,作为快速原型开发偷个懒没啥问题。但正经项目里,反射的性能开销 + 缺少编译期检查 + 字段重命名炸弹。

2026-05-20 03:20:41 569

原创 SpringBoot整合JWT,登录认证原来这么简单?

OK啊,到这里一个完整的 SpringBoot + JWT 登录认证就整完了。来捋一捋咱干了啥:1. 引入 jjwt 依赖,准备好工具2. 写了个 `JwtUtils` 工具类来生成和解析 token3. 整了个 `JwtAuthenticationFilter` 过滤器拦截请求4. 配置了 Spring Security,关掉 Session,注册 JWT 过滤器5. 写了登录和注册接口6. 搞了个获取当前用户信息的接口登录时发 token,请求时带 token,过滤器验证 token。

2026-05-19 03:23:57 725

原创 新手要使用Redis不想折腾Docker,WSL,这里有办法

我们在进行一些自己的开发或者测试项目的时候,通常需要用到Redis,但是在Redis官网提供的方式是使用Docker来进行下载,可能对于部分新手或者不想多折腾的人来说并不太友好,这里给大家推荐一个windows的平替版——Memurai。这是Redis官方认可的Windows元素兼容实现,安装方法也很简单快捷,适合普通开发和生产测试。

2026-04-19 03:27:08 673

原创 O_o,PO , BO , DTO , DAO , POJO 到底什么O是什么什么O?o_O(Java中这些对象的设计思想)

其实如果是一个很小的项目,倒是没有必要去划分的那么细,这样子搞这么多种对象反而是浪费时间精力,一个 User 类就可以一直从头用到尾了(当然,一般是指的就是之间搓着玩的小玩意儿)。但是如果是一个正儿八经的项目的话,确实还挺有这个必要的,我们可以从下面这些角度来看一下。从安全性来说:咱们数据库当中还有password的字段,这总不能就库库的也给前端都发过去了吧,那还要那密码干啥捏,而且这玩意儿你哪怕是加密了再发出来瞅着也不好看呐,所以这就有扯到下一个问题了。

2026-04-17 02:51:36 1428

原创 老版JDK下载不了?让我们来邪修(bush)下载JDK11

虽然说是邪修方法,实际上也就是换了员工途径而已,也是官方的,只不过不是oracle官方的。

2026-04-12 03:24:25 473

原创 新手如何使用IDEA在github上面上传自己的项目

打开IDEA,然后直接在左上角搜索栏里面搜HTTP就能搜到这个了,然后我们选择下面这个Manual proxy configuration进行手动配置,可以选择HTTP或者SOCKS,后者要稳定一些,不过前者也能用,懒的话直接使用默认的前者就行,然后再把下面的Host name填上127.0.0.1(也就是自己的本机),下面那个Port number就填上面找到的那个四位数端口号就好了。(一般在设置之类的地方我们可以找到)弄完这个通常提交就没有问题了,然后我们再来解决上传的问题,是的,事情还并没有结束。

2026-04-11 04:16:50 1033

空空如也

空空如也

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

TA关注的人

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