10 2024 档案
摘要:注:建议先阅读 Java 异常分类 Java 中使用自定义异常类,一般是继承 Exception 或者它的某个子类。如果父类是 RuntimeException 或它的某个子类,则自定义异常也是未受检异常;如果是 Exception 或 Exception 的其他子类,则自定义异常是受检异常。 Ja
阅读全文
摘要:总结自:《Java 核心技术第 10 版》 下图是 Java 异常层次结构图: 所有的异常都是由 Throwable 继承而来(注意 Throwable 是类而不是接口),Error 和 Exception 是 Throwable 的直接子类。 Error 类用于描述 Java 运行时系统的内部错误
阅读全文
摘要:SLF4J MDC(Mapped Diagnostic Context)可以帮助在日志中添加上下文信息,从而更好地跟踪和调试应用程序。MDC 允许你将特定于线程的键值对存储在日志上下文中,便于在日志中输出相关信息。 使用步骤 添加依赖:确保你的项目中已经包含了 SLF4J 和相关的日志实现(如 Lo
阅读全文
摘要:基于:SLF4J 框架源码中是如何实现双重锁的? 当我们使用 SLF4J 时,通常通过如下代码获取对应的 Logger: Logger logger = LoggerFactory.getLogger(NoBindingTest.class); 在 LoggerFactory 的 getLogger
阅读全文
摘要:原文:Java 单例模式的 7 种写法中,为何用 Enum 枚举实现被认为是最好的方式? 1、懒汉(线程不安全) public class Singleton { private static Singleton instance; private Singleton() {} // 私有构造函数
阅读全文
摘要:什么是适配器模式 适配器模式中,适配器包装不兼容指定接口的对象,来实现不同兼容指定接口。 SLF4J 中的适配器模式 SLF4J 是一个日志门面系统,其中提供了统一的 Logger 等接口,许多框架都会面向 SLF4J 打印日志,这样就不会和具体的日志框架耦合在一起,框架使用者也就能够很方便地在不同
阅读全文
摘要:总结自:《Head First 设计模式》 简介 适配器的作用是使原本两个不兼容的系统能够兼容起来,比如电源转接口就是一种适配器: 示例 假设有一个 Duck(鸭子)接口,其中有 quack(呱呱叫)和 fly 方法: public interface Duck { void quack(); vo
阅读全文
摘要:基于以下内容总结:从门面模式到 Slf4j、10 分钟讲清楚 Java SLF4J,Java 日志框架的扛把子,从原理到实践 写后端接口的时候,先写一个 Service 接口,这个 Service 接口的实现中可能会调用多个其他 Service 或 Mapper 方法来实现某个业务,对于 Contr
阅读全文
摘要:原文:Java SPI 机制详解 在面向对象的设计原则中,一般推荐模块之间基于接口编程,通常情况下调用方模块是不会感知到被调用方模块的内部具体实现。一旦代码里面涉及具体实现类,就违反了开闭原则。如果需要替换一种实现,就需要修改代码。 为了实现在模块装配的时候不用在程序里面动态指明,这就需要一种服务发
阅读全文
摘要:原文:一个著名的日志系统是怎么设计出来的 1 前言 Java 帝国在诞生之初就提供了集合、线程、IO、网络等常用功能,从 C 和 C++ 领地那里吸引了大量程序员过来加盟,但是却有意无意地忽略了一个重要的功能:输出日志。 对于这一点,IO 大臣其实非常清楚,日志是个很重要的东西,因为程序运行起来以后
阅读全文
摘要:总结自:BV15k4y1k7Ep 简介 一般在开发过程中,通过如下步骤在 SpringBoot 项目中集成 RabbitMQ: 生产者工程: application.yml 文件配置 RabbitMQ 相关信息; 在生产者工程中编写配置类,用于创建交换机和队列,并进行绑定; 注入 RabbitTem
阅读全文
摘要:总结自:BV15k4y1k7Ep 模式说明 Topic类型与Direct相比,都是可以根据Routing key把消息路由到不同的队列。只不过Topic类型Exchange可以让队列在绑定Routing key的时候使用通配符! Topic类型的Routing key一般都是由一个或多个单词组成,多
阅读全文
摘要:总结自:BV15k4y1k7Ep 模式说明 和消费订阅模式相比,路由模式特点: 交换机的类型为 Direct。 队列与交换机绑定时,要指定一个Routing key(路由 key)。 消息的发送方在向 Exchange 发送消息时,也必须指定消息的Routing key。 Exchange 不再把消
阅读全文
摘要:总结自:BV15k4y1k7Ep 交换机 订阅模式示例图: 在简单模式和工作队列模式中,只有 3 个角色: P:生产者,也就是要发送消息的程序。 C:消费者,消息的接受者,会一直等待消息到来。 Queue:消息队列,图中红色部分。 而在订阅模型中,多了一个 Exchange 角色,而且工作过程略有变
阅读全文
摘要:总结自:BV15k4y1k7Ep 模式说明 Work queues与简单模式相比,多了一个或一些消费端,多个消费端共同消费同一个队列中的消息。消费者之间是竞争的关系。 对于任务过重或任务较多情况使用工作队列可以提高任务处理的速度。 代码 Work queues与简单模式的代码是几乎一样的,可以完全复
阅读全文
摘要:首先要有个阿里云账号,可到阿里云登录页注册并登录。 登录后访问短信服务快速学习和测试,其中有逐步介绍如何发送短信: 新增资质 新增资质相当于进行实名认证,资质是申请签名的实名化信息。 申请签名 签名是短信中能代表发送者属性的字段。一般就是公司名字。发送短信时,签名会附加到短信开头。 申请模板 短信是
阅读全文
摘要:原文:MySQL 唯一索引的字段值允许多个 NULL 值存在吗 结论:MySQL innoDB 引擎,设置了唯一索引的列,不仅允许 NULL 值存在,而且允许多个 NULL 值存在。 示例:字段 userCardNum 添加了唯一索引。 证实是允许存在的多个 NULL 值数据的: 解释:因为 NUL
阅读全文
摘要:ProcessEngineConfiguration 和 ProcessEngine ProcessEngineConfiguration:流程引擎配置类。 ProcessEngine:流程引擎。 ProcessEngineConfiguration 封装 ProcessEngine 的配置信息,P
阅读全文
摘要:鼠标左键不灵了,需要用力按才有用。所以用 AutoHotkey 把右 Ctrl 键映射为鼠标左键临时处理一下: #Requires AutoHotkey v2.0 RCtrl::LButton 注意脚本需要 V2 版本的 AutoHotkey。 参考: 重映射按键 (键盘,鼠标和控制器) 按键列表(
阅读全文
摘要:原文:一文理清 nginx 中的 location 配置(系列一) 参考:Nginx location 能否匹配到问号里的参数? 另:可在 nginx.viraptor.info 上测试 location 匹配 前言 location 指令是 nginx 中最关键的指令之一,location 指令的
阅读全文
摘要:基于:xxl-job 项目的默认的用户名密码 用户表为 xxl_job_user,里边只有一条记录,其中的密码是 Md5 加密算法生成的: 要重置密码为 123456 只需要将记录的 password 值设置为 123456 Md5 加密后的值(32 位小写),也就是 e10adc3949ba59a
阅读全文
摘要:原文:XXL-JOB安装及使用教程(保姆级教程) 前言 XXL-JOB 是一个可以在 WEB 界面配置执行定时任务的中间件,支持分布式服务调用。XXL-JOB 本身是一个基于 SpringBoot 的 Java WEB 程序,可以部署多个节点组成集群,我们可以通过下载 GitHub 源码进行部署。
阅读全文
摘要:先运行ip a查看网卡: 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:
阅读全文
摘要:git revert 撤销某次操作,并且会把这次撤销作为一次最新的提交。 假设 Git commit 历史为 A - B - C,此时想要撤回 commit B,可以使用 revert 命令。 执行git revert HEAD^后(HEAD^指向 B),会生成一个新的 commit 记录(命名为
阅读全文
摘要:原文:linux 安装 docker-compose(官网教程) 要在 Linux 上安装 Docker Compose 命令,可以按照以下步骤进行操作: 下载 Docker Compose 的可执行文件。可以使用以下命令下载最新版本: sudo curl -L "https://github.co
阅读全文