<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[2302_76924708的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/2302_76924708</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; 2302_76924708]]></copyright><item><title><![CDATA[whistle自定义修改接口返回值内容]]></title><link>https://blog.youkuaiyun.com/2302_76924708/article/details/163340307</link><guid>https://blog.youkuaiyun.com/2302_76924708/article/details/163340307</guid><author>2302_76924708</author><pubDate>Thu, 30 Jul 2026 17:22:14 +0800</pubDate><description><![CDATA[之后如下图，我们就可以随心所欲的修改返回值的内容了，比如把我在优快云的名称从‘北北’改成'哈基米'，ctrl+s保存。（这里的brower_override是我本地D盘自定义的一个文件夹，因为要把覆盖修改的返回值内容找个地方存起来，所以这里如果第一次修改返回值内容，可能还需要配置一下）如果是在浏览器，我们可以很轻松的就修改接口的返回值内容，如下图的sugrec?2.再按照   [要代理的接口] [代理的内容]的写法，把刚刚获取用户信息的接口代理到刚刚定义的userInfo.json文件上。]]></description><category></category></item><item><title><![CDATA[CR火葬场？Webstorm总是自动格式化导致git diff大批量爆红]]></title><link>https://blog.youkuaiyun.com/2302_76924708/article/details/162767151</link><guid>https://blog.youkuaiyun.com/2302_76924708/article/details/162767151</guid><author>2302_76924708</author><pubDate>Fri, 10 Jul 2026 16:37:03 +0800</pubDate><description><![CDATA[如标题，Webstorm写着写着，总是莫名就自动格式化了代码，一些同事采用的是VSCode编写，部分代码可能缩进不完全一致。Webstorm 25年版本，这里一切都是自动Prettier在作祟，因此如果不想自动格式化，可以改为手动/禁用 就好了。当自动格式化的时候，总会让Git的diff多了很多不是本次改动的代码，code review的时候几百上千行。按照这个方式，我解决了我的问题，如果有不同情况对应不同解决方案的，可以留言互助哦。]]></description><category></category></item><item><title><![CDATA[烦人的报错之：API Error: 400 {“error“:{“type“:“invalid_request_error“,“message“:“Invalid request Error“}]]></title><link>https://blog.youkuaiyun.com/2302_76924708/article/details/158698448</link><guid>https://blog.youkuaiyun.com/2302_76924708/article/details/158698448</guid><author>2302_76924708</author><pubDate>Thu, 05 Mar 2026 16:02:19 +0800</pubDate><description><![CDATA[于是查询kimi官网，看到了一个说可以把工具查询。置为false就行，我就试了一下。]]></description><category></category></item><item><title><![CDATA[记一次git clone时Compressing objects: 100% (143/143), done. Receiving objects: 0% (1/9135)卡住不动的问题]]></title><link>https://blog.youkuaiyun.com/2302_76924708/article/details/155560069</link><guid>https://blog.youkuaiyun.com/2302_76924708/article/details/155560069</guid><author>2302_76924708</author><pubDate>Thu, 04 Dec 2025 10:27:42 +0800</pubDate><description><![CDATA[解决方式：直接把git卸载了，然后重新装，再来一次安装流程，跟文章里面一样的git版本，之后就好了，成功git clone不卡了。这是我到新公司实习，之后安装git，正常进行安装之后，开始尝试git clone，发现进度条一直不动，也尝试排查是否是网络问题。一开始装的是2.47版本的git，后面改成跟文章一样的2.45之后就没问题了，所以也怀疑是git版本不适配的问题。]]></description><category></category></item><item><title><![CDATA[客户端请求来了，Raft/ETCD、ZAB/ZooKeeper、Distro/Nacos都会怎么处理请求呢？]]></title><link>https://blog.youkuaiyun.com/2302_76924708/article/details/154194614</link><guid>https://blog.youkuaiyun.com/2302_76924708/article/details/154194614</guid><author>2302_76924708</author><pubDate>Fri, 31 Oct 2025 17:27:10 +0800</pubDate><description><![CDATA[假设我们有一个三节点的集群：NodeA, NodeB, NodeC。关键特点：强一致性：必须获得多数节点确认才返回成功日志驱动：所有操作先记录日志，再应用状态机顺序保证：通过term+index保证全局顺序关键特点：两阶段提交：PROPOSAL阶段 + COMMIT阶段ZXID全局有序：高32位epoch，低32位计数器内存速度：数据在内存中，写性能极高关键特点：数据分片：每个节点负责一部分数据最终一致：先返回成功，再异步复制无全局排序：不同服务实例的注册顺序不重要详细步骤：检测宕机：NodeB和NodeC]]></description><category></category></item><item><title><![CDATA[java.nio.channels.ClosedChannelException解决 之 @ChannelHandler.Sharable 注解的添加]]></title><link>https://blog.youkuaiyun.com/2302_76924708/article/details/153365148</link><guid>https://blog.youkuaiyun.com/2302_76924708/article/details/153365148</guid><author>2302_76924708</author><pubDate>Thu, 16 Oct 2025 01:33:43 +0800</pubDate><description><![CDATA[在netty中，如果一个共享的入站(出站)处理器想要定义为共享状态，而不是每个channel单独创建Handler实例，那对应要共享的处理器就要加上@ChannelHandler.Sharable！所以，对于共用的Handler，其实已经是做到 无状态 或者 线程安全 了，我们才会抽取成一个实例给所有Handler共用，那么此时就把注解加上，保证netty合法检查能够通过。如下图，我有一个NettyRpcServerHandle类，这个类我抽成公用的类，并在initChannel的时候添加进去。]]></description><category></category></item><item><title><![CDATA[Go的内存逃逸场景是什么？]]></title><link>https://blog.youkuaiyun.com/2302_76924708/article/details/151290704</link><guid>https://blog.youkuaiyun.com/2302_76924708/article/details/151290704</guid><author>2302_76924708</author><pubDate>Sun, 07 Sep 2025 16:37:31 +0800</pubDate><description><![CDATA[而Go则不同，不论基础类型还是引用类型，都会直接使用内存逃逸去分析，如果逃逸到堆上，则在堆中分配，否则在栈上分配即可，栈上分配的，会随着当前go协程的生命周期分配和销毁，堆上的则需要依靠内部GC去回收。Go也有栈和堆，但是他的分配与Java的分配不同，Java的基础类型会在栈上分配，引用类型在堆上分配，然后再基于Java自己的一些逃逸分析去做优化。的指针可能被其他 Goroutine 使用，需分配在堆上。栈空间有限，大对象（如大数组）可能直接分配在堆上。通过逃逸分析优化，可减少不必要的堆分配。]]></description><category></category></item><item><title><![CDATA[MySQL独占间隙锁为什么会互相兼容？]]></title><link>https://blog.youkuaiyun.com/2302_76924708/article/details/151022340</link><guid>https://blog.youkuaiyun.com/2302_76924708/article/details/151022340</guid><author>2302_76924708</author><pubDate>Sat, 30 Aug 2025 17:23:46 +0800</pubDate><description><![CDATA[这也是为什么小林大佬的这幅图中会出现死锁的现象，原因就是独占间隙锁是可以多事务持有的（猜测是为了更好的并发性能吧），但是插入意向锁对应间隙的间隙锁又不能被其他事务持有，这才导致了死锁发生（互相等待释放间隙锁）如果A事务想要插入一条数据，这个间隙的独占间隙锁被当前自己这个事务持有了，那插入就不会被阻塞（别人持有间隙锁就阻塞，自己持有间隙锁或者没有间隙锁，那插入就不会阻塞）因此，独占间隙锁和共享间隙锁，其他从功能来看都是一样的，都是加了间隙锁，而防止插入操作的发生，从而避免了幻读。​，而是排斥其他事务的 ​。]]></description><category></category></item><item><title><![CDATA[背了这么多次，终于弄懂CMS和G1垃圾回收器了！！！！]]></title><link>https://blog.youkuaiyun.com/2302_76924708/article/details/150613374</link><guid>https://blog.youkuaiyun.com/2302_76924708/article/details/150613374</guid><author>2302_76924708</author><pubDate>Fri, 22 Aug 2025 16:28:51 +0800</pubDate><description><![CDATA[JVM的垃圾回收机制能自动管理内存，释放不再使用的对象占用的空间。根据回收区域和策略的不同，Java垃圾回收主要分为MinorGC、MixedGC、MajorGC和FullGC几种类型。]]></description><category></category></item><item><title><![CDATA[JVM内存区域详解]]></title><link>https://blog.youkuaiyun.com/2302_76924708/article/details/150580103</link><guid>https://blog.youkuaiyun.com/2302_76924708/article/details/150580103</guid><author>2302_76924708</author><pubDate>Thu, 21 Aug 2025 12:09:56 +0800</pubDate><description><![CDATA[支持 JNI（Java Native Interface）调用的本地方法（如 C/C++ 代码）执行。用于 NIO 高性能 IO 操作（如文件、网络缓冲区），避免堆内外数据拷贝。​：包括线程栈、元空间等，由操作系统管理，JVM 仅通过系统调用申请。存储方法调用的栈帧（局部变量表、操作数栈、动态链接、方法出口）。存储类元数据（类名、方法、字段）、运行时常量池、静态变量。方法执行时入栈，结束后出栈，自动释放内存。线程共享，是垃圾回收（GC）的主要区域。​：堆内存中的永久代（PermGen）。]]></description><category></category></item><item><title><![CDATA[Java 锁升级的四个阶段及过程详解]]></title><link>https://blog.youkuaiyun.com/2302_76924708/article/details/150560668</link><guid>https://blog.youkuaiyun.com/2302_76924708/article/details/150560668</guid><author>2302_76924708</author><pubDate>Wed, 20 Aug 2025 19:05:30 +0800</pubDate><description><![CDATA[Java 中的锁升级机制（从 JDK 1.6 引入）通过动态调整锁状态来优化多线程性能，根据竞争强度逐步从低开销锁升级到高开销锁。同一线程再次访问时，直接比对线程 ID，无需同步操作（无 CAS 开销）。​：偏向锁竞争失败或撤销次数超过阈值（默认 20 次）。​：减少线程阻塞（用户态自旋），适合短时间低竞争场景。若原线程已退出同步块 → 撤销偏向锁，降为无锁状态。​：第一个线程访问同步代码块时，升级为偏向锁。​：对象初始化时默认状态，无任何线程持有锁。​：锁首次被单个线程访问（无竞争）。]]></description><category></category></item><item><title><![CDATA[ReentrantLock的CLH队列是一条双向链表，如何实现非公平性？]]></title><link>https://blog.youkuaiyun.com/2302_76924708/article/details/150534976</link><guid>https://blog.youkuaiyun.com/2302_76924708/article/details/150534976</guid><author>2302_76924708</author><pubDate>Tue, 19 Aug 2025 21:33:32 +0800</pubDate><description><![CDATA[这是一条双向链表，ReentrantLock没抢到锁的时候，会追加到这条队列中，挂起等待锁的释放。里面是一个个节点节点(Node)：每个节点代表一个正在等待获取同步状态的线程。每个节点包含了一些关键信息，如前驱节点(prev)、后继节点(next)、当前线程(thread)以及节点的状态(waitStatusFIFO队列：AQS使用的是一个双向链表结构的队列，新加入的线程总是被添加到队列的尾部，确保了先进先出（FIFO）的顺序。节点的状态字段waitStatus。]]></description><category></category></item><item><title><![CDATA[Java中，重写equals()不重写hashcode()在HashMap为什么会出错？]]></title><link>https://blog.youkuaiyun.com/2302_76924708/article/details/150492189</link><guid>https://blog.youkuaiyun.com/2302_76924708/article/details/150492189</guid><author>2302_76924708</author><pubDate>Mon, 18 Aug 2025 14:47:20 +0800</pubDate><description><![CDATA[Java 1.8 的HashMap中，如果重写了equals()方法但未重写hashCode()]]></description><category></category></item><item><title><![CDATA[罗盘自营商城]]></title><link>https://blog.youkuaiyun.com/2302_76924708/article/details/150173870</link><guid>https://blog.youkuaiyun.com/2302_76924708/article/details/150173870</guid><author>2302_76924708</author><pubDate>Mon, 11 Aug 2025 01:11:32 +0800</pubDate><description><![CDATA[罗盘自营商城是共创罗盘中的单独开辟的一个小货盘平台，可以支持让自己仓库有商品的人把货上传到罗盘自营商城中，无缝对接共创罗盘300+店铺的采集上架到Temu销售端售卖的过程。5. 出单之后，用户可以填写下单信息，此时供应商端会有[我的订单]查看用户填写的单，并按照实际需求发货。3. 填写完毕之后，即可在本供应商端、用户端展示（供应商端仅展示当前供应商的商品）4.用户端查看的商品可以支持采集上架，上架之后，可以在Temu等销售端售卖。每个供应商都需要给自己的商品新建仓库，这个仓库用于供应商真实发货使用。]]></description><category></category></item><item><title><![CDATA[前后端加密交互？后端如何知道前端拿到手的真实数据！[浅谈APIFOX如何进行后置操作]]]></title><link>https://blog.youkuaiyun.com/2302_76924708/article/details/149825955</link><guid>https://blog.youkuaiyun.com/2302_76924708/article/details/149825955</guid><author>2302_76924708</author><pubDate>Fri, 01 Aug 2025 10:15:31 +0800</pubDate><description><![CDATA[所以，前后端数据加密传输，其实对于有一定基础的人来说还是比较容易破解的，但是毕竟这种操作是有点违规的，而很多比较严谨的项目会有更深的保密手段（比如我曾经尝试分析我校教务处的登录系统，但是发现浏览器f12没有抓到前端传递到后端的请求，用小鸟工具Reqable才抓到login接口，但是这个接口，在source资源也搜索不到对应源码位置，不知道为什么，有知道答案的可以评论教教我呗！于是我拿着这部分的源码，丢给Deepseek，帮我生成一下APIFOX的后置操作脚本，之后再调用这个接口，就可以看到真正的返回值了。]]></description><category></category></item><item><title><![CDATA[操作系统常见信号、Golang对于信号的处理过程]]></title><link>https://blog.youkuaiyun.com/2302_76924708/article/details/149801415</link><guid>https://blog.youkuaiyun.com/2302_76924708/article/details/149801415</guid><author>2302_76924708</author><pubDate>Thu, 31 Jul 2025 11:27:08 +0800</pubDate><description><![CDATA[一般常见的就是监听中断退出信号，然后对程序进行优雅退出。终端输入（如 Ctrl+C 产生 SIGINT）如果进程被阻塞（如系统调用中），内核会中断阻塞。软件事件（如定时器触发 SIGALRM）硬件异常（如段错误 SIGSEGV）内核将信号放入目标进程的信号队列。系统调用注册自己的信号处理器。默认情况下会拦截所有列出的信号。发送 SIGKILL）]]></description><category></category></item><item><title><![CDATA[MESI协议工作流程详解]]></title><link>https://blog.youkuaiyun.com/2302_76924708/article/details/149753526</link><guid>https://blog.youkuaiyun.com/2302_76924708/article/details/149753526</guid><author>2302_76924708</author><pubDate>Tue, 29 Jul 2025 18:27:47 +0800</pubDate><description><![CDATA[​CPU缓存一致性问题中，为了保证多CPU之间对于同一个变量的数据一致性，我们需要让多CPU之间有办法进行互相同步，可以让各个CPU之间的读写事件互相传递，比如CPU A写了变量i，那就需要把这份脏数据同步到其他核心比如 核心 B，那就需要使用广播的机制。（总线嗅探的工作机制可以这么去理解）同时还需要MESI协议，这个协议可以保证对于同一变量在。用一个具体的例子，配合状态变化图，彻底讲清楚MESI协议如何保证多核CPU的缓存一致性。]]></description><category></category></item><item><title><![CDATA[Linux多进程相同的虚拟地址映射到不同的物理内存地址？怎么做到的？]]></title><link>https://blog.youkuaiyun.com/2302_76924708/article/details/149505728</link><guid>https://blog.youkuaiyun.com/2302_76924708/article/details/149505728</guid><author>2302_76924708</author><pubDate>Mon, 21 Jul 2025 15:02:13 +0800</pubDate><description><![CDATA[TLB（Translation Lookaside Buffer）需要区分不同进程的虚拟地址映射，避免混淆。：CPU 将当前进程的 ASID 和虚拟地址一起发送到 TLB，仅匹配相同 ASID 的条目。TLB 对共享页的处理：不同进程的相同虚拟地址可映射到同一PFN（ASID不同但PFN相同）。：TLB 条目绑定进程标识，确保不同进程的相同虚拟地址映射到不同物理地址。硬件支持 ASID 时，可保留多进程的TLB条目，减少刷新开销。，存储该进程的虚拟页号（VPN）到物理页框号（PFN）的映射。]]></description><category></category></item><item><title><![CDATA[Golang中的协程是什么？大家都说Go支持高并发是为啥?[浅谈轻量级用户态线程]]]></title><link>https://blog.youkuaiyun.com/2302_76924708/article/details/149397577</link><guid>https://blog.youkuaiyun.com/2302_76924708/article/details/149397577</guid><author>2302_76924708</author><pubDate>Wed, 16 Jul 2025 15:01:09 +0800</pubDate><description><![CDATA[但是，事实上很多公司都停留在较低版本的JDK开发，JDK11和JDK17是目前的主流（还有部分清朝编程需要实习生改JSP代码的我就不点名了），对于线程池阻塞的问题，无法使用虚拟线程特性的都是使用 调大线程池数量 、 不阻塞并设置异步回调函数 之类的方案去解决。如果我们采用虚拟线程池化技术，虚拟线程在阻塞时自动挂起，释放底层线程资源并且运行其他任务，等到原本阻塞的任务执行完毕了再重新调度获取空闲线程去执行，解决了阻塞的问题。其实，线程分为三种，内核线程、用户线程和轻量级用户态线程。]]></description><category></category></item><item><title><![CDATA[在Linux里面开了这么多进程？CPU执行权怎么分配？[进程调度算法]]]></title><link>https://blog.youkuaiyun.com/2302_76924708/article/details/149272587</link><guid>https://blog.youkuaiyun.com/2302_76924708/article/details/149272587</guid><author>2302_76924708</author><pubDate>Fri, 11 Jul 2025 13:45:45 +0800</pubDate><description><![CDATA[我们都知道进程、线程的执行，都是需要用CPU去跑去处理的。看过小林大佬花的图的都知道下面这张图，是多级反馈队列调度器，也就是兼顾了优先级和公平性的一版调度算法。例如：若只有A、B进程，且 进程A权重 是 进程B权重 的2倍，则A的时间片也是B的2倍。实现了理论上的完全公平，同时通过动态调整兼顾了交互式任务的低延迟和批处理任务的高吞吐量。： 这样设计，能确保设置了高优先级（也就是低nice值）的进程，它的。那么，Linux是采用什么调度器呢，也是多级反馈队列调度算法吗？：红黑树结构支持数千个进程的高效调度。]]></description><category></category></item></channel></rss>