在一个神秘的王国里,有一座传说中的城堡,城堡里住着一位孤独的国王。他是这个王国的唯一统治者,所有的决策都由他一人做出。为了确保王国的稳定,国王制定了一条铁律:整个王国只能有一个国王,绝不允许出现第二个!
一、问题:为什么需要“唯一的国王”?在王国的早期,曾经发生过一场混乱:
每个城镇都试图选出自己的国王(多个实例),结果导致了资源浪费(重复创建对象)。
有些城镇甚至同时选出了两个国王(线程不安全),导致了权力冲突。
更糟糕的是,有些叛徒试图通过反射和反序列化的方式,偷偷创建新的国王,试图篡权。
为了避免这些问题,王国的智者提出了一个解决方案:单例设计模式。
二、解决方案:国王的“唯一性”法则为了确保王国只有一个国王,智者们设计了一套严格的规则:
私有化构造函数:防止任何人通过 new 的方式创建新的国王。
静态实例:在城堡的密室中存放一个静态的国王实例,所有人只能通过密室的入口获取国王。
全局访问点:提供一个公共方法(如 getInstance()),让所有人都能找到唯一的国王。
三、实现方式:国王的诞生之路1. 饿汉式:国王一出生就登基
在王国建立之初,国王就 ...
Java
未读Java 中的常用 API本文介绍了 Java 中常用的 API,包括BigDecimal、随机数生成、数学运算、系统操作、Runtime类的使用,以及 Java 8 之后的日期和时间 API。
一、BigDecimal 精确计算1.1 浮点数精度问题演示12// 浮点数运算存在精度丢失问题System.out.println(1.01 + 2.02); // 输出:3.0300000000000002
1.2 BigDecimal 基础用法123456789101112// 推荐使用字符串构造或 valueOf 方法初始化(避免double传参)BigDecimal one = new BigDecimal("1.01"); // 精确构造BigDecimal two = BigDecimal.valueOf(2.02); // 自动优化数值转换// 常规算术运算System.out.println(one.add(two)); // 加法:3.03System.out.println(one.subtract(two)); // 减法:- ...
Java
未读1. 什么是正则表达式正则表达式(Regular Expression,简称 Regex)是用于描述字符串模式的工具,通过特定语法规则实现字符串的匹配、查找、替换等操作。Java 通过 java.util.regex 包提供原生支持。
Java 中的核心类
Pattern:编译后的正则表达式对象(不可变,线程安全)。
Matcher:通过 Pattern 对字符串执行匹配操作。
2. 正则表达式作用
数据校验
文本提取
字符串替换
复杂字符串分割
3. 正则表达式初体验3.1 检验一个号码是否为 QQ 号3.1.1 不使用正则校验 QQ12345678910111213141516public static boolean checkQQ(String qqStr) { // 基础校验 if (qqStr == null || qqStr.startsWith("0") || qqStr.length() < 6 || qqStr.length() > 20) { return false; } // ...
Java
未读1. 字节码基础概念
什么是字节码:Java 源代码(.java)编译后生成的中间代码(.class),由 JVM 执行。
文件结构:遵循 JVM 规范,包含魔数、版本号、常量池、类信息、方法表等。
指令集:基于栈的虚拟机指令,例如 iload(加载整型)、invokevirtual(调用方法)等。
2. 字节码文件结构关键组成部分
魔数(Magic Number):前 4 字节为 0xCAFEBABE,标识为 Java 类文件。
版本号:主版本(Major Version)和次版本(Minor Version),例如 Java 8 的主版本号为 52。
常量池(Constant Pool):
存储类名、方法名、字符串字面量等符号引用。
通过索引(如 #1, #2)在指令中引用。
访问标志(Access Flags):类的修饰符(public, final 等)。
类信息:父类、接口列表。
字段表(Fields):类中定义的字段。
方法表(Methods):每个方法的字节码、异常表、本地变量表等。
属性表(Attributes):附加信息(如源码文件名、行号表)。
3. 类 ...
SQL 基本语法SQL(Structured Query Language)是一种用于管理和操作关系型数据库的语言,主要分为以下几类:
DDL(数据定义语言):定义数据库对象(如数据库、表、字段)。
DML(数据操作语言):操作表中的数据(增、删、改)。
DQL(数据查询语言):查询表中的记录。
DCL(数据控制语言):管理用户权限和数据库安全。
DDL(Data Definition Language)数据定义语言,用来定义数据库对象(数据库、表、字段)。
基本操作连接数据库1mysql [-h数据库服务器IP地址 -P端口号] -u用户名 -p密码
查询所有数据库1show databases;
查询当前数据库如果没有使用数据库,返回 null。
1select database();
使用/切换数据库1use 数据库名;
创建数据库1create database [if not exists] 数据库名 [default charset utf8mb4];
删除数据库1drop database [if exists] 数据库名;
注意:上述语法中 ...
📖 迭代器模式(Iterator)
迭代器模式是一种行为设计模式,它通过提供统一的遍历接口,解耦集合数据的存储结构与遍历逻辑,使客户端无需了解集合内部实现即可访问元素。
✨ 模式动机在软件开发中,集合对象的存储结构可能会随着需求变化而改变,但客户端代码通常只关心如何遍历集合中的元素。迭代器模式通过引入一个迭代器对象,隐藏集合的复杂实现,使得客户端代码可以以一致的方式访问集合中的元素。
🛠️ 模式结构迭代器模式的主要结构包括:
迭代器接口(Iterator):定义遍历元素的方法。
具体迭代器(Concrete Iterator):实现迭代器接口,负责具体的遍历逻辑。
集合接口(Aggregate):定义创建迭代器的方法。
具体集合(Concrete Aggregate):实现集合接口,返回具体迭代器实例。
💻 示例代码以下是一个使用 Java 实现迭代器模式的示例:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 ...
一、Lambda 表达式的基础1. 什么是 Lambda?
Lambda 表达式是 Java 8 引入的一种 匿名函数(没有名称的函数),用于简化 函数式接口(FunctionalInterface)的实现。它的核心目标是让代码更简洁,尤其是在处理函数式编程和集合操作时。
2. 为什么需要 Lambda?
替代匿名内部类:传统方式实现接口需要大量样板代码。
函数式编程:支持将函数作为参数传递,或作为返回值。
代码简洁:用更少的代码表达相同的逻辑。
二、Lambda 的语法详解1. 基本语法结构1// (参数列表)->{代码体 }
参数列表:与接口中抽象方法的参数一致。
箭头符号 ->:分隔参数和 Lambda 主体。
代码体:可以是单行代码,也可以是多行代码块。
2. 简化规则
场景
简化写法
原始写法
参数类型可推断
(a, b) -> a + b
(int a, int b) -> { return a + b; }
单个参数
x -> x * x
(x) -> { ret ...
1. 什么是策略模式?策略模式(Strategy Pattern) 是一种行为型设计模式,通过定义一组可互换的算法族,并将每个算法封装成独立类,使得算法可以独立于客户端变化。其核心是将算法与使用场景解耦,避免复杂的条件分支,提升系统扩展性。
📜 设计原则体现符合 开闭原则(新增策略无需修改已有代码)、单一职责原则(每个策略类只负责一个算法)
2. 核心思想
核心点
说明
算法抽象化
通过接口定义算法规范,隐藏具体实现细节
动态替换
运行时通过注入不同策略对象切换算法(如:设置不同的折扣策略)
消除条件分支
用多态代替 if-else/switch-case,使代码更简洁
3. 代码案例1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950// filepath: 示例代码// 1. 策略接口(定义算法规范)public interface DiscountStrategy { void applyDis ...
Git 使用指南一、安装 Git不同操作系统的安装方法1. Windows
下载安装包访问 Git 官网,点击 “Download for Windows”。
运行安装程序双击下载的 .exe 文件(如 Git-2.xx.x-64-bit.exe),按照提示完成安装。
2. LinuxDebian/Ubuntu
1sudo apt update && sudo apt install git
CentOS/RHEL
1sudo yum install git
Fedora
1sudo dnf install git
验证安装1git --version
若显示版本号(如 git version 2.39.2),则安装成功。
二、配置用户信息设置全局用户名和邮箱(用于标识提交者身份):
12git config --global user.name "Your Name"git config --global user.email "your.email@example.com"
查看当前配置:
1 ...
Spring AI 四种开发方式1. 引言随着人工智能技术的迅速发展,Spring AI 作为 Spring 生态中面向 AI 能力集成的框架,提供了多样化的开发模式,帮助企业级应用灵活高效地接入大模型、知识库、智能 Agent 等能力。本篇文档将从架构设计和开发实践角度,系统阐述 Spring AI 目前主流的四种开发方式,助力开发者打造高扩展性、易维护的智能应用。
2. Spring AI 开发方式总览
开发方式
核心特点
适用场景
1. 直接调用模型接口
简单直连大模型,快速实现智能能力
快速原型、轻量级智能功能
2. Tool Calling
通过工具调用丰富外部服务和 API
复杂业务集成、多系统协同
3. Retrieval Augmented Generation (RAG)
基于知识库检索增强大模型问答效果
需要知识库支撑的智能问答和推荐
4. MCP (Multi-Chain Processing)
复杂多轮对话和流程控制,智能 Agent 设计
交互式应用、对话机器人、多任务流程
3. 四种开发方式详解3.1 直接调用模型接口
核心原理 ...