- 博客(28)
- 收藏
- 关注
原创 SQL点滴27—性能分析之执行计划
在这个工作计划中,优化器决定获取语句中涉及到的表的顺序,要使用到那些索引,要使用那些查询方法,要使用那些算法等等。’ALL’参数标明要清除所有的缓存,pool_name的值表明要清除的一个缓存池的名字。在每个执行计划的开头有一个百分比指示这个语句在所有的语句所占的开销的百分比。在这个例子中我们可以看到第一个语句的比例是37%,第二个语句的比例是19%,第三个是30%,第四个是14%。注意当这个执行计划占用很大的屏幕空间的时候可以点击右下方的按钮“+”不放,然后拖动鼠标可以查看想要查看的区域。
2026-07-04 13:59:58
209
原创 异步HttpModule的实现方式
在中, 我示范过如果编写一个HttpModule,通常只要我们实现IHttpModule接口,并在Init方法中订阅一些事件就可以了:HttpHandler有异步接口的IHttpAsyncHandler,但HttpModule却只有一个接口:IHttpModule,不管是同步还是异步。
2026-07-04 13:59:17
288
原创 天气又转热了,我给她做了个智能小风扇
话说,长沙天气的热是出了名的,四大火炉之一啊!在这样的天气下,舒服地过了几个月后(咱家席子都换成被子了),现在又突然变热,大家都有点不适应,GF表现得尤为突出。坐一会就焦躁不安地站起来,说热死了,热死了,显得燥热难耐的样子(她本身散热面积就挺大,不知为啥比我还热……知了叫了,知夏来了,树叶黄了,知秋来了……如今,生活在钢筋水泥之间,对季节的感觉淡漠了,似乎是麻木了,唯一触发人知觉的只有温度,冷了暖气,热了风扇/空调。7寸大号丝雨usb电风扇,用着好用就帮人家推荐下(塑料的,轻,便宜),这是我做人的原则。
2026-07-03 16:33:21
193
原创 高性能Javascript--脚本的无阻塞加载策略
这样做实际上会创建一个带有内联代码的<script>元素,一旦新的<script>元素被添加到文档,代码将被执行,并准备使用。其次,当第二部分Javascript文件完成下载,所有应用程序所必须的DOM已经创建完毕,并做好被访问的准备,避免使用额外的事件处理(如window.onload)来得知页面是否已经准备好了。此文件当元素添加到页面后立刻开始下载。因为脚本阻塞其他页面资源的下载过程,所以推荐的办法是:将所有<script>标签放在尽可能接近<body> 标签底部的位置,尽量减少对整个页面下载的影响。
2026-07-03 16:32:33
198
原创 记一次 float64 排序失效的灵异事件
某一天的下午,我手头没什么事情,双眼迷离,正左手托着下巴空洞地盯着屏幕发呆。恍惚间,BUG反馈群冷不丁冒了消息,我定下神来看,测试同学反馈了一个排行榜的排序问题,排行榜中相同分数的玩家,后达到分数的反而排在先到达的玩家前面。这实在匪夷所思,要知道这个排行榜模块已经是老古董代码了,之前测试和线上都很正常,怎么突然之间就出了问题。很可惜我并不负责这一块,没能以第一视角去解决这个精彩的问题,只是在同事敲定问题根源之后,我了解过后才晓得了事情的全貌。
2026-07-02 18:06:07
166
原创 什么是 SIMD
译为,是一种并行计算技术,允许单条指令同时对多个数据元素进行操作,从而提高计算效率。与 SIMD 相对的是 SISD(Single Instruction, Single Data,单指令单数据),即每条指令只处理一个数据元素。现在的大多数 CPU 都支持 SIMD 指令集,例如 Intel 的 SSE 和 AVX,ARM 的 NEON 等。
2026-07-02 18:05:16
198
原创 线程池遇到父子任务,有大坑,要注意!
这个代码的逻辑非常简单,首先我们搞了一个线程池,然后起一个 for 循环往线程池里面仍了 5 个任务,这是核心逻辑。从日志输出来看,任务 2 需要处理的两个数据,确实是在不同的异步线程中处理数据,也实现了我的需求。这个地方从数据库捞出来的数据,它们之间是没有依赖关系的,也就是说它们之间也是可以并行执行的。对于这几个任务,我们的这个自定义线程池处理起来,不能说得心应手吧,至少也是手拿把掐。即子任务全部完成之后,父任务才能算执行完成,这样统计出来的时间才是准确的。
2026-07-01 15:34:48
223
原创 记录一次线上服务OOM排查
在Goroutine分析中,可以锁定真正的问题所在了,在go-zero的core包下的collection文件在不到一秒内创建了两万多的Goroutine,虽然两万多数量不多,但是这个速度十分异常,最重要的是这个定时轮就很奇怪,这个项目中根本没有定时任务,接下来就很容易查询了,只要查找这次提交的代码中哪里使用到了collection包。除了内存占用分析,在性能问题分析中CPU占用分析也是极为重要的一环,这一查看就有意思了,CPU总的使用率虽然不高,但是这个占比就比较奇怪了。
2026-07-01 15:33:56
212
原创 线程如何停止?线程之间如何协作?线程之间的异常如何处理? _
stop 方法虽然可以停止线程,但它已经是不建议使用的废弃方法了,这一点可以通过 Thread 类中的源码发现,stop 源码如下:stop 方法是被 @Deprecated 修饰的不建议使用的过期方法,并且在注释的第一句话就说明了 stop 方法为非安全的方法。原因在于它在终止一个线程时会强制中断线程的执行,不管run方法是否执行完了,并且还会释放这个线程所持有的所有的锁对象。这一现象会被其它因为请求锁而阻塞的线程看到,使他们继续向下执行。这就会造成数据的不一致。
2026-06-30 14:11:15
161
原创 Java 数据类型详解
引用类型存储的是对象的地址(引用),对象本身存储在堆中。│ 字符串常量池 ││ (JVM 堆内存中的一块特殊区域,专门存储字符串字面量) ││ ││ "java" │。
2026-06-30 14:10:13
199
原创 自定义业务错误码的好处?
"""业务状态码枚举"""# --- 1xxxx 通用系统错误 ---SUCCESS = (200, "操作成功")SYSTEM_ERROR = (500, "系统内部错误,请稍后再试")PARAM_ERROR = (422, "请求参数校验失败")NOT_FOUND = (404, "请求资源不存在")# --- 2xxxx 用户与认证模块 ---TOKEN_EXPIRED = (20001, "登录已过期,请重新登录")
2026-06-29 14:21:41
171
原创 表格数据一键批量抓取工具,全程零代码
首先得创建一个采集任务,在任务列表里点「创建采集任务(高级模式)」,采集模式选「列表页|表格数据(单页多数据)」,填上你要采集的网址,保存。比如说一个表格有好几列,姓名、性别、年龄、班级等,你可以在同一个表格行里,分别点选目标列的内容,把它们设成不同的字段进行存储。操作方式极其简单,先随便点选一个单元格,再点击「设置选取表格行」按钮,系统会自动识别出页面上所有表格行,全部给框选出来。啥意思呢,就是告诉系统「哪些东西算一条数据」,通常这些数据区块结构相同且有规律罗列在网页里,表格就是一行为一条数据。
2026-06-29 14:21:04
219
原创 CPU使用率监控:揪出消耗源的“三层雷达”
将这些指标用Prometheus等时序库收集,可绘制QPS、Threads_running趋势图,CPU飙升通常伴随着它们的突增。手动采集零散指标难以形成趋势,生产环境强烈建议搭建时序监控。均基于这些数据,展示按总耗时排序的SQL,直接指向CPU消耗大户。)和会话私有内存(如排序缓冲、连接缓冲)。MySQL 8.0内置了详细的内存使用统计,通过。MySQL的内存结构复杂,分为全局共享内存(如。(InnoDB内部堆),以及临时表内存。,可在5分钟内定位绝大多数CPU问题。阈值告警设为CPU核数的2倍,配合。
2026-06-28 14:47:16
170
原创 是由于文件大小不对引起,让把恢复文件发给我,进行检查
这里比较明显rs中虽然显示文件状态良好,但是实际大小也不对(得出经验:以后恢复中不能太依赖这个状态),根据反馈现场是三个盘的raid5,中途做了一次强制上线,然后客户也使用win pe拷贝过一次数据,大小和现在一样,也是少了近4G.第一反应可能是由于raid盘弄的不对,但是经过对其他文件的确认,多完全没有问题,排除了盘错误的问题,怀疑是由于文件系统异常导致,对于这种的情况,文件系统层面肯定无法恢复,考虑使用自研的OraScan工具进行扫描(在恢复工具中直接查看文件大小情况。查看alert日志分析原因。
2026-06-28 14:46:30
241
原创 PortSwigger SQL注入LAB7 & LAB8 & LAB9
今天我把这三道LAB一起来分享,主要是因为他们之间有着特别紧密的关联,至于有那些关联就让我们来看一下吧。1. 理解并掌握通过UNION来确定查询的列数及数据类型2. 通过LAB7、LAB8的知识来获取LAB9所需的用户名及密码,并完成登录。
2026-06-27 14:16:09
192
原创 “|”不只是按位或,90%的人不知道
接下来是核心的 Chain 类,它本身也继承自 Runnable,这意味着一个任务链本身也是一个可运行的任务。Chain 会把所有步骤按顺序保存起来,执行时依次调用每个步骤的 run 方法,把前一步的输出作为后一步的输入。首先是所有任务的基类 Runnable,它规定了所有可运行任务必须实现 run 方法,同时重载了 __or__ 运算符,让两个任务可以用 | 连接成一个链。提到 Python 中的|,绝大多数开发者的第一反应都是按位或运算,5 | 3 = 7 是我们初学编程时就烂熟于心的基础。
2026-06-27 14:15:17
188
原创 Redis主从集群
当master的持久化文件中的数据发送完毕后,master会将同步缓存的数据发送给slave,然后slave佳能其写入到本地持久化文件中。但是有一个问题:在全量复制过程中可能会出现过程中断,当网络恢复后,slave与master重新连接成功,此时slave向master又发送同步请求,又开始从头全量复制。:建立连接后,slave会发送ping命令进行首次通信。:首次通信成功后,slave会向master发送数据同步请求,当master接收到请求后,会fork一个子进程,让子进程以异步方式立即进行持久化。
2026-06-25 13:50:34
158
原创 电容是什么?一个“快充快放”的微型充电宝
如果你拆开过任何一块电路板——不管是电脑主板、充电器,还是一个小夜灯——你大概率会看到一些或者。它们就是。今天这篇文章,就是专门写给电子小白的,帮你搞懂电容到底是干嘛的、怎么用、什么时候需要它、以及它最怕什么。电容,简单来说就是电路里的一个,或者说是一个。,然后。
2026-06-23 14:28:23
262
原创 Redis命令处理机制源码探究 _
其中 server.ipfd 是个数组,用来存放端口监听后创建的描述符。每次遍历,都会先从eventLoop 的 events[] 中,根据描述符取出对应的 aeFileEvent,接着调用 aeFileEvent 的 rfileProc()或者 wfileProc()来处理事件,那么 aeFileEvent 的 fileProc()时从哪来的呢?众所周知,Redis 是单进程单线程架构,虽然是单进程单线程,但是Redis的性能却毫不逊色,能轻松应对一般的高并发场景,那么Redis究竟是施了什么魔法呢?
2026-06-23 14:27:15
191
原创 CodeGraph 代码图谱实战:AI Agent 为什么不该再从 grep 开始?
面对一个陌生仓库,Agent 通常会先列目录,再搜关键词,接着打开几个文件,猜一个入口点,发现不对后再重复一轮。函数、类、接口、路由、组件会变成节点;比如用户问“登录请求最终怎么写入数据库”,Agent 真正需要的是路由、handler、service、repository、ORM 调用之间的关系。Agent 得到的是已经压缩过的结构:入口点、主要链路、相关符号、关键代码块、可能的下游影响。它会解析源码,抽取函数、类、路由、组件等节点,再把调用、继承、导入、路由绑定、组件引用等关系写进本地 SQLite。
2026-06-22 16:43:26
172
原创 Cloud Agent 开发笔记(3):Web 交互与数据持久化
项目是文件的上传边界和会话的组织容器:上传 Excel 对账单到项目 A,在项目 B 的会话里是看不到这些文件的。会话挂在项目下,一个项目可以有多个会话——可能是一次分析任务的完整对话,也可能拆成"数据清洗""分析""写报告"三个独立会话,取决于用户的习惯。后端的中断是异步完成的,前端不用等。用户、项目、会话、文件元信息、技能注册表、用户技能禁用记录、LLM 配置、MCP 服务器配置、系统配置。V2 是 Web 应用,多个用户同时在线,各自的会话各自跑,谁也不能看到别人的消息、串到别人的 SSE 流里。
2026-06-22 16:42:52
247
原创 码哥用扣子搭了一套自动跟进工作流,每天省2小时这不是
上周三下午,一个做销售的朋友发消息问我:"有没有办法让客户填完表单之后,自动把信息记到表格里,同时给我发个钉钉通知?现在是我一个个手动拷贝的,有时候忘了,客户那边还会投诉说没有跟进。我问他一天这类信息大概多少条。他说:"少说也有二三十条,每条处理加确认大概要 2-3 分钟,算下来一天光这个就要花将近一个小时。这不是代码能解决的问题——或者说,不是他能写代码解决的问题。但扣子可以。我花了 40 分钟帮他搭了一套工作流。现在他每天只需要检查一次表格,钉钉通知自动到账,整个流程他一行代码没写。
2026-06-21 15:36:33
310
原创 [开源] Memory Checker:极致轻量的 Windows 托盘内存监测工具,告别内存焦虑
本项目采用了 PIL (Pillow) 进行动态位图绘制,并结合 pystray 库实现托盘交互。我会在后续文章中详细分享如何处理图标刷新频率与 CPU 占用的平衡。作为一个 Python 开发者,你可能会好奇:如何在 Windows 托盘中实现高性能的动态图标更新?免责声明:本内容来自平台创作者,博客园系信息发布平台,仅提供信息存储空间服务。为此而生:一个极致纯粹、极致轻量的托盘控件。如果你觉得好用,欢迎点个 ⭐ 支持一下!阅读(246) 评论(0)登录后才能查看或发表评论,立即。
2026-06-21 15:35:48
193
原创 为什么需要高精度运算
高精度运算,本质是将大整数按位拆分,用字符串(或数组)保存每一位的数字,完全模拟小学阶段学习的竖式加减乘除规则,逐位计算并处理进位、借位。加法完全模拟小学竖式加法规则:
2026-06-20 13:59:09
205
原创 浏览器缓存之【基础键值存储】:Local storage 和 Session storage
LocalStorage 是浏览器提供的持久化本地存储方案,属于 Web Storage API 的一部分,并非传统意义上的 HTTP 缓存(如:强缓存、协商缓存)。它主要用于在客户端长期保存非敏感数据,数据在浏览器关闭后仍保留,且不会随 HTTP 请求自动发送至服务器。其核心价值在于减少服务器请求、提升用户体验,适用于用户偏好设置、草稿保存等场景,但需注意容量限制和数据类型约束。LocalStorage 是轻量级持久化存储。
2026-06-20 13:58:32
409
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅