自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JAVA 八股文 第九章(内置容器详解)

本文全面解析了SpringBoot内置容器的使用要点:1. 支持三大容器:Tomcat(默认)、轻量级Jetty和高性能Undertow,分别适用于常规项目、微服务和高并发场景;2. 切换容器需先排除tomcat依赖再引入目标容器starter;3. 常见问题包括未彻底排除默认容器、多容器冲突等;4. 建议普通项目保持Tomcat,特殊场景按需切换。文章提供了Maven/Gradle的完整配置示例和验证方法,强调根据实际需求选择容器,默认Tomcat已能满足多数业务需求。

2026-07-03 13:41:36 170

原创 JAVA 八股文 第八章(如何控制Bean 注入顺序)

本文深入探讨了Spring Boot中控制Bean注入顺序的本质问题。核心观点是:Spring的设计原则是依赖驱动而非顺序控制,构造器注入之所以"看起来"能解决顺序问题,是因为它显式表达了依赖关系,使Spring能正确构建依赖图。文章指出了构造器注入适用的场景(真实业务依赖、避免隐藏依赖、暴露循环依赖)和无法解决的问题(无依赖关系的顺序需求、责任链模式等)。同时介绍了多种顺序控制手段(@Order、@DependsOn等)及最佳实践,强调应优先表达真实依赖,避免人为控制顺序,慎用@DependsOn。最终结

2026-07-03 13:31:02 195

原创 JAVA 八股文 第七章(CMS 垃圾收集器)

本文详细解析了 JVM 中的 CMS(Concurrent Mark Sweep)垃圾收集器。CMS 以最小停顿时间为目标,采用标记-清除算法,主要作用于老年代,最大特点是能与用户线程并发执行。其工作流程分为初始标记(STW)、并发标记、重新标记(STW)和并发清除四个阶段。优点是低停顿和响应速度快,适合Web服务等对延迟敏感的系统;但存在内存碎片、CPU资源敏感、浮动垃圾、易触发Full GC等缺点,最终被G1收集器取代。面试常考其工作流程、优缺点及淘汰原因。核心思想是通过并发换取低停顿,牺牲吞吐量和空间

2026-07-02 16:34:48 199

原创 JAVA八股文第六章(JVM 内存泄漏排查与解决指南)

本文系统讲解了JVM内存泄漏的排查与解决方法。首先定义了内存泄漏的本质是"对象无用但仍被引用导致无法GC回收",表现为内存持续增长、Full GC后内存不降、最终OOM。重点介绍了完整的排查流程:确认内存曲线→触发GC观察→生成Heap Dump→MAT分析→定位代码→修复问题,并详细说明了jmap、jstat、VisualVM、MAT等工具的使用。列举了集合未清理、静态变量、线程池未关闭等常见泄漏场景及解决方案,强调排查核心是"找谁持有引用不放"。最后指出内存泄漏会导致严重线上问题,掌握Heap Dump

2026-07-02 16:14:53 192

原创 JAVA 八股文 第五章(元空间替代永久代)

📌 JVM 用元空间替代永久代的核心原因 解决 OOM 问题 永久代(堆内存)大小固定,易因类加载过多导致 PermGen space OOM 元空间使用本地内存,理论上仅受系统内存限制 降低调优难度 永久代需手动设置 PermSize/MaxPermSize,难估算 元空间自动扩展,只需配置上限(MaxMetaspaceSize) 优化设计合理性 永久代将逻辑方法区硬塞入堆,与 GC 强耦合 元空间解耦类元数据与堆,更符合 JVM 规范 提升性能 减少 Full GC 压力(元数据不再参与堆回收) 回收

2026-07-02 15:59:11 194

原创 JAVA八股文 第四章(JVM 垃圾回收算法)

本文系统讲解了JVM垃圾回收算法,首先介绍了三大基础算法:标记-清除(简单但产生内存碎片)、标记-复制(高效但浪费空间)和标记-整理(无碎片但成本高)。然后重点分析了JVM采用分代回收的原因——基于"大多数对象短命"的经验规律,将堆分为新生代(使用标记-复制算法)和老年代(使用标记-清除或标记-整理算法)。文章还简要提及了常见垃圾回收器,并总结了面试常见问题,指出分代与算法组合是JVM高性能的关键。理解这些算法是优化Java程序性能的基础。

2026-07-02 15:35:46 191

原创 JAVA八股文第三章(JVM 中如何判断对象可以被回收)

本文深入讲解了JVM判断对象可回收性的机制。核心结论是:对象如果无法从GC Roots访问到,就可以被回收。JVM采用可达性分析算法而非引用计数法,因为后者无法解决循环引用问题。GC Roots包括虚拟机栈局部变量、方法区静态变量等"永久起点"对象。判断过程分为两步:首先检查可达性,然后判断是否需要执行finalize()方法(对象可在此自救)。文章还介绍了四种引用类型(强、软、弱、虚)及其回收特性,并总结了完整的对象回收判断流程。理解这些原理是掌握JVM内存管理和应对相关面试题的关键基础。

2026-07-02 13:38:32 195

原创 JAVA八股文第二章(栈(Stack)与堆(Heap))

本文详细讲解了Java中栈(Stack)和堆(Heap)的核心区别。栈是线程私有的,负责方法执行过程,存储方法调用和局部变量;堆是线程共享的,存储对象实例。文章通过原理分析、执行流程对比和常见误区说明,阐述了栈帧结构、存储内容、访问速度等关键差异,并总结了面试高频问题。理解栈和堆的差异是掌握JVM内存模型的基础,对GC机制、方法执行和性能优化都至关重要。

2026-07-01 21:33:06 237

原创 【JAVA八股文第一章-JVM内存模型】

本文详细讲解了JVM内存模型的核心结构和工作原理。主要内容包括:1) JVM内存分为线程私有(程序计数器、虚拟机栈、本地方法栈)和线程共享(堆、方法区)两大部分;2) 重点解析了栈帧结构(局部变量表、操作数栈等)和堆的分代模型(新生代/老年代);3) 通过代码示例演示对象创建和内存分配过程;4) 强调栈指向堆、方法区定义类方法的关键关系;5) 总结常见面试问题和内存异常原因。理解JVM内存模型是学习GC、并发和性能调优的基础,需要掌握各区域的功能定位和交互机制。

2026-06-30 18:14:52 179

原创 【LeetCode 第207题】

这篇文章详细解析了LeetCode 207课程表问题的拓扑排序解法。主要内容包括: 问题本质:判断课程依赖关系构成的有向图是否存在环。 核心解法:使用Kahn算法进行拓扑排序: 建邻接表表示图 统计节点入度 从入度为0的节点开始BFS 每次删除节点并更新相邻节点入度 最终检查是否所有节点都被处理 代码实现: 手写邻接表结构 入度统计和队列初始化 BFS过程处理拓扑排序 通过处理节点数判断是否有环 复杂度分析:时间O(n+m),空间O(n+m) 关键点:入度为0的节点可学习,环会导致拓扑排序无法完成 这种方法

2026-05-29 15:47:27 248

原创 【用 Java API Client 操作 Elasticsearch】

在 Elasticsearch 8.x 之后,官方推荐使用:👉RestHighLevelClient(已经被废弃)✅ 类型安全(强类型,不再是字符串拼JSON)✅ API更现代✅ 和ES版本强绑定一句话总结:更安全、更优雅的ES操作方式。

2026-03-17 16:22:52 640 1

原创 【Spring AMQP 三大交换机】

Fanout:一条消息,所有人都听见Direct:一条消息,只给指定的人Topic:一条消息,按规则筛选接收人掌握这三种交换机之后,你就已经理解了RabbitMQ 消息路由的核心机制。Spring AMQP 实战RabbitMQ 延迟队列RabbitMQ 死信队列。

2026-03-06 15:34:05 444

原创 日志级别是摆设吗?

日志级别不是用来区分“打印不打印”。运行时过滤日志动态控制输出级别控制系统性能开销作为监控与报警依据一句话总结:你写的是日志语句,级别决定它在运行时有没有资格被输出。

2026-02-13 17:59:14 650

原创 Lombok 真有问题吗?

但真正深入排查后你会发现,大多数所谓的 “Lombok bug”,本质上都和。掌握这个规则,你在 Spring 体系里的数据绑定问题会减少 90% 以上。通过 MyBatis 或 Spring 的映射规则转换。是字段命名破坏了 JavaBean 规范的一致性。Java 里的“属性名”并不等于“字段名”。属性名是由 getter 方法推导出来的。任何一步命名不规范,都会导致整条链路失效。有关,而不是 Lombok 本身出错。“Lombok 有时候会出问题。不同框架处理细节不同,结果就炸。

2026-02-13 16:38:41 633

原创 【Spring Boot 中 ResponseEntity 用法全解析】

在 Spring Boot 开发 REST 接口时,经常会看到:很多人疑惑:这篇文章直接讲重点。表示:操作成功,并返回数据表示:资源不存在表示:请求参数错误表示:操作成功,但不返回数据表示:服务器内部异常表示:新资源创建成功方法定义:必须传入一个:这个 表示:含义:因为 REST 规范中:所以 必须指定访问路径。作用:方法签名是:必须传参数。如果不想返回数据,不要调用 ,而是调用:四、.body(user) 和 .ok(user) 的区别这是很多人最困惑的地方。等价于:

2026-02-13 16:15:22 811

原创 【从SpringBoot到SpringCloud】

指定要调用的服务名方法 ≈ 远程接口注解和 Controller一模一样Spring Boot 解决的是“一个服务怎么写”Spring Cloud 解决的是“一堆服务怎么协作”

2026-02-07 19:16:32 615

原创 【Springboot基础开发】

启动类(不用动)写Controller写接口方法浏览器 / 前端 调用接口👉你只管写业务,其他的它帮你搞定别一开始就学微服务、Spring CloudController参数接收JSON 返回简单数据库这些练熟。

2026-02-07 19:09:54 760

原创 【从静态代理到动态代理,再到 AOP(一篇彻底讲透)】

代理 = 不改原类,在方法前后加逻辑比如我们想在register()不想改不想每个方法都手写日志静态代理:我自己写代理类动态代理:JVM 帮我写代理类AOP:我只写规则,代理交给框架。

2026-01-28 17:50:46 921

原创 【Spring Boot注解】

↓Spring 启动↓扫描 @Component / @Service / @Aspect↓创建 Bean↓AOP 判断是否需要代理↓生成代理对象↓放入容器↓你 @Autowired 拿到的是代理对象Spring 是“容器”注解是“标记”AOP 是“Bean 创建阶段的加工逻辑”你再回头看@Aspect@Before哦,原来如此。

2026-01-28 17:48:08 810 1

原创 【线程池 + Socket 服务器】

通过线程池 + Socket 的组合,我们可以轻松构建高并发、可扩展的网络服务器。Flush 机制看似小细节,却直接影响数据是否及时、正确到达客户端。掌握自动与手动两种方式,就能应对从简单聊天到文件上传的各种场景。这两个示例代码都已经过完整测试,直接复制运行即可。欢迎在评论区分享你的实践经验,或者提出想看的进阶话题(如 NIO、非阻塞、HTTP 协议解析)

2026-01-01 15:39:09 1548

原创 【synchronized 与 ReentrantLock + Condition 的深度对比 Plus版】

最近和很多读者深入交流了Java多线程中两个核心的等待/通知机制:synchronized + wait/notify 和 ReentrantLock + Condition。很多同学在学习时都会疑惑:为什么Condition更高级?为什么高并发容器都用Condition?为什么synchronized容易出现“惊群效应”?今天我们把这些问题全部串起来,用最通俗易懂的语言,从底层实现讲起,一步步把Monitor的两个队列、线程状态流转、惊群效应、Condition的精确唤醒全部讲清楚。

2025-12-18 17:15:44 731

原创 Java多线程等待唤醒机制:从synchronized到Lock+Condition

今天来聊聊Java多线程里一个超级经典的话题——等待唤醒机制。在多线程编程里,我们经常遇到“线程协作”的场景:比如一个线程生产数据,另一个线程消费数据;或者两个线程需要严格交替执行(像乒乓球一样你一下我一下)。这时候就需要“等待唤醒”:条件不满足时线程自己睡一觉,等条件好了再被叫醒继续干活。今天重点讲,因为它更灵活、更高效,是现代并发编程的主流(Java并发包里的阻塞队列都是用这个实现的)。我们会用一个简单例子——两个线程交替打印0~9——来一步步讲解。

2025-12-17 08:34:39 749

原创 【阻塞队列的等待唤醒机制】

阻塞队列(BlockingQueue)的等待唤醒机制。在多线程编程中,生产者-消费者模式是最常见的场景之一。而阻塞队列正是解决这个模式的核心工具。它能在队列满时阻塞生产者、在队列空时阻塞消费者,从而实现线程间安全高效的协作。阻塞队列的基本概念和作用Java并发包中阻塞队列的实现原理(以ArrayBlockingQueue为例)等待唤醒机制的核心:wait()、notify() 与 Lock + Condition手把手自定义一个简单阻塞队列常见面试题延伸Java// 消费指针。

2025-12-15 18:46:59 1161

原创 【Java多线程同步指南:方法、方法块与锁对象】

今天我们来聊聊多线程编程里的“守护神”——synchronized。它能帮我们避免线程“打架”导致的数据乱象,但怎么用才高效?我们重点说说同步方法、同步方法块,以及锁对象选this还是object的门道。这篇是之前两篇内容的精华总结:先看同步方法和方法块的相同点不同点,再聊锁对象的选择。代码会保持简单,解释通俗,像聊天一样。适合多线程小白上手。如果你正纠结“怎么锁才对”,读完这篇准能get到精髓。锁类型 场景 优缺点this 实例变量,简单方法 易用,但可能外泄。

2025-12-15 18:34:38 996

原创 【Java多线程同步全攻略:从同步方法到锁对象的“三剑客”】

大家好,我是[你的昵称],一个沉迷Java多线程的码农。今天这篇是系列的“终极总结”——基于之前聊的同步方法、同步方法块,以及锁对象的this、非static Object、static Object这些“老铁”。我们从头捋一遍:怎么用?相同不同?选哪个锁?全用白话+简单代码说清,适合新手速成。如果你正为“线程安全怎么锁”挠头,这篇准能帮你拨云见日。多线程像“多人抢饭”,不锁资源就乱套。synchronized是Java的“门卫”,但锁对了是守护神,锁错了是性能杀手。咱们一步步来。

2025-12-08 10:33:08 554

原创 【Java try-catch、throw 和异常处理的深度指南:从基础到实战】

今天咱们继续聊异常处理,这次来个更详细的版本。上次简单过一遍try-catch和throw,这次我加深点:从异常的“家谱”说起,到自定义异常、异常传播,再到实战中的最佳实践。异常处理不是负担,而是让代码更robust(健壮)的秘诀。Java的checked异常设计虽严谨,但用对地方,能省不少debug时间。如果你是中级开发者,或者想写出企业级代码,这里我用更多例子、图解思路,一步步拆解。代码还是保持简单(JDK 8+兼容),直接复制跑。咱们不急,平和地学——异常像生活,总有不测,但提前准备就好。

2025-12-06 15:52:39 668

原创 【Java中String、StringBuffer和StringBuilder的区别与使用】

本文章详细讲解了string stringbuilder stringbuffer 的区别和使用

2025-12-04 11:27:55 604

原创 【java File】

本文章详细讲解了java feil文件的各种操作 代码简单易懂,语言平易近人

2025-12-04 10:26:14 517

原创 Java IO流详解:从入门到实践,让你轻松搞懂文件读写

本文章详细讲解了Java OI流的细节,处理方式,用简单易懂的代码和平易近人的语气撰写文章

2025-12-03 18:47:27 695

原创 如何降低程序的时间复杂度,提高运行时效?

解决程序运行时效,如何降低时间复杂度?

2025-11-14 22:54:41 798

原创 【JAVA 面向对象开发 File类】

此文章详细讲解了JAVA File类的各种方法,配备了代码和讲解

2025-11-13 12:00:30 926

原创 【JAVA虚函数与多态的底层实现】

java虚函数和多态的底层原理讲解

2025-11-07 23:47:35 1102

原创 【Java面向对象编程入门:接口、继承与多态】

本文章对java的接口,继承与多态进行了详细的讲解

2025-11-06 23:18:37 979

原创 双指针-滑动窗口

滑动窗口算法

2025-10-27 19:33:51 663

原创 算法思维-二分哈希表

二分查找,哈希统计计算

2025-10-09 09:00:00 527

原创 Open AI的关键一步

Open AI的破局之道

2025-09-28 19:16:22 734

原创 LeetCode 84 and 85 problem

leetcode算法

2025-09-18 00:09:05 985

原创 Codeforces Round 1034 E题题解 (Div.3)

思维题,数据结构。

2025-07-19 00:19:11 892

原创 Codeforces Round 1032 div2 E题题解

巧妙解题,思维训练。

2025-06-21 15:56:17 1020

原创 Codeforces round 1031 div2 B题题解

本文章为开拓算法思维类文章。

2025-06-16 15:49:55 909 1

高阶图论,搜索,数学推理算法

里面涵盖了各种高阶算法

2025-12-18

空空如也

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

TA关注的人

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