自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JUC 总结:从 Java 内存模型到线程池的并发核心梳理

本文总结了Java并发编程(JUC)的基础知识要点: 进程与线程:进程是资源分配的最小单位,线程是调度的最小单位,线程更轻量级且切换成本低; 线程创建方式:继承Thread类、实现Runnable/Callable接口、使用线程池(推荐); Runnable与Callable区别:Callable有返回值且可抛异常,需通过FutureTask适配; 线程状态:新建、可运行、阻塞、等待、定时等待和终止6种状态; 线程控制:start()启动新线程,run()同步执行;join()实现顺序执行,CountDow

2026-06-15 21:51:08 828

原创 Harness Engineering:让 AI Agent 从会回答到能可靠做事

摘要 Harness Engineering(驾驭工程/智能体运行时工程)是围绕AI Agent构建的一套运行环境、约束系统与恢复机制,关注如何安全高效地管理Agent的工具调用、文件操作、API交互等实际执行行为。其核心在于为Agent设计"方向盘、刹车、仪表盘"等控制系统,而非单纯优化模型能力。 与Prompt Engineering(优化单次输入)和Context Engineering(组织信息材料)不同,Harness Engineering聚焦整个运行系统,通过工具封装、权限控制、测试验证、回滚

2026-06-15 21:37:16 649 9

原创 缓存雪崩终极防御:Caffeine + Redis 多级缓存

本文介绍了一种防御缓存雪崩的多级缓存方案,结合Caffeine本地缓存和Redis分布式缓存。核心架构包括一级缓存(Caffeine,快速但容量有限)和二级缓存(Redis,容量大但有网络开销)。通过重写Spring Cache的CacheManager实现自动降级:当Redis故障时,请求会被Caffeine拦截,避免冲击数据库。代码实现包括自定义DoubleCache类(实现先查Caffeine再查Redis的查找逻辑)和配置多级缓存管理器。关键优化点包括:1)Redis过期时间添加随机值防止集体过期;

2026-05-25 16:37:22 786 8

原创 Java 集合框架超全解 · 底层源码|集合对比|HashMap 扩容原理

Java集合框架主要分为Collection和Map两大分支。Collection包含List(有序可重复,如ArrayList、LinkedList)、Set(无序不可重复,如HashSet、LinkedHashSet)和Queue(队列,如ArrayDeque)。Map代表键值对集合,如HashMap。ArrayList基于数组实现,支持随机访问;LinkedList基于链表实现,插入删除高效。HashSet底层由HashMap实现,利用哈希值保证元素唯一性;LinkedHashSet继承HashSet

2026-05-24 21:59:32 453

原创 JVM 类加载机制详解(生命周期・双亲委派・自定义加载器)

本文详细介绍了Java类加载机制和三大类加载器。类加载过程分为加载、验证、准备、解析和初始化五个阶段:验证确保字节码合法性;准备为静态变量分配内存并赋零值;解析将符号引用转为直接引用;初始化执行静态代码块和赋值操作。三大类加载器包括:启动类加载器(Bootstrap ClassLoader)加载核心类库,由C++实现;扩展类加载器(Extension ClassLoader)加载扩展jar包;应用类加载器(Application ClassLoader)加载classpath下的自定义类和第三方依赖。此外,

2026-05-24 21:55:13 642

原创 JVM 垃圾回收器详解:Serial、Parallel、CMS 与 G1 的原理与实践

本文介绍了Java垃圾回收机制中判断对象可回收性的两种主要方法:引用计数法和可达性分析算法。引用计数法简单但存在循环引用问题,而主流JVM采用可达性分析算法,通过GC Roots对象作为起点判断对象可达性。文章还详细阐述了Java中的四种引用类型(强引用、软引用、弱引用和虚引用)及其应用场景,特别通过图片缓存案例对比了强引用和软引用的实际效果差异。软引用在内存不足时会被优先回收的特性,使其成为内存敏感型缓存的理想选择,能有效防止内存溢出问题。

2026-05-24 18:19:02 468

原创 再见 Node 时代!全新 agy 携 Gemini 3.5 Flash 震撼登场,终端异步 Agent 时代已来

Google I/O 2026发布的Antigravity CLI(agy)是一款基于Go语言重构的命令行工具,相比Node版本更轻量高效。它支持单文件二进制运行,无需复杂环境配置,并新增异步子智能体功能,可后台处理耗时任务。安装仅需一行命令,配置Gemini API Key后即可使用。核心功能包括:单行命令查询、异步后台任务处理(如代码重构)、交互式终端界面。特别适合远程开发场景,支持SSH智能认证。与同类工具相比,agy凭借Go语言原生优势、零依赖特性和异步处理能力,成为终端开发者的高效助手。

2026-05-24 16:37:46 730

原创 深入解析JVM方法区与StringTable机制

本文摘要: 方法区存储类的元信息、静态变量、常量池和JIT编译代码。JDK8使用元空间实现方法区,位于本地内存且默认无上限。常量池包含类文件常量池和运行时常量池,存储类名、方法名等信息。StringTable是运行时常量池中管理字符串字面量的哈希表,通过ldc指令或intern()方法将字符串引用存入。字符串变量拼接会创建新对象,而编译器会优化常量拼接。JDK8+的intern()方法会尝试将堆中字符串引用存入常量池。StringTable在JDK7+后移至堆内存,可被常规GC回收。

2026-05-24 16:14:38 424

原创 RedisTemplate 核心操作API汇总(Spring Data Redis)

本文汇总了Spring Data Redis中RedisTemplate的核心API,涵盖5种Redis数据类型(String、Hash、List、Set、SortedSet)的常用操作方法。详细列出了每种数据类型的操作命令,包括设置/获取值、批量操作、原子增减等,并提供了返回值类型和功能说明。可作为Redis开发的快速参考手册,帮助开发者高效使用RedisTemplate进行数据操作。

2026-05-11 16:14:25 420 3

原创 为什么有HTTP还要有RPC?深入理解两者的区别与联系

本文深入探讨了HTTP与RPC的区别与联系。从网络协议发展史出发,解释了Socket编程、TCP粘包问题,以及HTTP与RPC的历史渊源。RPC诞生早于HTTP,最初用于C/S架构内部通信,而HTTP主要用于B/S架构的网页访问。两者核心区别在于:HTTP通过DNS解析服务发现,传输JSON字符串;RPC通过注册中心获取服务,使用二进制协议如Protobuf,效率更高。随着技术发展,HTTP/2性能提升明显,RPC也开始基于HTTP/2实现。当前RPC多用于内部微服务通信,HTTP则更适合对外开放API。

2026-05-10 14:04:58 385 3

原创 Spring Data JPA 实战指南:从基础配置到高级技巧

本文介绍了Spring Data JPA的核心实现与实体类映射规范。主要内容包括: 项目结构划分:实体类负责关系映射注解,Repository接口处理查询定制,测试类/Service仅调用方法。 核心组件实现: 启动类配置JPA仓库扫描路径 用户实体类详细注解说明(@Entity、@Table、@Column等) 用户状态枚举定义 Repository接口继承JpaRepository获得CRUD能力 服务类的事务管理 测试类的上下文配置 实体类映射规范: 基础注解配置(表名、索引、唯一约束等) 主键生成策

2026-05-09 21:26:56 611 1

原创 MyBatis vs MyBatis-Plus vs Spring Data JPA:一份给国内开发者的终极选型指南

本文对比三大Java ORM框架(MyBatis、MyBatis-Plus、Spring Data JPA)的适用场景与核心特点。MyBatis提供SQL完全控制,适合复杂查询;MyBatis-Plus在保留MyBatis灵活性的基础上,通过自动CRUD和Wrapper大幅提升开发效率,成为国内主流选择;Spring Data JPA采用全自动ORM,适合快速开发和外企项目。文章结合国内实际开发场景,给出清晰的选型建议:追求极致性能选MyBatis,常规业务首选MyBatis-Plus,纯后台系统可考

2026-05-09 10:52:39 529 1

原创 Kafka入门教程--帮你理清所有概念和细节

一个典型的 Kafka 集群中包含若干 Producer(可以是 Web 前端产生的 Page View,或者是服务器日志、系统 CPU、Memory 等),若干 Broker(Kafka 支持水平扩展,一般 Broker 数量越多,集群吞吐率越高),若干 Consumer Group,以及一个 Zookeeper 集群。Kafka 通过 Zookeeper 管理集群配置,选举 Leader,以及在 Consumer Group 发生变化时进行 Rebalance。Producer 使用push 模式。

2026-05-07 22:16:07 487 1

原创 一文吃透 Java 反射:三大应用场景 + 动态代理底层原理

*** 反射场景3:注解解析(Spring注解底层)* 需求:自定义注解@MyComponent,反射识别注解并自动创建对象// 1. 反射获取UserController的Class对象(反射入口) Class < UserController > clazz = UserController . class;// 2. 反射核心:判断这个类是否有@MyComponent注解 if(clazz . isAnnotationPresent(MyComponent . class)) {

2026-04-11 13:48:46 421 1

原创 Python零基础机器学习入门教程

Python零基础机器学习入门教程摘要 本教程通过通俗类比和可运行代码,帮助Python初学者快速掌握机器学习核心概念。主要内容包括: 机器学习本质:让计算机从数据中自动学习规律,而非依赖人工规则 核心术语解析:特征、标签、模型、训练集/验证集/测试集等基础概念 四大数据类型:数值型、类别型、文本型和图像型数据的处理方法 完整工作流程:从问题定义到模型部署的8个关键步骤 三大学习类型:监督学习、无监督学习和强化学习的核心区别 教程包含大量实用代码示例,如数据预处理、特征工程和图像归一化操作,适合零基础学习者

2026-04-10 21:43:28 752 2

原创 面试常见的jdk---LTS版本新特性梳理

本文梳理了Java 8/11/17/21四大LTS版本的核心面试知识点与高频真题。重点包括:Java 8的Lambda/Stream/Metaspace等革命性特性;Java 11的模块化系统/var关键字/G1 GC等生产级改进;以及版本升级的实战经验考察。文章采用「知识点→真题→答题思路」结构,帮助开发者系统掌握Java底层原理、版本特性差异及技术选型能力,针对性准备不同级别面试。特别强调Java 8的基础地位和Java 11的生产适用性,覆盖从语言特性到JVM优化的全方位考点。

2026-04-10 19:28:17 446 1

原创 RocketMQ 核心流程解析

Topic 是 RocketMQ 的「路由主键」,NameServer 维护了 Topic → Broker 的全局映射表,Producer 发消息时自动按 Topic 路由到对应 Broker,完全自动匹配,不需要你手动做任何操作。Producer/Consumer 不需要注册,只发心跳;Producer 只向 NameServer 请求路由,不发消息内容;Push 模式本质是 Pull 的封装,Broker 不主动推送;Pull 模式更省资源,不是「消耗资源」;

2026-04-02 21:41:30 412 2

原创 分布式加锁粒度:从踩坑到落地,解决开发者的核心痛点

本文剖析了锁粒度的本质——锁的作用范围由key设计决定,分为粗粒度(全局资源锁)和细粒度(精准资源锁)。针对三个坑点:锁粒度过粗导致并发骤降、过细引发"锁爆炸"、混淆锁维度与归属,给出了具体解决方案。提出锁粒度选择的三大原则:匹配业务最小操作单元、平衡性能与复杂度、符合业务一致性需求。最后提供了"一人一单"、商品库存扣减、全局资源等典型场景的落地方案,包含锁key设计规范和实现要点

2026-04-01 19:31:12 430 1

原创 解决Redis排序后MySQL查询乱序问题:从原因到落地(通用版)

本文探讨了使用Redis排序后MySQL查询导致数据乱序的常见问题及其解决方案。

2026-03-30 17:47:54 576 1

原创 黑马点评--达人探店模块

达人探店系统核心实现 核心功能模块: 博客管理:支持探店笔记的发布、查询和热门推荐 点赞系统:采用Redis ZSet实现点赞/取消点赞功能,记录点赞时间 图片上传:支持多图上传(最多9张),自动生成唯一文件名 技术亮点: 使用Redis实现高性能点赞功能(ZSet存储用户ID和时间戳) 分页查询热门笔记,支持点赞排行榜Top5 用户信息与博客内容关联查询(用户头像、昵称等) 关键代码: 点赞逻辑通过Redis ZSet判断用户是否点赞 图片上传采用MultipartFile处理,生成UUID文件名 博客详

2026-03-29 22:05:52 118 1

原创 超级实用的 AOP 指南

本文提供了一份实战型AOP应用指南,重点解决开发中常见的三大困惑:何时使用AOP、如何编写以及如何关联业务。

2026-03-29 16:30:26 950 1

原创 Redis 消息队列

本文解决 List/PubSub/Stream 选择、消费者组、ACK、秒杀实战等问题

2026-03-28 22:20:37 600 1

原创 Redis+Lua实现秒杀优化

基于Redis和异步线程的秒杀系统优化方案,通过Lua脚本实现原子化的库存校验与用户下单记录,将核心校验逻辑前移至内存数据库,大幅提升响应速度。方案采用"快速校验+异步落库"架构,利用Redis执行Lua脚本进行毫秒级预检,通过内存阻塞队列解耦请求处理与数据库持久化。关键实现包括:1) Lua脚本实现库存检查和用户去重的原子操作;2) 主线程快速响应后异步处理订单;3) 独立线程池消费队列完成数据库写入。该方案有效解决了高并发场景下的超卖和性能瓶颈问题。

2026-03-28 20:26:01 346 1

原创 TCP/IP 网络模型面试核心考点总结02(基础篇)

摘要: 从输入网址到网页显示的过程涉及多个网络层级协作:1)应用层解析URL并生成HTTP请求;2)DNS递归/迭代查询获取IP地址(包括本地缓存、根域、顶级域和权威DNS查询);3)协议栈处理(TCP三次握手确保可靠传输,IP层路由选择);4)数据包逐层封装(HTTP→TCP→IP→MAC)。关键点包括:TCP通过序列号/确认号保证可靠性,IP负责全局寻址而MAC处理本地传输,DNS查询采用混合模式(客户端递归、服务器迭代)。面试需重点掌握TCP三次握手原理、IP/MAC分工及DNS查询流程。

2026-03-27 22:27:37 468 1

原创 TCP/IP 网络模型面试核心考点总结01(基础篇)

TCP/IP网络模型的核心面试考点。首先解释了采用TCP/IP模型的原因:解决设备差异性问题,通过层级化解耦实现跨设备通信。接着详细解析了四层模型:应用层负责用户业务逻辑;传输层通过TCP/UDP协议实现端到端通信;网络层处理IP寻址和路由;网络接口层完成物理传输。文章还对比了各层的数据封装单位(报文、段、包、帧),并解答了常见面试问题,如TCP与UDP区别、IP与MAC地址关系、子网判断方法等。最后提供了分层记忆法和关键数值(如MTU 1500)等面试技巧。

2026-03-27 19:55:54 816 1

原创 Redisson 分布式锁复习总结

Redisson分布式锁解决了手动实现setnx的四大痛点:不可重入、不可重试、超时释放和主从一致性问题。它采用Hash结构存储锁信息,支持可重入;通过tryLock实现重试机制;利用WatchDog自动续期防止业务未完成锁过期;使用MultiLock确保主从一致性。核心原理基于Lua脚本保证原子操作,加锁时判断锁状态并维护计数器,解锁时递减计数器或删除锁键。Redisson通过Pub/Sub机制实现高效等待,避免自旋消耗资源,形成完整的加锁-续期-解锁闭环流程,是分布式系统中可靠的锁解决方案。

2026-03-25 21:49:29 489 1

原创 Redis 分布式锁实现流程

当前初级实现会导致「锁提前过期 → 多线程并发 → 误删他人锁」的连锁反应,直接破坏分布式锁的互斥性。必须引入标识校验和锁续期机制才能在生产环境安全使用。

2026-03-24 22:13:49 645 1

原创 黑马点评-day03-秒杀笔记

Spring 事务必须用代理对象才生效;锁必须包住整个事务,保证提交后再释放;库存扣减用 stock>0 原子更新,不超卖且高成功率;userId 加锁 + 双条件查询,实现绝对一人一单。

2026-03-24 19:20:11 395 1

原创 Spring 声明式事务 @Transactional 完整详解(面试+开发必备)

Spring 声明式事务基于 AOP 动态代理实现,通过 @Transactional 注解自动管理事务。核心要点: 事务只有通过代理对象调用才生效,本类内部调用会失效 必要条件:public方法、Spring管理、代理对象调用、异常被捕获 经典问题:本类内部调用事务失效,可通过暴露代理对象解决 AOP 是事务实现的基础机制,事务是AOP的一种具体应用 开发中需注意代理策略、事务传播行为和锁与事务的顺序问题 理解这些原理可避免常见事

2026-03-24 18:17:20 669

原创 黑马点评-day02-缓存笔记

缓存技术是提升系统性能的关键手段,主要包括三种典型问题及解决方案: 缓存穿透:通过缓存空值和布隆过滤器防止恶意查询穿透到数据库 缓存雪崩:采用随机TTL、集群部署和多级缓存避免大规模缓存失效 缓存击穿:提供互斥锁和逻辑过期两种解决方案,权衡性能与一致性 核心实现要点包括: 使用""equals(shopJson)精确判断空值 必须设置缓存过期时间保证数据更新 互斥锁方案简单但影响性能,逻辑过期性能好但实现复杂 这些方案有效解决了缓存使用中的关键问题,在保证数据一致性的同时显著提升系统性能

2026-03-23 22:28:41 470 1

原创 # Redis缓存实战:更新策略与三大核心问题(穿透/雪崩/击穿)全解析(含面试重点)

客户端请求的数据在缓存和数据库中都不存在,导致请求永远绕过缓存,直接访问数据库。若存在大量此类请求(如恶意查询不存在的ID),会导致数据库压力骤增,甚至宕机。核心成因:请求数据在缓存和数据库均不存在,缓存无法生效。在同一时段,大量缓存Key同时过期,或者Redis服务宕机,导致海量请求无法命中缓存,全部直接打到数据库,引发数据库压力过载、甚至宕机,进而导致整个系统崩溃。核心成因:缓存批量失效 + 高并发请求。

2026-03-22 22:24:30 428

原创 @Autowired与@Resource:Spring依赖注入注解核心差异剖析

Autowired和@Resource来源不同:@Autowired是Spring专属,@Resource是Java标准注解;查找逻辑:@Autowired先类型后名称,@Resource先名称后类型;配置参数:@Autowired仅支持required参数,@Resource支持7个扩展参数;注入方式:@Autowired支持构造方法注入,@Resource仅支持属性/Setter注入;IDE提示:注入Mapper时@Autowired有警告,@Resource无提示。

2026-03-21 21:38:04 822

原创 从Jedis到SpringDataRedis:新手踩过的所有坑,一次性填平(附可直接复制代码)

本文系统解析了Redis在Spring生态中的整合过程,针对开发者常见的5大痛点进行深度拆解:1)Jedis与SpringDataRedis的选择问题;2)RedisTemplate多类型API设计原理;3)Spring依赖注入机制;4)复杂序列化配置的必要性;5)完整配置示例。通过对比原生客户端与Spring封装的区别,详解@Bean注入机制和序列化底层逻辑,帮助开发者从"抄代码"进阶到"懂原理"。文章提供可直接复用的配置模板,并总结3条核心规律,助力开发者规避常见

2026-03-20 21:09:57 396 1

原创 VMware虚拟机无法上网?虚拟网卡缺失/异常?安装时卡住?三分钟解决这个问题!

当VMware虚拟机卸载后出现虚拟网卡消失问题时,本文提供了一解决方案,能让大多数人在三分钟解决这个问题!亲测有效

2026-03-19 22:14:26 1572

原创 吃透 Spring Boot dataSource与Starter

摘要:本文通过对比分析方式,深入解析Spring Boot中数据源与Starter的核心概念差异。数据源是连接管理中间层而非数据库本身,Starter则是包含自动配置的"依赖套餐"。文章通过Druid整合案例,展示无Starter时需要手动配置Bean和受限功能,而有Starter则实现零代码配置和完整功能支持。关键结论是:数据源管理连接而非存储数据,Starter能显著提升开发效率,专用配置需配合Starter使用。最后给出通用技术选型套路:选技术→导Starter→写专用配置→直接使

2026-03-17 21:43:54 446 1

原创 IDEA 常用编辑快捷键清单

在 Keymap 面板中,可以搜索关键词(如)来修改或查看对应快捷键,也可以切换预设的快捷键方案(如 VS Code、Eclipse 风格)。

2026-03-17 17:56:39 415 1

原创 Git误操作急救手册

注:所有命令执行前,务必先在临时目录克隆仓库测试,避免二次损坏!

2026-03-17 12:08:10 569 1

原创 @EnableConfigurationProperties

是配置绑定的核心规则注解,仅声明规则不执行,需配合IOC注册注解才会生效;@Component是自动注册注解,让配置类被Spring扫描注入,是配置绑定的基础实现方式;是专属启用注解,替代@Component完成配置类的IOC注入,让摆脱组件注解依赖;开发中根据配置类的「归属」(本地/第三方)选择实现方式,优先使用自动注册,特殊场景使用手动启用,避免二者同时使用。简单来说,的出现,让。

2026-03-17 12:01:27 458 1

原创 多租户数据隔离面试知识点总结

核心思想:MyBatis 多租户隔离的本质是SQL 拦截与自动改写(共享表模式)或动态数据源切换(独立数据库模式)。推荐方案共享表 + MyBatis-Plus 租户插件,成本低、扩展性好、开发效率高。独立数据库 + 动态数据源,保证数据安全与隔离性。价值:既保证了数据安全,又大幅降低了开发与维护成本,是现代 SaaS 应用的必备技术。

2026-03-15 16:38:55 484

原创 乐观锁 vs 悲观锁 含面试模板

摘要:乐观锁与悲观锁是两种并发控制机制。乐观锁假设无冲突,通过版本校验实现无锁并发,适合读多写少场景(如商品查询),典型实现有CAS和版本号机制。悲观锁假设必冲突,操作前加锁保证独占访问,适合写多读少场景(如库存扣减),通过synchronized或数据库行锁实现。选型需考虑读写比例和数据一致性要求:读多弱一致选乐观锁,写多强一致选悲观锁。两者各有优缺点,乐观锁读性能高但写冲突时需重试,悲观锁数据安全但存在性能瓶颈和死锁风险。

2026-03-14 21:29:27 908

空空如也

空空如也

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

TA关注的人

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