自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 代码级:基于模版方法模式的复杂开闸逻辑业务解耦

通过对比5段高度重合的代码,分析出固定骨架:校验数据、按钮锁、刷traceId、判断出入口和白名单、查司机、组装参数、执行,编排的统一入口函数openGateflow 作为模版方法。这里是一种模版方法的思想,因为经典的模版方法是依靠继承,本例中使用的是高阶函数。根据策略模式(一系列可互换对象实现同一个接口)思想使用回调注入进行轻量替代。回调注入方式的选择,首先 提取他们做的同一件事请 -用哪种方式开闸,其次选择装载并执行这件事的载体 -函数,最后接入业务逻辑。

2026-10-26 17:15:11 184

原创 Vue2迁移Vue3的顺序陷阱:setup没有this,先修改状态管理

迁移一个Vue2老项目,我认为最难的部分是复杂组件的重写。准备从简单的表单组件中开始改时,改到this.$store.state.userId,发现里没有this。我的原计划中,状态管理重构排在最后一步。这篇文章记录这次顺序调整的过程:setup 为什么会没有 this;不同状态管理库存在的差异和易错点;思考如何结合AI重构,针对边界和约束做出设计本文梳理了项目技术栈迁移中要遵循可运行性、单组件减少重构次数的原则。.vue文件中如果使用状态管理,需要先重构状态管理模块,再重构组件文件。

2026-10-16 16:50:04 190

原创 从 ChatGPT 到 Agent :AI 发展脉络

本文梳理了Agent进入大众视野之前的AI发展脉络,从技术基建Transformer、学习方法、应用领域三个方面,理清了 AI 发展中遇到的问题及解决方案。目的是为后续深入学习Agent打好基础,比如,在遇到困难时能够快速定位自己缺哪块知识,理解Agent所处的阶段和依赖的技术。

2026-10-15 00:35:08 205

原创 视频流实战02:JS堆约占10%却OOM — 排查和内存管理

分析老版Chrome中,不同条件下出现视频播放 OOM ,即连续播放 1h左右 标签页崩溃,的原因前提1 video.js加上flv.js 方式。前提2 播放器SDK对H.265格式解码方式。着重针对报错提示 WASM堆内存 和 GPU的WebGL纹理内存占满浏览器单标签页内存 的信息,进行以下的优化。多路错峰:初始化initDelay时 5路视频 依次间隔 5秒 再初始化,避免同时实例化WASN;根据?

2026-09-15 16:57:45 144

原创 学习计划 - 九

目录学习目标:学习内容:学习时间计划内容非计划性补充变更学习产出学习目标:计划一计划二计划产出实际产出

2026-09-14 14:25:53 57

原创 环境搭建:Python项目(开发和生产)

Python程序的生产环境配置和开发环境配置。

2026-09-10 17:20:17 163

原创 JavaScript异步之拆解 Promise/A+ 规范 01

结合Promise A+规范,串联 Axios拦截器处理 -》组件.catch()的完整链路,直观理解如何捕获业务需要的错误信息return Promise.reject('error')。then.call(x, onFulfilled, onRejected) 作用:调用函数,并显式指定函数内部的 this 执向 x。目的:让当前 .then 返回的 promsie2 的状态跟随 Promise.reject('error')等价于 x.then(onFulfilled, onRejected)

2026-09-04 16:38:26 161

原创 企微实战开发之记忆功能 - 缓存排查命令

从请求头和响应头互相博弈的角度(排查服务端/网络层),理解为什么响应头做好设置为no-store策略:因为no-cache时,CDN可能会出现不问 或者 问错的情况。原因:1. 某些不够严谨的 CDN 或代理层在处理时,优先响应客户端的请求头,而忽略源站下发的响应头。2.no-cache的验证机制依赖的ETag(文件指纹:size and msize)或(修改时间)没有正确更新。

2026-09-04 11:36:03 178

原创 企微实战开发之记忆功能 - Cache-Control

项目更新包之后,手机端和浏览器重新校验拿到新包,实锤PC端企业微信一直缓存旧包。

2026-08-27 14:32:05 177

原创 企微实战排查之“获取用户信息失败”- 捕获错误信息 与 vConsole

PC端调试工具不可使用,且后端错误信息未捕获情况下,针对 “域名不可信” 问题进行排查。

2026-08-21 17:07:57 158

原创 企微实战开发之Nginx代理:配置和排查

docker中的nginx镜像和配置。

2026-08-19 23:20:29 157

原创 企微实战排查之“获取用户信息失败” - 排除后端因素步骤

1. 企业微信调试工具快捷键:Ctrl + Alt + Shift + D / Command + Shift + Control + D2. 不使用开发者工具排查问题。通过 进程->接口->网络->secret->日志 五步定位。

2026-08-18 16:17:19 218

原创 企微实战排查之“授权失败” - 定位接口Secret凭证

access_token -> 寻找应用 -> code携带redirect_uri -> 验证应用中的可信域名列表。问题定位1:code的获取,即微信后台配置的可信配置域名和实际OAuth的redirect_uri间的匹配。创建企业微信第三方应用,采用 OAuth2.0 授权码模式的标准行为:code是一次性的。1. 先确认企业微信管理后台对应的应用,是否设置了网页授权及JS-SDK的可信域名。关联Code:接口使用的 code 来自前端登录时生成的。修复:在企业可信IP配置项中添加服务器的IP。

2026-07-30 11:29:32 249

原创 Nginx默认配置:80端口引发的冲突

80 端口 nginx 配置时遇到的 default_server 冲突和重启问题。

2026-07-29 16:13:29 242

原创 VUE2模版语法@click事件 - MouseEvent的防御

处理 MouseEvent 时,防御技术主要指浏览器默认行为,对交互的干扰、拖拽中会产生冲突、事件流中存在阻碍。DOM结构中,子元素的点击事件可能会意外触发父元素的逻辑(例如:点击弹窗内的按钮导致弹窗关闭)防御手段:在需要隔离的事件处理函数中调用 e.stopPropagation(),将事件限制在当前目标范围内当使用 mousedown + mousemove 实现拖拽时,浏览器会尝试触发原生的 HTML5 Drag 行为,导致拖拽卡顿和异常防御手段:再 mousedown 事件中调用 e.prevent

2026-07-24 15:47:25 257

原创 VUE框架设计核心定位 - MVVM

Model 需具备变更通知能力(如 Vue 的响应式数据劫持),VM 才能精准捕获变化。ViewModel核心实现手段:响应式系统 + 模版编译 + 渲染与DIFF。beforeDestory:实例被销毁前(获取实例的绑定数据进行全局更新)插值表达式底层编译时,会触发对应响应式数据的读取,从而将数据整体。核心机制:双向绑定(通过数据绑定与事件转发实现)// 等待 DOM 更新,返回 promise。// 或者 async/await 写法。// 打印:更新后内容。// 打印:初始内容。

2026-05-27 14:37:02 338

原创 外网攻防实战之Nginx重定向:Nginx远程代码执行漏洞

1. 给捕获组命名:(?<user_id>\d+) 和 (?<section>.*)2. 引用时使用命名变量:$user_id, $section。随后使用了 set 指令,且引用了 $1, $2 等变量。rewrite 的替换字符串中包含问号?第三部:全局搜索关键指令。

2026-05-15 14:31:55 67

原创 视频流实战01:播放器选型 — 从video.js到Jessibuca

播放器方案从 video.js/flv.js 换成 Jessibuca。播放器框架/播放器UI封装:video.js。对当前流的兼容性不足。播放器SDK:Jessibuca。包含解码、渲染、控制、事件等能力。

2026-05-07 10:45:01 57

原创 地址解析协议缓存表

命令:ip neigh状态:静态状态 STATIC永久状态 PERMANENT动态状态 failed,none,incomplete,reachable,stale(陈旧-临界状态),delay。

2026-05-06 17:24:53 24

原创 JavaScript避坑之计算丢失精度 - 从toFixed到Decimal.js

toFixed(2) 返回的是字符串。如果 form 对象绑定在输入框上,且输入框类型是 number,存入字符串可能会导致类型警告或后续计算需要再次 parse。JavaScript 使用 IEEE 754 标准存储数字,直接进行乘法运算会导致精度丢失。

2026-05-06 15:01:20 55

原创 TypeScript核心之数据结构 - 从基础类型到对象建模

前言TS 是 JS 的一个超集,保留JS原有语法和动态特性的基础上,添加可选静态类型和基于类的面向对象编程。

2026-04-08 16:51:38 445

原创 JavaScript异步之Promise机制 - OOD 到 A+规范

前言面向对象的设计思想对于开发者更加友好,可进行数据封装、模块化复用、 降低代码的复杂度和维护成本而Promis用于解决JS中的异步回调问题,它是面向对象设计思想在异步编程中的一种实践,包括类、实例、实例方法、类方法(静态方法)、状态封装等一些OOP概念同时Promise 设计遵循Promise/A+ 规范,如果一个对象/函数(Thenable)满足该规范中关于 then 方法的行为定义,那么称它为Promise。

2026-04-05 23:45:11 316

原创 Git命令之代码冲突排查 — status 和 stash

本地是一个全新的项目,远程没有历史,强制允许合并。

2026-03-31 17:39:08 400

原创 JavaScript基础之作用域解析 - 从作用域到闭包机制

为什么存在作用域?日常开发中,不同模块和函数之间会使用相同变量名,并且这些变量只作用于自身所在的模块或函数内。作用域的作用可以解决模块和函数的这种命名冲突;同时封装模块内定义的变量,有利于模块化的开发。

2026-03-31 13:11:12 379

原创 业务模块:监控模块之交互原型设计图分析

大棚管理后台(核心监控模块的前端交互原型图)

2026-03-26 18:16:14 243

原创 环境搭建:运行SpringBoot项目

如果打开别人的项目有问题,可以通过删除.idea目录,重启idea软件,一般就可解决。注意修改conf/settings.xml文件中指向第三方库路径的属性值。2. 配置maven(idea工具的setting选项)

2024-03-26 11:08:13 370 1

原创 Git连接远程仓库:SSH密钥

1. 生成ssh的秘钥ssh-keygen -t rsa -b 4096 "你的git邮箱" (密码可以不设置,直接enter)【 生成的秘钥默认在 ~/.ssh文件下(公钥和私钥)】【 复制文件内容到剪切板:clip > 路径 (window系统) 】2. 登录git账户,将秘钥的 公钥 复制到 “SSH keys“ (管理员)3. 设置/更改 指定远程仓库的URL显示所有远程仓库:更改远程仓库URL:4. 在ssh客户端配置 私钥(以pycharm为例)

2024-03-19 18:35:47 1605 1

原创 环境搭建:nvm和node

4.1 如果安装nvm的文件夹里没有nodejs这个文件夹的话,可以自己手动创建一个空的nodejs文件夹即可。不同Node.js版本下的方法不能完全适用,因此需要根据项目进行不同版本的node切换。nvm install node.js的版本号 安装某个node.js版本。nvm list available 显示可以安装的所有node.js版本。6. 查看项目使用的node.js版本(package.json)nvm ls 查看已经安装的node版本。4.2 配置淘宝镜像。

2024-01-18 10:48:14 711 2

空空如也

空空如也

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

TA关注的人

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