自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

代码构筑系统,架构驱动未来 —— 一名深耕 Java 技术的实践者

你好,我是苏渡苇,写代码也画架构图。分享踩坑经验、性能调优秘籍和偶尔靠谱的全栈技巧——让系统稳如老狗,头发少得优雅。

  • 博客(65)
  • 收藏
  • 关注

原创 DeepSeek V4 实战:自然语言生成 SQL + 智能优化引擎

本文利用 DeepSeek V4 的推理能力,构建了一个“自然语言 → SQL → 执行计划 → 优化建议”的自动化工具。元数据驱动:让 AI “理解”你的数据库结构,减少幻觉。闭环验证:基于真实 EXPLAIN,而不是理论分析。成本可控:生成用 Pro 保证质量,优化用 Flash 降低成本。开箱即用:H5 页面 + Spring Boot,一键启动。从“写 SQL”到“描述业务”,AI 负责翻译和打磨。项目源码仓库。

2026-04-30 11:19:21 1188 3

原创 万字长文 | Spring Cloud Alibaba组件之Nacos实战及Nacos客户端服务注册源码解析

注册步骤小结:读取Spring Boot装载配置文件,找到启动类;继承,它实现接口;实现ApplicationListener接口的方法,该方法调用bind(),然后调用start()方法;start()方法中调用register(),该方法调用的register方法;NacosServiceRegistry的register方法内部调用的方法;根据实例的瞬时状态选择不同的proxy执行注册,默认是gRPC协议的执行注册;完成实例注册(POST请求。

2026-05-06 21:20:47 457

原创 系统架构演进与Spring Cloud Alibaba微服务架构体系

早期的一个单体架构的模块已然不能满足不断复杂的业务逻辑和不断增长用户数量,直到如今微服务架构体系的发展才有效、丝滑的解决了这一问题。没错你猜对了,我们可以把冗余部分的代码再次拆解出来,做成统一的业务层供其他地方调用,该业务层就变成了一个单独的服务。随着互联网世界的快速发展,网站应用的规模也在不断地扩大,这种规模的扩大必然会影响这我们研发的项目的架构体系。垂直架构带来的问题是会带来功能代码的冗余,而随着业务的增加,拆分的应用越多,冗余的代码就越来越多。C和D倒下了,A和B就会不断消耗资源,最终也会宕机下线!

2026-05-06 20:36:56 215

原创 Redis 核心数据结构(三)——Hash,把一堆字段塞进一个 Key

对象无需再存 JSON 字符串了,Hash 让你直接改里面的某个字段,不用全量覆盖。

2026-04-30 09:16:58 432

原创 关于Docker镜像仓库

在Docker客户端(192.168.242.217)制作一个镜像,从官方下载的Tomcat镜像,运行容器无法正常访问Tomcat首页,原因是运行的Tomcat容器内部webapps目录下没有任何内容,而是放在了webapps.dist目录下,我就以这个容器为基础,进入到容器内部,将webapps.dist的内容拷贝到webapps目录下,然后。实际操作中,推送镜像到公共仓库是很慢的,甚至需要推送多次才能推送成功,这不利于项目的持续集成和持续部署,一般我们不会使用公共仓库。

2026-04-29 16:17:03 489 1

原创 DeepSeek V4 实战:打造一个智能 Java 项目源码分析助手

本文从零构建了一个真正能用的 DeepSeek V4 源码分析工具。启动 Spring Boot 应用;打开浏览器访问;输入本地 Java 项目的路径,点击分析。几分钟后,DeepSeek V4 就会交出一份媲美资深架构师审阅的报告。DeepSeek V4 的超长上下文能力,让“读懂整个项目”从理想变为现实。项目源码仓库。

2026-04-29 16:00:42 784

原创 Redis 核心数据结构(二)——List 与消息队列

队列、栈、阻塞读——List 能干的活很多,我们得知道它的边界在哪。

2026-04-28 08:46:21 430

原创 DeepSeek V4 + Spring Boot 3 + JDK 21 :万字实战教你打造AI智能编码助手

2026年4月24日,DeepSeek V4系列正式发布,我们先来看下他耀眼的战绩:更让Java开发者兴奋的是,V4 API采用OpenAI兼容格式,与Spring AI框架天然契合。而Spring Boot 3 + JDK 21的组合,借助虚拟线程(Virtual Threads)、Project Loom、增强的模式匹配等新特性,能够在大规模AI集成场景中发挥出远超传统线程模型的服务能力。本文将手把手带你构建一个 企业级AI智能编码助手,深度整合DeepSeek V4的代码生成、代码审查、单元测试生成和

2026-04-28 00:27:03 534

原创 Redis 核心数据结构(一)—— String 与数字

别被“数据结构”三个字吓到,String 就是你熟悉的字符串,只不过它能自动做加减法。

2026-04-27 19:05:29 390

原创 5 分钟跑起 Redis(Docker 版)

默认的 Redis 是“裸奔”的:没有密码、内存不限制、持久化也没开。如果你想改配置,可以自己写一个redis.conf。

2026-04-16 10:53:13 533

原创 Redis 版本演进、新特性与协议那些事儿

Redis 每个版本都有自己的脾气,有的适合稳扎稳打,有的适合尝鲜,有的为了适应 AI。扒一扒每个版本的核心变化、好玩的新命令、协议许可证的来龙去脉。另外,如果你是自己下载 Redis 源码编译、或者用 Docker 跑在服务器上,那后面提到的那些许可证问题——基本跟你没啥关系。协议限制主要针对的是云厂商把 Redis 打包成托管服务卖钱。你自己用,该咋用还咋用。1.x–2.x:打基础,数据结构 + Lua 脚本3.x–5.x:分布式 + 流消息6.x:多线程 I/O + ACL7.x。

2026-04-16 10:17:45 396

原创 线程池遇上 ThreadLocal:上下文传递与那些踩过的坑

把问题想成“谁在什么时候 set,谁在什么时候 remove”,再选、Security 委托、MDC 拷贝或 TTL,就不容易迷路。如果你也在做链路追踪、诊断类工具,欢迎继续关注。🔗GitHub你的 Star 是对我最大的鼓励!

2026-04-15 09:19:05 370

原创 Docker 网络完全指南

如果你已经跟着前几篇文章跑起来了 Flask 应用和 Redis 容器,可能已经用到过这样的命令。为什么容器之间可以通过容器名互相访问?默认的bridge网络和自定义网络有什么区别?容器怎么访问宿主机的服务?多个宿主机上的容器能互相通信吗?这篇指南将为你揭开 Docker 网络的神秘面纱,通过几个实战场景,逐步掌握 Docker 网络的使用。Docker 在安装时会创建三种默认网络,你可以用bridge:默认网络。每个容器启动时如果不指定网络,就会加入这个网络。

2026-04-07 11:29:22 554

原创 Docker 进阶指南-Windows版:从镜像定制到容器编排,手把手带你玩转 Docker 实战

默认情况下,Docker 会为每个容器分配一个 IP,但这个 IP 是动态的,重启后可能变化,而且,容器之间可以通过--link来通信,但这种方式已经过时。更好的做法是创建一个自定义网络,让容器通过容器名互相访问。

2026-04-03 11:29:26 749

原创 Lambda 表达式中的变量捕获与 effectively final

是指变量初始化后不再改变,即使没有final关键字。Lambda 表达式只能访问 effectively final 的局部变量,不能修改它们。这一限制源于 Java 变量捕获的值复制机制,保证了语义清晰和生命周期安全。如果需要“修改”外部变量,可以使用数组、或对象字段,但要关注线程安全。在循环中使用 Lambda 时,注意创建临时 effectively final 变量来捕获循环变量。

2026-04-02 09:34:14 425

原创 Java 日期时间 API(java.time)最佳实践

包,基于 JSR-310),彻底解决了这些问题。它设计清晰、不可变、线程安全,并且提供了丰富的操作。理解它们的关系是正确使用 API 的第一步。例如,在夏令时开始的那一天,凌晨2点变成3点,那么加一天后,时间可能不再是原来的小时。的最佳实践,从核心类的选择到常见陷阱的规避都有涉及。没有时区信息,如果用它存储跨时区的时间,会导致混乱。然而,很多开发者仍然在用旧 API,或者对。例如,一个用户在纽约创建了一个订单,时间是。并指定时区,避免驱动自动转换带来的歧义。是线程安全的,可以定义为常量复用。

2026-04-01 09:30:24 369

原创 Windows 上的 Docker 使用技巧

还在为装数据库折腾半天?还在为环境不一致而头皮发麻?Docker 一出,这些问题统统消失。第一次听说 Docker 的时候,我也觉得它是运维才玩的东西。直到有一天,我被 MySQL 卸载不干净、Redis 编译报错、Python 版本冲突搞得焦头烂额,才终于忍不住试了一下。结果——真香。这篇文章,我就从一个普通开发者的视角,聊聊 Docker 到底能帮你省下多少时间,以及怎么在 Windows 上把它用得飞起。

2026-03-31 18:17:29 1876 1

原创 枚举的高级用法——用枚举实现策略模式和状态机

枚举 + 接口:为每个常量定制行为,消除条件判断。枚举 + Lambda:更简洁的策略实现。枚举单例:最优雅、最安全的单例模式。枚举 + 状态机:清晰表达状态流转。:性能与安全的双重保障。

2026-03-31 08:42:41 830

原创 ConcurrentHashMap.computeIfAbsent():高并发下安全初始化的终极方案

是 ConcurrentHashMap 提供的高并发初始化利器,它原子性地完成了“检查-计算-插入”三步,避免了并发下的重复计算和覆盖。相比外部同步,它只在必要时加锁,粒度更细,性能更高。使用时要牢记注意事项:mappingFunction 应轻量、幂等、不返回 null,并避免递归。

2026-03-30 11:19:39 703

原创 用 Objects 工具类告别手写 equals 和 hashCode

安全自动处理 null,避免 NPE简洁一行代码生成哈希码规范:注意浮点数比较需用性能:大部分场景性能足够,不必过早优化。

2026-03-26 17:36:28 613

原创 日志打得好,Bug 跑不了!用 MDC 实现全链路追踪

没有 traceId 的日志,就像没有 GPS 的快递——你知道它出发了,但不知道它在哪。

2026-03-25 18:20:30 554

原创 一行代码让异步任务继承主线程的用户信息!InheritableThreadLocal 的正确打开方式

在 Web 应用中,我们常把 、、 存入 ,但一旦提交到线程池(如 ),子线程就拿不到这些上下文!日志丢失追踪 ID?多租户数据错乱?权限校验失败?本文我们来盘下用 安全传递上下文,并揭示其隐藏陷阱与生产级解决方案。假设我们在请求入口设置用户 ID:在 Controller 中:原因: 是线程隔离的,子线程无法访问主线程的变量。Java 提供了 ,文档说:试试看:再运行:但是这还是有陷阱,我们接着往下看。上面的成功是因为 默认使用 ForkJoinPool,而 ForkJoinPool 的工

2026-03-24 19:40:04 672

原创 回调很难受?试试CompletableFuture 的链式异步

切勿在生产环境使用默认 ForkJoinPool!// 在服务初始化时注入并在// 模拟耗时操作// ← 显式指定线程池。

2026-03-23 18:16:45 809

原创 结构化并发:用 StructuredTaskScope 编写结构化的并发代码

在web开发过程中,可在 Service 层直接使用(需 JDK 21 +—— 子任务的生命周期必须严格包含于父作用域之内。:同时查询两个价格服务,取最快返回的有效价格。:同时获取用户信息和订单列表,两者都必须成功。:全成功才返回,任一失败则整体回滚。欢迎 star & fork!:最快成功者胜出,其余被中断。如图所示,结构化并发通过。强制子任务生命周期受控。,实现高效挂起/恢复。

2026-03-21 17:27:15 659

原创 Stream.collect() 的花式玩法:Collector.of() 自定义收集器

按固定大小分页(如每 3 个元素一组);收集到不可变集合(如同时计算多个统计量(如 min + max + count);将流转换为自定义对象(如这时,就派上用场了。虽然已很强大,但假设我们需要在拼接前对每个元素做特殊处理(如加引号)。需求:一次遍历,得到最小值、最大值、总数。

2026-03-19 18:28:55 694

原创 虚拟线程(Virtual Threads)初体验:10万并发如喝水(JDK 21)

本文基于编写并验证。今天这篇文章我们让回归简单。

2026-03-18 18:21:38 694

原创 反射太重?试试 MethodHandle!JDK 7 就有的“轻量级反射”,性能超快

本文基于编写并验证。“写了十年反射,才知道 JVM 早就给了更快的方案!” —— 被 invoke 拖慢系统的老架构师今天我们来揭开的神秘面纱,让动态调用不再成为性能瓶颈。

2026-03-17 15:35:31 870

原创 别再手写 trim().isEmpty()!JDK 11 给 String 加了三个“神技”

本文基于编写并验证。isBlank()lines()以前判断空格要写 trim().length()==0,现在一个 isBlank() 直接封神!今天来盘下 JDK 11+ 提供的 String 新招式,告别手动拼接、硬编码换行符和低效 trim!

2026-03-16 10:24:18 590

原创 var 不是偷懒,是“高级懒”!JDK 10+ 局部变量类型推断让代码更清晰、更安全

本文基于编写并验证。var“以前写一行 Map,要写三行长泛型;现在一个 var,清爽如初恋。” —— 后端老哥的自我修养今天这篇文章就来瞅瞅用var如何写出的 Java 代码!

2026-03-12 11:49:35 717

原创 一行 instanceof 干掉“先判后转”!JDK 16+ 模式匹配让类型检查优雅到飞起

本文代码基于编写并验证。instanceofinstanceof本文详解 JDK 16 引入的 instanceof 模式匹配(Pattern Matching) 特性——它允许在类型检查的同时声明并自动转型变量,彻底消除“先判后转”的冗余代码。你将看到:如何用一行 if (obj instanceof String s) 替代传统三行样板;为何该特性零运行时开销、天然 null 安全、作用域隔离;以及在事件分发、多态处理等场景中的最佳实践。

2026-03-11 10:21:56 694

原创 record + sealed class = Java 的“类型乐高”!

等价于手写 50 行代码,但只需一行!具体实现(必须是finalsealed或non-sealed关键特性:编译器知道Shape只有这三种子类型,为模式匹配提供基础。

2026-03-10 17:41:41 683

原创 Optional 的正确打开方式:不要只记得 ifPresent 了!

本片主旨为学习Optional从“防御性判空”升级为“函数式链式编程”,写出的优雅代码!

2026-03-09 22:26:12 724

原创 try-with-resources 的隐藏用法:资源管理界的“自动挡”!

今天带你,看看 javac 是如何把编译成“带异常抑制的 finally 块”的——这才是真正的“自动挡”原理!

2026-03-06 16:45:57 654

原创 switch 支持字符串?JVM 背后练了“闪电五连鞭”!

你以为 switch(“hello”) 是语法糖?错!这是 javac 在编译期给你表演的一套“闪电五连鞭”:hashCode → 整型跳转 → equals 校验 → 防冲突 → 安全 fallback!

2026-03-04 16:10:12 677

原创 双大括号({{...}})初始化?小心内存泄漏!

今天这招“双大括号初始化”,看着像武林绝学,实则暗藏“内存泄漏”的回旋踢。用得好,代码一行搞定;用不好,半夜被 OOM 报警叫醒!

2026-03-01 17:34:00 825

原创 Druid 正确使用姿势全解析:Spring Boot 3 + MyBatis-Plus 集成实战指南

版本匹配显式开启真实测试:用SLEEP()测慢 SQL,用DROP测防火墙安全加固:强密码 + IP 限制 + 禁重置持续观察:定期查看监控面板,优化高频/慢 SQLDruid 的强大,不在于“默认就能用”,而在于你是否真正理解并激活了它的全部能力。每一条业务 SQL 的执行轨迹,每一个慢查询的性能瓶颈,每一次危险操作的拦截记录,你才真正拥有了一个可观测、可防御、可优化的数据访问层。📌完整可运行示例代码。

2026-02-28 15:36:07 1322

原创 用 Spring Boot + Three.js + Vue3 构建简单的仓库数字孪生系统

特征说明反例直观可视化用 3D 场景直观展示物理空间仅数字表格,无空间展示实时数据物理环境数据与数字镜像实时同步静态展示,无数据更新交互性支持用户与数字孪生的简单交互(如点击查看)仅被动展示,无用户交互易于部署技术栈简单,部署便捷复杂依赖,部署困难本系统 = 3D 仓库鸟瞰图 + 实时温湿度数据 + 点击交互模型简化:使用基本几何体构建仓库模型,平衡视觉效果和性能场景布局:合理规划仓库、道路、树木等元素的位置,形成完整的园区布局光照设置:添加环境光和定向光,增强场景的立体感标签系统。

2026-02-28 15:28:54 1086

原创 数字孪生与仿真——构建温湿度环境数字镜像

在工业智能化浪潮中,“数字孪生”(Digital Twin)已成为高频热词。只要有个3D模型,能旋转、能缩放,就是数字孪生。这其实是一种误解。真正的数字孪生,不是“看得见”,而是“同步得上、算得准、控得住”。数字孪生是物理实体在信息空间中的动态、高保真、可交互的数字化映射。特征说明反例实时性虚拟体状态随物理体同步更新(秒级甚至毫秒级)静态3D展示,数据每天手动导入双向性不仅“感知”物理状态,还能“反控”物理行为仅监控,无法下发指令模型驱动基于物理/数据模型,支持仿真、预测、优化。

2026-02-27 19:45:56 543

原创 手摸手教你部署工业监控大屏项目——Docker 与 Kubernetes 双方案实战

redis所有操作均在。我在这篇文章中已经提供了详细的在Windows11上安装的方法,本文就在此基础上带大家体验一下在Windows上玩所谓的“云原生”。上车!

2026-02-26 17:43:45 748

原创 让数据“活”起来!用 Java + Vue 3 打造工业监控大屏

但这些成果对用户而言仍是“黑盒”——工程师看到的是日志和 JSON,而车间主任关心的是:“锅炉温度正常吗?即可看到动态曲线,约 10 秒后触发首次告警(温度 > 68℃,参数可调)。✅ 返回标准 HTTP 状态码:404 表示无数据,500 表示解析错误。本文属于专栏 《Java × 工业智能》第 9 篇。生成平滑波动曲线,比纯随机更像真实设备。如果你对这个系列感兴趣,记得关注我哦!,再平滑升级为 WebSocket;为方便演示,我们内置一个模拟设备。支持增量更新,避免整图重绘。,为后续系统集成打下基础。

2026-02-25 21:14:38 804

空空如也

空空如也

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

TA关注的人

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