<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[m0_74337424的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/m0_74337424</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; m0_74337424]]></copyright><item><title><![CDATA[PHP SOAP 扩展漏洞 CVE-2026-6722 影响范围判定与升级清单]]></title><link>https://blog.youkuaiyun.com/m0_74337424/article/details/170251065</link><guid>https://blog.youkuaiyun.com/m0_74337424/article/details/170251065</guid><author>m0_74337424</author><pubDate>Sun, 08 Nov 2026 02:32:04 +0800</pubDate><description><![CDATA[这与"回归修复"有本质区别——回归修复只对出现问题的那几个版本有意义，而长期存在的缺陷则覆盖了所有包含该代码的版本。PHP 官方对版本的维护是分阶段的：每个大版本有固定的活跃支持期和安全支持期，到期后即进入终止支持状态。安全领域的通行做法是把"未验证"当作"不安全"，而不是当作"安全"。此外还有一个常被忽略的点：即便当前项目没有使用 SOAP 扩展，运行在终止支持版本上的系统依然暴露在其他历史累积的缺陷之中。因此，“未列出"并不等于"不受影响”，它更常见的含义是"不在支持范围内，未做验证，也不会修"。]]></description><category></category></item><item><title><![CDATA[Node.js ORM 工具类持有共享状态引发的查询串扰]]></title><link>https://blog.youkuaiyun.com/m0_74337424/article/details/170250985</link><guid>https://blog.youkuaiyun.com/m0_74337424/article/details/170250985</guid><author>m0_74337424</author><pubDate>Sun, 08 Nov 2026 02:30:16 +0800</pubDate><description><![CDATA[自己写一个轻量的 MySQL ORM 时，很容易把 SQL 的各个片段（条件、排序、分页）作为实例属性攒起来，最后拼装。这样的类在单请求下工作正常，一旦并发就会出现条件串到别人查询上的诡异结果。]]></description><category></category></item><item><title><![CDATA[Jupyter内联绘图尺寸过小的调整方法]]></title><link>https://blog.youkuaiyun.com/m0_74337424/article/details/170250936</link><guid>https://blog.youkuaiyun.com/m0_74337424/article/details/170250936</guid><author>m0_74337424</author><pubDate>Sun, 08 Nov 2026 02:28:16 +0800</pubDate><description><![CDATA[如果在创建画布之前就设了尺寸，或者在绘图函数内部临时设了尺寸，前者不生效，后者可能被后续的布局覆盖。直接调用绘图函数时，它会自己建一个默认尺寸的画布，此时你设的尺寸作用在另一个对象上，自然看不到效果。于是在同一个会话里，先画的图还是老尺寸，后画的才是新尺寸，看起来像是"改了一半"。想一次性改掉默认值，不知道改哪里，改了之后新图生效旧图不生效，看起来像是没生效。容器类布局函数也接受尺寸参数，但它们的参数是高度乘以宽度，和画布尺寸的宽乘以高顺序相反，这一点很容易写反，写反之后得到一张又高又窄的怪图。]]></description><category></category></item><item><title><![CDATA[Spark中按分组取第一行或TopN的多种写法]]></title><link>https://blog.youkuaiyun.com/m0_74337424/article/details/170250885</link><guid>https://blog.youkuaiyun.com/m0_74337424/article/details/170250885</guid><author>m0_74337424</author><pubDate>Sun, 08 Nov 2026 02:26:01 +0800</pubDate><description><![CDATA[如果在同一层里既取最大值又取类别，类别走的是另一个聚合路径，两者没有关联，得到的是各自独立的极值，组合起来就可能是现实里不存在的行。这是窗口函数的典型用法：它在不减少行数的前提下给每行附加一个基于组内位置的数值，因此可以既保留原始列，又知道这一行在组内的排名。分区和排序是两件事，缺一不可。本意是每组取一条，结果某些组出现了两条甚至更多，原因是该组里有两个类别碰巧数值相同，并列第一，于是都保留了。还有人用聚合函数取最大值，得到的结果里数值对了，但类别名不对——类别显示的是一个奇怪的值，和那个最大值并不对应。]]></description><category></category></item><item><title><![CDATA[含自定义子层的 tf.keras.Sequential 能否完整序列化——U-Net 解码块]]></title><link>https://blog.youkuaiyun.com/m0_74337424/article/details/170250832</link><guid>https://blog.youkuaiyun.com/m0_74337424/article/details/170250832</guid><author>m0_74337424</author><pubDate>Sun, 08 Nov 2026 02:24:01 +0800</pubDate><description><![CDATA[只是把类登记进全局表，前提是定义它的模块已经被导入。键名的形式是包名>注册名，与装饰器里的package和name一一对应。若只需要恢复权重、不需要完整图结构，也可以先构造模型、跑一次前向让它建好变量，再用只导入权重。]]></description><category></category></item><item><title><![CDATA[Node.js 读写 PHP 序列化数据的完整闭环]]></title><link>https://blog.youkuaiyun.com/m0_74337424/article/details/170204136</link><guid>https://blog.youkuaiyun.com/m0_74337424/article/details/170204136</guid><author>m0_74337424</author><pubDate>Sat, 07 Nov 2026 02:30:52 +0800</pubDate><description><![CDATA[这一步得到的 PHP 格式字符串是对的，但还需要再编成 base64 才能按原来的格式存回数据库。很多人的思路卡在这里：一直在找"某种能直接生成目标格式的函数"，但只要把它拆成两个环节，答案就非常朴素——序列化和 base64 编码都是各自独立的标准操作。既然读的时候是"先解 base64、再反序列化"，写的时候就必须是"先序列化、再编 base64"，顺序严格相反。，而不是数字或布尔。如果需要双写过渡期，可以保留原列不动，新增一列 JSON，两套都写，确认无误后再切换读取来源。，结果拿到的是乱码或错误。]]></description><category></category></item><item><title><![CDATA[MySQL 行转列——按另一张表的取值决定多个列的更新]]></title><link>https://blog.youkuaiyun.com/m0_74337424/article/details/170204093</link><guid>https://blog.youkuaiyun.com/m0_74337424/article/details/170204093</guid><author>m0_74337424</author><pubDate>Sat, 07 Nov 2026 02:29:13 +0800</pubDate><description><![CDATA[要把table1里A到E这五列，按"该型号在table2里有没有出现过对应字母"逐列置成Y或NULL，难点不在UPDATE，而在于——你无法用行转列函数处理列名，得反过来把行转成列。]]></description><category></category></item><item><title><![CDATA[NumPy 中 flatten 与 ravel 的差别]]></title><link>https://blog.youkuaiyun.com/m0_74337424/article/details/170204049</link><guid>https://blog.youkuaiyun.com/m0_74337424/article/details/170204049</guid><author>m0_74337424</author><pubDate>Sat, 07 Nov 2026 02:27:38 +0800</pubDate><description><![CDATA[对于不连续的数组，例如转置后的矩阵、按列切片的数组，一维视图无法用单一线性步长表达，此时 ravel 只能退化为复制。无论原数组是否连续，代价都是 O(n) 的时间和一份等量的额外内存。它的原则是「能用视图就用视图，不能用就报错」，比 ravel 更严格，因为 ravel 在不能视图时会静默复制，而 reshape 会明确失败或者在参数允许时才复制。比如对一个转置后或者切片步长不为 1 的数组做展平，ravel 有时会悄悄复制，此时它返回的又不是视图了，之前依赖「改视图能改原数组」的代码失效。]]></description><category></category></item><item><title><![CDATA[Kafka 消息是否必须带键与保留策略的关系]]></title><link>https://blog.youkuaiyun.com/m0_74337424/article/details/170203991</link><guid>https://blog.youkuaiyun.com/m0_74337424/article/details/170203991</guid><author>m0_74337424</author><pubDate>Sat, 07 Nov 2026 02:25:33 +0800</pubDate><description><![CDATA[第二条是压缩，它保留每个键的最新值、删除更早的同键记录，这条路径必须有键，因为没有键就无法判断哪两条记录指同一个实体。需要压缩语义时，键是硬前提。这样的结果是消息均匀铺开到各个分区，吞吐好，但同一个业务实体的消息可能落到不同分区，消费端就看不到它们之间的相对顺序。如果某个键的值特别多，例如用国家代码做键，热点分区会拖慢整体消费，此时可以考虑在键后拼接分片后缀，把热点拆开，代价是同一实体的顺序保证范围被缩小到分片内。不带键时偶尔能看到顺序错乱，加了键之后就好了，但说不清为什么，也不知道这个保证的边界在哪里。]]></description><category></category></item><item><title><![CDATA[单变量逻辑回归 IRLS 在大规模重采样下的加速策略]]></title><link>https://blog.youkuaiyun.com/m0_74337424/article/details/170203940</link><guid>https://blog.youkuaiyun.com/m0_74337424/article/details/170203940</guid><author>m0_74337424</author><pubDate>Sat, 07 Nov 2026 02:23:43 +0800</pubDate><description><![CDATA[有一个随机森林式的分类流程：构造 N 棵三层决策树，每棵树的三个节点分别对应变量 x1、x2、x3，每个节点的数据都从一个超大数据集里随机重采样（例如每类 5000 条）。于是总共要跑 3N 次单变量逻辑回归。用 Cython 实现的 IRLS（带 Firth 修正以应对线性可分带来的偏差）比 sklearn 快好几倍，但 profiling 显示 36335 次调用仍占总耗时的 50%。]]></description><category></category></item><item><title><![CDATA[Maven 构建解析器不识别新语法导致编译失败的对策]]></title><link>https://blog.youkuaiyun.com/m0_74337424/article/details/170152522</link><guid>https://blog.youkuaiyun.com/m0_74337424/article/details/170152522</guid><author>m0_74337424</author><pubDate>Fri, 06 Nov 2026 02:29:37 +0800</pubDate><description><![CDATA[但这里升级无效，因为问题不在插件版本，而在插件依赖的那个解析库版本。为了判断哪些文件需要重新编译、哪些可以跳过，插件需要读取源文件的信息：包名、导入的类、模块声明、类之间的引用关系。还有一种可能值得排除：如果这个源文件根本不参与编译（比如被放在错误的目录、或者模块名配置有冲突），那么解析报错可能只是流程中的一个副作用，而非真正的问题根源。这一点在排查时要特别注意——如果升级了所有能升级的东西还是同样的报错，那基本可以排除"版本太旧"这个方向，应该往依赖树的更深处找。增量编译的依赖分析是解析源码的主要动机。]]></description><category></category></item><item><title><![CDATA[MySQL 统计并发资源最大同时使用数的 SQL 写法]]></title><link>https://blog.youkuaiyun.com/m0_74337424/article/details/170152470</link><guid>https://blog.youkuaiyun.com/m0_74337424/article/details/170152470</guid><author>m0_74337424</author><pubDate>Fri, 06 Nov 2026 02:27:51 +0800</pubDate><description><![CDATA[软件授权校验经常需要回答一个问题：同一时刻最多有多少个资源在同时使用。资源占用记录是若干条起止时间区间，同一资源的区间可能互相重叠，直接 count 会把重叠算重。这类"区间并发峰值"问题在 SQL 里有标准的解法：事件网格加 gaps and islands。]]></description><category></category></item><item><title><![CDATA[MySQL 1055 报错与 only_full_group_by 的成因]]></title><link>https://blog.youkuaiyun.com/m0_74337424/article/details/170152419</link><guid>https://blog.youkuaiyun.com/m0_74337424/article/details/170152419</guid><author>m0_74337424</author><pubDate>Fri, 06 Nov 2026 02:25:50 +0800</pubDate><description><![CDATA[写这段语句的人本意是「按证明类型去重，每种类型留一条记录」，在旧版本里确实能跑，于是惯性认为语法没问题。这个开关的作用是：SELECT 列表里出现的非聚合列，必须全部出现在 GROUP BY 里，或者能从 GROUP BY 的列函数推导出来。回到这条语句，SELECT 列表里有 id、user_id、bill_id、file_name 等十几个列，GROUP BY 只有 proof_type 一个列。第一条路，如果业务语义确实是「每个 proof_type 只留一条」，那么必须明确指定留哪一条。]]></description><category></category></item><item><title><![CDATA[批处理脚本获取命令行参数的完整方式]]></title><link>https://blog.youkuaiyun.com/m0_74337424/article/details/170152377</link><guid>https://blog.youkuaiyun.com/m0_74337424/article/details/170152377</guid><author>m0_74337424</author><pubDate>Fri, 06 Nov 2026 02:24:01 +0800</pubDate><description><![CDATA[批处理在参数解析上的表达能力有限，若需要「命名参数」「默认值」「布尔开关」，建议迁移到 PowerShell 或 Python。会被解析成「取第 1 个参数，后面拼接字符 0」，而不是「取第 10 个参数」。现象五：处理完前几个参数之后想取剩下的全部，发现命令行里根本没有类似「从第 n 个参数开始取到末尾」的写法。现象四：想遍历所有参数，写了个循环从 1 数到某个固定值，结果多传少传都会出问题，还不知道参数总共有几个。表示「取第 1 个参数并去掉外层引号」，既能处理带空格的路径，又能在循环里逐项消费参数。]]></description><category></category></item><item><title><![CDATA[三种图像相似度比较算法的取舍]]></title><link>https://blog.youkuaiyun.com/m0_74337424/article/details/170152325</link><guid>https://blog.youkuaiyun.com/m0_74337424/article/details/170152325</guid><author>m0_74337424</author><pubDate>Fri, 06 Nov 2026 02:22:10 +0800</pubDate><description><![CDATA[图像中边缘、角点这类区域的信息量远高于平坦区域，只提取这些「重要位置」并用局部邻域构建描述子，就天然具备了对尺度、旋转、光照的不变性——因为描述子是在尺度空间提取并按主方向归一化的。它的鲁棒性最好，代价是提取和匹配都比较昂贵：朴素实现下，若每张图有 n 个关键点、库里有 m 张图，暴力匹配的复杂度约为 O(n²m)，需要配合四叉树、二叉空间划分等索引结构才能实用。现象三：图像有轻微旋转或颜色偏移，肉眼看上去完全一致的两张图，算法给出的相似度却低得离谱，业务上不断误报「不是同一张」。代价是实现难度最高。]]></description><category></category></item><item><title><![CDATA[Laravel 12 中 CORS 预检失败的排查与配置要点]]></title><link>https://blog.youkuaiyun.com/m0_74337424/article/details/170058701</link><guid>https://blog.youkuaiyun.com/m0_74337424/article/details/170058701</guid><author>m0_74337424</author><pubDate>Thu, 05 Nov 2026 02:31:59 +0800</pubDate><description><![CDATA[第三，中间件本身是否生效。Laravel 12 默认已在全局中间件栈里注册了处理 CORS 的中间件，但如果项目自定义了全局栈、或者中间件的注册顺序被调整，预检请求可能在到达它之前就被别的中间件（例如某些认证中间件）拦掉了。下的一层，且要与实际的请求前缀完全一致。，无论服务端返回什么头它都照单全收，所以它能通过完全不能作为 CORS 配置正确的证据。，才会继续发真正的请求。之后，如果之前执行过配置缓存，新配置不会立即生效，读到的仍是缓存里的旧值。是两个不同的 origin，端口不同也算不同，需要逐个列出。]]></description><category></category></item><item><title><![CDATA[MySQL 根据中间表标签集合匹配批量回填多语言字段]]></title><link>https://blog.youkuaiyun.com/m0_74337424/article/details/170058438</link><guid>https://blog.youkuaiyun.com/m0_74337424/article/details/170058438</guid><author>m0_74337424</author><pubDate>Thu, 05 Nov 2026 02:29:40 +0800</pubDate><description><![CDATA[一套老的双语标签系统里，英文标签和西文标签被拆成了两套完全独立的记录，只通过"分类编号相差 10"和"挂在相同的对象集合上"产生间接关联。现在要把西文名称回填到英文标签行上，手工处理 6000 条记录不现实，得用中间表的集合相等关系来自动配对。]]></description><category></category></item><item><title><![CDATA[Matplotlib 绘制二维热力图的三种方式]]></title><link>https://blog.youkuaiyun.com/m0_74337424/article/details/170058261</link><guid>https://blog.youkuaiyun.com/m0_74337424/article/details/170058261</guid><author>m0_74337424</author><pubDate>Thu, 05 Nov 2026 02:27:56 +0800</pubDate><description><![CDATA[选不同的映射表，同一份数据会呈现完全不同的观感：有的从黑到红再变白，适合表现强度；这个函数原本是给照片用的，为了让放大后的图像不出现马赛克，它默认在像素之间做平滑计算。要让坐标轴显示物理量，需要用范围参数显式给出左、右、下、上四个边界值，否则读图的人只能看到序号。此时改用对数或分位数归一化，把颜色资源分配给真正有差异的区间，同时务必在颜色条上标明映射方式。多数图像函数默认把第一行画在最上方，这个默认行为一旦与预期不符，整张图看起来就像上下翻转了。缺点是对数据量较大的矩阵，标注会挤成一团，此时应关掉标注。]]></description><category></category></item><item><title><![CDATA[批处理for循环的数值迭代写法]]></title><link>https://blog.youkuaiyun.com/m0_74337424/article/details/170058027</link><guid>https://blog.youkuaiyun.com/m0_74337424/article/details/170058027</guid><author>m0_74337424</author><pubDate>Thu, 05 Nov 2026 02:25:36 +0800</pubDate><description><![CDATA[批处理对括号内的换行、变量展开时机都有特殊规则，这也是延迟展开问题的高发区。现象三：循环体里想执行多条命令，直接把第二行换行写，结果只有第一行被当作循环体，其余命令在循环结束后只执行一次，逻辑完全错乱。适用场景：需要在每轮里做若干操作，比如批量重命名、按序号拷贝文件、依次调用子任务。适用场景：循环层数多、需要字符串格式化与异常处理、或者要与其他系统交互的任务。适用场景：任何需要在循环里累加、拼接字符串、或者根据上一轮结果做判断的场景。，循环要么不执行，要么只跑一轮，参数个数不对时解析器给出的提示毫不直观。]]></description><category></category></item><item><title><![CDATA[tf.data map 里加了 Python 函数就变慢——并行化与向量化的正确用法]]></title><link>https://blog.youkuaiyun.com/m0_74337424/article/details/170057804</link><guid>https://blog.youkuaiyun.com/m0_74337424/article/details/170057804</guid><author>m0_74337424</author><pubDate>Thu, 05 Nov 2026 02:23:22 +0800</pubDate><description><![CDATA[tf.data管线里往map()塞了一个只做x * 2的小函数，训练就明显变慢。函数本身几乎不耗算力，慢的是调用方式。]]></description><category></category></item></channel></rss>