- 博客(3838)
- 收藏
- 关注
原创 MinGW 下 std source_location 返回相对路径的原因与应对
之所以看起来像「MinGW 的 bug」,是因为不同构建环境传给编译器的路径形式不同。标准对该返回值的规定非常宽松——它是一个「实现定义的、假定能唯一标识文件的名字」。所以这不是某个实现的缺陷,而是把这个值当作「源文件在磁盘上的绝对位置」来用,超出了它的能力范围。返回的是改写后的值,可能连存在的目录都不是。但它依赖当前工作目录,返回的路径不一定指向真实文件,只适合调试输出或内部工具,不适合正式发布。适用于需要分发给他人运行的程序,这是最稳妥的一种,不受工作目录与编译器参数影响。
2026-11-06 02:45:23
3
原创 MySQL 聚合查询中 GROUP BY 应该按主键分组
写分组聚合查询时,SELECT列表里放了非聚合列却没把它们全部放进GROUP BY,MySQL 会报分组表达式不兼容。这类报错的根因通常不是语法,而是分组粒度选错了。
2026-11-06 02:43:23
3
原创 MySQL 分组取每组最后一条记录
测试环境数据少、执行计划稳定,问题潜伏到生产才暴露,而且只表现为「偶尔取错了行」,不做数据比对根本发现不了。在某些配置下它确实返回了想要的结果,但这依赖的是未定义行为。MySQL 历史上允许这么写,挑选规则是「碰巧读到的第一行」,完全取决于存储引擎的读取顺序和执行计划。时,优化器有权忽略它——排序对最终结果没有语义约束,属于可省的操作。没有索引时会做大量重复扫描,这是它最主要的局限。要的结果是每组编号最大的那一条,也就是 3/A、5/B、6/C。思路是「不存在比它更大的同组行」,那么它自己就是最大的。
2026-11-06 02:41:41
3
原创 批量清理bin与obj目录强制重新编译
多半是某个依赖项目的输出没有被正确识别为过期,或者引用的是某个残留的旧版本程序集。现象四:删完之后发现某些目录其实不能删,比如第三方包还原出来的内容,或者挂了符号链接的目录,删了之后构建彻底失败,还得重跑还原。现象二:切换分支之后编译报一堆类型找不到的错误,原因往往是上一个分支产生的中间文件混进了当前分支的构建流程。的效果是把第一个分隔符之后的全部内容合并成一串,若前面的路径片段中有空格仍可能被处理得不符合预期;目录存放的是编译过程中的中间产物:临时程序集、资源缓存、增量编译的指纹记录;
2026-11-06 02:39:32
3
原创 为 Conv2D 实现可开关的 LoRA 包装层与梯度问题
给预训练卷积网络加 LoRA 时,通常希望"能开能关":微调阶段只训低秩矩阵,推理前再把增量合并回原卷积核。但用 Python 布尔分支去控制开关,会撞上"变量没有梯度"的警告。
2026-11-06 02:37:16
86
原创 Laravel文件大小校验按千字节计算的问题与字节级方案
想校验上传的压缩包"非空",同时又限制它不超过 1MB,于是写下这样的规则:结果一个 600 字节的文件被拦下来了,提示信息是:文件明明不是空的,却因为"太小"被拒绝。于是自然会想:有没有内置的 不等于空的规则?有没有按字节而不是按千字节判断的写法?问题出在对 与 这两个规则的单位理解上。在 Laravel 里,当这两个规则作用于文件时,单位不是字节,而是千字节。也就是说 的真实含义是"文件至少要有 1024 字节",而不是"至少 1 字节"。600 字节的文件自然不满足,于是抛出"至少 1 k
2026-11-05 02:48:49
5
原创 MySQL 用 REGEXP 前瞻断言实现多关键词同时匹配
站内搜索常让用户输入逗号分隔的多个关键词,要求地址等字段同时包含全部关键词。用多个LIKE拼AND当然可以,但关键词数量不固定,写死条件很难维护。MySQL 8.0 起可以用带前瞻断言的正则一次表达"全都包含"的语义。
2026-11-05 02:46:25
4
原创 Matplotlib 调整子图图表尺寸的三种正确写法
构造完成之后再改这个属性,内部的画布缓冲区、坐标轴位置、已经算好的像素映射都不会跟着更新。而如果有人误以为单位是像素,填进 240000 这样的数字,实际就是 240000 英寸,换算成像素后远远超过后端能分配的内存上限,于是触发那条。这两个函数同样以英寸为单位,函数名里没有体现单位,需要靠文档确认,容易误用成像素。这次不报错了,但图还是原来那么小,子图依旧挤在一起,标题和坐标标签互相压着。,画布从诞生起就是目标尺寸,不需要任何额外调用。,它不只是写属性,还会把新的尺寸传播到画布与所有。
2026-11-05 02:44:10
4
原创 批处理脚本检测管理员权限的可靠办法
命令检测权限的写法,在 Windows 8 及之后的系统上执行会输出「该命令已被弃用,请改用任务计划程序」,并返回退出码 1——即使当前确实是管理员,检测结果也是「没有权限」。此时前面的步骤已经改了一部分状态,脚本停在一半,系统处于不完整的中间态。并查找输出里的管理员字符串,结果在早期系统上命令不存在,而且用户名里恰好含相关字符时会误判,非英语系统上更是直接失效。写安装脚本或系统配置脚本时,第一步往往应该是「先确认自己有没有管理员权限」,否则后面的操作会以一种很隐蔽的方式失败。
2026-11-05 02:42:00
4
原创 tf.function 因 RaggedTensor row_splits 类型不同重复追踪
给加上后,两个数值与结构完全相同的仍然触发了两次追踪。原因不在失效,而在。
2026-11-05 02:39:52
130
原创 JavaScript下拉菜单只能展开一次的原因与class切换写法
状态由 DOM 上的类名承载,判断与赋值都不依赖具体数值,也不受样式表与内联样式差异的影响;在 JavaScript 的宽松相等规则下,空字符串会被转换成数字 0,因此这个比较结果为真,于是走第一个分支,把内联样式设成。换句话说:前两次点击之所以正常,是因为第一次遇到的是空字符串(恰好等价于 0),第二次遇到的是。此后每一次点击都重复这个"设成 0px"的动作,菜单永远收着,看起来就像代码只执行了一次。代码写出来"看起来"能跑,但。,一旦初始状态来自样式表,内联值就是空的,状态机从一开始就是不完整的;
2026-11-04 02:47:02
8
原创 Matplotlib 散点图逐点标注文本的实现方式
另一条路是自己写循环加文字,图是标出来了,但每个标签正正压在数据点中心,点和字糊成一团;绘制接口,一次把整组点交给后端做一次绘制,能从批量中受益的参数只有那些能映射到视觉通道的量:位置、大小、颜色、透明度、标记形状。这两个机制叠在一起,就解释了为什么「能标上但不好看」:批量接口不存在,逐点创建又默认锚点居中偏左下且用数据坐标偏移,两个默认值都不适合标注散点。放在给定坐标处,而点的中心也在那个坐标,于是文字直接从点的中心向右上铺开,视觉上盖住了点。要避开,要么改对齐方式,要么把文字整体挪开一段。
2026-11-04 02:43:18
7
原创 在 Jenkins Pipeline 中把 shell 命令输出存入变量
几个实用的注意点:一是捕获输出后日志里不再有这段内容,排障时如果习惯靠日志确认命令执行结果,可能误以为命令没跑,可以临时补一句。适用条件:流水线主体使用声明式语法。出来的变量却是空的,后续任何依赖这个变量的判断都拿不到值。这些现象指向同一个诉求:需要把子进程的标准输出捕获成一个字符串,或者把子进程的退出码捕获成一个布尔值。里,在脚本式流水线里也许能跑通,一旦搬到声明式流水线就报语法错误,提示语句不允许出现在该位置。适用条件:输出内容复杂、多行,或者命令本身带有难以在 Groovy 字符串里正确转义的引号。
2026-11-04 02:41:24
6
原创 sklearn 学习曲线报 pos_label=1 is not a valid label 的成因与修复
用在极度不平衡的数据集上画学习曲线,评估指标选,很容易撞上一条意思含糊的报错。换成 5 折或 10 折分层交叉验证也一样,于是怀疑是不是交叉验证策略没配对。
2026-11-04 02:39:43
6
原创 Java 迭代器 hasNext 先假后真为何应当避免
规范既没有说「返回 false 之后必须永远返回 false」,也没有要求状态单调。这是不得已时的最低要求:把反常规行为写在 Javadoc 最显眼的位置,并限定只在自己完全掌控的调用代码里使用。」,隐含前提是遍历开始时内容已经确定,是一次遍历的快照。把「暂时没有」和「彻底结束」拆成两个不同的信号,调用方一眼就能分清该继续等还是收工。「数据会陆续到达」天然是推送语义,用队列或响应式流表达最贴切,也天然支持背压与异步。也就是说,你精心实现的「等待新数据」能力,在绝大多数调用方式下根本不会被触发。
2026-11-03 12:44:35
7
原创 MySQL 删除触发器报 column id_animal in WHERE clause is unknown
在 MySQL 里写"删了 A 表的行就同步更新 B 表某列"的触发器时,一个常见报错是。原因是触发器里想引用"刚被删掉那一行"的字段,却漏掉了OLD伪记录前缀。
2026-11-03 12:42:28
5
原创 Matplotlib 图片保存到文件而非弹窗显示的三个要点
就得到紧贴内容的图。需要注意,裁剪是按内容计算的,如果标题或标签被放到画布之外,紧裁之后可能被切掉一部分,此时应当改用。默认按画布的原始尺寸输出,而画布的留白是为了给刻度标签、标题、图例预留空间,这些空间在导出时并不会被自动裁掉。就能弹出窗口看到结果,于是很多人把同样的代码搬到定时脚本、数据管道或没有图形界面的服务器上,结果运行一切正常、退出码也是 0,但目标目录里一个文件都没有。文件生成了,尺寸也对,内容却是空白的。还有一类是导出成 PDF 交付给排版同事,结果对方拿到的是一张位图,放大后边缘全是锯齿。
2026-11-03 12:40:23
6
原创 pandas 亿级数据下统计字符串中重复字符的高性能写法
一个 1 亿行的 DataFrame,Tuple 列是长度固定为 9 的字符串,需要新增 Label 列:字符串中出现至少 5 个相同字符时标 1,否则标 0。
2026-11-03 12:38:29
451
原创 pandas 循环赋值导致整列被最后一个值覆盖的原因与修复
如果处理逻辑不方便写成单参数函数(比如需要同时用到多列),就在循环里往列表追加,循环结束后统一赋值。注意要保证列表长度与 DataFrame 行数一致。keys = []
2026-11-03 12:36:46
378
原创 Java 检测字体是否把字符渲染成方块的正确写法
一段常见的实现思路是:写一个 Swing 窗口,把所有字体按三列排布渲染出来,同时在绘制过程中逐个做检查。循环为了在三列里显示字体,每次取出三个字体来渲染,但检查逻辑只落在中间那一列对应的字体上。但某些机器上,并不是每个字体都能真正画出字来 —— 有相当一部分字体渲染出来的全是「豆腐块」(一个空心方框),也就是缺字符(missing glyph)的占位图形。分别用候选字体和一个已知缺字形的参考字体渲染同一个字符,若两者的墨迹比例、像素分布几乎一致,就说明候选字体画的也是方块。如果全部都能显示,返回。
2026-11-02 11:22:19
7
原创 MySQL 三表 JOIN 取最新发票日期并保留无发票订单行
订单、发票、发票行三表关联时,一个订单对应多张发票会让 JOIN 结果出现重复行。常见思路是用聚合子查询取每个订单的最新发票日期再关联,但稍不注意就会把没有发票的订单整行丢掉。本文给出两种能同时满足"只取最新"和"保留空组"的写法。
2026-11-02 11:20:14
113
原创 Matplotlib 全局字体大小调整的正确入口
其实是同一套机制的两种入口,前者按分组写入,后者按完整键名写入,两者最终都落在同一个全局字典里。重新出一张图,刻度数字确实变大了,但坐标轴标题、图内标题、图例文字、以及注释文字还是原来的小字。这种方式不依赖全局状态,配置随图走,可读性最好,代价是重复代码较多。的分组名逐个试,改到第四五个分组时已经不确定漏了哪一个,而且换一个项目又得重来一遍。这也是「改了全局字号但标题没变」的典型原因:前面某处代码把它钉死成了固定值。这就解释了为什么逐个分组改会越改越多:每个文本对象在渲染时都按自己的分组取值,
2026-11-02 11:18:25
72
原创 PySpark DataFrame 重命名列的四种方式
而 PySpark 的二维表保存的只是「如何计算出这批数据」的计划,结构信息连同字段类型一起被封装在一个不可变的结构对象里。既然不能改,唯一的办法就是生成一张新的表:读取原表的每一个字段,用新的名字重新包一层,返回新的二维表对象。这也解释了为什么「读两遍」的方案能生效——它并不是在改名,而是重新生成了一张从一开始就用新结构的表,代价是把解析工作又做了一遍。中间步骤打印结构时看到的列名,并不代表最终写出去的列名,这也是改名结果前后不一致的常见来源。适合已有「旧名到新名」映射表的批量场景,字段顺序不变。
2026-11-02 11:16:15
10
原创 ffmpeg 抽取高质量视频帧的参数选择
不带占位符时,默认也只会输出一张,但为了明确语义,通常还要显式限制帧数。把它放在输入参数之前,走的是快速定位路径,速度远快于先解码再丢弃。若确实需要最高档,必须同时把下限参数一并设为一,否则会看到「设了一没变化」甚至参数被忽略的提示。命令行工具对图像输出有一套默认的质量取值,偏向「省空间」而非「保画质」,直接导出自然偏糊。面对实时流或需要不断刷新同一张缩略图的场景,需要一个「只写同一个文件」的开关,配合抽帧频率参数使用。做视频内容理解时,用它可以显著减少冗余帧,同时保留时间上的覆盖。只要一张封面选方案二;
2026-11-02 11:14:24
183
原创 Java 中 byte 转 int 必须用 &0xFF 的原因
至于为什么需要「无符号值」而不是「有符号值」:因为在网络协议、文件格式里,一个字节通常被约定为无符号的(取值 0~255)。这个写法看起来很奇怪 —— 按位与是「保留某些位、清除某些位」的操作,而这里的需求是「取值」,并没有想清除什么。字节序要显式指定,否则默认是大端,网络协议通常也是大端;按位与的每一位独立运算:左边是 1 的位才可能是 1,右边是 0 的位结果一定是 0。的拓宽转换是「符号扩展」,语义不符合「取无符号值」的预期,才需要额外干预。是个 int 字面量,值是 255,完整写法是。
2026-11-01 03:11:34
11
原创 MySQL ORDER BY 中双引号别名排序失效的原因
同一个分组统计,能正确取出口牌最多的比赛,换成——按 SELECT 里起的别名排序——结果却完全不对。换成 PostgreSQL 能跑、迁到 MySQL 就出问题的 SQL,相当一部分是同一个原因:双引号在 MySQL 里默认不是标识符定界符。
2026-11-01 03:09:32
9
原创 Jupyter Notebook 切换主题的四种方式
适合内网、离线、不允许随意安装依赖的团队。做法是把配色规则直接写进配置目录下的自定义样式文件,Jupyter 启动时会自动加载。优点是完全可控、无外部依赖;缺点是需要自己维护选择器,升级前端版本后可能要重新适配。建议只覆盖背景、前景、关键字配色等少量变量,避免大面积重写。
2026-11-01 03:08:09
8
原创 PyTorch 权重初始化的三种写法
所谓专门为某类激活函数设计的初始化方法,本质上是按该激活函数的特性反推出一个「方差既不放大也不缩小」的取值区间。框架自带的默认取值主要面向一类常用的对称激活函数,换成不带负半轴的激活函数时,方差的传递规律发生了变化,沿用默认值就会让信号逐层衰减,表现为前期几乎不学习。注意带下划线结尾的函数是「原地修改」,不带下划线的版本返回新张量而不改动原值,用错版本就会出现「改了没生效」。正确做法是访问它底层那份不追踪梯度的原始数据再改写,或者调用专门的初始化函数,这些函数内部已经做好了关闭追踪的处理。
2026-11-01 03:03:47
9
原创 Java record 反序列化经规范构造器导致循环引用丢失为 null 的原因
—record 支持在近几个版本里已经比较完善,而且 protobuf 的图表示是「唯一 id + 引用」模型,天然表达循环(本质上是把对象图转成关系表)。缺点是不支持真正的双向指针语义,需要手写解析。序列化时,每写一个对象就先给它分配一个句柄(handle),登记进表里,然后再写它的字段。要支持循环引用,反序列化流程就必须变成「先分配一个未初始化的 record 实例,把句柄指向它,然后再填充字段,最后跑一遍校验和后处理」。因此在重建组件值的过程中,任何指向该句柄的引用读到的都是那个初始的 null。
2026-10-31 03:05:12
3
原创 Mongoose 鉴别器 findByIdAndUpdate 不更新子文档数组的原因与修复
用 Mongoose 鉴别器(discriminator)组织模型时,在基模型上执行,基类字段更新正常,鉴别器独有的子文档数组却毫无变化,也不报错。这不是驱动缺陷,而是更新操作的转换语义与文档保存不同导致的。
2026-10-31 03:02:48
2
原创 ggplot2 中关闭部分图例的几种方法
它的作用粒度是整个 geom——一关就是这一层所有由映射产生的图例,天然没有"挑一个关"的能力。这个参数没有"作用于哪个图例"的说法,而 scale 和 aes 上又没有同名参数。用 ggplot2 画散点图时,颜色映射了一个变量、形状映射了另一个变量,于是图的一侧同时出现了。不能省——它剔掉了片长为空字符串的记录,否则连续型颜色标度在遇到空值时会出问题。反过来,也可以只保留一个,把其余的都关掉。现在的需求很具体:只想关掉其中一个,保留另一个。如果保留下来的是连续变量的颜色图例,用。
2026-10-31 03:00:37
1
原创 Docker 提示 input device is not a TTY 的成因与处理
但在自动化环境里,命令由调度器启动,标准输入根本没有连到任何终端设备上,此时要求分配伪终端就属于强人所难,容器运行时只能拒绝并给出这句提示。如果确实需要完整的交互式终端,而当前环境不在 Linux 或 macOS 的终端里,就要改用本身提供终端能力的方式去执行,例如在 Windows 上选用支持伪终端的宿主程序来启动命令。顺着这个思路,就能理解为什么同样的命令在 Jenkins 流水线、cron 定时任务、CI 容器里必然失败,而在开发机上永远复现不出来:前者没有控制终端,后者有。这是自动化场景下的首选。
2026-10-31 02:58:56
3
原创 llama-cpp-python 启用 CUDA 时 native 架构检测失败的解决
在 Windows 上给打开 CUDA 后端,装了 CUDA Toolkit 13.1,nvidia-smi也显示显卡支持 CUDA 13,但 pip 构建 wheel 时 CMake 直接报错说检测不到 NVIDIA GPU。
2026-10-31 02:56:45
3
原创 C语言链表插入操作触发段错误的四个成因与重写方案
关于接口设计还有一点:让调用方传一个数字来指定插入位置,又总是插到末尾,这个数字本身就是多余的。而不是判断游标本身,因此最后一个节点的数据永远不会被打印——这解释了为什么输出的项数与预期不符。释放的却是链表中的真实节点——如果前面没崩,这里会把链表里的某个节点交给 free,后续访问就是释放后使用。这个"恰好是 0"非常具有迷惑性,它让人以为数据大体正确,只是少打了一项。是形参,函数返回后它的值就被丢弃,想"还原"链表头是做不到的,要改指针本身必须传。直接覆盖,那块内存永远无法释放,是一次确定的泄漏。
2026-10-30 13:00:52
3
原创 MongoDB 集合校验器中 $$NOW 不动态求值的原因与替代方案
给集合加校验规则,限制管类型,$expr配合$$NOW管时序。实际运行却发现校验像是被冻结在了创建集合的那一刻——比创建时刻早的日期能通过,比创建时刻晚的日期反而被拒绝。
2026-10-30 12:58:49
108
原创 numpy 判断矩阵是否只含 0 和 NaN——避开 NaN 比较陷阱
特征矩阵里用NaN表示缺失、用 0 表示无信号是很常见的约定。判断一个矩阵是不是"全空"(只有 0 和 NaN)时,写出来的判定式常常永远返回 False。
2026-10-30 12:57:19
191
原创 dbt-core 在 Python 3.14 下启动报 UnserializableField 的修复
用 uv 装好 dbt-core 之后,执行直接抛一长串栈,最后一行落在 mashumaro 的上。这类错误与项目配置、adapter 无关,是解释器版本和依赖链不兼容。
2026-10-30 12:55:38
2
原创 caret 调用 xgboost 报 ALTLIST Set_elt 错误的版本回退方案
在 R 里用caret统一调参是很方便的做法,但升级xgboost到 3.x 之后,原本跑得好好的会突然全线失败,交叉验证的每个 fold 都报错。
2026-10-30 12:54:02
软考全科备战资源包高效利用基础教程
2026-06-17
TypeScript类型系统与全栈项目实战基础教程
2026-06-17
动态爱心粒子动画源码基础教程
2026-06-09
通过Python实现过期上传一个python资源的自动清理基础教程
2026-06-09
上传一个Python资源到PyPI基础教程
2026-06-09
TypeScript类型系统与全栈项目开发基础教程
2026-05-16
TypeScript类型系统与全栈项目开发基础教程
2026-05-15
软考全科备战资源包-计算机编程基础教程
2026-05-15
TypeScript类型系统与全栈项目开发基础教程
2026-05-14
TypeScript类型系统与全栈项目开发基础教程
2026-05-13
TypeScript类型系统与全栈项目实战教程
2026-05-12
软考全科备战资源包-计算机编程基础教程
2026-05-12
TypeScript类型系统与全栈项目实战教程
2026-05-11
软考全科备战资源包:计算机编程基础教程
2026-05-11
TypeScript类型系统与全栈项目开发基础教程
2026-05-10
软考全科备战资源包编程技能基础教程
2026-05-10
TypeScript类型系统与全栈项目开发基础教程
2026-05-09
FreeRTOS 实时操作系统多任务实战基础教程
2026-10-24
嵌入式 Linux 驱动开发实战:从入门到精通基础教程
2026-10-22
嵌入式GUI与显示方案实战(LVGL)基础教程
2026-10-21
软考全科备战资源包全方位实战基础教程
2026-10-18
CISP-CSE注册云安全工程师备考资源包基础教程
2026-10-17
嵌入式SLAM与自主导航算法实现基础教程
2026-06-19
嵌入式系统EMC设计实战基础教程
2026-06-19
智能机器人控制系统与运动规划基础教程
2026-06-19
嵌入式功能安全设计与认证基础教程
2026-06-19
工业自动化PLC与软PLC控制系统开发基础教程
2026-06-19
Go语言高并发云原生项目从零实战基础教程
2026-06-17
C#全栈开发资源包综合实战基础教程
2026-06-17
计算机二级通关宝典基础教程
2026-06-17
基于毕业设计全流程资源包的实战基础教程
2026-06-17
美赛建模工具包系统实战基础教程
2026-06-17
ACM算法模板与竞赛实战进阶基础教程
2026-06-17
电赛硬件设计与控制算法调试手册基础教程
2026-06-17
电商数据分析SQL实战进阶基础教程
2026-06-17
JavaScript全栈工程化与性能调优实战基础教程
2026-06-17
基于PHP开发与安全防护实战的Web应用基础教程
2026-06-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅