Hello World
Welcome to fallensakura715’s first post.
Uptime Kuma,颜值与实力并存的开源监控神器
市面上有许多成熟的监控服务,比如 UptimeRobot 或 StatusCake,但它们往往存在免费版限制(如监控频率低、数量少)或者界面老旧、功能收费等问题。至于 Zabbix 或 Prometheus,对于轻量级需求来说,配置又显得过于厚重。 那么就得请出一款开源、免费、界面现代且功能强大的自托管监控工具——Uptime Kuma。 什么是 Uptime Kuma?Uptime Kuma 是一个由开发者 Louis Lam 编写的自托管监控工具。它的定位非常清晰:做一个像 UptimeRobot 样子的自托管监控工具,但要在 UI 和体验上更进一步。 它基于 Vue 3 和 Node.js 构建,拥有极具现代感的响应式界面(Material Design 风格),并且支持中文。 它可以用来监控服务,设置定时任务(自动签到),平台保活,消息推送等等。 为什么选择 Uptime Kuma?Uptime Kuma 凭借以下几个核心优势成为了我的首选: 极其丰富的监控类型不仅仅是简单的 Ping 或 HTTP 请求,它支持多种协议: HTTP(s):支持关键字检测、重定向检查。...
Spring 中 @Transactional 的生效条件与失效场景
某天订单系统出现了一个数据不一致问题:用户支付成功了,但订单状态没更新,优惠券却已经被核销。排查后发现,开发同学在 Service 中写了一个内部方法调用, @Transactional 悄无声息地失效了。 这类问题在实际开发中屡见不鲜。要彻底理解 @Transactional 为何失效,我们必须先搞清楚它是如何生效的。 @Transactional 的原理声明式事务@Transactional 的本质是 AOP 代理 + 事务拦截器。理解这一点是分析所有生效/失效场景的基础。 当我们在方法上标注 @Transactional 时,Spring 并不会对我们的代码做任何修改。它的魔法在于 代理模式。 Spring 在启动时会扫描所有带有 @Transactional 注解的 Bean,然后为这些 Bean 创建一个代理对象。当外部调用这个 Bean 的方法时,实际上调用的是代理对象,而不是原始对象。代理对象会在调用真实方法前后插入事务管理的逻辑。 没有代理时的调用链: 1调用方 → 目标对象.方法() 有代理时的调用链: 1调用方 → 代理对象.方法() → 开启事务...
Spring 是如何利用“三级缓存”解决循环依赖的?
什么是循环依赖循环依赖就是你需要实例化 A 的时候,A 需要实例化 B ,实例化 B 又需要 A 的实例。这就像是一个“死锁”或者“无限递归”的过程。 在 Java 开发中,如果我们写出如下代码,必然会报 StackOverflowError: 12345678public class A { private B b; public A() { this.b = new B(); } // 构造器里循环依赖,死锁}public class B { private A a; public B() { this.a = new A(); }} 但在 Spring 中,使用 @Autowired 进行属性注入时,神奇的事情发生了: 1234567891011@Servicepublic class ServiceA { @Autowired private ServiceB serviceB;}@Servicepublic class Service...
拒绝 if-else:基于 DDD 与状态机的订单业务
作为一名后端开发者,你一定看过这样的代码:比如你要写一个订单业务,在 OrderService 里写了一堆 if-else 来判断订单能不能发货、能不能退款。随着业务越来越复杂,这些 if 就像面条一样缠在一起,改一个地方崩三个地方,这种代码非常不健康。 我们要用 DDD(领域驱动设计) 的思想,配合 状态机模式,让你的业务代码更健壮。 背景假如你有个订单业务,订单有以下几种状态: CREATED: 待支付 PAID: 已下单,待接单 ACCPETED: 已接单 DELIVERED: 已送出 COMPLETED: 已完成 CANCELLED: 已取消 REFUNDED: 已退款 用户事件: 支付: 把 CREATED 变成 PAID。 收货: 把 DELIVERED 变成 COMPLETED,或者把 CREATED 变成 CANCELLED 。 退款: 把 某一状态 变成 REFUNDED。 以前我们是怎么写的:这是典型的“三层架构”写法。 Order.java (实体类,只有Getter/Setter) 12345678// 这就是所谓的“贫血模型”,它只...
HTTP、Cookie与OAuth认证:API逆向与后端数据的抓取
你是否遇到过这种情况:在网页上看到了一堆有用的数据(比如数据表单、排行榜、或者社交媒体评论),想要把它们保存下来分析,但手动复制粘贴太慢了? 这时候,你需要的是直接与后端服务器对话,从后端抓取数据。 很多人把这叫做“写爬虫”,但更专业的说法是API 逆向或后端数据抓取。今天,我们就抛开复杂的各种自动化浏览器工具(如 Selenium、Playwright),回归本质,聊聊如何像浏览器一样,通过代码直接向服务器索要数据。 我将以获取 PTA 排行榜 (视奸小登进度) 和 反代 Antigravity 的 API 为例。 前端是怎么和后端通信的?HTTP 协议浏览器和服务器之间的交流是基于 HTTP 协议(HyperText Transfer Protocol)的。 客户端/浏览器: “我要请求一个 API 获取数据。” —— 请求 (Request) 服务器: “好的,这是您的数据。” —— 响应 (Response) WebSocket 协议WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它让服务器能够主动向浏览器推送数据。 握手阶段(HTT...
使用 Cloudflare Tunnel 给 Huggingface Space 自定义域名
Huggingface 其实也是个大善人,有免费的 2c 16g 的 space 让你免费用。 美中不足的是普通版不能自定义域名,那么就用 cf tunnel 给他反代一下。 Cloudflare Workers 也可以反代抱抱脸空间,但是会占你访问额度,也有CPU时间限制。。。如果你需要 Websocket 也有点麻烦。。。 更新 [!WARNING]仅仅打包成镜像仍然有被封空间的危险! 可以套一层 nginx ,在7890端口伪装静态页面main.conf 123456789101112131415server { listen 7860; listen [::]:7860; server_name _; location / { root /usr/share/nginx/html; index index.html; } location /health { return 200 'OK'; add_header...
52.63km,10万步:我用双脚丈量了峨眉山的全程
“别人问我为什么要走完全程?我说,山就在那里,而这只有区区五十公里。” 挑战的开始起因其实很偶然。在逛“两步路”APP时,无意间发现了一条峨眉山的“VIP路线”(懂的都懂,逃票进山路)。 因为这条路线的特殊性,下山时无法购买景区大巴车票。我当时想都没想,心一横:既然坐不了车,那就干脆走下去。五十多公里,在地图上看起来也就是一截指头的长度,没什么大不了的。 毕竟我都能跑 42.195 的马拉松。 后来的事实证明:确实“没什么大不了的”。 身体的勋章在开始叙述细节前,先晒出这枚属于我的勋章: 总里程: 52.63 公里 总步数: 100,000+ 步 累计爬升: 4137 米 耗时: 21h 消耗热量: 7832 kcal 52.63 km 轨迹图 4137 m 累计爬升 爬升的虐点:永无止境的石阶一开始遇到了拦路泼猴,好在被人用弹弓赶走了。 很多人说“九十九道拐”是极限,但对我来说,那只是热身。真正让人崩溃的是洗象池前后的那段路。真是永无止境的爬升。 石阶似乎永远没有尽头,每走几步就要停下来大口喘气,肺部像是在拉风箱。最后我甚至都想用雪山步一步一步...
使用 Cloudflare R2 零成本搭建个人图床
在写博客或者维护网站时,图片的托管一直是个让人头疼的问题。放在本地会增加 Git 仓库体积,使用公共图床又担心随时“跑路”。今天介绍如何利用 Cloudflare R2 搭建一个高速、稳定且几乎免费的个人图床。 另外,对象存储在折腾 serverless 的时候也是不可或缺的。 什么是对象存储?在开始之前,我们需要了解什么是对象存储。 简单来说,对象存储是一种专门为大规模非结构化数据(如图片、视频、备份文件等)设计的存储架构。与传统电脑上的“层级文件系统”(文件夹嵌套)不同,对象存储将数据作为“对象”进行管理: 对象(Object):包含数据本身、元数据(Metadata)和全局唯一的标识符(ID)。 桶(Bucket):存放对象的容器。 特性:它具有极高的扩展性和可靠性,通过 API 或 URL 直接访问,非常适合作为网站的静态资源存储。 常见的对象存储服务有亚马逊的 AWS S3、阿里云的 OSS 和腾讯云的 COS。 什么是 S3 API ?AWS S3 (Simple Storage Service) 的 API 是目前云存储行业的事实标准。绝大多数的对象存储服务(包...







