自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(670)
  • 资源 (3)
  • 问答 (3)
  • 收藏
  • 关注

原创 Python容器类型差异操作

操作类别列表字典集合元组备注增appendinsertextendupdateaddupdate不可变字典的“增”同时也是“改”删removepopdelpoppopitemremovediscardpop不可变改索引赋值键赋值不可改元素不可变集合元素不可变,但可增删查索引、切片、in键、getin、子集判断索引、切片、in运算(拼接),(重复)(合并, 3.9+)(并),(交),(差),(对称差)集合运算与数值加减含义不同其他sortreverse, 推导式推导式,keys。

2026-03-14 23:52:00 420

原创 ASAN_OPTIONS和UBSAN_OPTIONS支持的运行时flag

想快速查阅:运行得到当前实际支持的 flag。想理解每个 flag 的用途:阅读 LLVM 官方文档(链接如上)。想看源码定义:浏览 compiler-rt 仓库中的对应.inc文件。

2026-02-24 15:20:00 60

原创 Undefined Behavior Sanitizer之UBSAN_OPTIONS

这一点与 ASAN 不同,ASAN 检测到错误后默认会终止程序。通过。

2026-02-24 15:13:16 55

原创 AddressSanitizer之ASAN_OPTIONS

是一个环境变量,用于在配置 AddressSanitizer (ASan) 的行为。它允许你调整 ASan 的各种参数,从而影响内存错误的检测方式、报告格式、性能开销等。下面我会详细解释它的用法、常见选项以及注意事项。

2026-02-24 15:00:49 93

原创 深入理解 AddressSanitizer 的 Redzone 和 Shadow Memory

问题答案Redzone 大小由谁控制?运行时(非编译器),通过配置配置方式左右 redzone 可独立配置吗?否,两者共享同一配置为什么左侧是 8 个 fa?8 个 fa = 64 字节(因为 1 shadow byte = 8 字节)为什么是 64 字节而不是 16?ASan 自适应策略:分配越大,redzone 越大(malloc(100) → 64 字节)Shadow memory 的作用跟踪每个 8 字节内存单元的可访问性。

2026-02-23 23:37:09 76

原创 Python argparse 参数解析用法详解

argparse 是 Python 标准库中用于解析命令行参数的模块,它使得编写用户友好的命令行界面变得简单。位置参数是指在命令行中必须按特定顺序提供的参数,它们不依赖于或--前缀来识别,而是通过它们在命令行中的位置来识别。位置参数:通过位置识别,必须提供,顺序固定help:针对单个参数的说明epilog:整个程序的补充说明,显示在帮助信息末尾可以混合顺序:argparse 通常能正确处理可选参数在前的情况潜在风险:当可选参数需要值时,可能会与位置参数混淆最佳实践位置参数在前,可选参数在后。

2025-11-30 23:59:30 579

原创 Python相对导入用法详解

Python的import系统非常强大和灵活,正确使用它对于编写可维护的代码至关重要。优先使用绝对导入,它们更清晰明确遵循PEP8导入顺序,提高代码可读性避免循环导入,它们会导致难以调试的问题使用合适的错误处理,特别是对于可选依赖了解模块搜索路径,这在部署时很重要掌握这些导入技巧将帮助你构建更加模块化、可维护和Pythonic的代码库。

2025-10-28 00:19:19 883

原创 CMake中add_custom_target和add_custom_command用法详解

使用ALL需要每次构建时自动执行的任务(如代码生成、资源处理)。统一构建入口,简化用户操作(如编译、测试、打包一步完成)。强制某些任务作为构建流程的一部分(例如清理临时文件)。是 CMake 中用于在构建过程中添加自定义命令的工具。它通常用于生成文件或在构建特定目标前后执行操作。其行为和执行时机取决于具体使用场景。主要用法理解和**使用**当需要生成文件或添加构建步骤到现有目标时,它集成到CMake的依赖系统中**使用**当需要创建可单独执行的命名目标时,它提供手动调用的入口点结合使用。

2025-04-12 23:07:32 1670

原创 python argparse模块nargs用法

表示该参数最多接收一个值。如果提供了值,则使用该值;如果没有提供值,则使用默认值或。:表示该参数可以接收零个或多个值,并将这些值作为一个列表。:表示该参数必须接收一个或多个值,并将这些值作为一个列表。:表示该参数必须接收指定数量的值,并将这些值作为一个列表。(默认值):表示该参数只能接收一个值。模块中用来指定参数的数量的属性。

2024-07-06 22:35:44 2727

原创 Python开启Http Server

用 Python 部署了一个具有 FTP 功能的服务器,电脑在局域网内通过 FTP 下载想要传输的文件。

2023-07-09 21:34:23 3640

翻译 开源代码授权Licence说明

BSD开源协议BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。但”为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。不可以用开源代码的作者/机构名字和

2021-04-07 23:46:04 2342

原创 git生成patch和打patch

在程序员的日常开发与合作过程中,对于code的生成patch和打patch(应用patch)成为经常需要做的事情。使用方法(直接给一些examples):1.生成patch1.1 git diff > xxx.patch#只想 patch Test.java 文件git diff Test.java > test.patch# 把所有的修改文件打成 patchgit diff > test.patch1.2.git format-patch$ git format-pa

2021-03-16 00:40:36 149067 4

原创 Linux 文件/文件夹按大小排序速查

场景命令说明文件大→小ls -lhS直接排序文件小→大ls -lhSr反转排序目录大→小du 统计 + sort 排序目录小→大du 统计 + sort 排序文件用ls -S,目录用du + sort。

2026-05-06 14:17:02 355

原创 Git Remote 仓库地址变更

本地 clone 的 remote URL 需要同步更新,否则 push/pull 会 404。如果本地已配置 SSH key,推荐使用 SSH 格式保持一致。GitHub 上的仓库名从。,旧 URL 不再有效。

2026-05-06 09:30:03 180

原创 看见编译器插装:从 ASan 汇编、GIMPLE 到实战报错

插装”(instrumentation)这个词在不同上下文里含义不同。在 Sanitizer 世界里,它特指:编译器在生成目标代码时,在每条内存访问 / 运算 / 函数调用等处自动插入额外代码,用来在运行时做检查。Sanitizer开关主要检查对象heap/stack/global 越界、use-after-free、double-free整数溢出、除 0、空指针解引用、非法 shift数据竞争未初始化内存读内存泄漏源码不变和运行时才报错。

2026-05-02 23:13:05 65

原创 Shell 中命令前加反斜杠 `\` 的作用

命令前面加了一个,这是做什么的?

2026-04-26 01:24:52 168

原创 Git Worktree 可视化理解指南

工具更合适 —— 它封装了对整个 repo manifest 下所有仓库批量开 worktree 的逻辑,能为每个 feature 开一个完整的多仓隔离工作空间。仓库越大,优势越明显(想象一下 100GB 的 Chromium 仓库)。,它们就是磁盘上 3 个完全独立的文件夹,跟普通文件夹一模一样。无需 clone 多份仓库,就能并行工作在多个分支上。= 空壳,只有代码文件和一个指向主仓库的小指针。,不用切分支,不用 clone 第二份仓库。书库,所有 worktree 都能看到。

2026-04-24 18:00:09 436

原创 Linux 外挂 SSD 根目录下的 `.Trash-1000` 到底是什么

不是木马、不是流氓软件、也不是你误操作的产物。它只是 Linux 桌面系统为了**“让你在任何分区里删文件都能快速且可撤销”**而遵守的通用约定。是什么:外挂分区上的本地回收站,符合 FreeDesktop Trash 规范为什么:避免跨分区mv退化成昂贵的cp + rm怎么办:无视 / 定期清 /绕开,三选一。

2026-04-24 10:20:03 317

原创 CMake 中 `-include` 编译选项的用法与场景

include的本质就是给你一个不碰源文件就能注入代码的能力。如果源文件是你自己的、数量也不多,直接写#include更清晰直观。第三方代码不能改全局配置头要注入几百个文件构建级条件注入(sanitizer/coverage/mock)单元测试 mock 不侵入产品代码。

2026-04-23 11:11:48 237

原创 Git Rebase: HEAD~ 的简洁写法

时,如果要回溯多个 commit,用。,表示往前回溯 9 个 commit。

2026-03-30 12:14:51 44

原创 Git 分支切换

remotes是 Git 存放远程分支信息的目录,不用管它推荐用git switch代替,语义更清晰切分支时,直接写分支名就行(如只有多个远程有同名分支时,才需要加远程名(如用查看你的远程仓库叫什么名字。

2026-03-28 23:59:51 414

原创 Claude Code 核心概念终极指南:Agents、Commands、Skills 全面解析

Agents、Commands、Skills 构成了 Claude Code 强大的可扩展体系。Agents 是执行者,Commands 是快捷键,Skills 是工具箱——理解它们的分工,就能像搭积木一样灵活构建自己的自动化工作流。

2026-03-28 22:15:41 125

原创 Linux rsync使用教程

明确你的意图如果你想同步目录本身 → 源路径不要加尾斜杠。如果你想同步目录内容 → 源路径加上尾斜杠。在脚本中使用前先--dry-run尤其当使用--delete时,先用-n模拟运行,确认结果符合预期。保持一致性对于目标路径,尾斜杠通常不影响最终结果(但推荐不加,以避免歧义),重点在于源路径。结合--delete格外小心如果不想删除目标中的额外文件,不要使用--delete;如果使用,务必确认源路径的写法正确。多用-av组合-a保留了大部分重要属性,-v。

2026-03-20 17:15:09 565

原创 GCC选项 -frecord-gcc-switches:记录编译选项的利器

是一个小巧但非常实用的 GCC 选项,它把编译选项嵌入到生成的二进制中,为后续的调试、分析和重现提供了极大的便利。虽然平时可能用不到,但在需要追溯构建信息时,它能成为救命稻草。建议在开发、测试和发布流程中酌情启用,让每个二进制都自带“身份信息”。

2026-03-20 14:21:08 425

原创 Python epilog用法介绍

epilog是argparse提供的一个简单而实用的功能,让你能够优雅地在帮助信息末尾添加额外内容。通过合理使用格式化类,你还可以控制文本的显示方式,使帮助信息更加专业和易读。下面通过一个实际的命令行工具来演示epilog的用法。假设我们编写一个简单的图片压缩脚本,它接受输入文件、输出文件,并允许用户选择压缩质量。我们希望在帮助信息的末尾添加版权声明使用示例以及联系方式,让用户一目了然。%(prog)s是argparse提供的一个便捷的占位符,用于在帮助信息中动态插入程序名,让帮助文本更加通用和整洁。

2026-03-16 10:12:07 441

原创 解决brew安装慢问题

用 brew 安装软件慢,通常是因为默认的官方源服务器在国外。解决的核心思路就是。对于2025年的新版 Homebrew,有一个关键的新步骤需要留意。

2026-03-14 21:53:38 1015

原创 Claude Code 中的 agents 目录详解:自定义子代理完全指南

你想要…用什么设置全局编码规范CLAUDE.md定义项目构建命令CLAUDE.md创建专门的 crash 分析助手agents/创建并行工作的代码审查员agents/保存用户偏好设置CLAUDE.md隔离复杂任务避免上下文溢出agents/~/.claude/CLAUDE.md 是记忆,agents 是能力。理解这个区别,才能更好地定制你的 Claude Code 工作流。

2026-03-13 22:01:01 2165

原创 SSH免密登录配置指南

每次 SSH 登录都要输入密码,确实很影响效率。解决这个问题的核心方法,就是。简单来说,就是让你的电脑(客户端)和远程服务器(服务端)通过一对“钥匙”来互相确认身份,从而省去手动输入密码的步骤。针对你提到的“Mac远程登录Linux”和“Linux远程登录Mac”这两种情况,配置方法基本相同,但有几个关键点需要留意。

2026-03-13 10:19:25 479

原创 Python Path用法介绍

root_path.resolve()..例如,如果root_path是,经过.resolve()后会变成类似这样的完整绝对路径。在check.py中,这行代码出现在函数里,目的是确保后续的文件扫描和相对路径计算()都基于一个规范化的绝对路径,避免路径比较时出现歧义。是 Python 3.4+ 引入的面向对象的路径操作库,功能非常丰富。

2026-03-12 10:09:23 265

原创 Git分支差异比较方法

使用--stat目的命令显示详细内容差异列出差异文件统计摘要查看分支间的提交从分叉点比较根据你的需求选择合适的命令即可。

2026-03-08 22:26:30 379

原创 C语言函数声明参数名省略

函数定义时,必须提供参数的类型,参数的名字原则上也可以省略(如果函数体内确实不需要使用该参数)。但为了代码可读性和可维护性,通常都会给参数起一个有意义的名字。带参数名的定义// 函数体,可以使用 filp、buf、count、datareturn 0;省略参数名的定义// 这里可能只用到了 filp 和 data,未使用 buf 和 count// 编译时可能会产生“未使用参数”警告,可以通过 (void)buf;消除return 0;

2026-03-06 14:59:40 582

原创 CMake二进制目录变量解释

就是cmake -B后面跟的那个路径。它是只读的,由你运行 CMake 时指定。现代 CMake 强烈推荐用-B显式指定构建目录,实现源外构建。想改变它?重新运行cmake -B <新路径>即可。希望通过这篇博客,你能彻底理解的来龙去脉,并在日常开发中用好-B这个好习惯。

2026-03-05 21:21:14 366

原创 CMake add_custom_xxx说明

配置时运行,用于配置逻辑。:构建时运行,用于生成文件、运行测试等构建步骤。

2026-03-05 19:10:33 198

原创 Ubuntu zip压缩文件夹操作

这些信息表明你已成功将压缩为1.zip,压缩率高达98.8%,大幅节省了存储空间。zipinfo提供了压缩包内部文件的详细元数据,方便你验证压缩前后的属性。在 Ubuntu 中,解压.zip文件可以使用unzip命令。

2026-03-05 09:41:14 810

原创 Ubuntu minicom隐藏状态栏

在 Ubuntu 系统中,minicom 底部显示的状态栏(通常包含帮助提示、连接状态、波特率等信息)可以通过配置选项来隐藏或调整大小。

2026-03-04 12:15:28 285

原创 python json tool命令解释

是一个用于格式化(美化)和验证 JSON 数据的 Python 命令行工具。它通过 Python 内置的json模块提供,可以接受 JSON 输入(从文件或标准输入),然后输出结构清晰、易于阅读的格式化 JSON。

2026-03-02 16:13:13 389

原创 C/C++ Weak Symbol

/ 声明一个weak函数// 测试函数,调用weak函数有强符号时:链接器会优先使用强符号b.cpp中定义的强函数被调用无强符号时:链接器会使用 weak 符号a.c中定义的 weak 函数被调用(名称修饰)是 C++ 编译器为了支持函数重载等特性而对函数名进行编码的技术。简单来说,编译器会将人类可读的函数名转换成机器可识别的唯一标识符,这个标识符包含了函数的签名信息。特性CC++❌ 否✅ 是符号名称原始名称编码后的名称函数重载❌ 不支持✅ 支持命名空间。

2026-02-28 15:52:21 72

原创 cmake path 功能详解

将 CMake 中繁琐且易出错的路径字符串操作,变成了清晰、可靠且跨平台的命令。它极大地提升了 CMake 脚本处理路径时的可读性和健壮性,是现代 CMake 项目(3.20+)推荐使用的路径操作方式。注意:如果你的项目CMake版本较低,则需要使用旧命令(如)实现类似的功能。和都是 CMake 中用于处理路径的命令,但它们在设计理念、功能范围以及对文件系统的访问方式上有显著区别。是 CMake 3.20 引入的纯语法路径处理工具,功能全面、安全、现代。是传统命令,混合了语法操作和文件系统访问。

2026-02-26 10:19:50 400

原创 RAG概念通俗解释

RRetrieval(检索):去知识库里找相关的信息片段。AAugmented(增强):把找到的信息和原始问题拼在一起,给模型提供上下文。GGeneration(生成):模型根据这些信息生成最终的答案。所以,下次你听到 RAG,就可以想象一个聪明的学生正在一边翻书一边回答你的问题,既准确又可靠。

2026-02-25 14:12:59 451

原创 Python参数解析默认True变False

在 Python 的argparse中,如果要设置一个默认值为True的参数,并允许通过命令行将其改为False,应使用。这样,当命令行中指定该选项时,参数值会被设为False;不指定时,则保持默认的True。

2026-02-17 22:50:11 201

C语言标准演化:C89、C99与C11的关键变化

内容概要:本文介绍了C语言的发展历程及其不同版本(C89、C99 和 C11)之间的主要区别,详细解释了每个新标准引入的功能和改进,以及对程序员的影响。同时对比了C和C++的区别,并探讨了后者面向对象编程的概念。具体讲解了类、构造函数和析构函数的应用实例。文中特别提及了C11的新特性,如内存对齐控制、泛型宏、线程支持等,还展示了矩阵操作的具体例子以说明封装、继承和多态性的应用。 适用人群:熟悉C/C++语法的基础编程人员;希望深入了解C语言各标准差异的专业开发者。 使用场景及目标:为有经验但可能不了解最新标准化进展的技术人员提供全面指南;帮助初学者掌握从过程化到面向对象思维方式转变所需的知识;展示现代C程序如何利用最新的语言特性进行高效安全的设计。 其他说明:文档还附带了一个简单的矩阵类示例代码,用于演示一些重要的OOP概念和技术点。这有助于读者直观地理解和练习相关知识点。

2025-02-05

The Apple Media Service.pdf

The Apple Media Service for BLE

2021-08-28

AppleNotificationCenterServiceSpecification.pdf

Apple Notification Center Service Specification

2021-08-28

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

TA关注的人

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