FakeAmadeus's blog
前言欢迎来到我的个人网站:FakeAmadeus’s Blog。常言道“好记性不如烂笔头”,这个博客正是我践行此道的数字空间,旨在系统梳理并输出我的学习所得与技术思考。 这个站点本身也记录了我的技术演进路径:它历经多次架构重构,从最初的 Spring Boot 2 + Vue 2 动态应用,升级到 Spring Boot 3 + Vue 3,最终演变为如今基于 Hexo 静态生成,并通过 GitHub 与 CloudFlare 全球部署的形态。 第一版:从零到一的实践时间推进到大三下学期,彼时我已系统学完了前端与后端知识,主攻方向是后端技术栈。我迫切需要一个完整的项目来融会贯通所学,恰好这时在B站发现了一个技术栈完全契合的博客项目,便立刻从 GitHub 上拉取代码开始复刻。一位室友还提供了一个闲置的阿里云服务器,这让项目的落地成为可能。 这可以说是我真正意义上第一次“从零到一”独立完成一个项目:没有视频教程,也没有详细文档,只能直面代码和有限的注释。从开发、调试到最终部署上线,我完整地走完了整个流程,让这个项目真正在互联网上跑了起来。 相关文章链接 Hello World ...
2025个人博客搭建指南
前言我的博客之前一直部署在个人购买的服务器上。由于前端和后端都是自己实现的,为了让前后端能够交互,确实需要一台暴露在外网的服务器。然而,个人维护服务器需要处理很多事情:代码更新后的 CI/CD、HTTPS 证书续签(从 2025 年开始每三个月就要操作一次,非常麻烦)、CDN 配置等等。最近服务器刚好到期,我便开始思考:个人博客真的需要这么复杂吗?答案是否定的。只要我接受无后端架构,市面上就有很多成熟且免费的解决方案。经过一番调研,我决定采用以下关键词来搭建新的博客:Hexo、GitHub、CloudFlare。 静态博客框架 - Hexo程序员的文章通常以 Markdown 语法为基础,市面上有很多支持 Markdown 的静态博客框架。我选择 Hexo 主要是因为其主题 Butterfly 比较符合我的审美。本文并非从零开始的部署教程,Hexo 和 Butterfly 的官方文档已经非常详细,建议直接参考它们来了解如何使用。 托管仓库 - GitHub这一点无需多言。为了实现 CI/CD,自然需要将代码和配置托管在公网上。由于后续会依赖 CloudFlar...
MySQL 分页排序陷阱
背景今天在线上遇到一个 BUG,具体表现可以概括为:在一个分页查询中,某一个数据无论在第几页都无法查询到,但借助关键词搜索却可以查询出来。 分析看到这个 BUG 第一时间没有任何想法,只觉得十分奇怪,提取查询的关键 SQL: 123456789SELECT * FROM campaign_agency WHERE itnt_code = 'EGIT' ORDER BY created_at DESC LIMIT ${pageIndex}, ${pageSize}; 表结构其实也维护了 created_at 的排序 12345CREATE TABLE `campaign_agency` (-- INDEX `idx_created_at`(`created_at` ASC) USING BTREE,--); 这个 SQL 一眼看上去也没什么奇怪的地方,逻辑也十分简单,先根据创建时间排序然后分页。 是不是分页参数出了问题?代码里面其实是借助 PageHelper 来实现的分页,基本可以肯定参数是没问题。 既然参数没问题...
Word 模板处理经验
前言最近笔者在公司内部分享了一下个人处理 Word 模板的技巧,公司内部对文章质量比较满意,故搬运到个人的博客上,希望能帮助到有缘人。 1、流程梳理系统中的 Output Service 专注于提供 Output 的配置能力和打印能力,每个 Word 模板的打印流程可以简化为以下几步 flowchart TD Start([开始]) --> loadTemplate[读取 Word 模板] loadTemplate --> loadRenderParams[读取渲染参数] loadRenderParams --> poiTlRender[POI-TL 根据模板和参数渲染 Word] poiTlRender --> asposeConvertPDF[Aspose 将渲染好的 Word 转换为 PDF] asposeConvertPDF --> End([结束]) POI-TL 免费且开源的,Aspose 付费且闭源。 注:Output Service 的渲染参数依赖于外界传入,系统中将所有的渲染参数都格式化成...
LeetCode - 移除元素
前言最近在复习数据结构与算法,虽然一下子就想到了题目的关键做法:双指针,但是被边界条件硬控太久了,瞄了一眼官方题解,对边界处理比较妙,故反思一下。 题目链接:27. 移除元素 第一次 AC 代码12345678910111213141516171819202122232425class Solution { public int removeElement(int[] nums, int val) { int ans = 0, left = 0, right = nums.length - 1; while (left < right) { if (nums[left] != val) { ans++; left++; } else { while (right > left &...
Spring IoC Container
前言作为一个 Java 程序员,平时打交道最多的自然是 Spring,正逢最近有空,借助源码和官方文档仔细温习一下 Spring IoC 容器。 本文中贴出的 Spring 源码均是基于 Spring 6.2.12 IoC 容器基本概念个人理解上来说应该拆分为 IoC(控制反转) 和容器: 容器:屏蔽掉所有的细节的话,可以用 Map 的概念来代指,简单来说就是我告诉你我需要什么你就给我什么。 控制反转:把对象创建和依赖管理的控制权从程序内部转移到外部容器,简单来说就是本来你(对象)自己 new 对象,现在变成别人(容器)给你 new 好送来。 IoC 容器以 Bean 为单位管理应用程序组件,为了后续解读源码方便,最先应该了解的就应该是 Bean 的生命周期。 Bean 生命周期个人理解是五个阶段:定义、实例化、依赖注入、初始化和销毁 定义:通过 BeanDefinition 定义 Bean 的基本配置信息,可以是 Class 也可以是 XML,我接触到的项目都是通过 Class 来定义的。 实例化:通过 BeanDefinition 中的配置信息来实例化 Bean,如...
Groovy OOM
前言前段时间主导了系统整体的框架升级,包括但不限于 Spring、Spring Boot、Gradle、Groovy、Java 等,由于现在的 AI Coding 发展迅速,所以整体升级过程还是比较顺畅。将升级代码 Merge 之后,项目构建时会偶现 OOM 导致编译失败的现象,但奇怪的紧接着再点下构建又好了。起初还以为是偶尔服务器资源不够,经过一阵子观察之后发现没有那么简单,多半是升级带来的后遗症,故尝试解决。 分析过程既然遇到的是 OOM,第一时间还是得想办法弄到内存文件和构建参数。 内存文件如下: 构建参数如下: 1234org.gradle.daemon=trueorg.gradle.jvmargs=-Xmx2048m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -Dfile.encoding=UTF-8org.gradle.parallel=trueorg.gradle.configureondemand=true 虽然注意到 ConcurrentSoftCache 的大小有点不对劲,但是构建参数中预留的...
分布式共识算法——Raft
前言一个小而精致的Raft算法演示网站:Raft (thesecretlivesofdata.com) Raft概念Raft是工程上使用较为广泛的强一致性、去中心化、高可用的分布式协议。遵从此协议的分布式集群会对某个事情达成一致的看法,即使是在部分节点故障、网络延时、网络分割的情况下。 Raft基础 一个Raft集群一般包含奇数个服务器node,通常是五个,这代表着整个系统容忍2个节点失效(2 * n + 1)代表总node数的话,n就代表能够容忍的最大宕机node数。 Raft是基于Paxos算法的,Raft拥有Paxos相同的功能,却拥有简单的理解难度和实用程度,Raft在同一个term当中只会存在一个leader,而Paxos可能存在多个leader。 Raft的过程都是在寻求集群中大多数服务器的同意,比如Leader Election,只要有半数以上的服务器同意一个服务器成为Leader,那么这个服务器就会晋升为Leader。再比如一个更新请求进入集群,只有当集群中半数及以上的服务器都能完成这个更新操作的时候才会返回操作成功。这也说明了为什么Raft集群总是要保持奇数个 ...
Hello World
欢迎光临我的个人博客:FakeAmadeus’s Blog 🙋♂️打个招呼大家好,我是 FakeAmadeus,目前是一名准大四学生,正在向后端开发方向发展。主要使用的编程语言是 Java,同时也因 Go 语言在后端领域的流行而对其有一定了解。这个博客项目是我首次从零开始独立完成的项目,通过研究 GitHub 上的开源代码,我学习了如何设计一个合理的博客系统,并亲自完成了设计、开发、测试与部署的全过程。 💡 博客技术总结前端: Vue + Vuex + Vue Router + Axios + Vuetify + Element UI + ECharts + Nginx 后端:Spring Boot + MyBatis-Plus + MySQL + Docker + Spring Security 开发工具:IntelliJ IDEA、VS Code 服务器:阿里云 CentOS 7(1核2G配置) 本博客的后端完全由我自主开发,前端则基于风宇提供的博客模板进行了适配和修改。该项目主要用于巩固我所学的后端技术,并在实践中发现并弥补知识盲区。由于个人技术与经验尚在积累中,后端...
