自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 从-LLM-到-Agent-Skill-把-AI-底层概念串起来

会说话 -> 看得懂任务 -> 能使用工具 -> 工具接入标准化 -> 能自己推进任务 -> 把经验沉淀成技能我觉得这正是这期视频最重要的启发:AI 的进化不只是模型参数变大,而是“模型 + 上下文 + 工具 + 工作流 + 技能沉淀”一起组成新的软件形态。它能看到什么上下文?它能调用哪些工具?它有没有可靠的执行闭环?它能不能把经验沉淀成可复用 Skill?模型是起点,但不是终点。真正改变工作方式的,往往是模型和工具、流程、经验结合起来之后形成的系统能力。

2026-08-03 09:39:34 2674 2

原创 12306项目学习day6

12306 分布式票务系统|-- 业务主线| |-- 用户注册登录| |-- 车次和余票查询| |-- 购票下单| |-- 支付回调| |-- 订单关闭| `-- 订单查询|-- 高并发能力| |-- Redis 余票缓存| |-- Redis Hash 令牌桶| |-- Lua 原子扣减| |-- Redisson 分布式锁| `-- MQ 削峰和延迟补偿|-- 一致性能力| |-- MQ 延迟关单| |-- 幂等框架防重复消费| |-- Canal 监听 binlog。

2026-07-29 16:01:42 1240

原创 12305项目学习day5

这三个点不属于某一个具体业务功能,但它们对项目的稳定性、可维护性和安全性影响很大。学习完之后,我把自己的理解整理成这篇复盘。

2026-07-27 09:39:36 1022

原创 12306项目学习day4

幂等的含义是:同一个操作执行一次和执行多次,最终产生的业务结果应该一致。在普通系统里,幂等可能只是锦上添花;但在 12306 这种售票系统里,幂等是必须做的基础能力。用户连续点击“提交订单”。浏览器或 App 因为超时自动重试。网关、RPC、MQ 都可能出现重试。RocketMQ 消费失败后会再次投递。支付回调可能被支付平台多次通知。如果不做幂等,最直接的问题就是重复创建订单、重复扣减库存、重复更新状态,最终导致超卖、错单和资金状态不一致。类型特点示例热数据。

2026-07-23 20:52:26 1018

原创 12306项目学习day3

多级缓存(Multi-Level Cache)是指数据访问经过多个层次的缓存介质,每一层都有不同的特性和用途。层级存储介质特点适用场景L0 - 本地缓存JVM堆内(如Caffeine/Guava)最快(纳秒级),但有内存限制和分布式不一致问题热点数据、配置信息L1 - 分布式缓存速度快(毫秒级),分布式共享用户信息、车次信息、会话数据L2 - 数据库持久化存储,可靠但慢数据最终来源请求 -> L0本地缓存 -> L1分布式缓存(Redis) -> L2数据库(MySQL)

2026-07-21 17:02:00 1085

原创 12306项目学习day2

场景描述:恶意用户频繁查询不存在的数据,每次请求都打到数据库。正常流程:用户请求 → 查缓存 → 命中 → 返回数据缓存穿透:用户请求 → 查缓存(不存在)→ 查数据库(不存在)→ 返回null↑ 每次请求都这样,数据库压力巨大技术解决的问题实现方式性能影响Redisson分布式锁数据一致性看门狗+可重入锁低布隆过滤器缓存穿透概率型数据结构极低Lua脚本原子操作Redis服务端执行低。

2026-07-17 09:28:04 802

原创 12306项目学习day1

责任链模式是一种行为型设计模式,核心思想是:多个处理器依次处理同一个请求,形成一条链。请求从链头开始传递,每个处理器决定是否处理或继续转发。Starter 模块化– 每个能力独立为一个 Spring Boot Starter,按需引入自动装配– 通过实现智能降级设计模式框架化– 不是简单的代码示例,而是抽成了可复用的通用框架泛型 + 注解驱动– 最大程度减少模板代码。

2026-07-15 09:24:29 940

原创 黑马点评项目实战总结

一、项目概述1.1 项目背景1.2 技术栈1.3 项目架构二、项目搭建与环境配置2.1 数据库初始化2.2 项目配置2.3 启动项目三、短信登录模块3.1 基于 Session 实现(第一版)3.1.1 发送验证码3.1.2 登录3.1.3 登录拦截器3.1.4 数据脱敏3.2 Session 集群共享问题3.3 基于 Redis 实现(最终版)3.3.1 发送验证码(Redis 版)3.3.2 登录(Redis 版)3.3.3 双重拦截器设计四、商户查询缓存4.1 缓存业务流程4.2 基础缓存实现。

2026-07-11 21:58:53 699

原创 苍穹外卖单体项目实战总结

一、项目整体介绍1\.1 项目定位1\.2 项目架构模式1\.3 项目运行环境二、核心技术栈梳理2\.1 核心框架2\.2 辅助技术三、核心业务模块功能详解3\.1 商家后台管理端(PC端)3\.2 用户小程序端(移动端)四、项目核心难点与解决方案4\.1 无状态登录认证(JWT\+拦截器)4\.2 数据库事务控制4\.3 缓存优化(Redis)4\.4 微信支付对接与回调处理4\.5 全局异常处理与统一结果返回4\.6 文件云端上传4\.7 AOP切面自动填充公共字段。

2026-06-09 08:28:05 1406

原创 Redis 优惠券秒杀实战:从0到1解决高并发与超卖问题

本文从全局唯一 ID、优惠券初始化、秒杀下单、超卖问题解决、一人一单控制到集群并发优化,完整实现了一套基于 Redis 的优惠券秒杀方案。用 Redis 实现全局唯一 ID,解决高并发下的订单 ID 冲突问题用乐观锁(stock > 0条件更新)解决库存超卖问题结合数据库查询和事务实现一人一单约束引入 Redis 分布式锁解决集群环境下的并发问题后续可进一步优化:基于 Redis 实现异步秒杀,将核心逻辑移至 Redis 中执行,大幅提升秒杀接口的吞吐量。

2026-06-07 14:35:48 478

原创 为什么MySQL离不开Redis?详解缓存三大经典问题及最优解决方案

MySQL:底层持久化存储,保证数据安全、一致性、事务完整性,负责低频写、复杂查询。Redis:上层高速缓存,承接高频读、瞬时高并发,降低MySQL压力,提升系统响应速度。客户端查询缓存、数据库都不存在的数据,请求无法命中缓存,直接穿透到MySQL,频繁空查、无效查询压垮数据库。单个热点Key在缓存过期瞬间,海量并发请求同时到来,缓存未命中,全部直接打向数据库,瞬间压垮MySQL。大量缓存Key同时过期,或Redis集群宕机、断电、网络故障,导致所有流量全部穿透到数据库,形成流量雪崩,引发系统性崩溃。

2026-06-02 16:43:37 976

原创 SpringBoot 最全常用注解详解(三层架构分层整理)

我们日常开发的 Controller、Service、Mapper 三层架构,完全依靠对应注解完成类注册、依赖注入、接口开发、事务控制等功能。SpringBoot 注解是 Java 开发的地基,所有接口开发、业务编写、数据库操作、任务调度,全部依赖注解实现。- 控制层 Controller:@RestController、@GetMapping、@PostMapping。

2026-05-28 10:53:32 531

原创 SpringCache

SpringCache 是 Spring 自带的缓存抽象框架,不需要手动操作Redis API,通过注解快速实现缓存开发,底层可以切换 Redis、Ehcache、Caffeine 等缓存中间件。SpringCache产生原因:默认不缓存空值,查询不存在数据不会存入缓存,导致每次都访问数据库。现象:客户端大量查询数据库不存在的数据,缓存中没有数据,请求全部直达数据库,压垮数据库。- 方法执行前先查询缓存,有缓存直接返回,没有才执行方法并存入缓存。- condition :条件缓存,满足条件才缓存。

2026-05-23 14:30:09 655

原创 Java操作Redis(以SpringDataRedis为例)

SpringDataRedis 是 Spring 封装的 Redis 操作框架,底层默认整合Lettuce,线程安全,适配 SpringBoot,统一API,屏蔽客户端差异,企业开发首选。redisTemplate.opsForHash().put("user:1","username","张三");redisTemplate.opsForZSet().add("rank","小明",90);redisTemplate.opsForValue().set("name","李四");

2026-05-20 21:23:55 924

原创 Spring MVC 扩展消息转换器

Spring MVC 会从上到下依次匹配消息转换器,匹配成功则终止执行,默认原生Jackson转换器优先级更高,会导致自定义配置失效,必须手动置顶,提供两种标准方案:方式一:extendMessageConverters(企业推荐)特点:保留Spring所有默认转换器,仅插入自定义转换器,不破坏原生底层配置,稳定性最高。

2026-05-18 13:39:54 492

原创 后端开发三层架构

Mapper 职责只有 SQL 操作,业务判断属于 Service,违反单一职责会导致代码混乱、难以维护。一套 Service 业务,可以被多个 Controller 调用(后台管理、小程序、APP 共用业务)- 三层架构:后端整体架构(Controller、Service、Mapper)- MVC:视图层架构(View、Controller、Model)1. 接收 HTTP 请求(GET/POST、路径、请求头、参数)Service 管“对不对、行不行、怎么做”,是项目真正的业务核心。

2026-05-15 16:07:48 745

原创 如何通过ThreadLocal获取用户/修改人的id

1. 线上项目都是线程池管理线程,请求结束后线程不会销毁,会放回线程池重复复用。- ThreadLocal:线程独享存储,只对当前本次请求生效,安全又简洁。2. 如果不清空上一次存放的用户ID,下一个新请求会读到上一个用户的数据。每个线程都有自己独立的私有内存空间,线程之间数据天然隔离、互不干扰;用户登录认证成功、拦截器解析token拿到用户ID后,存入当前线程。4. 请求执行完毕 → 手动清除线程数据,避免线程复用带来脏数据。别的请求、其他线程,完全访问不到当前线程内部的数据。

2026-05-13 09:32:13 295

原创 Nginx反向代理

传递真实客户端IP。- http://127.0.0.1:8080 → 追加路径(/api/xxx → /api/xxx)。- http://127.0.0.1:8080/ → 替换匹配路径(/api/xxx → /xxx)。- ✅ 隐藏后端:对外只暴露 Nginx,后端 IP/端口/架构不泄露,更安全。

2026-05-11 17:21:48 596

空空如也

空空如也

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

TA关注的人

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