自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 反射的底层原理

Java反射机制的核心是Class对象,它存储了类的所有元数据。调用Method.invoke()时,JVM采用两阶段优化策略:前15次使用JNI本地调用(慢),超过阈值后动态生成字节码实现(快)。这种设计平衡了偶尔反射调用的初始化开销和频繁调用的性能需求,体现了JVM在性能优化上的极致考量。通过sun.reflect.inflationThreshold参数可控制切换时机,展现了典型的"空间换时间"和"延迟优化"思想。

2025-06-23 12:23:05 608

原创 Java反射原理,为什么都在用反射?

摘要:反射是Java的"魔法"特性,通过JVM方法区的Class对象实现运行时动态操作类的能力。虽然存在性能开销,但其在框架开发中价值显著:1)实现终极解耦,支撑Spring等框架的IoC机制;2)构建插件化系统,如IDE扩展功能。各大厂(阿里、腾讯等)的中间件和微服务框架都深度依赖反射。典型应用如数据中台项目通过反射动态实例化插件,实现配置化和扩展性,遵循开闭原则。合理使用反射能以微小性能代价换取系统的高度灵活性。

2025-06-23 12:15:09 701

原创 Java基础八股文 - 面试者心理历程与标准答案

Java基础面试要点:面向对象三大特性(封装、继承、多态)详解,基本数据类型和引用类型区别分析,String不可变设计原理及StringBuilder/StringBuffer对比,equals和hashCode重写契约关系,异常处理机制分类与最佳实践。面试时既要掌握核心概念,又要结合实际代码示例,展现深度理解。(149字)

2025-06-22 16:57:21 802

原创 Spark简介脑图

Apache Spark是一个快速、通用的大规模数据处理框架。它以RDD为核心数据结构,支持内存计算,比Hadoop MapReduce快100倍。Spark生态系统包含Spark SQL、Spark Streaming、MLlib和GraphX四大组件,支持批处理、流处理、机器学习和图计算。其架构包括Driver、Cluster Manager和Executor,通过DAG调度实现高效计算。Spark提供RDD、DataFrame和Dataset三级数据抽象,并采用智能内存管理机制。优化要点包括数据序列化

2025-06-15 15:34:47 597

原创 Spark核心概念与DAG执行原理笔记

本文系统梳理了Spark的核心概念与技术原理,重点解析了RDD特性、DAG执行机制和Stage划分规则。主要内容包括:1) RDD的五大核心特性及操作分类;2) DAG构建流程与窄/宽依赖判断标准;3) 基于Shuffle的Stage边界划分原理;4) Spark作业执行架构及各组件交互;5) 任务并行度与分区关系;6) 广播变量和累加器的应用场景。通过Mermaid图表直观展示了Spark的底层运行机制,为性能优化提供了理论基础,并简要概述了Spark 4.0的新特性发展方向。

2025-06-15 15:30:07 1104

原创 Spark DAG、Stage 划分与 Task 调度底层原理深度剖析

本文深入剖析了Spark的DAG构建与Stage划分机制,以及Task调度的底层原理。主要内容包括:1) DAG构建过程基于RDD的转换操作形成逻辑执行计划,通过行动操作触发计算;2) Stage划分依据RDD依赖类型,窄依赖可管道化执行,宽依赖成为Stage边界;3) Task数量主要由RDD分区数决定,受Shuffle配置、数据源特性等影响。文章详细解析了窄/宽依赖的特点及Stage划分逻辑,并分析了Task并行度的关键影响因素,为Spark性能优化提供理论基础。

2025-06-14 19:27:42 1329 1

原创 SparkUI依赖问题解决方法

摘要:用户遇到Spark UI运行时错误NoClassDefFoundError,提示缺少org.glassfish.jersey.servlet.ServletContainer类。分析表明未包含Jersey Servlet集成模块,需要添加jersey-container-servlet依赖。解决方案:在pom.xml中添加Jersey 3.1.10版本的Servlet容器依赖,并确保jakarta.servlet-api保持5.0.0版本。建议后续检查依赖树解决潜在冲突,并处理SLF4J日志绑定问题。

2025-06-14 18:14:18 1196

原创 解决Spark4.0.0依赖问题

本文针对Apache Spark 4.0.0运行中的常见问题提供了解决方案。主要问题包括POM依赖冲突、JDK版本不兼容(需JDK 17)以及Servlet API兼容性问题(如SingleThreadModel类缺失)。解决方案包括:在pom.xml中明确指定Java 17版本,设置Spark核心和SQL模块为provided范围,排除冲突的Servlet API依赖并手动引入5.0.0版本,配置Maven编译和执行插件,以及添加必要的测试依赖和--add-opens参数解决模块访问限制。这些调整确保了S

2025-06-14 18:08:04 1009

原创 聊聊二手商城的架构:我们如何解决了“立即购买”的库存锁定,以及为什么购物车是个“坑”?

### **聊聊二手商城的架构:我们如何解决了“立即购买”的库存锁定,以及为什么购物车是个“坑”?**大家好,我是[你的名字/昵称]。最近在搞一个二手闲置商城的项目,过程中踩了不少坑,也沉淀了一些思考,想借这个机会和大家聊聊。核心是两个经典问题:1. “立即购买”的并发库存锁定怎么处理才优雅?2. 二手商城,到底需不需要“购物车”这个模块?#### **一、直面“立即购买”的并发难题:从刚性锁定到柔性预扣减**我们项目的初期架构比较直接。用户点击“立即购买”,后端直接在数据库层面锁定商品,

2025-06-09 19:31:26 864

原创 链表-两两交换(Java的三种解法)

本文详细介绍了链表两两交换问题的解法及其应用场景。通过现实案例(如排队、整理书籍)帮助理解链表交换的概念,并分析了三种解法:递归、迭代(带哑节点)和迭代(不带哑节点)。其中,迭代(带哑节点)解法因其空间复杂度低、逻辑清晰,被推荐为最优解。文章还提供了Java代码实现和Mermaid流程图,帮助读者更好地理解迭代解法的步骤。此外,推荐了类似题目(如K个一组翻转链表、反转链表)和相关学习资源,帮助读者深入掌握链表操作的核心知识点。

2025-05-15 12:49:51 915

原创 二叉树(中序遍历)

这篇文章详细介绍了二叉树中序遍历的多种解法及其应用场景。首先,通过生活中的例子(如家族谱系图、书店图书管理)解释了中序遍历的概念,即“左子树 -> 根节点 -> 右子树”。接着,文章分析了三种解法:递归法(最直观)、迭代法(用栈模拟递归,效率更高)和Morris遍历(空间复杂度O(1),但会修改树结构)。其中,递归法适合初学者,迭代法在实际工程中更常用,而Morris遍历则适合对空间有严格要求的场景。文章还提供了Java代码示例和流程图,帮助读者更好地理解迭代法的实现过程。最后,推荐了类似题目和

2025-05-14 16:18:22 692

原创 RabbitMQ和Seata冲突吗?Seata与Spring中的事务管理冲突吗

答:不冲突,它们可以协同工作,但作用域不同。如何协同? Seata AT 模式下的分支事务实际上是基于本地事务的。当 存在时,Seata 会拦截 管理的本地事务的提交/回滚。结论:同时使用两者是常见且必要的。 保证本地操作的原子性,而 则将这种原子性扩展到分布式环境下的多个参与者。答:冲突!在期望跨服务数据库原子性的场景下,同步调用 Seata AT 模式和异步发送 RabbitMQ 消息是矛盾的。Seata AT 模式的局限性: Seata AT 模式主要设计用于同步调用场景下的数据库操作。它无法管

2025-04-20 18:04:51 1410

原创 自问自答模式(Operation是什么)

后,Swagger/OpenAPI 工具可以自动读取这些元信息并生成可视化文档,让 API 的使用者一目了然、快速上手。包的一个注解,用于给 REST 接口增加文档元数据。是 OpenAPI(Swagger)规范中,来自。

2025-04-17 16:35:46 293

原创 Spring Cache与Redis集成原理

Spring Cache抽象层。调用@Cacheable方法。

2025-04-16 14:51:50 1016

原创 Spring Boot配置属性绑定与自动配置排除详解

命令行参数 > 系统环境变量 > 配置文件。:Spring Boot按优先级加载。:支持JSR-303验证。

2025-04-16 11:18:00 1029

原创 Spring Boot自动配置原理详解

技术组件核心功能工作原理启用自动配置导入AutoConfigurationImportSelector选择要导入的配置实现ImportSelector接口,返回需要导入的类名数组Spring Factories机制配置发现机制通过META-INF/spring.factories文件定位配置类条件注解配置条件判断@ConditionalOnXXX系列根据条件决定是否应用配置自动配置排序控制配置加载顺序通过@AutoConfigureOrder控制优先级属性绑定外部化配置。

2025-04-16 11:16:39 863

原创 Spring缓存抽象机制

缓存抽象机制Spring

2025-04-16 11:10:17 832

原创 Java数据清洗三剑客:SubString、replace与replaceAll实战指南(基础篇)

掌握这三个方法,足以应对企业开发中80%的基础数据清洗需求。复杂数据建议使用正则表达式工具测试(如RegExr),避免直接在生产环境调试。思考题:如果遇到需要清理的JSON数据中的转义字符,该如何处理?

2025-03-26 16:24:20 714

原创 回文链表(快慢指针+反转链表)——Java实现

给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。[1, 105]

2025-03-20 11:44:25 647

原创 搜索二维矩阵(二分,搜索的两种变形)——Java

编写一个高效的算法来搜索*m* x *n*矩阵matrix中的一个目标值target。嘿,哥们儿,这题又来了个二维矩阵的骚操作,找个target值,还得高效。矩阵每行每列都升序,像个规矩的兵营,但数字多得跟菜市场似的,咋找啊?别慌,我给你整几种方法,大白话讲明白,保准你边乐边学会。

2025-03-20 09:56:34 650

原创 旋转图像(Java实现两种算法)

给定一个n×n的二维矩阵matrix表示一个图像。请你将图像顺时针旋转 90 度。你必须在**** 旋转图像,这意味着你需要直接修改输入的二维矩阵。使用另一个矩阵来旋转图像。

2025-03-20 09:39:31 1071

原创 JuniversalCharde-Java实现自动编码转换全解

以下是代码中涉及的所有知识点,附上详细说明。这个代码展示了如何用 Juniversalchardet 检测文件编码,用 Apache POI 读取 Excel 文件。注释里详细解释了每一步的目的和逻辑,用大白话把技术要点讲得明明白白。希望这能帮您彻底搞懂代码的原理!如果还有啥疑问,随时告诉我哦!s。

2025-03-14 16:49:49 1001

原创 矩阵置零(LeetCodeHot100)-Java详解

这个方案用矩阵自己的第一行和第一列当“记事本”,再加两个变量row0和col0做辅助,完美实现了原地算法。就像在公司里,你用现有资源(白板、便签)解决问题,不用额外申请预算。

2025-03-14 09:49:03 1294

原创 Map技术讲解+实战Demo

通过这篇文章,我们从多个角度剖析了 Java 的。

2025-03-13 11:59:51 952

原创 leetcode Hot100 for 41缺失的第一个正整数

清理无效钥匙:把负数替换成 5,排除干扰。标记被拿走的钥匙:把存在的数字对应的位置变成负数。找没人拿的钥匙:第一个正数的位置就是答案。希望这个解释能让你彻底明白这段代码!如果还有疑问,随时问我哦!解法亮点:通过数组索引和正负号标记,在 O(n) 时间和 O(1) 空间内解决问题。现实应用:适用于资源分配(如储物柜、端口号)或数据校验场景。企业价值:在资源受限或高性能需求的环境中,能高效解决问题,提升系统效率。

2025-03-12 16:09:16 1088

原创 RabbitMQ(Java快速入门附Demo代码)

生产者通过交换机发送消息。交换机根据路由规则将消息分发到队列。消费者从队列中接收并处理消息。这个 Demo 不仅通过代码实现了消息传递,还借助逻辑图和类比帮助您更直观地理解 RabbitMQ 的机制。希望这对您掌握 RabbitMQ 有所帮助!

2025-03-11 16:31:24 1212

原创 距离算法-----如何在Java中使用,使用场景有什么

Levenshtein 距离(也叫编辑距离)是一种衡量两个字符串之间相似度的算法。它计算的是将一个字符串转换为另一个字符串所需的最少编辑操作次数。插入:在字符串中插入一个字符。删除:从字符串中删除一个字符。替换:将字符串中的一个字符替换为另一个字符。每种操作计为一步,Levenshtein 距离就是完成转换所需的最小步数。距离越小,两个字符串越相似。将方法放入你的 Java 项目中,可以作为工具函数使用。Levenshtein 距离是一个简单却强大的算法,通过动态规划高效计算两个字符串之间的编辑距离。

2025-03-07 10:30:00 755

原创 线程创建与管理(一文讲清)

线程创建:继承Thread类或实现Runnable接口。线程管理:启动、停止(中断/标志位)、暂停(sleep/wait)、优先级。商城实战:用户请求处理、后台任务、定时任务。现实案例:用户下单的多线程优化。线程池:提升性能,管理线程。线程安全:通过volatile或Lock解决。

2025-03-04 10:20:47 626

原创 线程中断使用场景:个性化推荐系统

快速响应用户的终止请求;处理超时任务,避免用户等待过久;管理资源,优化高并发性能;处理错误和异常,确保系统健壮性;实现线程间通信和测试调试。通过合理使用线程中断,推荐系统可以提升用户体验、增强稳定性,并在复杂场景下高效运行。

2025-03-04 09:59:02 626

原创 小巫程序Demo日记:详细讲解 `ReentrantLock`(现实与企业应用场景)

通过现实和企业场景的类比,的强大特性一目了然。它不仅支持可重入,还提供中断、超时、公平锁和条件变量等功能,是复杂并发场景下的理想选择。无论是银行转账、任务队列还是支付系统,它都能帮助开发者构建高效、安全的并发程序。

2025-03-03 21:07:53 941

原创 Java中,spark提供的Dataset详解

Java和scala的Dataset的创建方式有所不同,因为Java的API和类型系统与Scala不同。比如,Scala中的隐式转换和case类在Java中并不适用,需要用Java Bean或Encoders来明确指定类型。基本操作部分,比如show()和printSchema(),这些方法在Java中应该是一样的,因为Spark的DataFrame/Dataset API在Scala和Java中是统一的。我们可能需要知道如何在Java中调用这些方法,尤其是链式调用时是否需要分号。

2025-02-28 09:48:28 1384 1

原创 Java实现文件解压上传和自动分类的全流程,看完不明白直接喷——小妹和天狗的爱情故事

看不懂吗,no,看得懂吗,no,其实这就是一个基于SpringMVC的一个大体架构图,我直接甩出来看不懂是很正常的,看懂了说明你跟我是同步在线的,那么开始吧,我在给个图大家就应该看得懂了。那么昨晚和主管聊了之后,我的大脑就浮现大量的思维架构图,脑图,还有实现方法,但是奈何太困了,就告了段落,那么接下来,我将会吧我的思维架构脑图通过一个架构图,让各位能够先直观的看到。这也就是一整个文件上传分类和解压的过程了,大家有需要源码的callme,我会发给大家哦,今天就到这了,溜了溜了。然后把和男生的照片全删了。

2025-02-27 21:05:54 1045

原创 今天写一篇新手向,如何快速写出SpringMVC架构

目标:创建数据类。代码示例// 构造函数、getter 和 setterMVC 的本质:分离数据、界面和逻辑。Spring MVC 的作用:提供工具和框架,让 MVC 更容易实现。实际编程用 Spring Boot 快速起步。定义 Model(数据)、Controller(逻辑)、View(界面)。测试和调试,确保一切正常。心得:从简单开始,比如一个用户列表,慢慢加功能(比如表单提交、数据库操作),这样学习就不会太难。遇到问题时,多看官方文档或调试代码,就能找到答案。

2025-02-27 16:53:33 996

原创 那些年,业务经理提出的需求——通过配置文件实现模板的清洗

配置驱动的处理是指通过外部配置文件(而不是代码)来描述程序的行为。(什么意思呢,比如我们在打王者,我们可以通过外部的手柄来操控手机的操作,那么当我们想要更换键位的时候,我们可以直接通过更换手柄的操作顺序就可以实现这个功能了)。数据结构的定义:比如列名映射规则。(我们王者的手柄键位对应的王者键位)业务规则:比如如何识别文件类型和处理模板扩展性支持:当有新的文件类型或逻辑时,只需要更新配置文件,而不需要修改代码。通过上述方法,我们可以用一个配置文件实现自动配置的Java程序。

2025-02-26 10:09:50 1117

原创 线程中断----一文全解,Java最初1.0->5.0->8.0

定义:线程中断是通过方法设置线程的中断状态(interrupt status),提示线程停止或检查中断信号。特点中断是合作的,线程不会立即停止,而是需要自行检查中断状态或处理。中断状态是一个布尔标志,由设置为 true,线程可通过或检查。某些阻塞操作(如sleep()wait()join())被中断时会抛出,并清除中断状态。Java 5 的提升:通过包,提供了执行者框架和Future接口,系统化管理线程中断,适合传统并发任务。Java 8 的提升。

2025-02-25 15:44:00 734

原创 线程同步——多线程必修课

线程同步是多线程编程中的核心概念,指在多个线程同时运行的环境中,通过控制线程的执行顺序和对共享资源的访问权限,确保共享数据的一致性和完整性。简单来说,线程同步就像是给多个线程“排队”,避免它们同时操作共享资源导致混乱。

2025-02-25 15:24:53 778

原创 守护线程------后台工作的经纪人

它在后台运行,为程序的主流程(用户线程)提供支持;它不阻止程序退出,当用户线程结束时,它会自动终止。这种特性使得守护线程非常适合处理那些“辅助性质”的任务,既保证了程序的正常运行,又不会干扰程序的整体生命周期。

2025-02-25 15:17:03 381

原创 线程的六大状态----了解线程的状态周期,编写更优雅的代码

Java 线程的生命周期包括六个状态,这些状态由Thread类的getState()方法返回,类型为枚举。状态名称描述NEW线程刚创建,未调用start()方法,处于初始状态。RUNNABLE线程正在运行或准备运行,等待 CPU 调度,包括执行中和就绪状态。BLOCKED线程等待获取 monitor 锁,通常在尝试进入已锁定的 synchronized 块时。WAITING线程无限期等待其他线程的特定动作,如wait()join()或park()。线程等待特定时间,如或带超时的。

2025-02-25 15:12:37 933

原创 进程和线程的区别----现实+技术+历史

进程是程序运行的实例,有自己的内存空间;线程是进程内的执行单元,共享进程内存(你可以把JVM想象成你的手机,那么你手机的游戏就是一个进程,你的手机肯定不止只有一个游戏,你打开两款游戏,一款王者荣耀,一款和平精英,你会发现,这两个游戏之间互不联系且不干扰,它们独自占着一个内存空间,但是你王者里的操作就是线程了,当你点击移动和攻击时,就是两个线程同时进行,这个线程会等待你的指令,它们通过合理的调度和共享同一个内存空间,实现了合作)。进程用于隔离任务,线程用于进程内的并发执行。

2025-02-25 14:51:51 1126

原创 JVM内存管理

JVM的内存管理就像一个聪明的“管家”,通过划分内存区域(堆、栈、方法区等)、合理分配内存、自动垃圾回收,确保Java程序高效、稳定运行。理解这些,不仅能帮你写出更好的代码,还能在排查问题时更有底气。

2025-02-24 19:22:40 851

2万字,从底层到企业开发,让我们一起深入学习和了解SpringIoC中的DI和容器

2万字,从底层到企业开发,让我们一起深入学习和了解SpringIoC中的DI和容器

2025-02-15

空空如也

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

TA关注的人

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