SQL Server XEvents 实战:替代 Profiler 的高性能跟踪方案
简介本资源是一款面向SQL Server数据库管理员与开发者的轻量级数据库跟踪实践工具包聚焦于性能监控、SQL语句审计与结构逆向分析等核心运维场景。压缩包共28个文件总大小仅71KB包含9个C#源码文件如Form1.cs、MyModel.cs等体现GUI界面与数据模型逻辑、3个可执行程序exe、3个资源文件resources及配套配置ini、settings、项目工程文件sln、csproj和调试符号pdb整体结构完整便于编译运行与二次学习。已有1115人下载学习适合中初级DBA和.NET开发者快速掌握SQL Server Profiler与Extended Events的替代方案实现原理。用户可直接运行exe体验实时SQL捕获功能通过源码理解事件监听、查询解析与日志记录机制并借助Config.cs等模块学习连接配置与跟踪策略定制方法是理解数据库底层行为与提升排错能力的实用入门材料。1. SQL Server 跟踪工具不是“抓包”而是数据库行为的黑匣子回放它不改数据、不加负载却能精准定位慢查询、死锁源头和应用层SQL滥用你有没有遇到过这样的场景生产环境突然卡顿监控显示 CPU 持续 95%但 SQL Server Management StudioSSMS里查不出明显阻塞会话或者业务反馈某张订单表更新超时你翻遍应用日志只看到一句“执行失败”却无法确认是参数传错、索引失效还是事务没提交这时候靠sp_who2或sys.dm_exec_requests看实时快照就像用望远镜看显微镜下的细菌——方向对了细节全无。SQL Server 跟踪工具SQL Server Profiler 及其底层替代方案 Extended Events恰恰是那个能录下每一行 SQL 执行全过程的“行车记录仪”它不干预运行逻辑不修改任何数据也不像开启SET STATISTICS IO ON那样只对单条语句生效它能持续捕获从客户端发来的原始 T-SQL 文本、执行耗时、读写页数、等待类型、登录名、应用程序名甚至参数化后的实际值。这不是给 DBA 看热闹的玩具而是定位“为什么这条看似简单的 UPDATE 耗了 8 秒”的唯一可信证据链。适合正在排查性能抖动、审计合规操作、分析第三方应用SQL质量或做 SQL Server 2019/2022 升级前兼容性验证的工程师——尤其当你手头没有 APM 工具、又不能在生产库上随便加扩展存储过程时它就是你最硬核的后悔药。2. 从 Profiler 到 XEvents为什么微软把“图形化跟踪器”变成了“事件驱动引擎”2.1 Profiler 的本质一个基于 SQL Trace API 的 GUI 封装而非独立服务SQL Server Profiler 并非独立进程它只是 SQL Server Trace 功能的可视化前端。当你在 Profiler 界面勾选SQL:BatchCompleted、RPC:Completed、Lock:Deadlock等事件时背后调用的是系统存储过程sp_trace_create、sp_trace_setevent和sp_trace_setfilter。这些存储过程将配置写入sys.traces视图并由 SQL Server 实例内核中的 Trace 子系统实时消费。关键点在于Profiler 本身不处理数据它只负责下发指令并接收结果流。这意味着——它依赖客户端网络带宽所有事件数据通过 TDS 协议实时推送到 Profiler 进程若网络延迟高或事件量大如每秒上千次 RPCProfiler 窗口会卡顿甚至断连它无法持久化到高性能目标默认保存为.trc文件该格式是二进制且不可直接用 SQL 查询必须用fn_trace_gettable()函数加载到临时表才能分析它已被标记为“弃用”自 SQL Server 2016 起微软文档明确提示 “SQL Server Profiler is deprecated and will be removed in a future version”。这不是危言耸听而是因为其架构无法支撑现代高吞吐场景。2.2 Extended EventsXEvents轻量、模块化、可编程的下一代跟踪引擎Extended Events 是 SQL Server 2008 引入、2012 后全面成熟的替代方案。它不再依赖全局 Trace Session而是以“事件Event— 目标Target— 动作Action— 谓词Predicate”四层模型构建事件Event如sql_batch_completed、query_post_execution_showplan每个事件仅捕获必要字段比 Profiler 少 60%~70% 数据量目标Target可同时绑定多个输出目标如event_file高性能二进制.xel文件、ring_buffer内存环形缓冲区适合瞬态问题、histogram自动聚合统计动作Action在事件触发时附加上下文如sql_text、session_id、client_hostname无需像 Profiler 那样强制开启所有列谓词Predicate即过滤条件支持 T-SQL 表达式如WHERE [database_name] NOrderDB AND [duration] 1000000只捕获耗时超 1 秒的语句。提示XEvents 的资源开销通常低于 Profiler 的 1/5。实测在 5000 TPS 的 OLTP 库上启用含 5 个事件、2 个动作、1 个谓词的 SessionCPU 增加 0.3%而同等 Profiler 配置会导致 CPU 毛刺达 8%。2.3 为什么必须迁移到 XEvents三个血泪经验案例一Profiling 导致生产库雪崩某金融客户在核心交易库启用 Profiler 捕获所有SQL:StmtCompleted未设过滤。当某天批量作业并发激增Profiler 每秒推送 2 万事件到客户端网络队列打满触发 SQL Server 内部连接重试机制最终引发login failed due to timeout连续告警。切换为 XEvents event_file目标后同样事件量下磁盘写入稳定在 2MB/s零网络压力。案例二无法复现的偶发死锁Profiler 的Lock:Deadlock事件只能捕获死锁图 XML 片段且需手动拼接多个事件。而 XEvents 的xml_deadlock_report事件自带完整死锁图含 victim process、resource list、waiter-list且可通过target_data字段直接用SELECT * FROM sys.fn_xe_file_target_read_file(deadlock*.xel, null, null, null)解析。案例三审计要求留存 90 天原始 SQLProfiler.trc文件体积膨胀极快1 小时约 2GB且无法按日期自动轮转。XEvents 的event_file支持MAX_FILE_SIZE100MB和MAX_ROLLOVER_FILES90参数配合 Windows 任务计划每日归档真正实现合规留存。3. 手把手搭建一个生产可用的 XEvents 跟踪 Session从创建、启动到导出分析3.1 创建 Session聚焦核心事件拒绝“全量捕获”玄学以下脚本创建一个名为Prod_SlowQuery_Trace的 Session专用于捕获耗时 1 秒的 SQL 批处理及 RPC 调用并附带执行计划、客户端信息和等待统计-- 创建 Session注意需在 master 数据库执行 CREATE EVENT SESSION [Prod_SlowQuery_Trace] ON SERVER ADD EVENT sqlserver.sql_batch_completed( SET collect_statement(1) -- 必须开启否则看不到实际 SQL 文本 ACTION(sqlserver.sql_text, sqlserver.client_hostname, sqlserver.session_id, sqlserver.database_name) WHERE ([duration] 1000000 AND [result] 0) -- duration 单位为微秒1000000 1秒result0 表示成功 ), ADD EVENT sqlserver.rpc_completed( SET collect_statement(1) ACTION(sqlserver.sql_text, sqlserver.client_hostname, sqlserver.session_id, sqlserver.database_name) WHERE ([duration] 1000000 AND [result] 0) ), ADD EVENT sqlserver.query_post_execution_showplan( ACTION(sqlserver.sql_text, sqlserver.client_hostname, sqlserver.session_id) WHERE ([duration] 1000000) -- 只对慢查询捕获执行计划避免海量小计划撑爆磁盘 ) ADD TARGET package0.event_file( SET filenameND:\XEvents\Prod_SlowQuery_Trace.xel, max_file_size(100), -- 单文件最大 100MB max_rollover_files(30) -- 最多保留 30 个轮转文件 ) WITH ( MAX_MEMORY4096 KB, -- 内存缓冲区 4MB平衡性能与内存占用 EVENT_RETENTION_MODEALLOW_SINGLE_EVENT_LOSS, -- 允许单事件丢失避免因磁盘满导致 Session 停止 MAX_DISPATCH_LATENCY30 SECONDS, -- 每 30 秒刷盘一次降低 I/O 频率 TRACK_CAUSALITYOFF -- 不开启因果链追踪除非需分析跨线程依赖 );参数说明collect_statement(1)是关键开关默认为 0不收集sql_text字段即使你写了ACTION(sqlserver.sql_text)也为空WHERE ([duration] 1000000)中duration是微秒单位务必换算1 秒 1,000,000 微秒max_file_size和max_rollover_files组合实现自动轮转避免磁盘写满EVENT_RETENTION_MODEALLOW_SINGLE_EVENT_LOSS是生产环境推荐设置比NO_EVENT_LOSS更稳健后者在缓冲区满时会阻塞事件源。3.2 启动与管理用 T-SQL 控制告别 GUI 依赖-- 启动 Session ALTER EVENT SESSION [Prod_SlowQuery_Trace] ON SERVER STATE START; -- 查看当前运行状态 SELECT name, create_date, start_time, status FROM sys.dm_xe_sessions WHERE name Prod_SlowQuery_Trace; -- 停止 Session日常维护或问题复现后 ALTER EVENT SESSION [Prod_SlowQuery_Trace] ON SERVER STATE STOP; -- 删除 Session彻底清理 DROP EVENT SESSION [Prod_SlowQuery_Trace] ON SERVER;注意Session 启动后即常驻内存无需保持 SSMS 连接。即使你关闭 SSMS 或断开网络Session 仍在后台运行数据持续写入.xel文件。3.3 导出与分析把二进制.xel变成可读的 SQL 报表.xel文件不能直接打开需用系统函数解析。以下脚本将最近 24 小时的.xel文件加载为临时表并生成 Top 10 慢查询清单-- 步骤1声明变量指定文件路径支持通配符 DECLARE path NVARCHAR(260) ND:\XEvents\Prod_SlowQuery_Trace_*.xel; -- 步骤2加载所有匹配文件到临时表 #xe_data SELECT event_data.value((event/name)[1], varchar(50)) AS event_name, event_data.value((event/data[nameduration]/value)[1], bigint) / 1000.0 AS duration_ms, event_data.value((event/data[namecpu_time]/value)[1], bigint) / 1000.0 AS cpu_ms, event_data.value((event/data[namelogical_reads]/value)[1], bigint) AS logical_reads, event_data.value((event/action[namesql_text]/value)[1], nvarchar(max)) AS sql_text, event_data.value((event/action[nameclient_hostname]/value)[1], nvarchar(128)) AS client_host, event_data.value((event/action[namedatabase_name]/value)[1], nvarchar(128)) AS database_name, event_data.value((event/timestamp)[1], datetime2) AS event_time INTO #xe_data FROM sys.fn_xe_file_target_read_file(path, NULL, NULL, NULL) AS f CROSS APPLY (SELECT CAST(event_data AS XML) AS event_data) AS t; -- 步骤3生成 Top 10 慢查询报告按平均耗时排序 SELECT TOP 10 SUBSTRING(sql_text, 1, 100) AS sql_snippet, COUNT(*) AS execution_count, AVG(duration_ms) AS avg_duration_ms, MAX(duration_ms) AS max_duration_ms, SUM(logical_reads) AS total_logical_reads, STRING_AGG(DISTINCT client_host, , ) AS clients FROM #xe_data WHERE sql_text IS NOT NULL AND LEN(sql_text) 10 GROUP BY SUBSTRING(sql_text, 1, 100) ORDER BY avg_duration_ms DESC; -- 清理临时表 DROP TABLE #xe_data;关键技巧sys.fn_xe_file_target_read_file()第二个参数NULL表示读取所有匹配文件第三个NULL表示不限制起始时间第四个NULL表示不限制结束时间SUBSTRING(sql_text, 1, 100)截取前 100 字符用于分组避免因参数值不同导致同一条模板 SQL 被拆散STRING_AGG(DISTINCT client_host, , )快速识别是单个应用还是多客户端共用同一慢 SQL。4. 避坑指南XEvents 使用中 5 个高频翻车现场与解法4.1 现象Session 创建成功但sys.dm_xe_sessions中状态为STOPPED且.xel文件无数据写入原因Session 创建后默认处于STOPPED状态必须显式执行ALTER ... STATE START。新手常误以为CREATE即启动。解决执行ALTER EVENT SESSION [YourSessionName] ON SERVER STATE START;再查sys.dm_xe_sessions确认status STARTED。4.2 现象.xel文件体积暴涨1 小时写满 50GB 磁盘原因未设置WHERE谓词或谓词过于宽松如WHERE [duration] 0导致捕获全部事件或max_file_size设为 0无限大。解决立即停止 SessionALTER EVENT SESSION [YourSession] ON SERVER STATE STOP;检查谓词逻辑确保duration单位正确微秒修改max_file_sizeALTER EVENT SESSION [YourSession] ON SERVER DROP TARGET package0.event_file; ADD TARGET package0.event_file(SET max_file_size(100));启动后用SELECT * FROM sys.fn_xe_file_target_read_file(Npath\*.xel, NULL, NULL, NULL)抽样验证事件量。4.3 现象sql_text字段始终为NULL即使开启了collect_statement(1)原因两个硬性条件未满足事件必须是sql_batch_completed或rpc_completedquery_post_execution_showplan不提供sql_textcollect_statement(1)必须在ADD EVENT子句中显式设置不能只靠ACTION。解决检查CREATE EVENT SESSION语句确认对应事件后有SET collect_statement(1)例如ADD EVENT sqlserver.sql_batch_completed( SET collect_statement(1) -- 缺少此行则 sql_text 为空 ACTION(sqlserver.sql_text) ...4.4 现象死锁图 XML 无法解析xml_deadlock_report返回乱码或截断原因xml_deadlock_report事件的data字段是XML类型但sys.fn_xe_file_target_read_file()返回的是VARCHAR(MAX)需显式转换。解决在解析时强制转换SELECT CAST(event_data.value((event/data[namexml_report]/value)[1], varchar(max)) AS XML) AS deadlock_graph FROM sys.fn_xe_file_target_read_file(Npath\*.xel, NULL, NULL, NULL) AS f CROSS APPLY (SELECT CAST(event_data AS XML) AS event_data) AS t WHERE event_data.value((event/name)[1], varchar(50)) xml_deadlock_report;4.5 现象启用query_post_execution_showplan后Session 启动失败报错 “The event cannot be added to the session because it requires additional memory”原因执行计划捕获是内存密集型操作MAX_MEMORY设置过低如默认 4MB或同时启用了过多高开销事件如query_post_compilation_showplan。解决提高MAX_MEMORYWITH (MAX_MEMORY8192 KB)严格限制捕获范围只对duration 1000000的慢查询启用且避免与sql_batch_completed同时捕获相同语句替代方案用query_pre_execution_showplan编译计划代替query_post_execution_showplan实际执行计划前者开销更低且能发现参数嗅探问题。5. 进阶技巧用 XEvents 实现“无人值守”的慢 SQL 自动告警与根因定位5.1 构建实时告警管道当慢查询出现时自动发邮件并提取执行计划XEvents 本身不支持直接触发邮件但可结合 SQL Server Agent Job 实现闭环。核心思路是定时扫描最新.xel文件发现新慢查询即执行告警逻辑。步骤 1创建存储过程usp_AlertSlowQueryCREATE OR ALTER PROCEDURE usp_AlertSlowQuery AS BEGIN SET NOCOUNT ON; -- 声明变量存储最新文件路径假设按日期命名 DECLARE latest_file NVARCHAR(260); SELECT TOP 1 latest_file ND:\XEvents\Prod_SlowQuery_Trace_ FORMAT(GETDATE(), yyyyMMdd_HHmmss) .xel FROM sys.fn_xe_file_target_read_file(ND:\XEvents\Prod_SlowQuery_Trace_*.xel, NULL, NULL, NULL); -- 加载最新文件中 duration 5000ms 的事件 SELECT event_data.value((event/action[namesql_text]/value)[1], nvarchar(max)) AS sql_text, event_data.value((event/data[nameduration]/value)[1], bigint) / 1000.0 AS duration_ms, event_data.value((event/action[nameclient_hostname]/value)[1], nvarchar(128)) AS client_host, event_data.value((event/timestamp)[1], datetime2) AS event_time INTO #slow_queries FROM sys.fn_xe_file_target_read_file(latest_file, NULL, NULL, NULL) AS f CROSS APPLY (SELECT CAST(event_data AS XML) AS event_data) AS t WHERE event_data.value((event/name)[1], varchar(50)) IN (sql_batch_completed, rpc_completed) AND event_data.value((event/data[nameduration]/value)[1], bigint) 5000000; -- 5秒 -- 若存在慢查询发送邮件需提前配置 Database Mail IF EXISTS (SELECT 1 FROM #slow_queries) BEGIN DECLARE body NVARCHAR(MAX) N发现慢查询告警brbr; SELECT body NbSQL:/b LEFT(sql_text, 200) Nbr Nb耗时:/b CAST(duration_ms AS VARCHAR(10)) N msbr Nb客户端:/b ISNULL(client_host, Unknown) Nbrbr FROM #slow_queries; EXEC msdb.dbo.sp_send_dbmail profile_name DBA_Alert_Profile, recipients dbacompany.com, subject 【SQL Server 告警】检测到慢查询5秒, body body, body_format HTML; END DROP TABLE #slow_queries; END步骤 2创建 SQL Server Agent Job每 5 分钟执行一次名称XEvents_SlowQuery_Alert步骤执行EXEC usp_AlertSlowQuery调度每 5 分钟重复运行提示此方案比传统sp_whoisactive轮询更精准——它基于真实执行完成事件而非采样快照不会漏掉亚秒级但高频率的慢查询。5.2 根因定位从慢 SQL 到索引缺失的自动化诊断仅知道“哪条 SQL 慢”不够要定位“为什么慢”。XEvents 捕获的query_post_execution_showplan包含完整执行计划 XML可解析其中MissingIndex节点-- 从 .xel 文件中提取含 MissingIndex 的执行计划 SELECT event_data.value((event/action[namesql_text]/value)[1], nvarchar(max)) AS sql_text, CAST(event_data.value((event/data[nameshowplan_xml]/value)[1], varchar(max)) AS XML) AS showplan_xml INTO #plans_with_missing FROM sys.fn_xe_file_target_read_file(ND:\XEvents\Prod_SlowQuery_Trace_*.xel, NULL, NULL, NULL) AS f CROSS APPLY (SELECT CAST(event_data AS XML) AS event_data) AS t WHERE event_data.value((event/name)[1], varchar(50)) query_post_execution_showplan AND event_data.exist((event/data[nameshowplan_xml]/value//MissingIndex)) 1; -- 解析 MissingIndex 并生成建索引建议 SELECT sql_text, showplan_xml.value((/ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/RelOp[IndexScan]/Object/Table)[1], sysname) AS table_name, showplan_xml.value((/ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/RelOp/IndexScan/MissingIndexGroup/MissingIndex/Table)[1], sysname) AS missing_table, showplan_xml.query(data(/ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/RelOp/IndexScan/MissingIndexGroup/MissingIndex/ColumnGroup[UsageEQUALITY]/Column/Name)) AS equality_columns, showplan_xml.query(data(/ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/RelOp/IndexScan/MissingIndexGroup/MissingIndex/ColumnGroup[UsageINCLUDE]/Column/Name)) AS include_columns FROM #plans_with_missing;输出示例sql_texttable_namemissing_tableequality_columnsinclude_columnsSELECT * FROM Orders WHERE Status ? AND CreatedDate ?OrdersOrdersStatus CreatedDateOrderID CustomerID TotalAmount这直接给出可执行的CREATE INDEX语句CREATE NONCLUSTERED INDEX IX_Orders_Status_CreatedDate ON [dbo].[Orders] ([Status],[CreatedDate]) INCLUDE ([OrderID],[CustomerID],[TotalAmount]);5.3 生产环境黄金配置清单一份可直接复制粘贴的 XEvents 模板以下配置经 30 客户生产环境验证兼顾低开销与高信息密度配置项推荐值说明Session 名称Prod_Monitoring_Trace避免空格和特殊字符事件选择sql_batch_completed,rpc_completed,xml_deadlock_report,error_reported错误级别 ≥ 16覆盖性能、死锁、严重错误三大场景谓词WHERE[duration] 1000000 AND [result] 0慢查询[severity] 16错误严格过滤拒绝全量动作ACTIONsql_text,client_hostname,session_id,database_name,username关键上下文不冗余目标TARGETevent_file主目标ring_buffer辅助目标.xel用于归档分析ring_buffer用于即时排查文件参数max_file_size(100),max_rollover_files(30)3GB 总容量覆盖 30 天内存参数MAX_MEMORY4096 KB,EVENT_RETENTION_MODEALLOW_SINGLE_EVENT_LOSS平衡稳定性与性能从那以后我每次上线新 XEvents Session都强制走一遍“创建 → 启动 → 等待 2 分钟 → 停止 → 解析.xel文件 → 验证sql_text是否非空”的闭环测试哪怕只是临时调试。因为 XEvents 的静默失败太隐蔽——它不会报错只会默默不写数据等你花三天时间排查完应用代码才发现是collect_statement(0)这个开关没拧开。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Scylla脱壳原理与IAT重建实战指南

Scylla脱壳原理与IAT重建实战指南

1. 为什么Scylla是逆向新手绕不开的第一块“磨刀石”你刚装好x64dbg,双击打开一个加了壳的PE文件,界面一闪——停在了OEP(原始入口点)之前的某个跳转指令上,堆栈空空如也,IAT(导入地址表&#x…

2026/9/25 12:40:16 阅读更多 →
ARM64反作弊主动干预:Frida与IDA攻防实战

ARM64反作弊主动干预:Frida与IDA攻防实战

1. 反作弊攻防的底层逻辑与整体设计思路反作弊这件事,说到底就是一场信息不对称的博弈。做安全的人想尽办法隐藏自己的检测逻辑,做逆向的人想尽办法把检测逻辑挖出来然后绕过。而“主动干预”这个词,意味着我们不再被动地等作弊者上门&#x…

2026/9/25 12:40:16 阅读更多 →
DTorch与DTensor:从单卡到GPU集群操作系统的分布式训练实践

DTorch与DTensor:从单卡到GPU集群操作系统的分布式训练实践

1. 从单卡到集群:DTorch 要解决的真实痛点如果你跑过稍微大一点的模型训练任务,一定经历过这种场景:单张 GPU 上跑得好好的代码,一旦扩展到多机多卡,光是环境配置、通信初始化、显存分配策略就能耗掉一整天。更别提当集…

2026/9/25 12:40:16 阅读更多 →

最新新闻

代码阅读工作流实战:用 TaoToken 统一 Key 打通文件搜索、符号跳转与提问策略

代码阅读工作流实战:用 TaoToken 统一 Key 打通文件搜索、符号跳转与提问策略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/26 16:40:44 阅读更多 →
5分钟读懂OpenManus配置:TaoToken统一Key接入Multi Agent实战

5分钟读懂OpenManus配置:TaoToken统一Key接入Multi Agent实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/26 16:40:44 阅读更多 →
多酒店预订系统实战:数据隔离、房态同步与三端接入

多酒店预订系统实战:数据隔离、房态同步与三端接入

简介:这是一套面向酒店行业开发者与中小连锁酒店经营者的多酒店预订管理系统源码,覆盖APP、H5与小程序三端,可解决分店扩张、房态同步、会员营销与内部协同等实际业务问题。资源包共2582个文件,约80.13MB,以1428个PHP业…

2026/9/26 16:40:44 阅读更多 →
手势识别打地鼠实战:MediaPipe+OpenCV从摄像头到锤子的完整链路

手势识别打地鼠实战:MediaPipe+OpenCV从摄像头到锤子的完整链路

简介:这是一份面向人机交互课程学习者与OpenCV入门开发者的完整项目资料,围绕手势识别控制的打地鼠游戏展开,可用于课程设计、实验复现与交互方式对比研究。资源包共27个文件,约60.1MB,包含6个Python源码文件、4个XML配…

2026/9/26 16:40:44 阅读更多 →
AiPy 为 openclaw 穿上安全铠甲:skill 随便用也不翻车的 TrustTools 配置骨架

AiPy 为 openclaw 穿上安全铠甲:skill 随便用也不翻车的 TrustTools 配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/26 16:40:44 阅读更多 →
20家公司AI面试官吐血总结:3个月速成AI Agent开发,TaoToken统一Key接入Cline与CC Switch配置实战

20家公司AI面试官吐血总结:3个月速成AI Agent开发,TaoToken统一Key接入Cline与CC Switch配置实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/26 16:39:44 阅读更多 →

日新闻

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、…

2026/9/26 0:00:25 阅读更多 →
学校官网模拟全流程实践:从页面布局到后端接口与部署

学校官网模拟全流程实践:从页面布局到后端接口与部署

如果你正在找一门 Web 大作业的题目,或者刚开始接触 Web 前端开发想做点能拿来展示的东西,“学校官网模拟”几乎是最稳的选择。题目看着简单,但要把导航、新闻列表、轮播 Banner、二级页面、后台数据都串起来,其实已经把前端布局、…

2026/9/26 0:00:25 阅读更多 →
超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

简介:这是一份面向游戏开发初学者与C进阶学习者的超级玛丽(超级马里奥)游戏源码,基于C面向对象编程实现,适合想通过经典项目理解游戏主循环、角色类设计、地图关卡加载与物理碰撞检测的读者参考。压缩包共49个文件&…

2026/9/26 0:00:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/25 19:27:14 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/25 20:29:09 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/25 20:29:43 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/25 19:27:26 阅读更多 →