自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(89)
  • 收藏
  • 关注

原创 Java HashMap 全细节详解

成员变量 :哈希主数组,也叫桶数组; :缓存 entry 集合; :当前存储键值对总数; :扩容阈值 = 容量 * 负载因子,size 超过阈值触发扩容; :负载因子,控制数组填满程度。4. 负载因子 0.75 为什么是默认值?负载因子越大:数组填满更多,节省空间,但哈希冲突概率飙升,链表变长,查询变慢; 负载因子越小:冲突少,查询快,但空间利用率低,频繁扩容消耗性能。 0.75 是空间与查询效率的均衡值,数学泊松分布证明冲突概率最低。结构示意图:plaintext三、哈希寻址

2026-07-17 17:01:17 182

原创 JVM 垃圾回收机制完整详解

GC = 垃圾回收,指 JVM 自动识别不再被引用的对象,释放堆内存,避免手动管理内存(区别 C/C++ 手动 malloc/free)。怎么判断对象是垃圾(存活判定)怎么回收垃圾(回收算法、收集器、内存分代)新生代:复制算法(对象存活率低,复制成本小)老年代:标记清除 / 标记整理(对象存活率高,复制代价太大)GC 本质:自动识别不可达对象,释放堆内存,核心算法是可达性分析;堆按对象生命周期分代,新生代复制算法、老年代标记整理 / 清除;

2026-07-16 20:06:57 421 1

原创 B 树、B + 树完整详解 + MySQL 选用 B + 树的核心原因

ceil(m/2)-1 ≤ 关键字数 ≤ m-1每个关键字同时存储索引键 + 完整数据行;n 个关键字对应n+1个子节点;所有叶子节点在同一层(绝对平衡);关键字有序:左子树 < 当前键 < 右子树。表格特性B 树B + 树MySQL 适配度节点存储内容索引 + 数据共存上层仅索引,叶子存全部数据B + 树更优树高度(同等数据量)更高极低(2~3 层)B + 树更优等值查询偶尔更快(根命中)稳定,多一次 IO,差距极小接近范围 / 分页查询差,频繁回溯。

2026-07-16 20:00:57 218

原创 Spring AOP 完整讲解

面向切面编程(Aspect Oriented Programming)横向抽取通用公共逻辑,不侵入业务代码,实现解耦。传统 OOP 是纵向继承;AOP 是横向切面,统一拦截增强。自定义@LogRecord注解,注解上存模块、操作类型AOP 拦截该注解,获取注解属性、请求参数、返回值、耗时存入数据库引入 aop starter启动类加 @EnableAspectJAutoProxy编写切面类:@Aspect + @Component定义 @Pointcut 切入点表达式。

2026-07-15 22:22:45 241

原创 Java 并发编程完整讲解

无共享(栈局部变量)不可变对象 final原子类 CASLock 锁表格工具用途volatile状态标记、DCL 单例简单同步、少量竞争公平锁、可中断、多条件读多写少缓存AtomicXXX单个变量原子计数LongAdder高并发统计等待多线程完成多线程同步等待Semaphore接口限流异步任务执行高并发键值存储生产者消费者。

2026-07-15 21:36:53 270

原创 Java Object 类常用方法全讲解

所有 Java 对象都继承 Object,无需手动 extends;toString打印日志必备,实体一律重写;成对重写,哈希集合必用;getClass()反射基石,final 不可重写;clone()需要实现 Cloneable,区分深浅拷贝;wait/notify 配套 synchronized,用于线程间通信;finalize 已废弃,不用记实现。

2026-07-15 20:32:39 166

原创 三大传参注解完整详解

截取变量,不是问号、不是表单、不是 JSON。,如果前端传 JSON,用这个注解会接收不到任何数据。,所有请求参数全部接收失败,错误率 100%。你的全量前台、后台、支付回调接口全部适配;改造方式:JMeter 请求头改为。,请求体切换为 Raw JSON。你当前 JMeter 全部是。表单,如果后端接口写了。

2026-07-14 22:58:26 187

原创 ConcurrentHashMap 超详细详解

是 Java 线程安全的哈希表,替代老旧线程安全集合Hashtable,同时弥补HashMap。

2026-07-14 18:20:09 379

原创 MyBatis-Plus 内置分页、PageHelper 自定义分页

Mapper 接口第一个参数必须传 Page 对象,无需手写 limitjava运行xml<where></where></select>xml-- SpringBoot3适配 -->

2026-07-12 18:58:01 236

原创 乐观锁 & 悲观锁

普通下单(并发一般):MyBatis-Plus 乐观锁 version,简单高效;秒杀高并发下单:Redis 分布式悲观锁 + 数据库乐观锁双重校验;金融转账、资金变动(低并发、零差错要求):MySQL 悲观锁FOR UPDATE保证强一致性。

2026-07-12 16:40:46 251

原创 MySQL 删除数据全方式详解

历史日志按月分表,直接 truncate 过期月份分表,不影响主业务表。,级联删除不可控,容易误删大量数据,业务代码手动控制删除明细更安全。废弃不用的旧表、历史临时表,确认永久不再使用才执行。电商订单、商品、用户、支付流水、交易类核心业务表(,删除主表数据自动同步删除子表关联数据。删除订单主表数据,订单明细会自动删除;,一旦执行整表数据清空且无法回滚。

2026-07-12 15:35:52 336

原创 Redis 完整详解

Redis 为什么快?内存存储、单线程无锁竞争、IO 多路复用、高效数据编码。Redis 和 MySQL 区别?Redis 内存缓存,高性能,支持复杂结构;MySQL 磁盘持久化,强事务,存核心业务数据。分布式锁存在什么问题?死锁(设置过期时间)、锁误删(Lua 脚本校验持有者)、主从切换锁失效(Redlock 算法)。缓存三大问题解决方案穿透:布隆过滤器、缓存空值;击穿:互斥锁、热点 key 永不过期;雪崩:过期随机、集群、多级缓存。Redis 适合存什么?不适合存什么?

2026-07-12 15:35:17 475

原创 Jar 包 vs War 包 核心区别与常用包类型

Jar(Java Archive)和 War(Web Application Archive)都是基于 JDKjar命令实现的Java 归档压缩包,本质都是 ZIP 格式,核心区别是打包目的、内部结构、运行场景完全不同。

2026-07-11 19:48:06 206

原创 项目 Docker + Nginx 云端完整部署细节

无域名可暂时不用 HTTPS,仅开放 80 端口。,生成 dist 文件夹,上传到服务器。,target 下 jar 上传到。微信支付 pem 证书放入。域名 SSL 证书放到。启动 Nginx 容器时。

2026-07-11 19:45:10 232

原创 SpringBoot 整合 MyBatis-Plus 分页插件完整教程

java运行方法第一个参数必须是Page<T>;不要自己手写limit,会重复拼接导致语法报错。

2026-07-10 23:01:15 245

原创 SpringBoot 整合 MyBatis-Plus 完整步骤

Mapper 接口新增自定义方法java运行resources/mapper/OrderInfoMapper.xml 编写原生 SQLxml</select></mapper>

2026-07-10 22:59:54 329

原创 MyBatis 与 MyBatis-Plus 完整对比讲解

一键生成 Controller、Service、Mapper、XML、实体类,大幅提升开发速度。纯 MyBatis 更合适,减少中间封装层,SQL 完全自主可控,便于 DBA 深度优化。,底层封装 JDBC,解决原生 JDBC 繁琐的代码(连接、预编译、结果集手动封装)。不用拼接 SQL,Java 代码组装查询条件,杜绝字符串硬编码、防止字段名写错。+ 元对象处理器,自动赋值,不用每次业务手动 set createTime。支持自增、雪花算法、UUID,全局统一配置。,完全兼容原生 MyBatis。

2026-07-10 22:18:44 322

原创 Spring 整合 MyBatis + 数据库连接池

项目启动,Spring 读取 yml 数据源配置,实例化Hikari 连接池 DataSourceMyBatis 自动通过 SqlSessionFactoryBean 绑定数据源,加载 XML 映射文件扫描所有 Mapper 接口,基于动态代理生成实现类,注册为 Spring BeanService 中 @Autowired 注入 Mapper,调用方法时,底层从连接池取出数据库连接执行 SQLSQL 执行完毕自动归还连接至连接池,不手动关闭。

2026-07-10 20:51:09 228

原创 完整电项目全生命周期设计周期

每个阶段包含产出物、负责人、周期时长、核心工作、交付标准、风险点,适配中小型 SpringBoot 电商 SP 项目(含支付、订单、库存、用户模块)。

2026-07-09 17:39:33 253

原创 动态规划完整讲解

dp [0]:不偷当前节点,子树最大值dp [1]:偷当前节点,子树最大值 后序遍历递归计算左右子树再合并。

2026-07-08 20:00:41 255

原创 Linux 指令大全

本文按基础操作、文件目录、文本处理、用户权限、进程服务、网络、磁盘、压缩、软件安装、定时任务、高级三剑客、服务器运维排错分类,适配 CentOS7/8、Ubuntu、Debian,所有指令附带实战示例,后端 / 电商服务器日常运维全覆盖。

2026-07-08 18:32:36 256

原创 SpringBoot + Nacos/Apollo

自定义注解,配合 Apollo 加密 starter 自动解密:java运行@Data框架自动识别前缀,使用本地密钥解密后注入明文。

2026-07-07 20:58:14 240

原创 支付全链路安全保障

覆盖支付全流程所有高危漏洞点。

2026-07-07 19:04:31 254

原创 电商 SpringBoot 项目集成微信 / 支付宝支付完整实现

电商 SP 项目:SpringBoot + MyBatis-Plus + MySQL + Redis,支付模块独立拆分,支持,统一封装支付工具类、回调验签、订单状态同步、超时关单,适配前后端分离电商场景。

2026-07-07 18:52:54 354

原创 SQL 语句从基础到高级

SQL(Structured Query Language,结构化查询语言)是关系型数据库的标准操作语言,适用于 MySQL、Oracle、SQL Server、PostgreSQL 等主流数据库。本文将,从基础语法、核心操作、进阶查询到高级特性、实战优化,全方位覆盖 SQL 常用语句,附带可直接运行的实战案例,零基础也能快速掌握。:本文案例通用 90% 数据库,少量差异化语法会单独标注;所有案例基于通用数据表(用户表、订单表、商品表)演示,贴合实际业务。

2026-07-07 18:21:23 749 1

原创 四大图算法完整对比讲解

原因:贪心一旦把顶点加入 S,就认定最短路径固定;负权边会导致后续出现更短路径,无法回退更新,结果错误。排序边:\(O(E\log E)\);并查集操作近似\(O(1)\) 总复杂度:\(O(E\log E)\),E 为边数。✅ 稠密图效率极高;无需预处理所有边 ❌ 稀疏图不如 Kruskal;代码简洁,只需要边集合 ❌ 稠密图边数量巨大,排序耗时,不如 Prim。三层循环固定:\(O(n^3)\),只适合小规模图。= 顶点 i 到集合 S 的最小边权。的最短路径 空间优化:二维数组。:顶点 i 到 j,

2026-07-05 21:33:31 677

原创 LeetCode 30 串联所有单词的子串

java// 单词总个数// 单个单词固定长度// 字符串s总长度// 存储所有合法起始下标线性时间复杂度,暴力枚举每个起点的 O (S×m) 解法大幅优化;只用一张差值哈希表,空间开销小;滑动窗口步长为单词长度,无无效字符遍历。

2026-07-05 21:24:29 224

原创 迪杰斯特拉

现代操作系统并发理论基础名词全部由他规范定义。

2026-07-05 20:37:17 276

原创 微信登录 + 微信支付 业务逻辑分步详解

用户打开页面 → 微信登录授权 → 后端获取 openid 完成账号登录,下发系统 token选商品下单,后端生成本地业务订单(待支付)后端调用微信统一下单,获取 prepay_id,返回参数给前端唤起支付用户微信付款,微信异步推送支付回调到后端后端验签、更新订单为已支付,执行业务逻辑(发券、扣库存)前端轮询订单状态,展示支付成功页面如需退款:后台发起退款,调用微信退款接口,资金原路返还用户。

2026-07-04 19:43:10 306

原创 Java 多线程深入思考

绝大多数开发者学习多线程,只停留在背 API、背锁的区别、背线程池参数,属于表层八股。真正的 Java 多线程体系,从头到尾只解决一个核心问题在多线程并发、CPU 高速切换、指令优化重排的前提下,如何保证共享数据安全、同时最大化程序执行性能。所有多线程知识点、所有并发 BUG、所有高并发优化,全部围绕线程调度、线程安全、线程管理三大体系展开,没有任何例外。volatile:解决可见性、有序性不支持原子性synchronized / Lock:解决可见性、原子性、有序性全部问题。

2026-07-04 14:41:58 31

原创 数据结构基础

数组和链表区别,分别适用场景?数组随机访问快,适合查询;链表增删快,适合频繁修改。HashMap 为什么用红黑树不用 AVL?红黑树平衡旋转次数更少,综合读写性能更好。B + 树为什么作为数据库索引,不用红黑树?磁盘 IO 昂贵,B + 树矮、单次 IO 读取更多索引,范围查询链表遍历更高效。堆和二叉搜索树区别?堆只保证堆顶最值,不满足全局有序;BST 全局有序。栈和队列使用场景差异?栈逆序、递归;队列排队、广度遍历。哈希冲突有哪些解决方式?各自优缺点?

2026-07-04 14:41:07 358

原创 Java 多线程深入思考

volatile:解决可见性、有序性不支持原子性synchronized / Lock:解决可见性、原子性、有序性全部问题多线程不是为了快,是为了最大化利用 CPU 资源所有并发 BUG,根源全部来自共享变量的多线程竞争解决并发的优先级:无状态 > 数据隔离 > 不可变 > 加锁锁是性能损耗的兜底方案,绝对不是首选方案工程开发中,线程池是唯一合法的线程创建方式多线程编程的核心:尽量规避竞争,迫不得已才控制竞争。

2026-07-04 10:17:22 419

原创 LeetCode 380 O (1) 时间插入、删除和获取随机元素

insert:HashMap 存入 + 数组尾插 → O (1)remove:HashMap 查找 / 修改 / 删除 + 数组尾删 → O (1)getRandom:随机下标 + 数组下标访问 → O (1) 空间复杂度:O (n),两个容器都存储全部元素。为什么不能只用 ArrayList / 只用 HashSet?ArrayList 删除慢,HashSet 不支持随机下标访问;两者结合互补。删除操作为什么要和最后一个元素交换?

2026-07-03 23:32:34 182

原创 Spring 全家桶

Spring 是轻量级、一站式、分层的 Java 开发框架。IoC 控制反转:对象创建、依赖管理交给容器,解耦AOP 面向切面:无侵入扩展功能,日志、事务、权限IoC(控制反转): 把对象的创建、依赖管理、生命周期控制权从程序员代码反转给 Spring 容器。DI(依赖注入): IoC 的实现方式,容器自动给 Bean 注入依赖对象。IoC 是思想,DI 是实现面向切面编程,在不修改源码的前提下,对方法进行增强。用于:日志、权限、事务、限流、缓存。

2026-07-03 12:18:12 250

原创 两数相加链表题深度拆解

习惯 C 手动 malloc/free,Java 自动 GC,看不到内存操作,感觉 “黑盒”;C 区分结构体值和指针,Java 只有引用类型,无值拷贝混淆;C 能打印指针地址、指针运算,Java 屏蔽底层内存,只能用访问属性;C 空指针直接崩溃,Java 空引用抛 NPE,异常可控;Java 构造函数封装节点创建,C 需要手动分配 + 赋值,步骤繁琐。

2026-07-03 09:54:48 303

原创 Java HashMap & Set

HashMap key 重写equals()和hashCode(),自定义对象不重写会判断重复失效;HashSet 存自定义对象同样需要重写;get () 无 key 返回 null,优先使用避免空指针;多线程下 HashMap 扩容会死循环,并发使用 ConcurrentHashMap;HashSet 无序,需要有序选择 LinkedHashSet,需要排序选择 TreeSet;entrySet 遍历效率远高于 keySet+get,大数据量优先使用 entrySet;

2026-07-03 09:45:42 225

原创 算法题-文本左右对齐

强制左对齐,间隔只有单个空格,末尾补空格,不平均分配先贪心选一行所有单词最后一行 / 单个单词:左对齐普通多行:均分空格,余数左加末尾统一补满 maxWidth。

2026-07-02 19:41:49 342

原创 单例模式 超详细完整版

JVM 底层禁止反射枚举构造方法,天然杜绝反射、序列化、多线程问题。

2026-07-02 19:34:19 363

原创 Java 贪心算法

不验证贪心策略直接写代码很多问题局部最优无法推全局,例如 01 背包用贪心直接出错,必须先举反例验证。区间排序规则选错求最多不重叠区间按右端点;区间覆盖按左端点;排序规则错答案完全错误。双向约束只用一次贪心分发糖果、排队打水这类左右互相影响的题目,单次遍历无法满足条件,需要两次扫描。数值边界忽略负数、极值K 次取反、加油站题目容易忽略全负数、总和不足边界。跳跃游戏混淆可达性与最小步数55 题只维护最远可达;45 题需要记录起跳边界,两套逻辑不能混用。分配入门:分发饼干、柠檬水找零(建立贪心直觉)

2026-07-02 10:39:24 890

原创 计算机组成原理核心术语

2026-07-02 10:39:07 382

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除