Spring Boot 中异常捕获与处理指南
目录 背景 Java 异常分类 示例场景 是否需要显式捕获异常? 是否需要显式往外抛出异常? 哪些异常需要捕获? 最佳实践 总结 1. 背景在 Spring Boot 开发中,异常处理是确保应用程序健壮性和用户体验的关键部分。本文档通过示例代码,讲解异常捕获和抛出的原则。 2. Java 异常分类 异常类型 描述 是否必须捕获 例子 Checked Exception 继承自 Exception(但不是 RuntimeException),编译时强制处理 是(try-catch 或 throws) IOException, SQLException Unchecked Exception 继承自 RuntimeException,运行时异常,不强制处理 否 IllegalArgumentException, NullPointerException 3. 示例场景3.1 服务层代码123456789@Servicepublic class OrderService { public String getOrderDetails(String...
mac关闭zerotier-one
要在 Mac 电脑上关闭 ZeroTier-One,可以按照以下步骤进行: 通过菜单栏图标: 在 Mac 的菜单栏中找到 ZeroTier 的图标(通常是一个圆形的图标)。 点击该图标,然后选择 Quit ZeroTier 以关闭 ZeroTier-One。 使用终端命令: 打开终端(Terminal)。 输入以下命令并按下回车键: 123-- 关闭sudo launchctl unload /Library/LaunchDaemons/com.zerotier.one.plist 对应的开启命令: 123-- 开启sudo launchctl load /Library/LaunchDaemons/com.zerotier.one.plist 强制退出应用程序: 如果你无法通过以上方法关闭 ZeroTier-One,你可以尝试使用 强制退出 功能。 按下 Command + Option + Esc 打开强制退出应用程序窗口。 在列表中选择 ZeroTier-One,然后点击 强制退出。 通过以上方法,你应该能够成功关闭 ZeroTier-One。如果...
Nacos 配置管理:多配置文件加载的最佳实践
目录 什么是 Nacos? 命名空间(Namespace) 多配置文件加载机制 3.1 使用 extension-configs 3.2 使用 spring.cloud.nacos.config.extension-configs 3.3 使用 spring.cloud.nacos.config.import 3.4 使用 share-configs 3.5 在同一个命名空间内加载多个配置文件 处理配置名称冲突 4.1 唯一命名 4.2 使用配置分组(Group) 4.3 显式引用 最佳实践 总结 在微服务架构中,配置管理是一个关键的环节。Nacos 作为阿里巴巴开源的动态服务发现、配置管理和服务治理平台,提供了强大的配置管理功能。本文将深入探讨如何在 Nacos 中实现多配置文件的加载,并提供一些最佳实践,以确保配置的一致性和正确性。 什么是 Nacos?Nacos(Dynamic Naming and Configuration Service)是一个易于构建云原生应用的动态服务发现、配置管理和服务治理平台。它支持多种数据存储方式,如嵌入式数据库、MyS...
equals和== 关系
目录 什么是 == 操作符? 什么是 equals() 方法? == 和 equals() 有什么区别? hashCode() 方法是什么? equals() 和 hashCode() 的关系是什么? 如何正确实现 equals() 和 hashCode()? 为什么 hashCode() 的实现是重要的? hashCode() 的计算通常怎么做? equals() 和 hashCode() 不一致会有什么后果? 总结:如何使用 equals() 和 hashCode()? 🤔 1. 什么是 == 操作符?答:== 用于比较两个变量的值: 🔍 基本数据类型:比较的是它们的值。 123int a = 5;int b = 5;System.out.println(a == b); // 输出: true 🔍 引用类型:比较的是两个对象的内存地址(即它们是否引用同一个对象)。 123String str1 = new String("hello");Str...
OpenAI及二次训练介绍
目录 什么是人工智能(AI) AI的类型 AI的核心技术 市面主流的AI公司和技术 AI的应用领域 AI的未来趋势 OpenAI介绍 OpenAI公司简介 OpenAI主要产品 OpenAI核心概念整理 文本生成模型 助理 嵌入 令牌 Prompt(提示) OpenAI Chat API使用指南 Fine-Tuning介绍-基于API二次训练 基于ChatGPT2大模型训练自定义数据的指南 简介 ChatGPT2模型的特点和功能 训练自定义数据的好处 训练步骤 模型部署 模型演示 fine-tuning和搭建chatGPT2.0对比 微调 (Fine-Tuning) 使用 ChatGPT 官网接口 自己安装训练 ChatGPT-2.0 模型 对比总结 什么是人工智能(AI)人工智能(Artificial Intelligence,AI)是一门致力于开发能够执行通常需要人类智能的任务的计算机科学。AI 包括从学习和推理到感知和语言理解等广泛的智能行为。 AI 的分类 弱人工智能(ANI) : 专注于特定任务的智能,如语音助手和推荐系统。它...
为什么重写equals必须重写hashcode方法
为什么重写 equals 必须重写 hashCode?一句话先行: 你改了“怎么判相等”,就必须同步改“怎么分桶”。 一、先立三条铁律(这是 JVM 的宪法)Java 对 equals 和 hashCode 有明确约定: 1️⃣ equals 相等 → hashCode 必须相等2️⃣ hashCode 相等 → equals 不一定相等3️⃣ 只要参与哈希容器,就必须遵守 1️⃣ 这不是建议,是契约。 二、Object 默认实现在干嘛?equals123public boolean equals(Object obj) { return this == obj;} 👉 比的是 内存地址 hashCode1public native int hashCode(); 👉 基于 对象内存特征(你可以理解成“身份证号”) 结论: 默认情况下:同一个对象才相等,不同对象永远不相等 三、问题从哪里开始?你在业务里重写了 equals 👇 1234567@Overridepublic boolean equals(Object o) ...
synchronized 关键字底层原理
目录 synchronized字节码解析 synchronized与管程的关系 synchronized与JMM的关系 synchronized与java对象头解析 synchronized-cpu的实现 synchronized-应用场景和实现方式 本文将深入介绍synchronized的工作原理以及与管程、Java内存模型、对象头和CPU层面的关系。包括synchronized的字节码解析、与管程的关系、与JMM的关系、对象头的解析和与CPU的实现。接着,会描述synchronized的应用场景和实现方式。 深入理解Java的synchronizedJava中的**synchronized关键字是并发编程中的核心元素,用于实现线程间的同步。本文将深入分析synchronized**的实现原理和应用,通过解析字节码、探讨与管程(Monitor)的关系、Java内存模型(JMM)、对象头以及CPU层面的实现来全面了解其工作机制。 synchronized字节码解析在Java中,**synchronized关键字用于实现线程间的同步。当使用这个关键字时,Java虚拟机(JVM...
RESTful API规范
RESTful API规范 1. 引言 RESTful API概述 REST的定义和基本原则 为什么需要设计规范 2. RESTful API基础 2.1 什么是RESTful架构 2.2 REST vs. SOAP 2.3 资源的无状态性 2.4 HTTP方法 2.5 有关幂等性和安全性的考虑 3. 资源设计 3.1 资源设计规范 3.2 资源的版本控制 3.3 对资源的操作 3.4 构建RESTful API的请求和响应 4. RESTful API的安全和性能 4.1 安全考虑 4.2 性能优化 5. RESTful API的测试和调试 6. 案例 1. 引言RESTful API概述REST(Representational State Transfer)是一种基于网络的软件架构风格,强调系统中的资源和资源之间的交互。RESTful API是按照REST原则设计的API,通过使用HTTP协议的GET、POST、PUT、DELETE等方法对资源进行操作。这种设计风格使得API具有简洁、可扩展和易于理解的特点。 REST的定义和基本原则 资源(R...
java-观察者模式
java-观察者模式 观察者模式介绍 观察者模式UML 观察者模式的设计原则 观察者模式-java内置实现 观察者模式-google实现 观察则模式-手写demo 观察者模式使用场景 观察者模式介绍观察者模式是一种常用的设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象状态发生改变时,所有依赖于它的观察者对象都会得到通知并且自动更新。(观察者模式又叫做发布订阅模式) 观察者模式的核心思想是解耦,它将观察者和主题解耦,让它们之间的依赖变得松散。在观察者模式中,主题只知道观察者的存在,并不知道观察者的具体实现。当主题状态发生改变时,它只需要通知观察者即可,而不需要关心观察者的具体实现。 观察者模式UML观察者模式的UML图如下所示: 观察者模式的设计原则观察者模式满足的设计原则包括:开闭原则、单一职责原则、依赖倒置原则。其中,开闭原则指的是观察者模式允许增加观察者类而无需修改主题类代码,从而符合开闭原则;单一职责原则指的是主题类只负责管理观察者,不涉及具体业务逻辑,符合单一职责原则;依赖倒置原则指的是主题类和观察者类都依赖于抽象,符合...
ThreadLocal 原理,一次讲透 🧵
ThreadLocal 像是给每个线程发了一把「私人抽屉钥匙」🔑——抽屉都在同一栋楼(JVM)里,但钥匙不通用。 一、ThreadLocal 是干嘛的?🤔一句话总结: ThreadLocal = 线程私有变量容器。 它让 同一个变量名,在不同线程里各活各的,互不打扰: ❌ 不用加锁 ❌ 不会线程不安全 ✅ 性能轻快,像春风一样 ⚠️ 重要澄清: ThreadLocal 不是用来共享数据的,它的使命是——隔离。 常见使用场景: 用户登录信息(userId) TraceId / 日志上下文 🧾 数据库连接、事务上下文 二、怎么用?简单到离谱 🧩ThreadLocal 只有三个灵魂方法: set():往线程抽屉里放东西 📦 get():从抽屉里拿东西 🫴 remove():清空抽屉(很重要!)🧹 1234567891011121314151617181920212223242526272829303132333435public class ThreadLocalDemo { private static ...














