Hexo常用命令
hexo g hexo g 是 hexo generate 的缩写,用于生成静态文件。执行此命令后,Hexo 会解析 Markdown 文件以及其他相关文件,并将它们转换为 HTML 文件,最终存储在 public 目录中。这个过程是 Hexo 工作流程中的关键步骤,因为只有生成了静态文件,才能在本地预览或部署到远程服务器上。 hexo s hexo s 是 hexo server 的缩写,用于启动本地服务器。执行此命令后,Hexo 会在本地启动一个服务器,通常默认的访问地址是 http://localhost:4000/。这个命令非常有用,因为它允许你在编写和修改文章或主题时实时预览网站的效果。只需在浏览器中打开该地址,就可以看到你的博客的当前状态。如果在服务器运行期间对文章或主题进行了修改,只需刷新页面即可查看更改后的效果。 hexo d hexo d 是 hexo deploy 的缩写,用于部署你的网站。执行此命令后,Hexo 会将 public 目录中的静态文件上传到你指定的远程服务器或存储服务上,如 GitHub Pages、GitLab Pages...
OAuth2介绍
OAuth 2.0(简称OAuth2)是一个开放的授权框架,允许第三方应用在不获取用户密码的情况下,获得用户的授权访问其资源。它通过提供一种标准化的方法,让用户能够授权一个应用访问另一个应用上的数据,而无需将凭证(如用户名和密码)直接传递给第三方应用。OAuth2的核心是通过授权服务器来管理授权流程,并向客户端应用发放访问令牌(Access...
自定义限流注解
自定义限流注解一、定义注解类:Limit12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849package com.agan.limit.aop;import java.lang.annotation.*;import java.util.concurrent.TimeUnit;/** * 自定义限流注解 * * @author weicj * @since 2025.01.24 */@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD})@Documentedpublic @interface Limit { /** * 资源的key,唯一 * 作用:不同的接口,不同的流量控制 */ String key() default ""; /** * 1秒内最多的访问限制次数 */...
seata简介
Seata 分布式事务模式全解析:AT、TCC、Saga、XA一、AT 模式(Auto Transaction)1.1 核心原理12-- 数据更新示例UPDATE product SET stock = stock - 10 WHERE id = 1; 两阶段优化:第一阶段直接提交本地事务并生成逆向 SQL(undo log),第二阶段异步删除日志或执行补偿 全局锁机制:通过 TC(事务协调器)管理行级全局锁,防止脏写 1.2 工作流程1.3 适用场景 ✅ 常规电商业务(订单、库存) ✅ 基于关系型数据库的微服务架构 ✅ 最终一致性要求的业务场景 1.4 优缺点 优点 缺点 无代码侵入 仅支持 SQL 数据库 自动生成补偿逻辑 全局锁可能引发性能瓶颈 快速失败机制 需处理数据镜像校验问题 二、TCC 模式(Try-Confirm-Cancel)2.1 核心原理123456789public interface OrderTccService { @TwoPhaseBusinessAction(name =...
单例模式
单例模式是一种常见的设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。在Java中,有多种实现单例模式的方式,每种方式都有其优缺点,特别是在并发环境下。以下是几种常见的单例模式实现方式及其并发问题的解决方案: 1. 饿汉加载(Eager Initialization)123456789public class Singleton { private static final Singleton INSTANCE = new Singleton(); private Singleton() {} public static Singleton getInstance() { return INSTANCE; }} 优点: 实现简单。 线程安全,无需额外的同步机制。 缺点: 实例在类加载时创建,可能会浪费资源,尤其是当实例化成本较高且实际使用频率较低时。 并发问题: 由于实例在类加载时创建,不存在并发问题。 2. 懒汉加载(Lazy...
分布式事务seata测试用例
分布式事务seata测试用例项目地址:https://gitee.com/weicj0426/demo-seata下载项目后按照如下操作 一、新建数据库数据库初始化脚本(这里使用的是mysql8):./db 目录下,数据库字符集:utf8mb4 ,排序规则:utf8mb4_general_ci 创建数据库:seata 并执行 db/seata.sql 脚本 创建数据库:seata_account 并执行 db/seata_account.sql 脚本 创建数据库:seata_order 并执行 db/seata_order.sql 脚本 创建数据库:seata_storage 并执行 db/seata_storage.sql 脚本 二、启动nacos服务在 nacos-2.1 目录下 进入 nacos/bin 目录,执行startup.sh启动nacos服务 1.\startup.cmd -m standalone 三、启动seata服务 进入 seata/conf 目录下...
java开发常用设计模式
在 Java 开发中,设计模式是解决常见问题的经典方案。以下是 Java 开发中常用的设计模式,结合实际应用场景和代码示例进行说明: 一、创建型模式1. 单例模式 (Singleton Pattern) 用途:确保一个类只有一个实例,并提供全局访问点。 场景:数据库连接池、线程池、配置管理类。 示例: 123456789101112public class Singleton { private static Singleton instance; private Singleton() {} // 私有构造函数 public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; }} 2. 工厂模式 (Factory...
设计模式的六大原则
设计模式的六大原则是面向对象设计的基石,它们指导我们如何编写可维护、可扩展和灵活的代码。以下是六大原则的详细说明和示例: 1. 单一职责原则 (Single Responsibility Principle, SRP) 定义:一个类应该只有一个引起它变化的原因,即一个类只负责一项职责。 优点:降低类的复杂度,提高可读性和可维护性。 示例: 1234567891011121314151617181920212223// 违反SRP的示例class User { public void login(String username, String password) { // 登录逻辑 } public void saveToDatabase(User user) { // 数据库保存逻辑 }}// 符合SRP的示例class User { public void login(String username, String password) {...
缓存一致性问题
Java 项目中如何保证缓存一致性在 Java 项目中保证缓存一致性是一个复杂但关键的问题,尤其是在高并发场景下。以下是常见的解决方案和最佳实践,结合策略分类和具体实现示例。 一、核心策略分类1. 旁路缓存模式(Cache-Aside)123456789101112131415// 读操作示例public Data getData(String key) { Data data = cache.get(key); if (data == null) { data = db.load(key); cache.put(key, data); // 可能存在问题(见后文优化) } return data;}// 写操作示例public void updateData(String key, Data newData) { db.update(key, newData); cache.delete(key); // 先更新DB再失效缓存} 2....
npm install 依赖冲突
通过增加参数–legacy-peer-deps解决npm install –legacy-peer-deps 参数详解npm install --legacy-peer-deps 是一个 npm 命令选项,用于在安装依赖时启用对旧版 peerDependencies 的支持。这个选项主要用于解决在较新版本的 npm 中,peerDependencies 行为改变导致的兼容性问题。 1. peerDependencies 的背景peerDependencies 是 npm 中的一种依赖类型,用于声明一个包依赖于其他包的特定版本,但这些依赖不会自动安装。它们通常用于插件或库,这些插件或库需要与宿主项目中的其他包一起工作。 例如,一个插件可能需要与特定版本的框架一起工作,但它不会自动安装这个框架,而是依赖于宿主项目已经安装了这个框架。 2. --legacy-peer-deps 的作用在 npm 7 及更高版本中,peerDependencies 的行为发生了变化。默认情况下,npm 会自动安装...