- 博客(90)
- 收藏
- 关注
原创 多个 Agent 各装各的技能?SkillHub:一份技能库,所有 Agent 统一调用
同时用 Claude Code、Trae、Codex、Cursor,最烦的是什么?每个工具各有一套技能机制,同一份规范要写 N 遍、改一处漏三处。SkillHub 把技能统一收进一个 Git 仓库,通过标准 MCP 让一份技能库服务所有 Agent——技能与 Agent 解耦、先检索再加载不占上下文,一个共享服务全团队共用。
2026-09-07 17:22:53
362
原创 Casdoor认证机制深度解析:从RS256验签到JTI黑名单登出,一文掌握企业级SSO
本文详细解析了基于Casdoor的企业级SSO认证体系在「绘丹青」项目中的实践应用。通过RS256非对称加密实现无状态验签,采用JTI黑名单机制实现单点登出,构建了包含注册、登录、刷新、注销的全链路认证方案。相比传统HS256方案,新体系具有密钥管理更安全、跨产品共享更容易、Redis依赖更弱等优势。文章深入剖析了RS256验签原理、JTI黑名单设计思路,并提供了从HS256迁移到Casdoor的完整checklist,为微服务架构下的统一认证提供了可复用的解决方案。核心经验包括:认证完全外移、验签本地化、
2026-07-09 15:01:08
397
原创 踩坑记录:画布回滚后一直提示“版本冲突,请刷新后再操作“,排查了半天才发现是版本号搞混了
本文记录了一个在线画布编辑器开发中遇到的版本冲突问题排查过程。当用户回滚到旧版本后保存时,系统错误地将快照版本号当作画布乐观锁版本号提交,导致409冲突。通过排查请求、数据库和代码,发现问题的核心在于混淆了两种不同的版本号:画布版本(更新时自增)和快照版本(创建快照时自增)。解决方案包括:1)回滚后正确同步两种版本号;2)串行化保存操作避免并发冲突;3)优化冲突响应机制,返回当前正确版本号。最终提出的三点经验教训强调了明确定义系统字段、正确处理回滚操作以及提供有效错误恢复路径的重要性。
2026-07-07 15:46:36
344
原创 如何丢弃本地修改并恢复为 GitHub 最新版本
本文针对开发者在Git版本控制中常见的场景:本地修改未提交但需要恢复到GitHub最新版本的问题,提供了从简单到专业的完整解决方案。主要方法包括:1)使用git reset --hard彻底覆盖本地修改;2)通过git stash安全暂存修改后再恢复;3)使用git checkout恢复单个文件。文章详细解释了每种方法的适用场景和操作流程,特别推荐了包含暂存步骤的安全恢复流程(git stash→git fetch→git reset),并强调Git不会自动覆盖未提交修改的特性。最后总结了核心命令,帮助开发
2025-12-09 14:17:45
677
原创 Python八股面试题
本文对比了编译型与解释型语言的差异,重点分析了Python作为解释型语言的特点。文章详细探讨了Python比C/Java慢的三大原因:解释执行、动态类型和GIL锁机制。针对GIL锁,解释了其存在意义及对多线程的影响,并提出了多进程解决方案。在字符串编码部分,阐述了Unicode与UTF-8的关系及Python3的处理方式。面向对象方面,区分了__new__和__init__的职责。此外,文章深入介绍了装饰器、生成器、闭包等核心概念及其应用场景。最后,全面对比了多线程、多进程和协程的特性,强调协程在I/O密集
2025-11-18 13:41:26
1042
原创 Django 接口文档生成:Swagger 与 ReDoc 全面说明
本文介绍在Django项目中使用drf_yasg自动生成接口文档的方法。主要内容包括:安装配置drf_yasg、在urls.py中添加Swagger和ReDoc入口、通过序列化器和视图注解定义接口文档、展示两种文档页面的区别与特点。SwaggerUI适合开发调试,而ReDoc提供更简洁的阅读体验。文中详细演示了如何编写示例接口并自动生成文档,最后说明可根据项目需求选择保留或关闭某一种文档页面。该方法解决了手写文档维护困难的问题,适合前后端分离开发场景。
2025-11-14 20:12:06
1214
1
原创 Python 懒加载属性装饰器(LazyProperty)详解
本文介绍了懒加载属性装饰器(LazyProperty)的实现与应用。该装饰器通过延迟计算和缓存结果优化性能,仅在首次访问属性时执行计算,后续访问直接返回缓存值。相比@property装饰器,LazyProperty避免了重复计算带来的性能损耗。文章通过具体代码展示了装饰器的实现原理:使用__get__描述符拦截属性访问,首次调用时计算结果并通过setattr缓存,后续访问直接读取缓存值。这种技术适用于计算复杂但访问频繁的属性,能显著提升程序运行效率。
2025-09-05 11:53:22
413
原创 APP逆向——某站heart接口(6)
本文详细分析了某平台心跳包接口的参数逆向过程,重点研究了session和sign参数的生成机制。session参数通过拼接设备标识、时间戳和随机数后SHA-1加密生成;sign参数则通过so层动态注册函数实现,经过多次MD5盐值加密获取。
2025-09-01 10:05:40
530
1
原创 APP逆向——某站session_id参数(4)
分析了B站应用获取session_id的过程。通过Frida逆向跟踪发现,session_id实际上是通过生成4个随机字节并转换为十六进制字符串实现的。
2025-08-25 15:16:41
717
原创 APP逆向——某站device-id参数(2)
详细解析了B站APP中Device-ID的生成机制:通过获取Android设备ID和型号,拼接后进行异或运算和Base64编码处理。文章提供了完整的Python实现代码,包括字符串混淆函数和随机设备ID生成方法,可模拟真实设备ID生成过程。
2025-08-24 19:28:27
1072
原创 APP逆向——某站Buvid参数(1)
本文详细解析了B站视频播放量统计接口的关键参数生成逻辑,重点破解了buvid参数的生成算法。通过逆向分析发现,buvid主要通过四种方式生成:XZ(手机状态)、XY(MAC地址)、XX(安卓ID)和XW(UUID)开头的字符串,均采用取特定位置字符+MD5加密的组合方式。文章还提供了完整的Python实现代码,但强调这些技术仅限学习研究,严禁用于非法数据采集等行为。作者声明不承担任何因违规使用而产生的法律责任,提醒读者务必遵守相关法律法规。
2025-08-24 16:44:36
1781
原创 猿人学第十五题—wasm的分析处理
WASM(WebAssembly) 是一种在浏览器中运行的 高性能、低级别的二进制代码格式,它让你可以用如 C/C++、Rust 等语言编写程序,然后编译后在网页上运行,就像 JavaScript 一样。
2025-05-10 17:25:01
821
原创 猿人学第十七题—天杀的http2.0
这个地方,显示的是http2.0,协议不一样,普通的request只能发http1.0的请求,所以应该用httpx去发请求。这道题比较有意思,如果没看到题目,可能真看不出来。如果发起请求,就显示失败。
2025-05-10 16:32:01
360
原创 猿人学第十三题—入门级cookie
当我去搜索以及找堆栈的时候并没有发现这个cookie的生成,于是我开始想,是不是之前的请求会有生成?所以这个也不需要逆向,就每次请求页数之前再请求一次这个页面即可。如何找到这个cookie的生成?
2025-05-10 16:21:58
409
原创 猿人学第四题-雪碧图超详细教程:涵盖图片偏移量、隐藏类分析
本文介绍了如何通过抓包分析和逆向分析来解决一个网页数据提取问题。首先,通过抓包工具分析请求和响应,发现响应中的图片标签包含数字信息。然后,通过XPath提取图片的src属性,并使用OCR技术识别数字。然而,实际响应中存在未使用的图片,且图片的显示位置通过CSS的left属性进行了偏移,导致直接提取的数字顺序错误。为了解决这个问题,文章提出了一个排序算法,通过计算图片的偏移量并重新排序,最终正确提取并拼接数字。
2025-05-09 21:10:32
1459
原创 异步协程中基于 aiomysql 的异步数据库操作
异步数据库高效地进行数据库操作,避免了阻塞。实现了多线程并发数据库操作,提升了数据库的访问性能。灵活地使用 Python 的asyncio协程处理大量并发请求。
2025-04-30 11:14:19
607
原创 多线程爬虫中实现线程安全的MySQL连接池
本文介绍了一个线程安全的 MySQL 连接池封装方式,并通过多线程场景验证其并发稳定性。在高并发读写、日志整洁输出、连接复用等方面表现良好,适用于中小型 Python 爬虫项目中的数据库访问层封装。
2025-04-30 10:54:45
812
原创 有关爬虫中数据库的封装——单线程爬虫
在单线程爬虫中,虽然访问量不像多线程那样频繁,但数据库连接的稳定性和代码的可维护性仍然极其重要。通过简单封装,我们不仅可以减少出错率,还能让整个爬虫程序更加专业规范。即使是单线程爬虫,也要养成良好的代码结构和异常处理习惯!未来无论项目规模如何变化,你都能游刃有余。
2025-04-27 11:13:29
670
原创 为什么Python多线程无法实现实际的并行?
想象你有一个厨房(Python 解释器),里面有好几个烧菜的夫妇(线程)。但是!整个厨房只有一口炉(CPU),各个烧菜的人只能排队使用。这个排队条件,就是GIL。Python 有 GIL ,是出于简单和安全性考虑,但也限制了多线程的真正并行性能。
2025-04-24 21:06:46
535
原创 Shell脚本学习笔记:从入门到变量(一)
最近在看 Shell 脚本相关的内容,以下是我从入门到变量部分的整理笔记,内容有点多,但都是干货。先从基础开始,再逐步深入。
2025-03-20 18:24:32
687
原创 Mermaid + AI:一键生成流程图和架构图,程序员的“偷懒”神器
作为一名程序员,你有没有遇到过这样的场景:老板或产品经理兴冲冲地跑过来,说:“小张啊,明天开会前把系统架构图画出来,顺便加个流程图,简单点就行!”你心里一万个“简单点?”,打开 Visio 或 Draw.io,手还没动,心已经累了。画图这事儿,费时费力不说,还经常被挑剔:“这个箭头歪了”“这个框太小了”“能不能再直观点”……别慌,今天我要介绍一个“偷懒”神器组合——。有了它,画流程图和系统架构图就像写代码一样简单,甚至还能让 AI 帮你自动生成,省时省力还省心!
2025-03-16 21:31:49
29721
3
原创 从零搞懂Docker数据卷
如果你是 Docker 新手,可能遇到过这样的尴尬:辛辛苦苦跑了个 MySQL 容器,建了数据库、加了数据,结果一删容器,全没了!这是因为 Docker 容器默认是“一次性纸杯”,用完就丢,里面的东西(数据)也跟着没了。那咋办?那就用数据卷!它能让数据“活下来”,即使容器没了也能找回来。这篇博客,从零开始,搞懂 Docker 的数据卷和数据卷容器。数据卷:容器的“移动硬盘”,让数据不丢。两种用法宿主机挂载(-v /宿主机:/容器):自己指定位置。Docker 卷(-v /容器路径)
2025-03-15 20:06:03
820
原创 从零开始:手把手教你在 CentOS 7 上安装 Docker
如果你是刚接触云计算或容器化的小白,可能听过“Docker”这个词,但不太清楚它到底是干嘛的。简单来说,Docker 就像一个超级便携的行李箱,它能把你的应用程序、依赖库、配置文件一股脑儿打包起来,不管你把它丢到哪台服务器上(Windows、Linux 还是 Mac),都能保证它跑得起来,不用担心“在我电脑上明明好好的,怎么到你那儿就崩了”的尴尬。
2025-03-12 19:59:44
1361
原创 MySQL 锁机制大揭秘:从索引到事务,一网打尽
MDL 像锁住书的“简介卡片”(表结构,比如字段名)。MySQL 自动加锁,查表(SELECT)加读锁,改结构(ALTER)加写锁。锁类型针对索引?自动/手动?需要索引?事务专用?例子全局锁否手动否否表锁否手动否否元数据锁否自动否部分SELECT *意向锁间接自动间接是UPDATE ...(加 IX)行级锁是部分(DML 自动,SELECT 手动)是是UPDATE ...全局锁:锁大门,手动操作,不看书架。表锁:锁整本书,手动锁,不挑目录。MDL。
2025-03-12 15:12:11
682
原创 Mysql 行级锁:从理解到代码演示
在 InnoDB 里,行级锁靠索引实现,锁的是索引项,不是直接锁数据。如果没索引,它可能“翻车”,锁住整张表(后面有例子)。
2025-03-12 12:06:57
906
原创 MySQL 里的“锁”:保护数据的门卫
数据库里,除了抢 CPU、内存、硬盘(I/O)这些资源,数据本身也是大家共享的“宝贝”。锁的任务是保证数据一致性和并发访问的有效性,不然数据乱了,或者大家排队太久(锁冲突),性能就崩了。MySQL 的锁按“管多大范围”分三种:全局锁、表级锁、行级锁。咱们一个个聊!
2025-03-11 12:38:55
902
原创 Playwright 解决京东滑块:自动化挑战大揭秘
如何处理JD的滑块登录?(若只想查看京东滑块,请直接滑到最下面)平时所使用的自动化登录工具:Selenium,虽然很好,但是在做京东滑块验证的时候,还是会出现被检测的情况,以至于无法通过校验。于是,我发现了另外一款自动化工具:playwright,也是非常的好用。接下来,就来见证它的强大吧!这就直接copy过来了:Playwright 是一个用于自动化浏览器操作的开源工具,由 Microsoft 开发和维护。
2024-12-19 15:37:31
2833
原创 轻松设置Python应用配置:打造你的conf.ini文件
有一份配置文件,可以省去很多麻烦事,例如将自己的程序交给客户,但客户并不懂代码时,配置文件是一个不错的选择。本文主要通过 configparser 实现配置文件conf.ini。
2024-11-28 11:38:42
519
原创 js逆向之AES加密解密封装
ECB:是一种基础的加密方式,密文被分割成分组长度相等的块(不足补齐),然后单独一个个加密,一个个输出组成密文。CBC:是一种循环模式,前一个分组的密文和当前分组的明文异或或操作后再加密,这样做的目的是增强破解难度。解密其实是差不多的逻辑,将base64解码为字节流,然后通过key和iv进行解密,这里不在赘述。因为这里采用的是128位秘钥,也就是16字节,所以你的加密内容也应该是16的倍数。加密,其中有些网站的数据加密就是通过AES这种加密形式来做的。AES是一种对称加密(加密和解密用的。
2024-10-17 21:50:33
966
原创 不会JS逆向也能高效结合Scrapy与Selenium实现爬虫抓取
其实想要实现scrapy和selenium共同完成爬虫任务还是比较简单的。最重要的是理解中间件的性质,并且能够在合适的地方去修改请求/响应内容。在遇到比较复杂的页面时,可以尝试使用scrapy + selenium的模式进行爬取。将两者结合使用,能够弥补彼此的不足,发挥出更大的优势。
2024-09-19 18:04:15
1405
原创 Selenium如何通过js注入避免被检测
在使用Selenium进行模拟爬虫的时候,很多时候网站都会有一定的检测机制,能够检测出你这个是Selenium程序,比如淘宝网。
2024-09-14 12:54:00
944
原创 快速入门和简单理解并发编程中的并发、并行、同步、异步,并且简单实现多进程和多线程
本篇文章快速入门了关于异步编程的一些基本概念和实现,同步、异步、并行、并发、进程、线程等
2024-09-13 12:33:36
1351
原创 Django分页组件封装
在日常开发中,我们也许会遇到一页内容太多不够展示的问题,过于冗余。此时,我们就需要进行分页,分页的方式有两种:1. ajax异步分页 2. 普通选择分页这里介绍的组件就是普通分页组件,看效果:除此之外,如果页数过多,只会显示当前前面五页和后面五页:废话不多说,直接上代码!
2024-08-01 19:49:16
634
原创 鸿蒙系统和安卓系统通过termux搭建Linux系统—Centos
这篇文章让你能够在手机或者平板上使用Linux-Centos系统让你随时随地都能操作命令行进行装13
2024-05-24 16:52:19
2923
4
原创 如何安装虚拟机Vmware,并且在虚拟机中使用centos系统
在安装Vmware之前,我们先做虚拟机的介绍虚拟机:通过软件虚拟出来的具有完整硬件的操作系统,运行在一个独立的环境中而Vmware就是这个软件,可以让你一台机器同时运行多个系统,比如dindows、Linux系统等。
2024-05-22 20:51:32
1726
2
Selenium规避检测js注入代码
2024-09-14
蓝桥杯Python组算法模板大全
2024-04-04
Python爬虫-知网高级检索爬取
2024-02-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅