- 博客(29)
- 收藏
- 关注
原创 发令台 GUNSTART:从业务闭环到 Spring Cloud Alibaba 领域微服务
• 公开排名 / 完赛统计:复杂窗口函数与 JOIN 放在 result 侧(共享库只读),对外路径仍是 /api/public/rank/{eventId}、/api/public/event/{id}/stats。• 对外路径尽量不变:前端仍调 /api/public/、/api/event/ 等相对路径,由 Gateway 按更具体的 Predicate 转发。前端 api.js 默认同源空 aiBase,即走 http://localhost:8081/api/ai/chat。
2026-11-04 19:37:31
803
原创 SpringBoot+Redis+AI旁路,打造可复用的赛事系统毕设
做赛事类系统,最容易陷入「只做后台 CRUD」或「堆概念全线崩盘」两个极端。本文以「发令台 GUNSTART」为例,记录一条第三条路:业务闭环优先、外部能力可插拔、新技术旁路接入。全文包含版本与环境清单、名额防重与 Shiro 过滤器链等核心代码、以及一份与仓库现状逐项对账的工程化说明——适合当作毕设复盘,也适合当作同类管理系统的起步模板。
2026-11-03 11:56:27
317
原创 基于 Spring AI 的智慧健身管理系统云端部署实践
系统面向健身房的会员管理、课程预约、训练计划生成与智能问答等场景,后端采用 Spring Boot 3 与 Spring AI 框架,使用 Ollama 本地部署的 bge-m3 模型完成文本向量化,结合 Redis 的 RediSearch 模块实现健身知识库的语义检索,业务数据持久化到 MySQL,大模型对话能力则调用在线 API 以节省服务器资源。其二,在本地开发电脑上关闭 Ollama 服务,完全不影响云端服务器上 AI 功能的运行,因为云端应用连接的是云端服务器本机的 Ollama。
2026-11-02 11:12:30
560
原创 《Redis 删除策略详解:过期键清理与内存淘汰》
Redis 的删除策略围绕“有限内存”与“过期数据”两个核心约束展开:过期键通过惰性删除与定期删除组合清理,内存耗尽时通过淘汰策略保底,大 key 删除用 UNLINK 降低阻塞风险。Redis 实际采用的是“惰性删除 + 定期删除”的组合方案:惰性删除保证被访问到的过期键一定被清除,定期删除作为兜底,清理那些长期不被访问的过期键。定期删除用于弥补惰性删除的不足。这也是为什么有时明明给键设置了过期时间、内存却下降不明显——因为惰性删除只有在键被访问时才会真正删除,未被访问的过期键仍可能短暂占用内存。
2026-10-23 14:05:19
271
原创 一文入门 Docker:从“在 Linux 上装软件”到容器化部署 Nginx
3. 国内拉取 Docker Hub 镜像经常超时,可在 /etc/docker/daemon.json 中配置 registry-mirrors 镜像加速后重启 Docker。本文基于 Docker 入门课程整理,完整覆盖:Docker 是什么、Client/Server 架构、镜像 / 容器 / 仓库三大核心组件、CentOS 安装步骤、常用命令,以及用 Docker 跑 Nginx 并部署静态网站的全流程实战。| +----------+ 运行 +--------------+ |
2026-11-06 19:23:03
327
原创 MySQL 视图、存储过程与触发器超详解:虚表、预编译与隐式执行的取
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的 SQL 语句集,存储在数据库中,经过第一次编译后,再次调用不需要重复编译;用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。SQL 语句集存储在数据库中通过名字 + 参数调用。面试点:MySQL 的 "预编译" 要打个折。课件里 "再次调用不需要重复编译" 这句话,在 Oracle 里是严格成立的(存储过程编译后以字节码驻留)。而 MySQL 的存储过程并不缓存每条语句的执行计划。
2026-11-06 19:21:20
161
原创 Linux 服务器必知:Vim 编辑、网络配置与防火墙安全一篇搞定
Vim 三模式切换:Esc 回一般模式,i 编辑,: 命令行,wq 保存退出IP 地址:网络 ID + 主机 ID,ABC 三类地址要分清网络配置:ifconfig 临时查看,改配置文件永久生效防火墙:SELinux、iptables、firewalld 三层,调试阶段按需关闭,云服务器别忘了安全组这些都是部署项目时每天都要用的操作,练熟了以后服务器上手就快了。本文为个人学习笔记整理,如有错误欢迎指正。
2026-11-05 19:13:38
220
原创 Linux 进程与权限管理:从入门到实战的完整指南
进程是程序在数据集上的一次动态执行过程,是操作系统进行资源分配和调度的独立单位。简单说:程序是静态的文件,进程是跑起来的程序。Linux 的命令体系看似繁杂,但只要抓住"一切皆文件"这个核心思想,再结合日常多敲多练,很快就能上手。这份笔记覆盖了从文件查找、文本处理、进程管理到用户权限的核心知识点,也是我这阶段学习的总结。遇到不懂的命令,先man一下进程相关先再kill权限问题先看ls -l,再用chmod或chown解决希望这篇笔记对你有帮助,也欢迎交流指正!
2026-11-05 11:29:45
253
原创 Linux 入门:从起源到文件管理基础
Linux 内核开源,众多厂商基于内核制作不同发行版;终端交互,Shell 充当命令解释器;Linux 一切从根出发,熟记核心目录的作用;熟练掌握 ls、cd、mkdir、cp、rm、mv 基础文件命令;tar 打包压缩重点记住参数互斥规则,日常用来做文件备份。后续我们可以继续学习 Linux 权限、用户管理、文本编辑 vim 等内容。
2026-11-04 10:07:50
31
原创 Github Copilot 实战落地:从代码辅助到研发效能跃迁
每天坐在编辑器前,最耗时的往往不是思考核心算法,而是那些重复性的机械劳动:手写 boilerplate 代码、回忆生疏语言的语法细节、或者对着没有文档的遗留系统猜谜。很多开发者都有过这样的时刻——明明逻辑在脑海里已经清晰无比,手指却在键盘上犹豫,因为要花费大量精力去处理格式、类型定义或是 API 的参数顺序。这种“上下文切换”的摩擦成本,正在悄悄吞噬我们的创造力和专注度。随着智能编码助手的普及,这种情况正在发生根本性的改变。
2026-11-03 19:56:04
153
原创 MySQL 索引超详解:从底层 B+ 树到面试高频考点
在 MySQL 中,访问表数据只有两种方式:方式原理代价顺序访问全表扫描,从头到尾逐行匹配数据量大时 O (n),极慢索引访问先查索引树,再定位到行记录一般 O (log n),快索引的本质,是一棵排好序的、存储了列值与行指针对应关系的数据结构。它以空间换时间,让数据库不用全表扫描就能定位到目标行。可以把索引比作新华字典的音序表:要查 "库" 字,如果不用音序,得从字典第 400 页逐页翻;但如果先查音序表(10 多页),几秒钟就定位到了。索引就是这个 "音序表"。最左列必须出现。
2026-11-02 12:19:24
347
原创 《滴滴后端开发一面面试复盘—— 22 道高频题详解 · JVM / 线程池 / MySQL / 设计模式 / Spring Boot / 手撕算法》
虚拟机栈描述的是 Java 方法执行的内存模型,它也是线程私有的,生命周期与线程相同。它与虚拟机栈所不同的是,虚拟机栈为虚拟机执行 Java 方法(也就是字节码)服务,而本地方法栈则为虚拟机使用到的 native 方法服务。由于每个线程都有独立的程序计数器,各线程之间的计数器互不影响、独立存储,因此它属于线程私有的内存区域。程序计数器不会出现 OutOfMemoryError 的情况,因为它的生命周期与线程一致,线程启动时创建、线程结束时销毁,其占用的内存空间非常小且固定。jstack 看线程栈。
2026-10-20 19:22:07
231
原创 《java Condition条件变量》
Condition是包下的,用来替代传统的,配合Lock(通常是)使用,实现线程间的等待 / 唤醒协作。
2026-10-19 14:51:11
172
原创 《 代理模式》
静态代理= 编译期写死,代码重复、难维护;JDK 动态代理= 运行期基于接口生成代理,灵活但要求有接口;CGLIB 动态代理= 运行期基于继承生成子类,无接口也能代理。核心思想一致:代理在目标方法前后 "插入" 增强逻辑,从而实现对已有类的无侵入扩展。
2026-10-19 12:12:18
317
原创 Redis
对这些数据类型的操作都是原子的 —— 追加字符串、增加哈希值、推元素入列表、算集交并差、取排序集最高成员等。,用作数据库、缓存、消息代理和流引擎。:开源(BSD 许可)的。
2026-10-16 18:54:45
101
原创 HTTP协议
HTTP 协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于服务器与客户端浏览器之间传输超文本数据(文字、图片、视频、音频)的应用层协议。HTTP 是一个属于应用层的协议,同时也是一个双向协议,基于浏览器 - 服务器架构模型进行工作。浏览器与服务器之间基于 http 协议进行通信,浏览器发送请求数据给服务器,服务器根据接收到并处理请求后,向浏览器发送响应信息。
2026-10-16 18:33:46
486
原创 Spring事物的传播行为有哪些?
Spring 通过 @Transactional(propagation=...) / TransactionDefinition 定义了 7 种事务传播行为
2026-10-13 18:23:19
134
原创 synchronized的理解和锁升级(给static方法加锁和非static方法加锁有什么区别)
底层:基于对象头 MarkWord 实现,依赖 JVM 的 Monitor 对象,属于。1、修饰普通非 static 方法。2、修饰 static 静态方法。,解决多线程并发安全问题。Class 对象全局唯一,,锁只能升级,不能降级。
2026-09-01 18:38:50
180
原创 线程的创建方式 线程的状态 什么是线程安全?
多线程环境下,多个线程同时操作共享资源,程序运行结果和预期结果一致,不会出现数据错乱,就是线程安全;反之就是线程不安全。保证线程安全常见手段synchronized同步锁,保证同一时间只有一个线程执行临界区代码ReentrantLock显式锁使用原子类AtomicInteger(CAS)使用不可变对象,不修改共享变量线程封闭:ThreadLocal,每个线程自己一份变量,不共享线程安全类:String、Integer不可变;
2026-08-19 21:57:58
206
原创 2. 单例模式怎么创建?(双重检查锁和静态内部类),如何防止反射破坏单例?
volatile作用:禁止CPU指令重排序 new对象底层三步:1分配堆内存 2初始化对象 3引用赋值 重排序可能导致3提前执行,其他线程拿到半初始化残缺对象,volatile杜绝该问题。枚举直接封死这条路。枚举序列化、反序列化由 JVM 特殊处理,永远返回同一个 INSTANCE 实例,不会产生新对象。作用:保证一个类在整个程序中,全局只有唯一一个实例对象,并且对外提过一个获取这个唯一实例的方法。普通单例实现,如果实现 Serializable 序列化接口,反序列化会生成全新对象,破坏单例。
2026-08-19 11:41:50
285
原创 什么是红黑树,有哪些特点?
红黑树是自平衡二叉搜索树,通过红黑颜色约束实现平衡,保证增删查 O (logn)。五大性质:①节点红或黑;②根黑色;③NIL 叶子黑色;④红节点子节点必黑,无连续红节点;⑤任意节点到叶子所有路径黑节点数相同。失衡修复依靠变色、左旋、右旋。相比 AVL 旋转更少,适合频繁增删场景。
2026-08-17 21:53:50
224
原创 ThreadLocal为什么会产生内存泄漏?
ThreadLocal 的 ThreadLocalMap 中 Entry 的 key 是弱引用,value 是强引用。当外部 ThreadLocal 强引用置空,GC 可以回收 key;但是 value 仍然被 Entry 强引用。如果使用线程池,线程长期复用不会销毁,Entry 还存在于线程的 map 中,value 对象无法被 GC 回收,产生内存泄漏。弱引用只是保证 ThreadLocal 对象本身可以回收,不能解决 value 的泄漏。最佳实践是使用完毕手动调用 remove ()。
2026-08-14 17:07:19
371
原创 AQS相关问题
维护 state、CLH 双向等待队列、Condition 条件队列,封装线程排队阻塞唤醒,子类实现 4 个 try 方法实现锁。公平、非公平是ReentrantLock 子类实现,AQS 本身没有公平非公平,AQS 提供模板,由子类tryAcquire实现区别。和同步队列是两套独立链表。AQS 是线程同步框架,核心能力:原子管理同步状态、阻塞 / 唤醒线程、提供等待队列模型。2.如果队列有排队线程,新来线程直接放弃抢锁,进入队列尾部排队。1.线程上来先直接 CAS 抢锁,不看队列有没有等待线程。
2026-08-14 16:36:02
170
原创 1. 什么是布隆过滤器?(作用、组成、添加元素流程、查询元素的流程、特点【误判、不支持删除】,优缺点,典型方案:短信黑名单(1000 万手机号过滤)实现思路)
是由空间高效的概率性数据结构,用于判断一个元素。
2026-07-28 17:31:25
215
原创 《HashMap保存一个key-value键值对的过程》
我认为HashMap 保存一个 key-value 键值对的完整过程,这个过程可以拆解为,我会从浅入深讲解,既覆盖整体流程,也点明 HashMap 的核心设计(如哈希计算、数组 + 链表 / 红黑树、扩容等),方便理解记忆。
2026-01-29 19:29:17
830
原创 《String字符串进行==和equals()比较时的差异》
=比较内存地址(是否为同一个对象),equals()比较字符内容(是否字面相同);绝大多数业务场景下,你需要的是判断字符串内容是否相同,因此应该用equals(),而非==;使用equals()时,建议将非空的字符串(如字面量)放在前面,避免空指针异常(如"目标值".equals(变量)
2026-01-22 19:18:39
476
原创 《Java程序从编译到运行的过程》
本文将拆解 Java 程序从编译到运行的完整流程,重点讲清编译期的字节码生成,以及运行期 JVM 的混合执行模式(解释执行 + JIT 编译)。:javac 首先会检查源码的语法合法性(比如少分号、关键字拼写错误)、语义合理性(比如调用不存在的方法、类型不匹配),编译就会终止并抛出明确的错误提示 —— 这是 Java “静态语言” 的核心体现,提前规避基础语法问题。解释执行:逐行将字节码翻译成当前操作系统的机器码,翻译一行执行一行启动快,无需等待编译逐行翻译,高频代码执行效率低。
2026-01-12 17:20:13
809
原创 《Java为什么可以跨平台》
通常的编程语言(比如 C/C++),源码编译后会生成针对特定操作系统的机器码(比如 Windows 下的 .exe 文件),这个文件只能在对应系统运行(Windows 编译的不能直接在 Linux 上跑);而 Java 代码写好后,无需修改,就能在 Windows、Linux、Mac 等不同操作系统上运行,这就是 “跨平台。
2026-01-12 16:55:13
404
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅