自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

weixin_46028606的博客

有帮助的记得点赞关注+收藏!!

  • 博客(600)
  • 资源 (2)
  • 问答 (1)
  • 收藏
  • 关注

原创 分布式事务代码

该项目是一个分布式事务解决方案,强调开发者需要具备分布式系统思维,摒弃单机开发模式。项目托管在Gitee平台,提供完整的代码仓库。为了方便测试,项目中的JSON请求示例可直接导入Postman工具进行调试和演示。通过可视化图表展示了系统架构和交互流程,帮助开发者理解分布式环境下的事务处理机制。

2026-04-18 21:15:56 14

原创 用前面你说的小区大门,家门口的例子去解释preHandle / postHandle,包括整个业务请求链路

本文通过“进小区吃火锅”的生动比喻,详细讲解了Web请求处理流程中Filter和Interceptor的作用机制。Filter相当于小区保安,负责全局安全检查(如编码过滤、跨域设置);Interceptor则像朋友家门禁,包含三个关键阶段:preHandle(身份验证)、postHandle(业务后处理)和afterCompletion(最终清理)。文章通过6个步骤的完整链路流程表,清晰展示了从请求进入到响应返回的全过程,并强调分层设计的意义:Filter保障系统级安全,Interceptor实现业务级控制

2026-04-18 13:13:32 118

原创 我不理解啊,就是当你用XA模式遇到异常了,需要回滚,利用的是undolog吧,你用AT还是用的undo log,那么AT和XA本质上是一个技术手段,为什么要分成2个名字XA和AT呢???

摘要: Seata AT模式的undo_log表是实现分布式事务回滚的核心,通过记录数据修改前后的快照(Before Image和After Image)实现补偿机制。其核心字段包括: xid与branch_id:标识全局事务与分支事务,确保精准回滚。 rollback_info(BLOB类型):存储序列化的JSON数据,包含修改前后的数据镜像,用于生成反向SQL并校验脏写。 log_status:标记日志状态,防止并发场景下的悬挂问题。 与XA模式不同,AT模式通过业务层的undo_log表(而非数据库内

2026-04-18 00:03:00 350

原创 3PC比2PC引入的超时机制,是什么时刻的超时?应付什么情况的超时?

3PC相比2PC的关键改进在于引入双向超时机制:协调者可在CanCommit/PreCommit阶段超时中止事务,参与者在PreCommit后未收到指令会超时自动提交。这种设计解决了2PC的阻塞问题,通过PreCommit阶段缓冲降低不一致风险,但增加了网络开销。虽然3PC仍存在脑裂问题,但其非阻塞特性为分布式事务提供了重要参考。实际应用中,XA(类2PC)和TCC仍是主流方案。

2026-04-17 16:50:36 329

原创 React,plan and execute和reflection有什么核心优势,解决了什么核心痛点

摘要: 随着大模型发展,智能体(Agent)设计已从单一模式演进为多范式协同。主流范式包括:1)多智能体协作(MAS),通过角色分工(Manager/Worker/Critic)或对抗辩论提升复杂任务处理能力;2)层次化任务编排,递归拆解宏任务并动态调整;3)自我进化与记忆驱动,结合长期记忆检索和自反思实现持续优化;4)资源调度与执行分离(Plan-and-Execute),分阶段规划以提升稳定性。不同范式适用于不同场景,如ReAct适合简单任务,而多智能体协作更适合复杂工程。代表性框架包括MetaGPT、

2026-04-12 16:50:04 390

原创 为什么 ConcurrentHashMap 采用 synchronized 加锁而不采用ReentrantLock

摘要:本文对比了JDK1.7和1.8中ConcurrentHashMap的实现差异。1.7采用Segment+ReentrantLock的分段锁机制,而1.8改用CAS+synchronized方案。核心优化在于:1)取消Segment,直接锁桶节点;2)先用CAS处理空桶,仅当哈希冲突时才使用synchronized锁住头节点。这种转变主要基于:1)synchronized在JVM层面的优化(锁升级、锁消除等);2)相比ReentrantLock更节省内存;3)在细粒度锁场景下性能更优。文章通过源码分析指

2026-04-11 22:24:24 322

原创 为什么不逃逸代表不需要锁,JIT会直接删掉锁

文章摘要:锁在并发编程中用于处理共享资源的竞争问题。当对象不逃逸时,它仅存在于线程私有栈中,其他线程无法访问,因此不存在竞争。JIT编译器通过逃逸分析发现这种情况后,会直接消除无意义的锁操作,提升性能。锁消除避免了内存屏障、CAS操作等开销,使代码执行效率达到无锁水平。这体现了Java优化将多线程环境简化为单线程逻辑的核心思想。

2026-04-11 22:12:28 334

原创 什么是逃逸分析

文章摘要: 逃逸分析是JVM(JIT编译器)的关键优化技术,用于判断对象是否会在方法外部被引用(逃逸)。根据逃逸程度分为三个等级:不逃逸、方法逃逸和线程逃逸。对于不逃逸的对象,JVM会实施三大优化:栈上分配(避免堆内存开销和GC压力)、标量替换(拆解对象为基本类型)和同步消除(删除无效锁)。逃逸分析通过静态分析动态优化热点代码,显著提升Java在高并发场景下的性能,其核心在于区分对象生命周期,从而选择最优的内存分配策略(堆或栈)。

2026-04-11 22:08:59 154

原创 锁消除和锁粗化

│ │ 锁消除 │ 锁粗化 ││ 英文名 │ Lock Elimination │ Lock Coarsening ││ │ │ ││ 做什么 │ 把没用的锁删掉 │ 把多个小锁合并成 ││ │ │ 一个大锁 ││ │ │ ││ 为什么 │ 对象没有逃逸, │ 频繁加解锁的开销 ││ │ 锁毫无意义 │ 大于持有锁的时间 ││ │ │ ││ 关键技术 │ 逃逸分析 │ 代码模式识别 ││ │ │ ││ 典型场景 │ StringBuffer 局部 │ 循环内的 sync、 │。

2026-04-11 21:16:18 246

原创 怎么理解hash&(L-1)等价于hash%L

摘要:当数组长度L为2的幂次时,hash & (L-1)等价于hash % L。这利用了二进制的位运算特性:L-1的二进制全1掩码会截断hash值的高位,保留低位余数。相比取模运算,位与操作速度更快(1个时钟周期vs数十个周期),且能保证哈希分布均匀。这是HashMap性能优化的关键,也解释了其初始容量16和翻倍扩容的设计。该机制通过将算术问题转化为逻辑屏蔽问题,显著提升了集合框架的效率。

2026-04-11 19:29:45 330

原创 为什么会增加TreeMap和TreeSet这两类,有什么核心优势吗?可以解决什么核心痛点?

摘要:Java引入TreeMap/TreeSet主要解决HashMap/HashSet的三大痛点:1) 有序存储,自动按规则排序;2) 高效范围查询,通过红黑树实现O(log n)范围检索;3) 最值/邻近查找,支持快速获取极值或最近键值。虽然查询速度略慢于HashMap(O(1) vs O(log n)),但其核心优势在于数据有序性和范围操作能力。典型场景如排序输出、区间筛选、路由匹配等,需根据需求选择:高频存取用Hash结构,排序和范围操作用Tree结构。

2026-04-11 17:07:36 388

原创 比较坑的线程池有哪些?

Java线程池的常见"坑"包括FixedThreadPool(无界队列导致OOM)、SingleThreadExecutor(同样无界队列)、CachedThreadPool(无限创建线程)和ScheduledThreadPool(线程数无上限)。这些Executors创建的线程池在生产环境中容易引发内存溢出或CPU过载问题。正确做法是直接使用ThreadPoolExecutor手动配置核心参数,包括线程数、有界队列和拒绝策略等。《阿里巴巴Java开发手册》明确禁止使用Executors

2026-04-09 16:55:14 203

原创 MySQL中type字段解析

MySQL EXPLAIN中的type字段表示访问类型,性能从优到劣依次为:system(单行系统表)> const(主键/唯一索引查询)> eq_ref(多表连接主键匹配)> ref(普通索引查询)> range(索引范围扫描)> index(全索引扫描)> ALL(全表扫描)。生产环境查询至少应达到range级别,推荐优化至ref级别。该字段是判断SQL查询效率的关键指标,type值越好代表查询性能越高。

2026-04-08 23:37:24 229

原创 ‘version‘ must be a constant version but is ‘${revision}‘. @ line 14, column 14

Maven构建报错:版本号必须使用静态常量而非变量。错误提示显示项目中的pom.xml文件第14行使用了${revision}动态占位符作为版本号,违反了Maven要求版本号必须是常量字符串(如1.0.0)的规定。建议解决方案包括:1)改用固定版本号;2)使用Maven插件处理动态版本;3)参考官方文档解决变量替换问题。错误详情可通过添加-e或-X参数查看完整日志。

2026-04-06 10:40:20 31

原创 java.lang.reflect.InaccessibleObjectException: Unable to make field static final boolean java.io.Fil

摘要 在JDK17环境下启动Nacos 2.5.2时出现反射权限问题,导致Tomcat初始化失败。错误原因是高版本JDK的模块系统限制了反射访问,Nacos默认启动脚本未适配。解决方案是在启动命令中添加--add-opens java.base/java.io=ALL-UNNAMED参数,临时开放反射权限。修改后的bat脚本使用/k参数保持命令行窗口打开,便于查看日志输出。

2026-04-05 10:09:04 66

原创 org.springframework.web.HttpMediaTypeNotSupportedException: Content-Type ‘text/plain;charset=UTF-8‘

摘要:在Postman中发送JSON请求时,需确保正确设置格式。选择"raw"模式后,将右侧选项从"Text"改为"JSON",并输入有效的JSON内容(如{"id":101})。这样Postman会自动添加Content-Type:application/json请求头,使服务器能正确解析请求体。

2026-04-03 19:19:53 17

原创 图文并茂详解对称加密,非对称加密,数字证书

本文摘要:SSL/TLS协议中,非对称加密使用公钥和私钥对,但存在中间人攻击风险;对称加密则共享唯一密钥,效率更高。HTTPS结合两者,先用非对称加密交换密钥,再用对称加密通信。数字证书通过CA认证解决中间人攻击问题,确保通信方身份真实。若中间人篡改证书或签名,客户端用本地CA公钥验证时会发现异常并发出警告,除非黑客公钥被恶意安装。这一机制保障了HTTPS的安全性。

2025-12-09 16:54:40 550

原创 使用rsync同步100GB大文件报错[2]+ Stopped nohup rsync -avP -e ‘ssh -p

摘要:在使用nohup rsync -avP命令进行服务器间数据传输时,若未配置SSH免密登录,后台任务会因等待密码输入而挂起。解决方案是使用ssh-copy-id命令配置免密登录,示例为:ssh-copy-id -p 22 root@目标服务器IP。该方法可避免传输中断问题。

2025-12-02 10:06:21 263

原创 (图文详解+源码解析)卓望一面:你可以介绍一下常见的分布式ID生成算法吗?

本文介绍了三种主流分布式ID生成方案及其优缺点: 美团Leaf号段模式:通过预分配ID段到内存提升性能(5W+/s),支持高可用和趋势递增,但存在ID连续暴露业务量、依赖数据库等问题,适合订单等需要有序ID的场景。 Twitter Snowflake及增强版:去中心化生成64位ID(含时间戳、机器ID和序列号),美团Leaf通过ZK分配WorkerID,百度UidGenerator采用RingBuffer预生成ID实现超高并发(600W+/s)。优点是无序安全性高,但强依赖时钟,适合消息ID等高QPS场景。

2025-10-26 23:22:51 741 6

原创 从夯到拉的Redis和MySQL双写一致性解决方案排名

本文探讨数据库与缓存同步策略,对比五种方案:1)同步更新缓存存在乱序问题;2)先删缓存后更新数据库可能产生脏读;3)先更新数据库后删缓存仍可能不一致;4)延迟双删通过等待主从同步后二次删除解决一致性问题;5)基于binlog的canal方案实现严格顺序同步,但需引入MQ增加成本。最优方案是延迟双删,在保证数据一致性与系统复杂度之间取得平衡,而canal+MQ方案虽可靠但成本较高。

2025-10-22 16:43:54 705

原创 Redis学习笔记-QuickList

Redis 3.2引入的Quicklist是一种混合数据结构,它是由ziplist节点组成的双向链表,结合了ziplist的高内存效率和linkedlist的操作性能优势。Quicklist通过将多个元素存储在ziplist节点中,减少了指针开销,同时避免了大规模连锁更新的风险。目前它是Redis List类型唯一的底层实现,取代了早期的linkedlist+ziplist组合。用户可以通过配置调整内部ziplist节点的大小,在内存效率和操作性能之间取得平衡。

2025-10-16 19:26:30 833

原创 卓望一面:caffeine比Redis缓存比,有什么优势,为什么要用到caffeine,解决了Redis存在的什么问题,但是他又存在什么其他问题

本文分析了Caffeine与Redis两种缓存的本质区别和协同关系。Caffeine作为本地缓存,具有无网络延迟、无需序列化、高性能的优势,适合处理高频热点数据;Redis作为分布式缓存则提供数据共享和更强一致性。文章指出Caffeine解决了Redis在网络延迟和序列化上的瓶颈,但自身也带来了数据一致性、内存限制等问题。最后给出了典型的二级缓存架构方案,建议将两者结合使用,Caffeine作为L1缓存拦截高频请求,Redis作为L2缓存提供数据共享,形成互补的缓存体系。

2025-10-14 21:11:37 898

原创 卓望一面:泛型擦除-new ArrayList<String>之后可以塞一个Integer吗?

本文展示了如何通过反射绕过Java泛型检查。示例代码创建了一个泛型为String的ArrayList,然后使用反射获取add方法并强制传入Integer类型值,成功绕过了编译期类型检查。程序输出显示List中同时包含String和Integer对象,验证了运行时泛型类型擦除机制。这种方法虽然可行,但会破坏类型安全,容易导致运行时异常。

2025-10-14 21:07:29 178

原创 `String`、`StringBuilder` 和 `StringBuffer`区别&卓望一面面试题

Java中处理字符串的三个核心类String、StringBuffer和StringBuilder各有特点:String是不可变的,线程安全但频繁修改性能差,适合存储固定文本;StringBuffer可变且线程安全,适合多线程环境;StringBuilder可变但非线程安全,单线程下性能最优。选择时根据线程安全和性能需求决定:不变用String,单线程修改用StringBuilder,多线程修改用StringBuffer。

2025-10-14 20:39:56 1084

原创 卓望一面:如何做日志脱敏

Java日志脱敏是保护用户隐私的重要措施,主要方法包括:1)利用Log4j2的正则替换功能或Logback的自定义转换器,在日志框架层实现脱敏;2)自定义Appender或Layout,对日志内容进行深度处理;3)重写敏感对象的toString()方法,直接输出脱敏数据;4)使用第三方脱敏工具库,通过注解标记敏感字段。其中日志框架的扩展机制是最推荐的方式,既能降低代码侵入性,又能保持灵活性和性能。

2025-10-14 19:13:32 1156

原创 卓望一面:cat怎么一页一页查看

摘要: 本文介绍了Linux中less和more两个分页查看命令的用法及区别。less功能更全面,支持前后滚动、搜索、跳转等操作,常用快捷键包括空格翻页、/搜索、g/G跳转首尾行等。more仅支持向下翻页,功能较基础。两者均可通过管道符|与cat命令结合使用查看文件内容,但less交互性更强,推荐优先使用。

2025-10-14 19:03:49 394

原创 SkipList跳表(全网最全最细致易懂保姆级别手把手教程)

跳表是一种高效的数据结构,支持快速查找、插入和删除操作。本文通过具体示例详细讲解了跳表的三大核心操作: 查找操作:以查找target=12为例,演示了从最高层逐层下沉的搜索路径,最终在最底层找到目标节点。 插入操作:以插入8为例,分两步说明:首先记录每层的前驱节点,然后通过随机算法确定新节点高度(假设为3层),并更新各层指针完成插入。 删除操作:以删除6为例,展示如何定位各层前驱节点(查找阶段停在Level 0的节点3),为后续指针更新做准备。 这些操作充分利用跳表的多层索引结构,平均时间复杂度为O(log

2025-10-14 12:47:41 719

原创 设计模式-适配器模式

该代码演示了适配器设计模式。核心是将220V电源适配为5V输出:Adaptee类提供220V电压,Target接口定义5V标准,Adapter类实现接口转换(220V/44=5V)。客户端通过Adapter包装Adaptee后,可无感知地使用标准接口。这种模式在不修改原有类的情况下,通过中间层解决接口不兼容问题,使新旧组件能协同工作。典型应用场景如电源转换、旧系统改造等。

2025-10-11 23:50:51 613

原创 设计模式-代理模式

摘要: 本文展示了代理模式(Proxy Pattern)的实现。通过Subject接口定义抽象,RealSubject类实现核心功能,ProxySubject类作为代理,在调用RealSubject.request()方法前后添加增强逻辑(如前置/后置处理、性能监控)。代理模式通过组合方式扩展功能,实现延迟初始化和方法增强。代码示例演示了原始和增强两个版本的区别,体现了代理模式在不修改原有代码基础上增加功能的优势。完整代码已托管至Gitee仓库。

2025-10-11 22:52:32 537

原创 单图像去雨研究综述

单图像去雨是计算机视觉领域一个典型且高度不适定 (ill-posed) 的逆问题 [1, 2, 3, 4]。其核心任务是从单张观测到的雨天图像III中恢复出清晰、无雨的背景图像BBB,而其中的雨水成分RRR是未知的。这个问题的本质是模糊的,因为单张雨天图像可能存在多种有效的分解方式 [1]。在深度学习占据主导地位之前,去雨任务是通过基于优化的框架来解决的,这些框架依赖于手工设计的先验知识来正则化这个不适定的问题 [1, 7, 14, 21]。

2025-10-03 20:50:54 958

原创 扩散模型在单图像去雾领域的研究现状

本文系统梳理了扩散模型在单图像去雾领域的研究进展。首先阐述了基于大气散射模型的去雾理论基础和早期手工先验方法(如暗通道先验)的局限性。随后分析了深度学习在去雾中的应用,包括CNN参数估计、端到端架构和GAN感知增强,指出这些方法在信息丢失场景下的不足。最后聚焦扩散模型,探讨其通过逐步去噪的生成方式,在保持物理一致性和生成高质量细节方面的优势,为单图像去雾提供了新的研究范式。

2025-10-03 20:38:00 1152

原创 HttpMediaTypeNotSupportedException: Content type ‘text/plain;charset=UTF-8‘ not supported

文章摘要:系统报错"Content type 'text/plain;charset=UTF-8' not supported",原因是Postman请求的Content-Type设置为text/plain,而后端接口@RequestBody注解要求接收JSON格式数据。解决方案是将Postman的Content-Type改为application/json,并在Body部分选择raw/JSON格式发送请求。

2025-09-18 20:08:54 296

原创 前端获取到的token为undefined

本文记录了前端获取token为undefined的问题排查过程。通过在后端接口增加打印日志,并在浏览器控制台查看错误信息,发现后端正确返回了token但前端获取失败。最终定位到问题原因是前端代码在获取token时缺少了"data"字段的访问。文章通过图文展示了完整的调试过程,重点突出了接口日志打印和代码审查在问题诊断中的关键作用。

2025-09-17 11:18:55 544

原创 ZipList优缺点总结

摘要: ZipList是一种极致节省内存的数据结构,通过无指针开销、变长编码和连续存储实现高效内存利用率,尤其适合存储少量小元素。其优点包括高内存效率和顺序访问性能,但对写操作敏感,存在连锁更新风险(O(N²)复杂度)和随机访问效率低(O(N))的缺点。Redis在元素较少时使用ZipList,超出阈值则转换为其他结构。后续引入的Listpack通过改进编码方式解决了连锁更新问题,成为其替代方案。ZipList的核心设计体现了以时间换空间的权衡。

2025-08-17 14:44:08 792

原创 (ZipList入门笔记三)——Entry 节点

Redis的ZipList(压缩列表)采用连续内存存储,通过Entry节点实现高效内存利用。Entry由三部分组成:1)previous_entry_length变长字段记录前节点长度,支持反向遍历;2)encoding变长字段编码数据类型和长度,支持字符串和整数存储;3)content存储实际数据。ZipList特点包括无指针设计、变长编码和连续内存布局,但存在连锁更新风险,可能导致性能下降。因此ZipList适合存储少量小元素,大容量场景会转为更高效的数据结构。

2025-08-17 14:38:30 1071

原创 (ZipList入门笔记二)为何ZipList可以实现内存压缩,可以详细介绍一下吗

想象一下,如果你要存储的数据只是一个很小的整数(例如数字 5,实际只需要 1 字节),那么为了存储这 1 字节的数据,你就要付出 16 字节的指针开销。正因为如此,Ziplist 只适用于存储元素数量较少、内容较小的场景(List, Hash, Zset),并且在后来的 Redis 版本中,逐渐被性能更稳定的。,它实际上只需要 1 个字节,但系统依然会为其分配 4 字节,剩下的 3 字节就被浪费了。的长度,当在列表的某个位置插入一个新节点,或者删除了一个节点,可能会导致其。这种极致的压缩是有代价的。

2025-08-05 22:45:42 1065

原创 (ZipList入门笔记一)ZipList的节点介绍

Redis 的 Ziplist(压缩列表)是一种紧凑的内存数据结构,用于存储少量元素的 List、Hash 和 Zset。其结构包含:32位的 zlbytes(总字节数)、zltail(尾节点偏移量),16位的 zllen(节点数),可变长度的 entry(节点数据),以及1字节的 zlend(结束标记 0xFF)。每个 entry 由 previous_entry_length、encoding 和 content 组成,通过变长编码和前驱节点长度实现双向遍历,极大节省内存。Ziplist 以连续内存布局

2025-08-05 22:17:34 5285

原创 win11获取最高权限(比管理员权限还要高)

获取 Windows 11 的 SYSTEM 权限是一个高风险操作,仅限合法技术研究使用。SYSTEM 账户拥有最高系统权限,误操作可能导致系统崩溃或安全漏洞。常见方法是使用微软官方工具 PsExec:下载 Sysinternals Suite,以管理员身份运行命令提示符,执行 psexec -s -i cmd.exe 命令即可获得 SYSTEM 权限的交互窗口(可通过 whoami 验证)。务必谨慎操作,严禁用于非法用途。

2025-08-01 15:15:01 1982

原创 Java的依赖注入的理解

本文深入浅出地讲解了Java中的依赖注入(DI)概念。首先介绍了控制反转(IoC)的核心思想,指出传统方式下对象自己创建依赖会导致高耦合和测试困难的问题。然后详细阐述了依赖注入的三种主要实现方式:构造函数注入(推荐使用)、Setter方法注入和字段注入(通过注解实现),并分析了各自的优缺点。最后用一个餐厅点菜的生动比喻来说明DI的优势。文章强调在现代Java开发中,尤其是使用Spring框架时,依赖注入是必须掌握的关键概念,它能有效解耦代码,提高可测试性和灵活性。

2025-07-31 16:57:16 945

原创 AOF和RDB分别适用于什么场景 高读写场景用RDB还是AOF好

Redis持久化方式对比:RDB通过定时快照提供高效备份,适合容忍数据丢失的场景;AOF记录所有写命令,确保数据完整性但恢复较慢。对于高读写场景,推荐混合持久化(4.0+),结合RDB快速恢复和AOF数据安全的优势,实现性能与可靠性的最佳平衡。

2025-07-30 11:03:46 1206

黑龙江大学操作系统实验一

2019级和2018级是通用的,但是需要管理头文件,完全按照实验讲义做的,附加题也做了

2021-05-22

C库源码,含atoi,各种实现都有在.c文件

atoi,printf啥的都有,不是声明,是函数定义!!

2021-01-08

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

TA关注的人

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