- 博客(38)
- 收藏
- 关注
原创 零基础也能瞬间理解!揭秘数据库事务中 Undo Log、Redo Log 和 MVCC 的协同奥秘
数据库事务与日志机制协同工作摘要 数据库事务依靠Undo Log、Redo Log和MVCC三大机制协同工作,确保ACID特性: Undo Log:记录修改前的数据,提供回滚能力,保障原子性 Redo Log:记录修改操作,确保持久性,实现WAL预写 MVCC:维护数据多版本,实现隔离性,支持并发访问 事务执行时,Undo先记录旧值,Redo记录新操作,MVCC管理版本链。提交时Redo持久化,回滚时Undo恢复数据。不同隔离级别(读未提交/已提交/可重复读/串行化)通过MVCC和锁机制实现不同的并发控制粒
2025-08-29 16:44:12
691
原创 Spring事务7大传播行为:原理图解+实战代码+避坑指南
Spring事务传播行为摘要 核心传播行为 REQUIRED(默认):存在事务则加入,否则新建事务。适用于大多数业务场景,确保操作原子性。 SUPPORTS:存在事务则加入,否则无事务执行。适合查询操作,但需注意非事务环境下写操作的风险。 MANDATORY:强制要求调用方提供事务,否则抛出异常。用于必须事务保护的关键业务。 REQUIRES_NEW:始终创建新事务,挂起现有事务。适用于日志记录等需要独立提交的操作。
2025-08-26 16:45:11
866
原创 每日一题——力扣498 对角线遍历
本文介绍了力扣498题"对角线遍历"的解决方案。关键思路是:利用行索引与列索引之和为常数的特性确定对角线,根据该和的奇偶性交替改变遍历方向(偶数对角线从下往上,奇数对角线从上往下)。算法通过精确控制起始点和边界条件,实现了O(mn)时间复杂度和O(1)额外空间的最优解。该问题展示了如何通过观察矩阵数学特性设计高效算法,类似思路可应用于其他矩阵遍历问题。
2025-08-25 21:30:07
375
原创 伪异步 vs 真异步:从代码案例看本质区别
摘要:本文对比了分布式系统中的伪异步与真异步实现。伪异步通过线程池模拟异步,但存在线程滥用、阻塞等待和资源浪费问题。真异步采用全局线程池、任务状态持久化和进度反馈机制,实现毫秒级响应和故障隔离。关键区别在于响应时间、资源管理和用户体验。重构方案包括统一线程池、异步任务提交和状态轮询,性能提升显著(如100倍吞吐量提升)。真异步设计需遵循状态持久化、进度反馈和自动清理三大原则。
2025-08-25 18:06:41
986
原创 Maven项目构建工具深度解析
Maven项目构建工具解析摘要 Maven是Apache开发的项目管理与构建工具,通过POM模型统一管理项目构建过程。其核心功能包括: 依赖管理:通过本地/远程仓库机制自动解决Jar包下载与依赖冲突(短路优先、声明优先策略); 标准化结构:固定目录布局实现自动化构建; POM配置:XML文件定义项目坐标、依赖范围(compile/runtime/test等)及聚合/继承关系; 生命周期命令:如mvn compile(编译)、mvn install(安装到本地仓库)等。
2025-08-22 10:58:46
637
原创 你以为会用@EnableXXX就够了?Spring Cloud十大高阶注解实战精讲,突破架构瓶颈!
Spring Cloud高阶注解实战精讲 本文深入解析Spring Cloud十大核心注解的实际应用场景和配置技巧: @EnableAsync - 实现异步任务处理,优化线程池配置避免OOM @MapperScan - 精准扫描MyBatis Mapper接口,支持多数据源 @SpringBootApplication - 核心启动注解的组合应用与排除策略 @EnableDiscoveryClient - 服务注册发现机制详解 @EnableFeignClients - 声明式HTTP客户端的最佳实践
2025-08-22 10:31:30
1118
原创 还在被同步阻塞拖垮性能?揭秘Java & Spring异步处理的“幕后英雄“
Java异步处理技术深度解析 本文系统介绍了Java和Spring框架中的异步处理技术。首先通过在线教育平台案例引出同步阻塞的性能瓶颈问题,然后从Java底层并发机制(ExecutorService、CompletableFuture)讲起,深入解析Spring提供的@Async注解、TaskExecutor等高级抽象,并探讨异步MVC和事务处理等高级主题。文章强调异步处理能显著提升系统吞吐量(案例中提升20倍),并详细说明如何通过线程池配置、链式异步任务等实现高效并发处理。
2025-08-20 11:04:01
1028
原创 还在手忙脚乱创建线程?你的服务器是否扛得住生产环境的“狂风暴雨“?
Java线程池核心原理与最佳实践 本文深入解析Java线程池的核心机制与应用场景,帮助开发者避免常见陷阱并优化系统性能。主要内容包括: 线程池的必要性:直接创建线程存在资源消耗大、稳定性风险和管理困难三大问题,线程池通过线程复用解决了这些痛点。 核心设计原理: 采用池化思想实现线程复用 基于生产者-消费者模型实现任务调度 详细执行流程图解 关键参数解析: 核心线程数、最大线程数等重要参数 7种任务队列(同步队列、有界/无界队列等)的特性与适用场景对比 自定义队列的实现思路 实践建议
2025-08-20 10:37:22
1163
原创 Spring事务基础:你在入门时踩过的所有坑
本文总结了Spring事务管理中的4个常见陷阱及其解决方案:1)异常被吞掉导致事务不回滚,需手动抛出异常或配置rollbackFor;2)非public方法导致事务失效,需改为public;3)自调用绕过AOP代理,需拆分到不同类或使用AopContext;4)错误传播机制引发意外行为,需理解REQUIRED和REQUIRES_NEW的区别。掌握这些核心要点可避免80%的事务问题。
2025-08-19 16:14:38
719
原创 从卡死到秒出:百万级数据导出优化实战
百万级数据导出优化方案:从卡死到秒出的四步实践 本文针对百万级数据导出导致的系统崩溃问题,提出了一套分级处理优化方案。系统问题主要表现为内存爆炸、页面卡死、线程浪费和分页不合理四大性能瓶颈。通过实施智能分级策略(5000条内同步导出、5万条内异步导出、超过5万条拒绝请求)和四项关键技术优化:1)流式写入与分批处理;2)全局线程池管理;3)临时文件缓存;4)智能分页控制。方案实施分为两个阶段:1-2天完成基础架构改造(常量配置、线程池管理器),再重构核心导出逻辑,最终实现从系统崩溃到秒级导出的性能飞跃,同时保
2025-08-18 20:58:09
796
原创 Java源码解读之Number和Byte类
本文解读Java中Number和Byte类的源码实现。Number类作为抽象基类,定义了数值转换的抽象方法(intValue()等)并实现了Serializable接口。Byte类继承Number类,实现了数值转换、比较等功能,内部使用ByteCache缓存常用值(-128到127)以提高性能。关键点包括:1)数值转换方法通过强制类型转换实现;2)Byte类采用缓存机制优化对象创建;3)包含MIN_VALUE/MAX_VALUE等常量定义边界值;4)实现compareTo、equals等方法支持比较操作
2025-08-13 11:21:10
925
原创 分布式数据库中间件ShardingSphere
Apache ShardingSphere是一套开源的分布式数据库中间件解决方案,由JDBC、Proxy和Sidecar三款产品组成。它提供读写分离与数据分片两大核心功能,通过JDBC层增强实现数据库水平扩展。读写分离采用主从架构分散查询压力,数据分片支持垂直分库(按业务拆分)和水平分表(按数据特征拆分)。系统遵循CAP理论,在一致性、可用性和分区容错性间实现平衡,支持最终一致性。ShardingSphere-JDBC通过SQL解析、路由、改写、执行和结果归并五个步骤处理分布式查询,提供内存限制(OLAP)
2025-07-22 10:39:06
867
原创 idea2025中文版新ui,项目上传到远程仓库图文教程,附带一些小问题讲解
Git基本操作摘要:1. 链接远程仓库:通过VCS创建本地仓库后,在Git管理中添加远程仓库地址。2. 项目上传:使用代码改变区、提交说明区和推送按钮,本地提交需推送才能同步到远程。3. 常用操作:- 合并提交:压缩多个commit简化日志 代码回退:可选择整个版本回退或单个文件还原 优选(cherry-pick):选择性合并特定提交到其他分支,解决分支开发中的bug修复问题。操作涉及冲突处理机制。
2025-07-13 09:43:18
1507
原创 Redis八股文——摘自黑马程序员
Redis 共有 5 种: String(字符串)、List(列表)、Set(集合)、Hash(散列)、Zset(有序集合)。
2024-10-17 14:51:27
452
原创 软件开发----Java基础每日刷题(转载于牛客)
finalize:是垃圾回收器操作的运行机制中的一部分,进行垃圾回收器操作时会调用finalize方法,因为finalize方法是object的方法,所以每个类都有这个方法并且可以重写这个方法,在这个方法里实现释放系统资源及其他清理工作,JVM不保证此方法总被调用。B.被final修饰的方法为最终方法,不能被继承,而方法前面如果有abstract修饰,则为抽象方法,抽象方法是需要被继承才有意义,因此abstract和final矛盾,选项错误。属于某个进程的所有前台线程都终止后,该进程就会被终止。
2024-10-17 09:36:39
1477
原创 软件开发----设计模式每日刷题(转载于牛客)
模板方法模式(Template pattern): 在一个方法中定义一个算法的骨架, 而将一些步骤延迟到子类中. 模板方法使得子类可以在不改变算法结构的情况下, 重新定义算法中的某些步骤。(3)行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。(2)结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。(1)创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
2024-10-16 09:31:42
1196
原创 软件开发----Java基础每日刷题(转载于牛客)
String s = "a" + new String("bc"):栈中先创建一个"a"字符串常量,再创建一个"bc"字符串常量,编译阶段不会进行拼接,在运行阶段拼接成"abc"字符串常量并将s的引用指向它,效果相当于String s = new String("abc"),只有'+'两边都是字符串常量才会在编译阶段优化。i5和i6为100,在范围之内,在执行Integer i5=100时,就会直接缓存到内存中,但执行执行Integer i6=100时,就直接从缓存里取,而不需要新建对象,所以为true。
2024-10-16 09:14:36
1560
原创 数据库八股文——摘自黑马程序员
索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构(B+树),这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法这种数据结构就是索引。事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。覆盖索引是指查询使用了索引,并且需要返回的列,在该索引中已经能全部找得到。
2024-10-15 16:56:50
561
原创 软件开发----Java基础每日刷题(转载于牛客)
5)Servlet容器调用HttpServlet的service方法,这个方法中会根据request的Method来判断具体是执行doGet还是doPost,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象;5. JSON对象(在花括号中) {"address":{"province":"陕西"....}}response.setHeader("Refresh","3");
2024-10-15 10:42:58
1031
原创 什么是死锁,产生条件,预防死锁,银行家算法
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。例如:当前两个进程p1、p2,有两个资源r1、r2,当前p1占据r1,p2占据r2,同时p1提出需要r2的需求,p2提出需要r1的需求。就会造成互相占据对方需要的资源同时需要对方资源的死锁现象,陷入一直等待的状态,从而使得两个进程都无法继续执行。
2024-10-14 08:53:46
880
原创 软件开发----Java基础每日刷题(转载于牛客)
这里改变的不是引用的值,而是引用str指向的常量不一样了而已,而这个引用的生命周期和当前方法的一样的,也就是方法结束,引用被杀死,也结束了,那么它刚才指向good的这个引用,就结束了,所以在这个方法结束之后,再输出引用str的值,自然就是引用str之前指向的值了,也就是test。//导致当前的线程等待,直到其他线程调用此对象的 notify () 方法或 notifyAll () 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量。//唤醒在此对象监视器上等待的单个线程。
2024-10-10 15:21:45
1043
原创 软件开发----Spring基础每日刷题(转载于牛客)
Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。自动配置通常是基于项目classpath中引入的类和已定义的Bean来实现的,在此过程中,被自动配置的组件来自项目自身和项目依赖的jar包中.一个应用程序中可以有多个spring容器 不同容器里的bean可以同名 ,但scope=application的时候,同名的bean只有一个。
2024-10-09 15:31:49
1278
原创 软件开发----SQL基础每日刷题(转载于牛客)
update student_table set name = ( case when sex = '男' then '男生姓名' when sex = '女' then '女生姓名' end) where name is null;update student_table when name is null set name = ( case when sex = '男' then '男生姓名' when sex = '女' then '女生姓名')
2024-10-09 15:07:19
834
原创 软件开发---Redis基础每日十题(转载于牛客)
1. 下面关于Redis的应用场景,错误的说法是()A Redis作为数据库实现海量数据的存储B 作为中间件广泛应用于分布式缓存C Redis作为计算工具统计PV、UV等数据D Redis可以实现分布式锁Redis作为一个内存数据库并不适用于存储大量数据。PV即Page View,指的是页面访问量,每刷新一次页面,则计录PV+1。UV即Unique Visitor,指的是独立访客数,一般一台设备(计算机或者手机)为一个访客。
2024-10-08 19:51:46
1089
原创 软件开发----Linux基础题(摘自牛客原题)
通过编辑hosts文件,用户可以手动添加IP地址和对应的主机名,以实现域名解析的功能,从而绕过DNS服务器直接进行域名到IP地址的映射。127.0.0.1 -p icmp -j DROP 非本网卡本机器==网络中除了自己的网卡机子,即是拒绝所有网络中除了自己发给自己的数据。硬链接实现不同的文件名访问同一个文件,对文件内容的修改会影响到所有的文件名,但删除一个文件名不影响其他文件名的访问。B,route命令用来显示目前本机路由表的内容,并且还可以针对路由表中的记录来进行相应的添加、删除或修改等操作。
2024-09-28 17:55:02
833
原创 函数递归调用的新奇思想:盒中球模型
函数递归调用的新奇思想:我把这种类型称为“盒中球”模型。假设有一个盒里面装着一个盒子和一个球,第二个盒子里也装着一个盒子和一个球,第三个盒子里也装着一个盒子和一个球……第n个箱子里也有一个盒子和一个球……直到最后一个盒子里只有一个球。
2021-12-19 17:18:04
301
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅