- 博客(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
原创 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
原创 @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关注的人
RSS订阅