😄 在 CentOS Stream 9 上用 Let’s Encrypt 装 HTTPS:一场和证书、浏览器、自己较劲的故事
HTTPS 这玩意儿吧,没装之前你觉得它很神秘,装完之后你会发现——它不神秘,它只是爱给你添戏。 🎭 本文不是官方文档复读机,而是一篇 “真实踩坑纪实 + 人话翻译版 HTTPS 指南”。 适合人群: 会装 Nginx 会写 proxy_pass 但一碰 HTTPS 就开始怀疑人生的人 🧱 一、开局配置(不难,但很关键)你的起点通常是这样: 系统:CentOS Stream 9 🐧 Nginx:已装好,80 能访问 域名:A 记录已指向服务器 这时你心里只有一个朴素愿望: “我就想要个小绿锁 🔒,别整幺蛾子。” ——放心,幺蛾子马上就来。 🧰 二、Certbot 登场(主角出场必有 BGM)安装: 12sudo dnf install -y epel-releasesudo dnf install -y certbot python3-certbot-nginx 然后一行命令: 1sudo certbot --nginx -d yiqiquhuxi.cn Certbot 会非常热情地帮你做四件事: 1️⃣ 验证你是不是域名主人2️⃣ 申请证书3️...
🍏JMM-八大原子操作-3D版
JMM 的 8 大原子操作 JMM 不复杂,它只是规定:线程什么时候能读、什么时候能写、什么时候必须同步。 一、为什么会有“原子操作”在 JMM 中: 主内存:共享数据的唯一权威 工作内存:线程自己的变量副本 线程不能直接操作主内存,所有读写都要被拆解成一组 标准动作。 这组动作,就是 8 大原子操作。 二、8 大原子操作(按实际使用顺序) 1️⃣ read(读取)从 主内存 读取变量的值。 只是“读出来”,还没给线程用。 2️⃣ load(载入)把 read 得到的值,放入线程的 工作内存。 read + load 必须成对出现。 3️⃣ use(使用)线程在执行过程中 真正使用变量。 if、while、计算,全发生在这一步。 4️⃣ assign(赋值)线程给变量 赋新值,但只修改 工作内存中的副本。 主内存此时还不知道。 5️⃣ store(存储)把工作内存中的新值,准备写回 主内存。 还没真正生效。 6️⃣ write(写入)把 store 准备好的值,真正写入主内存。 到这一步,其他线程才有机会看到新值。...
TLS-非对称加密极致-3D版
Q&A:三秒看懂核心Q:公钥是公开的,黑客拿到不就能解密了?A: 错。公钥只能锁门,不能开锁。没私钥(钥匙),黑客只能对着保险箱发呆。 Q:黑客给我个“假挂锁”冒充服务器怎么办?A: 证书就是身份证。浏览器会扫码核实:证书是山寨的,直接红牌罚下。 Q:为什么不全程用公钥加密?A: 太慢。公钥是押运车,只负责送钥匙;芯片(对称密钥)才是跑车,负责拉货。 Q:私钥万一被偷了,以前的数据会被破解吗?A: 现代 TLS 用的是“一次性锁”。就算以后丢了钥匙,也开不了以前的废锁。 Q:时间不对为什么打不开网页?A: 证书会过期。你电脑要是穿越回 1998 年,它会觉得 2024 年的证书是伪造的。 Q:有绿锁就代表网站不是骗子?A: 绝对不是! 绿锁只保证没人偷听,不保证对面坐的是不是大忽悠。 总结TLS 握手本质:用昂贵笨重的保险箱,护送一把极速轻便的钥匙。
Spring AOP 参数绑定:从 0 到会(一页就懂版)😄
适用人群: 知道 Spring AOP 是啥 写过 @Around / @Before 但对「注解是怎么传进 Advice 的」有点懵 这篇文章不默认你已经懂,我们从「注解怎么写」开始。 0️⃣ 先准备一个“被切的注解”(否则一切都是空谈)123456789@Target({ElementType.METHOD, ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)public @interface Auth { String value() default ""; boolean required() default true;} 关键点(只记 2 个): @Retention(RUNTIME): 没这个,AOP 在运行时根本拿不到注解 METHOD / TYPE: 决定你后面能不能用 @annotation / @within 1️⃣ 再看一个“被切的方法”(完整上下文)12345@Auth("admi...
为什么再多数据,也到不了 AGI?
先说结论: 如果 AI 的学习方式和主体结构不发生根本变化,那么不管堆多少数据、上多少算力,都只能得到“越来越像人的工具”,而不是“真正的通用智能”。 这不是技术乐观或悲观的问题,而是范式是否走对路的问题。 一、一个正在误导整个行业的幻觉最近几年,一个声音越来越大: “等数据再多一点、模型再大一点,AGI 会自然出现。” 这个判断听起来合理,却极其危险。 因为今天的大模型确实太强了: 能写代码 能写论文 能做推理题 看起来甚至“会思考” 于是很多人下意识得出结论: 现在的问题只是量不够,不是方向不对。 但我要泼一盆冷水: 当下 AI 的成功,本身就是最大的误导。 二、真相是:AI 并没有“在思考”我们先看一个被忽略的事实。 无论模型多大、能力多强,当前 AI 的基本结构始终是: 1输入 → 概率建模 → 输出 它所有“学习”,都发生在训练阶段;而上线之后,只是在做推断。 它不会: 主动提出问题 主动怀疑已有知识 主动修正自己的世界观 它只是: 在人类历史数据构成的高维空间中,找一个“最像人类会说的话”的答案。 这不是理解世界,而是复刻人类表...
🔥 ConfigurationProperties 注解-选对就完事
@ConfigurationProperties 两种用法:选对就完事儿问题配置文件这么写: 1234property: param: high: 180 weigth: 70 怎么优雅地映射到 Java 对象? 方式一:@Component —— 毛遂自荐1234567@Component@ConfigurationProperties(prefix = "property.param")public class PropertyEntity { private Integer high; private Integer weigth;} 一句话:自己跳进 Spring 容器,简单但耦合。 特点:依赖组件扫描、配置类耦合 Spring、隐式注册。 方式二:@EnableConfigurationProperties —— 伯乐相马123456789101112// 配置类保持纯净@ConfigurationProperties(prefix = "property.param")publi...
🔥 约定大于配置:让框架替你省掉 80% 的麻烦
📌 一句话总结 👉 你遵守约定,框架就替你干活;你越想自定义,框架越要你解释半天。 🧠 1. “约定大于配置”到底是啥?12345【框架已准备好默认规则】 ↓你只要按规则放文件 / 写类名 / 写注解 ↓【自动生效 ✔】 反之: 12345【你想改规则】 ↓你写更多配置 ↓【复杂度 ↑ 出问题概率 ↑】 一句话:框架给你铺好了高速公路,你别非要自己铲土再修一条小路。 🗂️ 2. 对比更直观:表格上墙! 项目 遵守约定(推荐) 破坏约定(你会哭) 代码量 ✨ 极少 🧱 一坨配置 开发速度 🚀 很快 🐢 像乌龟背锅跑 团队协作 🤝 无需沟通 😵 新人看了直接心梗 可维护性 💚 高 🔥 地狱模式 bug 概率 ⬇️ 低 ⬆️ 高 🧩 3. Spring Boot 经典示例✔ 遵守约定(轻松)12@RestControllerpublic class UserController {} 你写了 2 行,它帮你做 5 件事: 任务 是否自动...
⚙️ Spring Boot × @RequiredArgsConstructor:写出最干净的依赖注入代码
🚀 一、它是干嘛的?@RequiredArgsConstructor 是 Lombok 提供的注解,👉 会自动生成一个包含所有 final 字段的构造方法。 也就是说——只要你把依赖写成 final,Spring Boot 就能自动注入。再也不用写 @Autowired 或手动构造器啦! 🌱 基础示例:123456789101112@Service@RequiredArgsConstructorpublic class UserService { private final UserRepository userRepository; private final MailClient mailClient; public void register(User user) { userRepository.save(user); mailClient.sendWelcome(user); }} 等价于: 123456789101112@Servicepublic class User...
🍃Spring 事件机制:@EventListener用法
读完本文,你能做到:敢用、会用、讲得明明白白。语速不快,信息全到。笑点有,废话无。 🧩 事件是什么?一句话事件 = 我说一句,你听到了你再做事。 👉 发布事件的人 不关心 谁来处理。👉 处理事件的人 不耦合 谁发的。 这就是解耦。 也是优雅。 👫 场景类比(超级好记) 你喊:“开饭啦!”(事件) 你妈、你爸、你弟 都可能来吃(监听器) 你不管谁来,也不关心来不来。 Spring 就是按照这个来的。 🎭 主角三件套 名称 干啥的 类比 自定义事件 你要说的话 开饭啦! ApplicationEventPublisher 扩音器 帮你喊出去 @EventListener 谁听到了谁行动 各自来吃饭 🎯 示例(最小可运行示例)① 定义事件(随便一个类即可)12345public class UserRegisteredEvent { private final Long userId; public UserRegisteredEvent(Long userId) { this.userId = ...
🌈 Wi-Fi的魔法与电磁波的“八卦”指南 ✨
🌈 Wi-Fi的魔法与电磁波的“八卦”指南 ✨ 作者:neoooo(一个被Wi-Fi信号温柔包裹的人) 🏠 开场白:你看不见的Wi-Fi,其实比爱情还浪漫❤️有时候,你刷视频的时候卡顿,不是因为网差,而是因为宇宙在跟你开玩笑。😉 你以为Wi-Fi信号在空气里传?错!它其实是在电磁场的海洋里冲浪🏄♂️。每一次你打开“2.4G Wi-Fi”,就像往宇宙扔了一块小石头,激起一圈圈无形的波——光速传播,优雅且任性。✨ ⚙️ 一、Wi-Fi的灵魂:电子在蹦迪💃别被“2.4GHz”吓到。翻译成人话: 路由器里那些可怜的小电子,每秒抖24亿次! 而且,它们不是乱抖,而是有节奏地嗨舞,像一场严密编排的电子广场舞。🕺💃 这支舞的“鼓点”来自一颗小心脏——石英晶体振荡器。 石英有个“压电效应”的超能力: 加点电,它就颤一颤; 你压一压,它就生电。 于是,电子和晶体开始互相撩拨: “你给我点电,我抖给你看~” 结果——咚!咚!咚!晶体成了节拍器,电子成了舞者,Wi-Fi节奏就此诞生。🎶 💎 二、倍频魔法:让电子嗨到飞起⚡石英晶体振得虽快,但还不够带感。工程师祭出...












