自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 minio 上传失败(Access Denied)排查 Checklist

Minio上传失败(Access Denied)排查指南 当Minio上传出现权限拒绝时,建议按以下流程排查: 权限检查:验证桶权限、密钥有效性及政策配置,确保上传操作被允许 环境验证:检查时间同步、服务状态、端口防火墙等基础条件 网络配置:排查代理设置,确保请求头不篡改,跨域配置正确 客户端配置:核对端点、签名版本及文件路径等参数 日志分析:通过服务端/代理/客户端日志定位具体错误 优先检查近期变更项(如代理/配置调整),按照"权限→环境→网络→配置→日志"顺序逐步排查。

2025-11-20 11:35:51 561

原创 minio上传失败提示Access Denied

摘要:Minio上传失败报错"Access Denied",经排查发现新增的Nginx节点修改了请求报文头,导致权限校验失败。检查确认服务器时间、桶权限均正常,通过变更回滚测试定位到Nginx对请求头的修改是根本原因。问题表现为上传异常但读取功能正常,最终确认是Nginx转发时篡改报文头触发的权限校验问题。(149字)

2025-11-20 11:35:02 219

原创 微信小程序白屏判定

摘要:文章讨论白屏判定标准,指出当页面95%像素颜色相同时即被判定为白屏,包括其他纯色情况。目前尚缺乏专门工具检测白屏现象。配图示意了这一判定标准。

2025-11-19 10:48:30 101

原创 【TiDB历史数据优化实战:新数据自增后,200万雪花ID数据这样优化最安全高效】

分布式数据库的性能优化,优先“优化存储分布”而非“修改数据本身”。针对“历史雪花ID数据分散、新数据自增集中”的场景,最安全高效的方案是:通过TiDB无锁DDL命令合并历史数据的分散Region,不触碰任何业务数据,在零风险前提下彻底解决性能问题。这种“不折腾数据”的优化思路,既保障了业务连续性,又能最大化发挥TiDB按范围存储的性能优势。

2025-11-05 11:18:02 749

原创 【雪花算法与主键自增:场景适配指南,从分布式特性到业务需求】

雪花算法和主键自增是两种主流的ID生成策略,各有适用场景。雪花算法适合需要全局唯一性、低数据库依赖、高并发的场景,如跨服务订单ID、日志系统等,其时间戳特性还能简化时序查询。主键自增则更适用于单集群内业务、频繁范围查询、对ID连续性有要求的场景,如财务流水、会员系统等,在TiDB等分布式数据库中能优化存储性能。选型关键是根据业务需求权衡全局唯一性与存储性能、低依赖与连续性,没有绝对优劣,只有场景适配。

2025-11-05 10:49:12 367

原创 【200万数据量下,TiDB用雪花算法会慢吗?从ID分布到性能的深度解析】

摘要 在TiDB+MyBatis-Plus架构中使用雪花算法生成ID时,当数据量达到200万级别会出现显著性能下降。问题根源在于雪花算法ID的跳跃性分布与TiDB按主键范围分裂Region的机制存在冲突:跳跃ID导致数据分散在大量小Region中,引发插入事务Prewrite阶段耗时飙升(可达5秒)、范围查询需要扫描更多Region(耗时成倍增加)、并造成集群资源浪费。虽然理论上在单一实例、低并发等特殊场景下问题可能缓解,但实际分布式系统中难以满足这些条件。建议TiDB优先使用自增主键以获得更好的性能表现,

2025-11-05 10:45:02 301

原创 【200万数据量下,TiDB用雪花算法会慢吗?从ID分布到性能的深度解析】

摘要 在TiDB+MyBatis-Plus架构中使用雪花算法生成ID时,当数据量达到200万级别会出现显著性能下降。问题根源在于雪花算法ID的跳跃性分布与TiDB按主键范围分裂Region的机制存在冲突:跳跃ID导致数据分散在大量小Region中,引发插入事务Prewrite阶段耗时飙升(可达5秒)、范围查询需要扫描更多Region(耗时成倍增加)、并造成集群资源浪费。虽然理论上在单一实例、低并发等特殊场景下问题可能缓解,但实际分布式系统中难以满足这些条件。建议TiDB优先使用自增主键以获得更好的性能表现,

2025-11-05 10:44:29 331

原创 【TiDB Region分析指南:如何精准判断Region数量与分散程度】

摘要 TiDB分布式架构中,Region数量和分散程度直接影响性能。200万条数据表的Region数量正常应为2-3个(64MB/Region),若分散到20+Region会导致性能下降。通过两种方法判断: Region数量判断: TiDB Dashboard可视化查看 SQL查询information_schema.tikv_region_status系统表 Region分散程度分析: Dashboard查看Region范围连续性 SQL查询Region主键范围并计算间隙 优化标准:Region数量超标(

2025-11-05 10:43:48 487

原创 【TiDB历史数据优化指南:代码改自增后,200万历史数据是否需要优化?怎么优化?】

摘要:本文针对TiDB中200万历史雪花ID数据的优化问题,提出完整解决方案。首先提供3个判断标准(Region数量异常、性能瓶颈、业务依赖)决定是否优化,然后推荐两种优化方案:优先使用无锁的REORGANIZE PARTITION命令合并分散Region(生产首选),或在低峰期通过重建表方式彻底优化。优化需注意资源负载监控和备份,并通过Region数量、性能指标和资源使用验证效果。最终实现新旧数据性能统一,提升集群整体稳定性。(150字)

2025-11-05 10:42:40 844

原创 TiDB插入慢深度分析:5秒耗时背后的Prewrite阶段瓶颈与根因拆解

TiDB插入性能问题深度分析:雪花ID与数据分布碎片化的致命冲突 本文剖析了TiDB在200万数据表上单次insert操作耗时5秒的异常现象。根本原因是MyBatis-Plus全局配置的雪花算法ID生成策略与TiDB存储特性的不匹配:跳跃性雪花ID导致数据分散存储在187个Region(正常仅需2-3个),使Prewrite阶段需要与大量Region Leader交互,网络延迟和资源竞争使耗时线性增长。验证发现Region数量与Prewrite耗时直接正相关,修改为TiDB自增ID后性能立即回升至50ms内

2025-11-05 10:39:50 967

原创 【TiDB 插入性能优化实战:从 5 秒到毫秒级的跨越】

摘要:本文分享了一次TiDB插入性能优化实战,单次插入耗时从5秒降至毫秒级。问题源于ID生成策略冲突:表定义使用AUTO_INCREMENT,但代码通过MyBatis-Plus全局配置了雪花算法,导致主键分散、Region激增,使Prewrite阶段耗时剧增。解决方案是在实体类显式指定@TableId(type=IdType.AUTO)。文中深入分析了雪花算法与自增主键的性能差异,并提供了Region分布诊断方法、历史数据优化方案及两种ID策略的适用场景对比,强调分布式数据库中ID生成策略与存储特性的匹配重

2025-11-05 10:29:33 653

原创 【HTML分离术】

这篇文章介绍了一种新型HTML页面实现技术,即"框架与内容分离术"。文章首先描述了作者发现该技术的经历:通过curl获取的HTML页面body为空,而浏览器却显示完整内容。技术原理分为两部分:(1)服务端只提供空壳HTML框架;(2)前端JS动态请求内容并渲染到body中。文章分析了这种方式的优缺点:优点包括前后端解耦、内容动态更新和轻量初始加载;缺点涉及SEO不友好、JS依赖和白屏风险。最后指出其适用于后台系统、高频更新页面和SPA等场景,强调技术选择需权衡利弊。

2025-10-11 17:40:28 379

原创 【看房清单】

购房全流程核查指南 看房前需核查房源信息、政策适配性、风险筛查及周边配套,重点关注产权年限、学位占用、抵押情况等核心指标。现场看房时需检查房屋质量、采光、空间布局及不利设施,确保无结构隐患,并实测周边交通、教育配套的实际状况。证件核查环节需严格核验产权证书、交易文件、学位证明等材料的真实性与完整性,避免产权纠纷或政策风险。 该指南通过分级标准(加分项/可接受项/不可接受项)提供系统化核查框架,帮助购房者高效规避风险,确保交易安全。

2025-09-27 13:54:38 1215

原创 UniApp+Android Studio 打包踩坑:Android 12 闪退,Android 15 正常?超大图的锅!

摘要:一名跨端开发新手在 UniApp 结合 Android Studio 打包时遇到兼容性问题:APK 在 Android 15 正常,但在 Android 12 闪退。通过 ADB 日志发现是超大位图导致内存溢出,最终定位到问题根源——未使用的超大启动图 splash.png 仍被打包进 APK。解决方案是彻底删除该文件,并优化资源管理。文章总结了关键避坑点:抓日志定位问题、控制图片大小、规范资源存放目录、警惕无用资源等。这一案例说明安卓打包兼容性问题常由细节导致,提醒开发者重视资源管理。(149字)

2025-09-18 17:22:14 1387

原创 Spring AOP 通知执行执行顺序完整案例、以及执行时机

本文通过完整案例演示了Spring AOP中各类通知的执行顺序和实现方式,重点介绍了如何使用@Around环绕通知记录方法执行耗时。主要内容包括: 切面类定义:展示五种通知类型的实现(@Before、@AfterReturning、@AfterThrowing、@After和@Around) 执行顺序分析:分别演示了方法正常执行和抛出异常两种情况下的通知执行顺序 关键实现原理:通过@Around通知在方法执行前后记录时间戳来计算耗时 各通知的核心作用:说明不同通知类型的适用场景 案例完整展示了AOP通知的执

2025-08-13 09:55:46 408

原创 vue margin与padding对比

CSS中margin和padding是控制元素间距的核心属性,二者关键区别在于作用区域和效果:margin控制元素外部与其他元素的间距,不影响背景且允许负值;padding调整元素内容与边框的距离,会扩展元素尺寸(默认情况下)并受背景填充。典型应用场景包括:margin用于元素间隔/居中/重叠,padding用于内容边距/点击区域扩展。实际开发中常组合使用,如用margin设置卡片间距,padding控制卡片内边距。

2025-08-06 13:47:09 3071

原创 uni-app,uni.navigateTo

uni.navigateTo是uni-app框架用于页面跳转的核心API,支持保留当前页面并打开非tabBar页面。其特点包括页面栈管理、路径规则、参数传递和跳转限制。与其他uni-app跳转方法(如redirectTo、switchTab)相比,navigateTo适合需要返回的场景。相比微信小程序、Vue和React的路由机制,uni.navigateTo具有跨平台兼容性,可在多端实现统一跳转逻辑。开发者需根据是否需要返回或跳转tabBar页面来选择合适的API。

2025-07-30 10:46:16 986

原创 [渲染层错误] Uncaught (in promise) Error: object null is not iterable

本文记录了作者在微信小程序开发中遇到的渲染层错误排查过程。错误提示为"object null is not iterable",经分析发现同时使用两个<u-input>组件导致的问题。通过将基础库版本从3.8.12降级到3.6.6后问题解决。作者总结了三点经验:代码规范性、工具链版本影响以及分段调试方法的重要性。这次排查体现了开发者面对问题时的系统思考能力。

2025-07-28 16:47:14 2394 6

原创 jvm--java代码对照字节码图解

摘要:三组Java代码示例展示了不同类结构对应的字节码特征。第一组代码无静态方法,其字节码不含<clinit>方法;第二组包含静态方法,字节码生成相应结构;第三组同时包含静态方法和显式构造方法。通过对比可见,Java编译器会根据类成员的不同生成差异化的字节码,特别是静态方法的存在与否直接影响<clinit>方法的生成。这些示例直观呈现了Java类结构与字节码之间的映射关系。

2025-07-15 11:13:58 293

转载 elementUI table表格el-table-column修改字体颜色

摘要:在Element UI表格中,直接给el-table-column添加color:red样式无效。正确方法是通过插槽(slot)自定义单元格内容,使用:style动态设置颜色。示例如下:用slot-scope获取行数据,在div中绑定样式,根据条件显示红色文本。这种插槽方式更灵活,能实现动态样式控制。

2025-07-14 14:31:47 206

转载 Snipaste快捷键(详细总结)

Snipaste快捷键汇总: 全局操作:F1截屏、F3贴图、Esc退出; 截屏模式:Enter复制退出、R恢复上次区域、Tab切换窗口检测; 贴图操作:左键双击关闭、滚轮缩放、Ctrl+滚轮调透明度; 通用功能:Alt调取颜色信息、方向键微移贴图、Ctrl+Z撤销标注。 涵盖截屏、贴图及编辑全流程快捷操作。

2025-07-14 10:10:41 425

原创 Renren框架DistributeLock排他锁实现详解

Renren框架的DistributeLock是基于Redis实现的分布式排他锁,核心采用原子性SET命令加锁和Lua脚本解锁机制。实现原理包括:1)通过SET key value NX PX timeout命令保证原子性获取锁;2)设置自动过期时间防止死锁;3)使用唯一requestId确保只能由锁持有者释放。典型应用场景包括商品库存扣减和订单防重提交,使用时需配置key前缀、唯一请求ID、等待时间和锁有效期等参数。该锁默认不支持可重入,但可通过ThreadLocal记录重入次数实现升级。

2025-07-10 15:15:49 909

原创 jmm-内存屏障

Java内存模型(JMM)中的内存屏障是一种同步机制,用于确保内存操作顺序和可见性,防止处理器和编译器对指令进行重排序。主要分为四类:LoadLoad屏障(保证读操作顺序)、StoreStore屏障(保证写操作可见性顺序)、LoadStore屏障(确保读先于写)和StoreLoad屏障(最强的屏障,保证写操作完成后才能读取最新数据)。这些屏障在volatile和synchronized的实现中发挥关键作用,确保多线程环境下的内存可见性和指令顺序性。

2025-07-07 23:17:42 1134

原创 jmm,`as - if - serial` 与 `happens - before` 原则

摘要:Java并发编程中,as-if-serial原则确保单线程程序执行结果不变的前提下进行优化,如指令重排序不影响最终结果。happens-before原则是Java内存模型的核心,定义多线程操作间的可见性规则,包括程序顺序、锁、volatile变量、线程启动/终止等8大规则。前者保障单线程效率,后者解决多线程可见性问题,二者共同维护Java程序的正确性和性能。理解这些原则对编写线程安全代码至关重要。

2025-07-06 21:47:15 947

原创 java并发编程--可见性、原子性、有序性

摘要:Java并发编程中,保证多线程正确性需关注三大特性:1) 原子性 - 确保操作不可中断,通过synchronized或原子类防止数据竞争;2) 可见性 - 保证线程修改共享变量立即对其他线程可见,使用volatile或synchronized解决;3) 有序性 - 防止指令重排序导致问题,volatile和synchronized能确保执行顺序。这些特性是构建线程安全程序的基础。

2025-07-06 18:42:27 495

原创 JMM--数据原子操作

本文通过Java代码示例和流程图解析了JMM(Java内存模型)的数据原子操作机制。示例代码展示了volatile变量在多线程环境下的可见性特性,流程图详细描述了JMM的8种原子操作(读取、载入、使用、赋值、存储、写入、锁定和解锁)的执行流程。文章还深入分析了JMM缓存不一致问题的根源,包括多处理器缓存差异和MESI缓存一致性协议的工作原理(修改、独占、共享、无效四种状态)。最后解释了缓存加锁机制如何通过总线嗅探实现数据一致性,以及与JMM的关系,指出硬件层面的缓存一致性协议是实现Java内存模型特性的基础

2025-07-05 23:48:52 932

原创 jmm--volatile

指令重排是处理器和编译器为提高效率进行的优化,单线程下不影响结果,但多线程可能导致意外行为。volatile通过JMM规则禁止指令重排,确保多线程安全。示例1展示了单例模式中,volatile防止对象初始化与引用赋值被重排;示例2演示了volatile保证变量修改顺序对其他线程可见。volatile通过限制重排序确保多线程程序的正确执行顺序和预期结果。

2025-07-05 22:48:45 331

原创 jmm--volatile

摘要: volatile是Java解决多线程内存可见性和指令重排序的关键字。它确保变量修改立即写入主内存,其他线程读取时强制刷新,解决了工作内存缓存导致的数据不一致问题。同时,volatile通过内存屏障禁止指令重排序,保证操作顺序性。典型应用包括状态标记(如线程通知)和单例模式的双重检查锁定。但需注意,volatile不保证复合操作(如count++)的原子性,此类场景需结合原子类或synchronized实现线程安全。JVM内存模型中,volatile通过主内存交互机制实现多线程数据同步。(150字)

2025-07-05 22:30:43 833

原创 JVM与JMM

摘要: JVM是Java程序的运行核心,提供跨平台环境,负责字节码执行、内存管理(堆/栈/方法区)和垃圾回收。JMM则是规范多线程访问共享内存的规则,解决可见性、原子性和指令重排序问题。JVM为JMM提供运行基础(如主内存/工作内存),而JMM确保多线程程序的正确性。两者协同工作,JVM侧重整体执行架构,JMM专注多线程内存访问控制。(149字)

2025-07-05 16:29:28 702

原创 Spring Boot类加载机制深度剖析

Spring Boot通过定制类加载机制实现了可执行Jar运行、自动配置等核心特性。其采用简化的两层类加载器模型,移除Tomcat的CommonClassLoader,由SpringBootClassLoader和嵌入式容器类加载器构成。可执行Jar通过LaunchedURLClassLoader加载BOOT-INF目录资源,突破标准Jar限制。自动配置通过类路径扫描spring.factories实现,DevTools热部署采用双类加载器架构(BaseClassLoader+RestartClassLoa

2025-07-04 16:13:09 1150

原创 java类加载机制:Tomcat的类加载机制

Tomcat类加载机制深度解析了其打破标准双亲委派模型的实现原理。文章从四层类加载器架构(Common/Catalina/Shared/Webapp)入手,重点分析了WebappClassLoader优先本地加载的机制及其代码实现。通过独立命名空间和资源优先级设计,实现了Web应用类隔离和热部署功能。文章还对比了独立Tomcat与Spring Boot嵌入式Tomcat的区别,列举了常见问题解决方案,并总结出Tomcat"隔离优先、灵活兼容"的设计思想。这种定制化类加载机制有效解决了多应

2025-07-04 10:40:51 968

原创 Java自定义类热加载实现原理与实践

Java类热加载技术通过自定义类加载器突破JVM限制,实现运行时动态更新类。核心原理包括:利用类加载器隔离性创建新实例、打破双亲委派模型、管理类卸载条件。实现步骤涉及创建自定义类加载器、动态加载/更新类、处理资源依赖。在生产环境中需考虑线程安全、版本管理和性能优化。典型应用包括插件系统、热修复和微服务扩展,但需注意类冲突、内存泄漏等风险。相比OSGi、DevTools等方案,自定义方案更灵活但需更高实现成本。

2025-07-03 18:01:29 970

原创 Shiro DelegatingSubject.login() 源码深度解析及组件职责补全

本文深度解析了Shiro框架中DelegatingSubject.login()方法的实现原理与组件协作机制。该方法作为认证流程的核心入口,通过协调SecurityManager完成认证,并初始化主体状态。文章从源码层面详细剖析了清除模拟身份、认证委托、主体信息提取、有效性校验、状态初始化等关键步骤,同时补充说明了SecurityManager和Subject等核心组件的职责分工。解析揭示了Shiro框架中适配器模式、防御性编程等设计思想,以及线程安全、会话管理等实现细节,为深入理解Shiro认证机制提供了

2025-07-03 15:01:59 931

原创 登录后获取当前用户的多维度实现方案分析

本文分析了三种登录后获取当前用户的实现方案:1)Token携带模式(无状态认证),适合分布式系统但存在性能损耗;2)业务层状态缓存(有状态管理),效率高但线程安全风险大;3)认证上下文绑定(框架级解决方案),安全性高但开发成本较大。方案对比显示,复杂系统推荐采用框架级认证(思路3),微服务场景可结合JWT和Redis优化。最佳实践强调需根据业务需求平衡性能、安全性和开发成本,优先选择成熟认证框架并完善异常处理机制,构建高效安全的用户认证体系。

2025-07-03 15:00:55 735

原创 Java类加载机制在定制化规则引擎中的应用

摘要:Java类加载机制为定制化规则引擎提供了核心支持,实现规则的动态加载、热更新和隔离运行。通过自定义类加载器,规则引擎可以动态加载规则类,支持版本控制和安全沙箱环境。典型实现包括创建独立类加载器、打破双亲委派模型、配合安全管理器限制权限。实践中需注意类加载器管理、内存泄漏风险和性能优化。类加载机制使规则引擎具备动态扩展、隔离运行和安全控制等关键能力,满足复杂业务场景需求。

2025-07-02 10:02:25 986

原创 Java类加载机制中的对象半初始化状态解析

Java类加载机制中的对象半初始化状态是指在对象创建过程中,内存已分配但尚未完全初始化的中间状态。这一状态可能因指令重排序导致其他线程观察到部分初始化的对象,引发线程安全问题。典型例子是双重检查锁定单例模式中未使用volatile的情况。为避免该问题,可采用volatile关键字、静态内部类或枚举单例等方式,确保对象完全初始化后才可被访问。理解半初始化状态的原理有助于编写更安全的多线程代码。

2025-07-02 09:36:10 655

原创 类加载机制的核心功能与应用场景

Java类加载机制是实现动态性和跨平台特性的关键,其核心功能包括:1)动态加载类,支持反射、动态代理和延迟加载;2)通过类加载器实现隔离,确保模块化和安全沙箱;3)支持字节码增强和热部署,实现AOP和运行时修改;4)可自定义加载策略,适配特殊场景。该机制广泛应用于框架设计、微服务隔离、性能优化等领域,为Java的灵活性、安全性和扩展性提供基础支撑。

2025-07-02 09:03:30 906

原创 类加载生命周期与内存区域详解

摘要:Java类加载分为加载、验证、准备、解析和初始化五个阶段。加载阶段在方法区存储类元数据,在堆中创建Class对象;准备阶段为静态变量分配内存并赋默认值;初始化阶段执行静态代码块和显式赋值。方法区存储类结构信息,堆存储实例对象和Class对象,栈处理局部变量和方法调用。特殊情况下,编译期常量在准备阶段直接赋值,而运行时常量需在初始化阶段赋值。理解这些机制有助于掌握Java运行原理,避免初始化顺序等问题。

2025-07-01 22:36:13 1525

原创 页面生命周期的几个方法,及其执行顺序

小程序页面生命周期方法包括onLoad(初始化数据)、onShow(页面显示)、onReady(渲染完成)、onHide(页面隐藏)、onUnload(页面卸载)和onPullDownRefresh(下拉刷新)。首次进入页面时执行顺序为onLoad→onShow→onReady;页面跳转时触发onHide或onUnload;TabBar页面切换仅触发onShow。合理使用这些方法可优化数据请求、DOM操作和资源管理,提升页面性能与用户体验。

2025-06-27 17:30:12 845

原创 Java 类加载机制详解(含图解)

Java类加载机制解析 类加载是Java虚拟机将字节码文件加载到内存并转换为Class对象的过程。整个生命周期分为加载、连接(验证、准备、解析)和初始化三个阶段。Java采用双亲委派模型,类加载器分为启动类加载器、扩展类加载器、应用程序类加载器和自定义类加载器。双亲委派机制确保类加载的安全性和唯一性。自定义类加载器可用于实现热部署和类隔离,需要继承ClassLoader类并重写findClass方法,通过defineClass将字节流转换为Class对象。理解类加载机制有助于解决类冲突问题和优化程序性能。

2025-06-24 16:43:38 789

常用字体包(宋体等等)

simfang.ttf simhei.ttf simkai.ttf simsun.ttc

2025-06-13

NIO群聊系统(java)

NIO群聊系统(java)

2023-05-31

空空如也

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

TA关注的人

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