自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring面试题记录?

1.spring.factories中的org.springframework.boot.autoconfigure.EnableAutoConfiguration=\添加自己的配置。2.spring新版本创建META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports,添加自己的配置。

2025-09-10 17:24:49 836

原创 深入理解零拷贝:本地IO与网络IO的性能优化利器

在现代计算系统中,数据经常需要在不同的组件之间移动:从磁盘到内存,从内存到网络接口卡。传统的数据传输方式涉及多次不必要的数据拷贝和上下文切换,消耗宝贵的CPU资源和内存带宽,成为系统性能的主要瓶颈。技术通过允许数据直接在设备之间传输,而无需经过CPU的多次拷贝,大幅提升IO密集型应用的性能。本文将深入探讨零拷贝技术在本地IO和网络IO中的应用、工作原理以及优化效果。

2025-09-01 14:16:20 741

原创 java字节码增强,安全问题?

公共字段 (:就像把你家的保险箱放在大街上。任何人都可以过来尝试打开它。私有字段 + 业务代码反射 (:就像你把保险箱藏在家里,但你自己偷偷配了一把万能钥匙。只有你和你授权的朋友(同一安全上下文)可以用这把钥匙打开它。私有字段 + 高权限Agent (:就像一个超级锁匠。他不需要你的钥匙,可以直接改变保险箱的锁芯结构,把它变成公用的,让所有人都能打开。公共字段非常危险,应避免使用。业务代码中的反射确实会带来风险,它为自己打开了一扇后门。

2025-08-30 16:18:22 706

原创 Java Agent 原理深度解析:premain、agentmain 与字节码插桩

地址绑定:Java字节码存储符号引用,JVM运行时绑定地址;C++ so编译时确定大部分布局,dlopen是运行时查找。ByteBuddy的能力:它是一个完整的字节码生成工具包。运行时生成新类和通过Agent修改已存在的类是它的两大应用范式,后者只是前者一个非常重要的特例。Transform的角色和transform方法为ByteBuddy提供了一个标准化的、被JVM认可的“手术室”,让它能在类加载这个关键生命周期节点上,安全地对字节码进行各种高难度操作。直接使用ByteBuddy生成新类。

2025-08-30 15:55:05 800

原创 java agent 字节码增强demo实现,无修改增强服务

通过Java Agent机制在应用启动时加载使用字节码增强技术修改类的字节码在方法执行前后插入监控代码收集并输出监控数据SkyWalking等APM工具的核心原理与此类似,但实现了更复杂的功能和更完善的生态系统。理解这个基本原理有助于更好地使用和调试分布式追踪系统。// 待补充真实增强案例。

2025-08-30 11:48:05 959

原创 docker 部署Skywalking

jar包地址(官网):https://skywalking.apache.org/downloads/阿里云:https://mirrors.aliyun.com/apache/skywalking/从 SkyWalking 官方网站下载对应版本的 Agent。参数指定 SkyWalking Agent 的路径。,您应该能够看到 SkyWalking 的界面。在启动 Spring Boot 应用时,通过。

2025-08-30 11:13:02 1337

原创 docker 搭建zookper集群,快照虚拟机多机模拟

这个有点坑,我试了其他博主的博客,大多都是直接-p去映射,但是我这边尝试一直链接不是,采用 --network host。–network host 让容器直接使用宿主机网络,端口 2181/2888/3888 不用再 -p 映射。或者修改/etc/hosts这个文件,通过名称映射ip,这个我也失败了,解析不了。follower就是选举角色,到这里就成功了,其他的虚拟机上还有leader。这里是指定zk id,选举需要使用,单机不需要。

2025-08-29 11:02:14 430

原创 八股文小记 Servlet 过滤器-Spring MVC 拦截器-Spring AOP 拦截器区别

本文深入分析了三种组件的调用机制差异: Servlet过滤器采用显式递归调用,通过FilterChain.doFilter()手动触发链式执行,具有明确的递归入口和返回点。 Spring MVC拦截器使用隐式遍历调用,HandlerExecutionChain内部维护有序列表,分别通过正向和逆向遍历执行preHandle/postHandle。 Spring AOP拦截器通过链式递归调用,MethodInvocation.proceed()递归推进拦截器链,直到末节点执行业务方法。三种机制各具特点:过滤器强

2025-08-15 11:04:17 764

原创 Spring 三级缓存三个小问题记录

三级缓存 = 注册中心(记录哪些 Bean 可提供早期引用)二级缓存 = 急诊室(临时存放循环依赖中的半成品)一级缓存 = VIP 室(只存放完全就绪的成品)“二级缓存只处理循环依赖的,三级缓存的作用是提前生成 Bean 的原始引用,如果没有循环依赖,其实三级缓存就是直接放到一级缓存的”这就是 Spring 设计的高明之处——用统一的基础设施处理两种场景:普通 Bean:三级缓存"虚位以待",直达终点循环依赖 Bean:三级缓存"雪中送炭",二级缓存"临时避难",最终到达终点。

2025-08-14 16:55:59 720

原创 Spring全流程源码-基于spring-boot-starter-parent 2.6.11

阶段关键操作扩展点初始化加载环境准备解析配置、Profiles上下文创建实例化无Bean定义加载扫描@Component、解析Bean工厂处理执行Bean实例化创建单例Bean、依赖注入后处理执行Runner执行调用启动完成发布事件监听。

2025-08-13 17:27:42 1348

原创 Spring源码解析 - SpringApplication run流程- refreshContext流程 - postProcessBeanFactory源码分析

AnnotationConfigUtils.applyScopedProxyMode源码解析// 作用:根据 ScopeMetadata 里的代理模式,决定是否为 BeanDefinitionHolder 创建代理// 1️⃣ 获取当前 Bean 的 Scope 代理模式// 2️⃣ 如果写了注解代理模式是 NO(不代理),直接返回原始 BeanDefinitionHolder,这里就是bean是否创建代理的判断// 3️⃣ 判断是否是基于类的代理(TARGET_CLASS)

2025-08-13 16:33:31 847

原创 mybtias集成spring原理?--spring,mybatis源码解析

Mapper→→ 扫描@Mapper→ 替换为→ 代理注入。→→ 扫描指定包 → 同上链路。核心钩子在阶段完成接口 → FactoryBean → 代理 Bean的转换。

2025-08-13 11:42:44 771

原创 beanFactory.registerSingleton和beanFactory.registerResolvableDependency区别

需要ApplicationArguments类型Bean。,用于解决特定类型的依赖注入,但不创建完整 Bean。在resolvableDependencies中查找。检查resolvableDependencies。到容器中,使其可被其他 Bean 依赖注入。在singletonObjects中查找。的依赖注入需求,特别是容器自身基础设施。检查singletonObjects。需要BeanFactory类型依赖。作为完整 Bean 纳入容器管理。

2025-08-12 15:45:41 958

原创 Spring源码解析 - SpringApplication run流程-refreshContext(context)源码分析

开发者可以自定义关闭钩子,通过实现 ApplicationListener 接口并监听 ContextClosedEvent 事件来实现。@Component@Override// 在这里执行自定义的关闭逻辑// 例如,关闭数据库连接池// }@Override// Add to end of list,添加处理器//前置@Override。

2025-08-12 11:35:12 688

原创 Spring源码解析 - SpringApplication run流程-prepareContext源码分析

null) {//由于之前context是new AnnotationConfigServletWebServerApplicationContext(),使用空构造//会调用父类的public GenericApplicationContext() {//}//通过DefaultListableBeanFactory的super.registerSingleton(beanName, singletonObject);将其注册进单例bean里面,没有bean的创建流程// }

2025-08-11 16:12:07 322

原创 Spring源码解析 - SpringApplication run流程-SpringApplicationRunListener源码以及示例解析 --发现Spring不合理设计漏洞

*** 在 Environment 准备好后把端口改为 9090*/// 必须提供该构造器,Spring Boot 通过反射实例化@Override@Overridereturn 0;// 越小越早执行。

2025-08-08 15:15:55 622

原创 Spring源码解析 - SpringApplication 属性-初始化initializers, listeners -Spring提供的钩子函数

你还可以定义自己的事件类型,并在需要的时候发布这些事件。@Service@Autowired// 执行一些业务逻辑// 发布自定义事件@Component@Override// 在这里处理自定义事件。

2025-08-07 15:41:54 392

原创 Spring源码解析 - SpringApplication初始化bootstrapRegistryInitializers -Spring提供的钩子函数

方法的主要功能是从文件中加载指定类型的工厂类名称,反射创建这些类的实例,并根据@Order注解或实现Ordered接口的顺序对实例进行排序。获取类加载器:用于加载类和资源。加载工厂类名称:从文件中加载指定类型的工厂类名称。创建工厂类实例:反射创建这些类的实例。对实例进行排序:根据@Order注解或实现Ordered接口的顺序对实例进行排序。返回实例集合:返回创建并排序后的实例集合。通过这种方式,Spring Boot 确保在 Spring 容器完全初始化之前完成一些必要的配置和初始化操作。

2025-08-07 15:24:22 939

原创 什么是Java竟态条件?你如何发现并解决竞态条件?

fill:#333;color:#333;color:#333;fill:none;计数器集合类复杂对象状态机无共享通过失败发现竞态条件共享数据类型ThreadLocal/局部变量验证修复效果提交代码重新设计不可变对象核心原则优先无锁:使用原子类、并发容器次选细粒度锁:减小同步范围避免过度同步:警惕性能瓶颈设计即防御:默认不可变 + 线程封闭持续验证:压力测试+静态分析常态化竞态条件如同并发编程的"幽灵故障",需通过代码审查、工具检测、压力测试多管齐下才能有效捕获。

2025-08-05 15:23:41 1063

原创 AQS的独占和共享?ReentrantReadWriteLock将独占和共享全部使用--源码解析。

写锁释放时,只直接唤醒一个线程;但 AQS 的共享传播机制让读线程自己继续唤醒后续所有读线程,直到写线程为止,从而实现了“写锁释放→所有读锁被唤醒”的效果。

2025-08-05 11:39:38 270

原创 Linux Epool的作用

是 Linux 下高效处理海量并发 I/O 事件(尤其是网络连接)的核心机制,通过事件表、就绪列表和回调避免了selectpoll的性能瓶颈,支持高效的 ET/LT 模式。通过 Java NIO (Selector) 间接使用。在 Linux 上通常底层使用epoll。你需要编写事件循环来处理ACCEPTREADWRITE等事件。直接使用 Java NIO API 构建高性能网络服务复杂度高。对于生产级应用,强烈推荐使用 Netty 等成熟框架,它们基于 NIO/epoll。

2025-08-04 22:07:43 712

原创 八股文误区,小于corePoolSize时候创建的是核心线程吗?该核心线程不会被回收吗?ThreadPoolExecutor.class源码分析

动态身份机制这是线程池最精妙的设计之一用简单条件实现弹性线程管理资源优化高峰时:允许临时线程(包括原核心线程)回收常态时:维持核心线程常驻公平性不依赖"先来后到"的固定身份根据当前负载动态调整所有线程行为最终一致性长期空闲后,线程池总会收敛到 corePoolSize最终保留的线程获得"核心"身份高峰时弹性扩展(包括利用原核心线程)空闲时高效收缩(不区分原始身份)最终维持核心服务能力。

2025-08-04 17:28:30 838

原创 Java线程池实现与管理详解--源码向

非核心线程创建条件核心线程都在忙碌任务队列已满当前线程数小于最大线程数任务分配机制新创建的非核心线程直接执行触发它创建的任务后续任务从队列中获取(使用线程回收机制非核心线程使用获取任务超时返回null后,线程退出循环执行清理线程资源队列操作区别入队:始终使用offer()(非阻塞,立即返回结果)出队take()(永久阻塞)(超时等待)资源优化非核心线程只在高峰期创建空闲时自动回收,避免资源浪费通过keepAliveTime精细控制回收时机。

2025-08-04 15:46:13 804

原创 sun.misc.Unsafe 类详解

public final native boolean compareAndSwapObject(Object var1, long var2, Object var4, Object var5) 是 sun.misc.Unsafe 类中最重要的原子操作方法之一,用于实现无锁并发编程。是 Java 提供的一个底层操作类,允许直接操作内存、绕过安全机制执行敏感操作。当且仅当字段当前值等于预期旧值 var4 时,才将字段值更新为新值 var5。var1: 包含目标字段的对象(如果是静态字段,可以传入类对象)

2025-08-04 10:05:27 934

原创 CompletableFuture,CyclicBarrier,CountDownLatch多线程同步编排原理。

使用控制线程阻塞通过的 CAS 操作原子更新状态当计数器归零时触发的级联唤醒利用 CLH 队列和 PROPAGATE 状态保证唤醒完整性这种设计在保证线程安全的前提下,最大程度减少了同步开销,特别是当等待线程数量较大时,级联唤醒机制相比传统唤醒方式有显著性能优势。

2025-08-01 16:40:47 452

原创 监视器(Monitor)内部,是如何做线程同步的?

监视器(Monitor)是Java中实现线程同步的核心机制,每个Java对象都内置了一个监视器。

2025-07-31 09:30:11 720

原创 可重入锁底层AQS,CLH状态

state 变量。

2025-07-31 09:12:28 378

原创 Seata与消息队列(如RocketMQ)如何实现最终一致性?

的混合模式,核心思路是通过 Seata 保障核心业务事务的原子性,利用消息队列实现跨服务异步解耦。这种架构平衡了数据一致性与系统性能,是分布式系统中应用最广泛的最终一致性实现范式。Seata 与消息队列(如 RocketMQ)结合实现最终一致性,通常采用。拦截器,在分支事务注册时同步注册 RocketMQ 事务。1. 开启Seata全局事务。4. 提交Seata事务。2. 执行业务SQL。

2025-06-14 17:01:20 1028

原创 如何处理Seata的长事务超时问题?

超时配置原则fill:#333;color:#333;color:#333;fill:none;预估业务最大耗时设置全局超时=最大耗时*2设置TC重试超时=全局超时/3设置本地事务超时=全局超时/2事务设计规范单个事务不超过3个RPC调用事务执行时间控制在5秒内避免在事务中进行文件操作、远程调用等阻塞操作性能优化技巧fill:#333;color:#333;color:#333;fill:none;长事务优化拆分事务链异步非关键操作并行化处理设置合理超时应急响应流程。

2025-06-14 15:20:37 1622 2

原创 如何监控Seata的事务执行状态?

Override@Override@Override// 注册监听器。

2025-06-14 15:19:27 803

原创 Seata的Undo Log存储机制是什么?

是其AT(Auto Transaction)模式实现分布式事务回滚的核心机制,通过记录数据变更前的快照(before image)和变更后的状态(after image),支持分支事务的回滚操作。1. 查询当前值(Before Image: stock=100)1. 查询Undo Log(根据xid+branch_id)3. 生成逆向SQL(用Before Image恢复数据)本地事务提交(业务数据+Undo Log原子写入)4. 写入Undo Log到undo_log表。5. 删除Undo Log记录。

2025-06-14 15:17:34 1100

原创 Seata的事务隔离级别是如何保证的?

Seata(Simple Extensible Autonomous Transaction Architecture)在分布式事务中主要支持。实现写隔离,而读隔离则依赖业务设计。,其事务隔离级别的保证与传统数据库的隔离机制不同,主要通过。Seata的设计体现了分布式事务中的经典权衡——,因分布式环境下全局快照代价过高。

2025-06-14 15:15:03 540

原创 Seata如何与Spring Cloud整合?

通过以上步骤,Seata 可无缝集成到 Spring Cloud 微服务中,解决跨服务事务一致性问题。需在所有参与事务的微服务中保持一致。

2025-06-14 15:14:30 900

原创 Seata的TC(事务协调器)高可用如何实现?

【代码】Seata的TC(事务协调器)高可用如何实现?

2025-06-14 15:04:27 250

原创 如何设计幂等性接口防止Seata事务悬挂?

Seata事务悬挂主要发生在分布式事务的二阶段处理过程中,当分支事务提交/回滚状态与全局事务状态不一致时产生。

2025-06-14 14:24:16 1062

原创 AT模式下的全局锁冲突如何解决?

【代码】AT模式下的全局锁冲突如何解决?

2025-06-09 11:37:13 266

原创 Seata的AT、TCC、Saga模式的区别及适用场景?

建议搭配使用:核心交易系统使用TCC保证强一致,普通业务系统使用AT提升开发效率,跨多系统的长流程业务使用Saga管理事务边界。

2025-06-03 20:51:20 1359

原创 Seata 面试题解析

Seata的AT、TCC、Saga模式的区别及适用场景?AT模式下的全局锁冲突如何解决?如何设计幂等性接口防止Seata事务悬挂?Seata的TC(事务协调器)高可用如何实现?Seata如何与Spring Cloud整合?Seata的事务隔离级别是如何保证的?如何监控Seata的事务执行状态?Seata的Undo Log存储机制是什么?如何处理Seata的长事务超时问题?Seata与消息队列(如RocketMQ)如何实现最终一致性?

2025-05-29 21:17:44 821

原创 mysql一主多从 k8s部署实际案例

二、Java读写分离实现(Spring Boot示例)一、Kubernetes配置(MySQL主从集群)

2025-05-29 21:11:22 914

原创 如何通过Namespace隔离开发/测试环境?使用Kustomize管理不同环境配置的基本目录结构是怎样的?

一、Kubernetes Namespace环境隔离方案。二、Kustomize多环境配置结构设计。

2025-05-29 17:18:10 308

空空如也

空空如也

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

TA关注的人

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