自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 arthus协助线上问题排查

摘要:线上排查"AI分析报告"菜单未展示问题,通过检查代码更新、数据验证和配置确认均无异常。最终使用Arthas工具监听方法调用,发现用户配置的组件路径前存在空格导致匹配失败。本次排查经验表明:细节问题需要多工具验证,Navicat未发现的问题通过Arthas一目了然,体现了线上问题排查的典型思路与方法。(148字)

2025-11-25 14:49:53 381

原创 MySQL 数据库优化设计:优化原理和数据库表设计技巧

MySQL数据库优化设计要点 本文深入探讨MySQL数据库优化的三个核心维度:字段类型选择、索引策略和存储引擎特性。在字段类型方面,强调根据数据特性选择CHAR/VARCHAR和最小数字类型,使用UNSIGNED确保数据完整性。索引设计重点讲解B-Tree结构优势、避免回表的聚簇索引与二级索引区别,以及覆盖索引和最左前缀原则的应用。存储引擎部分对比InnoDB和MyISAM,突出InnoDB的行级锁对并发性能的提升。此外,还详细分析了联表查询的嵌套循环连接算法及其优化策略,包括为关联字段建立索引和小表驱动大

2025-10-16 21:30:00 1115

原创 客户端加密 和 服务端加密:端到端安全的真正含义

加密技术的核心,始终是在用户绝对的隐私控制和中心化带来的便利性/功能性之间找到一个最合适的落点。如果你在构建的是隐私至上的应用,例如安全通讯、密码管理、医疗/法律数据存储,那么客户端加密是唯一选择。如果你在构建的是功能和用户体验优先的应用,例如云存储、企业 SaaS、数据分析平台,那么服务端加密会更实用、高效。当你真正理解了“自己上锁再寄出”和“让别人帮你上锁”的区别,你就彻底掌握了现代安全架构的基石。这就是为什么WhatsApp 可以做到端到端,以及为什么Crypto 钱包丢了助记词就真的再见了。

2025-10-09 18:04:19 1120 2

原创 Java并发编程:从源码分析ThreadPoolExecutor的三大核心机制

本文深入解析Java线程池ThreadPoolExecutor的三大核心机制:1) 巧妙利用ctl变量同时存储线程池状态和线程数,通过位运算高效管理;2) execute()方法的三步决策流程,优先创建核心线程、次优入队、最后创建临时线程或拒绝任务;3) Worker机制通过AQS实现任务获取与执行的安全控制。源码设计精妙,对临界场景的兜底处理值得学习,展现了Java并发编程的精髓。

2025-09-30 21:00:00 812

原创 性能革命的底层逻辑:深入理解 Spring Cloud Gateway 的 Reactor 核心

本文深入解析了Spring Cloud Gateway高性能背后的核心机制——Project Reactor响应式编程框架。文章首先对比传统阻塞式I/O模型的瓶颈,指出Reactor通过非阻塞I/O和事件驱动模式,实现用少量线程处理高并发的优势。重点介绍了Reactor的核心概念:包括数据流模型(Publisher/Subscriber)、背压机制以及Mono/Flux两种核心类型。详细阐述了操作符(如map/flatMap)的异步处理能力,并通过代码示例对比了响应式与传统阻塞式编程的区别。最后深入讲解了调

2025-09-29 20:30:00 796

原创 Java并发编程: 探索synchronized的奥秘

synchronized 是 Java 实现线程安全的关键字,它通过原子性、可见性和有序性保证多线程安全。底层基于对象头和 Monitor 机制,利用 CAS 和内存屏障实现锁管理。在字节码层面,方法同步使用 ACC_SYNCHRONIZED 标记,代码块同步则通过 monitorenter/monitorexit 指令实现。ObjectMonitor 机制包含 OwnerThread、EntryList 和 WaitSet,管理线程的竞争与等待。实际应用中,它能有效解决共享变量并发访问问题,如计数器递增的

2025-09-28 22:00:00 986

原创 Java 并发编程:BlockingQueue vs wait/notify 详解

本文对比了Java并发编程中实现生产者-消费者模式的两种方式:使用wait/notify和BlockingQueue。wait/notify方式灵活但易出错,适合教学理解原理;BlockingQueue更简单安全,通过ReentrantLock和Condition自动处理线程同步,推荐使用ArrayBlockingQueue等实现类。文章分析了两种方式的代码实现和特点,并介绍了BlockingQueue的内部机制和常见实现类。

2025-09-26 11:58:52 659

原创 揭秘设计模式:状态设计模式 优雅地管理对象状态

摘要: 状态模式通过将对象行为封装到独立的状态类中,避免 if-else 逻辑膨胀。以在线订单系统为例,不同状态(新建、已发货、已完成等)的行为和转换由各自类(如 NewState、ShippedState)实现,上下文类(Order)仅委托当前状态处理操作。这种设计符合开闭原则,提升可维护性,简化复杂状态管理。示例代码展示了状态转换的清晰流程,如从新建到发货的迁移。状态模式是优化多条件分支代码的优雅解决方案。

2025-09-24 22:30:00 975

原创 XSS 攻击?别怕,我们来聊聊怎么把它防住!

XSS攻击防护指南 XSS(跨站脚本攻击)是一种常见的网络安全威胁,攻击者通过注入恶意脚本到网页中,窃取用户数据或执行恶意操作。XSS攻击分为三种类型:反射型(非持久性)、存储型(最危险,持久性)和DOM型(客户端执行)。防护措施包括:1)服务器端输入过滤净化;2)前端输出编码转义;3)实施内容安全策略(CSP)限制脚本来源。Spring Boot应用中可通过自定义过滤器和请求包装类实现XSS防护,重写参数获取方法进行输入净化。多层次的防护策略能有效降低XSS攻击风险。

2025-09-23 19:23:12 611

原创 揭秘xxl-job:从高可用到调度一致性

XXL-JOB分布式调度系统的高可用机制解析 本文深入探讨了XXL-JOB分布式调度系统的高可用实现机制,主要包括三个核心方面: Admin多节点部署:通过共享中心数据库实现调度中心的高可用,避免单点故障风险,确保调度服务持续运行。 调度一致性保障:采用数据库行级锁机制解决多节点环境下的任务重复调度问题,保证同一任务只被一个节点处理。 执行器高可用机制:通过心跳检测和故障转移策略,当执行器宕机时自动将任务重新调度到健康节点,保障任务可靠执行。 文章还通过源码分析展示了系统如何实现故障检测和任务重新调度的技术

2025-09-19 18:41:30 762

原创 Java 25 新特性 更简洁、更高效、更现代

Java 25作为长期支持(LTS)版本正式发布,带来多项现代化改进。主要更新包括:基本类型模式匹配简化代码、模块导入减少冗余、轻量级main方法便于入门、Record类增强数据安全、结构化并发优化多线程管理。性能方面推出向量API、紧凑对象头和分代Shenandoah GC,并增强JFR监控能力。安全更新支持现代加密标准,同时移除32位支持专注64位系统。这些改进使Java更简洁、高效且安全,既降低学习门槛又提升专业开发体验。

2025-09-18 21:30:00 1116

原创 Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查

Spring Cloud Gateway 404 问题排查摘要 在网关开发中遇到一个异常现象:通过IP访问http://localhost:9900/api-user/xxxx1正常,但域名访问http://xxx.xxx.xxx:9900/api-user/xxxx1返回404。通过源码分析发现,RoutePredicateHandlerMapping在路由匹配时使用getRawPath()获取原始路径,而域名请求的路径解析存在问题。关键在于getRawPath()返回的未解码路径在路由匹配时无法正确识别

2025-09-17 20:30:00 962

原创 揭秘XXL-JOB:Bean、GLUE 与脚本模式的底层奥秘

XXL-JOB任务执行机制解析:本文通过可视化流程图和源码分析,深入剖析XXL-JOB任务执行的完整流程。系统采用RPC通信机制,调度中心(xxl-job-admin)将任务分发给执行器(ExecutorBizImpl),由JobThread线程队列实现任务排队执行,确保高并发场景下的稳定性。文章重点解析了三种任务模式:Bean模式通过注解注册任务方法;GLUE模式动态编译Groovy代码;脚本模式直接执行脚本文件。核心类JobThread.java和ExecutorBizImpl.java的源码分析揭示了

2025-09-15 21:45:00 991

原创 揭秘 XXL-JOB 调度:从代码深处看路由策略的精妙设计

XXL-JOB分布式任务调度框架的核心奥秘在于其精妙的路由策略设计。文章深入分析了调度中心与执行器的协作机制,揭示了任务从表单配置到代码执行的全过程。重点剖析了路由策略的实现原理,包括枚举与实例的绑定机制,以及轮询、随机、故障转移等具体策略的代码实现。通过线程池异步处理和原子计数器等设计,XXL-JOB确保了任务调度的高效性和可靠性。这种架构设计使得系统能够智能分配任务,应对节点故障等分布式环境下的挑战。

2025-09-12 22:45:00 731

原创 揭秘设计模式:命令模式-告别混乱,打造优雅可扩展的代码

命令模式通过将请求封装成对象,彻底解耦调用者和执行者,实现代码优雅扩展。核心思想是定义Command接口,由具体命令绑定接收者与操作,调用者仅依赖接口执行。对比传统紧耦合代码,命令模式轻松支持撤销/重做、异步任务队列等高级功能,在Spring事务、Swing事件等场景广泛应用。虽然可能增加类数量,但其模块化设计使系统更灵活健壮,特别适合需要行为参数化、操作历史记录等复杂业务场景。

2025-09-10 23:00:00 603

原创 揭秘设计模式:一个转接头,竟然能让你的代码更优雅?聊聊适配器模式

本文介绍了适配器模式(Adapter Pattern)在软件开发中的应用。适配器模式通过将不兼容的接口转换成统一的目标接口,使原本无法协同工作的类能够无缝协作。文章以音频播放器为例,展示了如何使用适配器将WAV播放器适配到统一的媒体播放接口中,并分析了该模式在Spring框架中的实际应用。适配器模式的优势包括实现开闭原则、责任分离和新老系统无缝对接,是解决接口不兼容问题的优雅方案。

2025-09-09 12:09:25 310

原创 揭秘设计模式:工厂模式的五级进化之路

工厂模式是软件开发中解决对象创建问题的关键设计模式,其进化历程分为五个层级:0级硬编码直接new对象,导致代码臃肿难维护;1级简单工厂通过专门类管理对象创建,但工厂会随产品增多而膨胀;2级工厂方法为每个产品创建专属工厂,提高了扩展性但增加了类数量;3级抽象工厂能创建整套相关产品,适合套餐类需求但扩展性受限;4级注册式工厂通过中央注册中心动态管理工厂,实现彻底解耦,代表如Spring的IoC容器。该模式在支付系统、GUI开发等场景广泛应用,是构建可扩展系统的利器。

2025-09-08 23:15:00 867

原创 解密设计模式:别再被内存问题困扰了!聊聊你可能忽略的“享元模式”

设计模式中的享元模式是一种优化内存使用的精妙方案,它通过分离对象的内在状态(共享部分)和外在状态(独有部分)来大幅减少内存消耗。文章通过游戏开发和Java字符串常量池两个实例,生动展示了享元模式的实际价值,并提供了完整的Java代码实现,包括享元接口、享元类、享元工厂和客户端调用。同时,文章还澄清了享元模式与单例模式的区别,前者关注共享相似对象的内存,后者保证全局唯一性。享元模式的核心思想是"分治",将复杂问题分解为可共享和不可共享的部分,从而实现高效复用。

2025-09-04 23:30:00 653

原创 揭秘设计模式:优雅地为复杂对象结构增添新功能-访问者模式

访问者模式是一种行为型设计模式,它允许在不修改对象结构的前提下为其添加新的操作。通过将数据结构与操作逻辑分离,访问者模式完美解决了传统方法中因类型判断导致的代码臃肿问题。该模式利用双分派机制,在元素类中定义accept方法接收访问者对象,再由访问者实现针对不同元素的具体操作。当需要新增功能时,只需创建新的访问者类即可,无需修改现有元素类,符合开闭原则。典型的应用场景包括文档处理、编译器设计等需要处理复杂对象结构的系统。

2025-09-03 21:45:00 834

原创 揭密设计模式:像搭乐高一样构建功能的装饰器模式

装饰器模式是一种动态扩展对象功能的设计模式,通过组合而非继承的方式为对象添加新职责。核心思想是定义一个统一接口,基础对象和装饰器都实现该接口,装饰器持有基础对象的引用并增强其功能。以咖啡店为例,基础黑咖啡可被牛奶、糖等装饰器动态组合,灵活添加新功能而不修改原有代码。该模式符合开闭原则,避免子类爆炸,广泛应用于Java I/O流、Spring AOP等场景。关键优势在于运行时动态组合功能,增强代码可维护性和扩展性。

2025-09-02 22:00:00 743

原创 揭秘设计模式:从UI按钮到Spring事件的观察者模式

观察者模式是一种行为型设计模式,它定义对象间的一对多依赖关系,当被观察者状态改变时,所有依赖它的观察者会自动收到通知并更新。该模式包含三个核心角色:观察者接口(定义更新方法)、被观察者(管理观察者列表和通知机制)和具体实现类。通过Java代码示例展示了如何实现UI按钮点击事件的解耦,使业务逻辑与UI逻辑分离。观察者模式广泛应用于事件处理系统,如Spring事件机制,能有效降低组件间的耦合度,提升系统灵活性和可扩展性。典型应用场景包括UI事件监听、消息通知系统等需要松耦合通信的场景。

2025-09-01 20:15:00 619

原创 XXL-JOB 失败任务处理:深度解析其工作机制与源码实现

XXL-JOB失败任务处理机制解析:通过执行器检测异常、显式结果码、超时及宕机等失败情况,并将失败信息上报调度中心。调度中心通过AdminBizImpl.callback处理回调,更新日志状态并触发重试或告警。核心组件JobFailMonitorHelper管理重试队列,JobThread监控任务超时,ExecutorRegistryThread通过心跳机制检测执行器状态。该机制确保任务失败后能自动重试或告警,保障系统稳定性。

2025-09-01 20:00:00 942

原创 深入理解解释器模式:构建可扩展的语言解释器

讨了解释器模式(Interpreter Pattern),一种行为型设计模式。文章首先通过一个简单的数学表达式求值示例,阐述了其核心思想:将语言的文法规则定义为一系列类,并构建一棵语法树来解释和执行表达式。文章详细解析了该模式的四大核心角色:抽象表达式、终结符表达式、非终结符表达式和上下文。接着,通过对比组合模式和责任链模式,文章清晰地辨析了解释器模式在结构和行为上的独特之处,强调了其**“自由组装”和递归处理**的特性。

2025-08-29 09:20:55 670

原创 SQLi-Labs 1-10道题思路整理

本文总结了SQLi-Labs第1-10题的解题思路。前四题主要考察不同类型注入:Less-1单引号字符串注入(需闭合引号+union查询);Less-2整数型注入(无需引号);Less-3/4分别引入括号+单引号/双引号变体(需额外处理闭合符号)。从Less-5开始难度升级,引入双注入概念,成功时无直接输出(需盲注技巧),Less-6延续双引号注入但使用双引号变体。每道题都通过分析源码漏洞点(如未过滤的SQL拼接),给出具体测试和注入方法(如order by确定列数、union select获取信息)。随着

2025-08-14 18:31:44 912

原创 k8s搭建的一些问题记录

k8s 搭建 问题记录

2022-10-03 01:27:41 9459

原创 一次springboot日志不生效问题深入分析

记录一次springboot项目排查log4j2日志不生效的问题分析。

2022-09-23 10:16:53 1899

原创 spring-session的一次问题排查

spring-session 一次问题排查

2021-12-14 20:07:25 727

原创 dubbo SPI梳理

SPI梳理0.测试代码1.getExtensionLoader(Protocol.class)public static <T> ExtensionLoader<T> getExtensionLoader(Class<T> type) { if (type == null) { throw new IllegalArgumentE...

2019-08-21 17:26:05 204

原创 mybatis 动态sql 源码解析

mybatis 动态sql测试例子java程序xml文件调试直接进入到解析select语句的地方进入解析xml进入buildStatementFromContext,依然是交给XMLStatementBuilder解析核心部分创建SqlSource交给XMLLanguageDriver后再转到XMLScriptBuilder先读取xm...

2019-04-29 17:12:00 1257

原创 mybatis XMLScriptBuilder

解析XMLScriptBuilderXMLScriptBuilder解析sql语句里面的标签XMLScriptBuilder内部逻辑主入口,最终返回对MixedSqlNode的封装,根据isDynamic决定具体SqlSource的实现类。MixedSqlNode的生成逻辑我去,node.newXNode()里面还有解析逻辑,调试才看出来,怎么多了一次${}解析...

2019-04-23 13:44:25 614

原创 java - List深入

什么是ListList接口中常用的三种linkedList,ArraylList,Vector。list接口定义了,我们开发需要的容器操作,是一个有序,值可重复的容器。ArrayListArrayList本质上是一种数组,它不仅仅是数组,还是一个Resizable-array的数组 上面截图也描述的非常清楚,它是线程不安全的。 Vector则是线程安全的,线程安全所带来的弊端则...

2018-04-13 16:03:39 384

原创 xml解析---java的DOM,SAX,JDOM,DOM4J

xml是一种常见的文本格式,可以为我们提供各系统件信息传输的标准,以及信息持久化存储的模式。通常在接口设计上,报文格式往往就是json和xml两种。json来说更轻量一点,解析也相对容易。然而现在是xml的时间。。。java中解析xml方式常见有4种 官方提供的两种 1. DOM 2. SAX 扩展方式2种 1. JDOM 2. DOM4JDOM是 W3C 组织推荐的处理 ...

2018-02-19 22:50:51 374

原创 反射

java中提供了一种叫做反射的方式,这个东西能够帮助我们架构更加的优美。之前在项目中,遇到一个问题:对外提供接口,需要根据前端请求的url来进入不同的逻辑执行方法中。如果简单粗暴的通过添加多个if来控制进入不同的方法,就显得不专业了。 新增功能需要添加if判断,完全远离了设计本质。这篇文章并不是深入其原理,仅在使用层面上花费口舌。(哎,能力有限啊,后续慢慢深入学习)java为我们提供了...

2018-02-18 16:16:42 267

原创 代理模式

代理模式以下是个人知识储备有限,理解有限,大牛勿喷。 代理模式就我们生活中的代理服务,火车票代售处一样,能够提供原本服务器或火车站原本的功能,同时提供一些额外的服务。下面举出一个场景,虽然场景不是很好,用 车和售票处这些会比较好理解。 但是学习其中的本质就好了。脱离场景学习本质,能够不用根据场景去思考代码的存在意义,而不是机械的照搬,这才是学会了。同时一个设计模式的来源又...

2018-02-17 16:06:28 1193

原创 jdbc记录

jdbc为java开发者提供了操作数据库标准的一系列API越来越多的orm框架让我们逐渐忘记基本的jdbc操作,java没有帮助我们把一些基本步骤封装进去,需要我们自己去写一些步骤过程或者orm帮我们封装好。1.jdbc基本步骤加载对应数据库的jdbc驱动连接对应的数据库获取对应数据库的连接创建statment对象拼装需要执行的sql语句执行sql处理sql执行的结果关...

2018-02-16 17:17:56 203

原创 mybatis-generator相关配置

mybatis-generator相关配置详解留给自己平时查看记录。<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd

2018-02-15 18:58:17 282

原创 git 平时积累

git取消未commit的缓冲文件 git reset --mixed git 取消已经commit的缓冲文件 git rm --cached 文件名

2018-02-15 00:16:07 296

原创 ORA-01950:对表空间 'xxx' 无权限

项目中遇到 登陆时 出现ORA-01950:对表空间 'xxx' 无权限,执行 ALTER USER   用户名 QUOTA UNLIMITED ON表空间;   赋予用户对某个表空间的访问权限ALTER USER 用户名QUOTA 1K ON 表空间; //可以在表空间system中使用1K的空间....

2017-02-04 16:06:03 86221 3

空空如也

空空如也

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

TA关注的人

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