自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Python容器类型差异操作

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

2026-03-14 23:52:00 408

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

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

2026-02-24 15:20:00 50

原创 Undefined Behavior Sanitizer之UBSAN_OPTIONS

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

2026-02-24 15:13:16 49

原创 AddressSanitizer之ASAN_OPTIONS

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

2026-02-24 15:00:49 74

原创 深入理解 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 61

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

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

2025-11-30 23:59:30 572

原创 Python相对导入用法详解

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

2025-10-28 00:19:19 863

原创 CMake中add_custom_target和add_custom_command用法详解

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

2025-04-12 23:07:32 1642

原创 python argparse模块nargs用法

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

2024-07-06 22:35:44 2711

原创 Python开启Http Server

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

2023-07-09 21:34:23 3630

翻译 开源代码授权Licence说明

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

2021-04-07 23:46:04 2326

原创 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 148178 4

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

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

2026-03-30 12:14:51 28

原创 Git 分支切换

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

2026-03-28 23:59:51 378

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

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

2026-03-28 22:15:41 46

原创 Linux rsync使用教程

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

2026-03-20 17:15:09 521

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

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

2026-03-20 14:21:08 402

原创 Python epilog用法介绍

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

2026-03-16 10:12:07 420

原创 解决brew安装慢问题

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

2026-03-14 21:53:38 693

原创 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 1744

原创 SSH免密登录配置指南

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

2026-03-13 10:19:25 429

原创 Python Path用法介绍

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

2026-03-12 10:09:23 226

原创 Git分支差异比较方法

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

2026-03-08 22:26:30 288

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

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

2026-03-06 14:59:40 558

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

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

2026-03-05 21:21:14 353

原创 CMake add_custom_xxx说明

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

2026-03-05 19:10:33 184

原创 Ubuntu zip压缩文件夹操作

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

2026-03-05 09:41:14 715

原创 Ubuntu minicom隐藏状态栏

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

2026-03-04 12:15:28 253

原创 python json tool命令解释

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

2026-03-02 16:13:13 364

原创 C/C++ Weak Symbol

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

2026-02-28 15:52:21 61

原创 cmake path 功能详解

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

2026-02-26 10:19:50 347

原创 RAG概念通俗解释

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

2026-02-25 14:12:59 425

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

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

2026-02-17 22:50:11 194

原创 OpenCode 配置默认模型指南

全局配置:修改中的model字段插件覆盖:如果使用 oh-my-opencode,需要同时修改中的 agents 和 categories 配置模型选择是一个性价比很高的选择希望这篇文章能帮助到你!如果有任何问题,欢迎留言交流。

2026-02-17 22:47:16 2677

原创 Python执行的原理和过程

当你执行时,Python 并不是像 C 语言那样直接生成由 CPU 执行的二进制机器码,而是经历了一个“编译 + 解释”的过程。下面我简单梳理一下它的执行原理,以及与 C 语言编译的区别。

2026-02-16 00:13:44 165

原创 解决vscode code命令找不到问题

你在终端里找不到code命令,确实是因为环境变量没配置好。VS Code 需要手动把它的命令行工具所在路径添加到系统的PATH中。解决这个问题主要有两种方法,都很简单。

2026-02-13 23:59:28 625

原创 git跟踪空文件夹

把这个空目录提交到仓库(比如为了保持项目结构),常见的做法是在目录里放一个。规则反向保留空目录,但远不如直接放个文件直观,不推荐。不是 Git 官方的特性,只是一个约定俗成的占位符。这时目录因为包含文件而被 Git 识别,就可以正常。,都不会有任何效果,Git 会直接忽略它。,这是它的设计原则——版本控制关注的是。,目录本身只是文件的路径容器。所以你在一个空文件夹上执行。

2026-02-12 15:43:17 227

原创 CMake configure_file使用教程详解

假设你有一个模板文件。

2026-02-09 18:25:29 368

原创 AI与AGI的区别及未来展望

你可以把AI 看作今天我们已经拥有的强大工具,比如超级计算器、超级翻译机、超级识别仪。它们在某些方面远超人类,但本质上仍是“工具”。而AGI 是一个蓝图中的“智能体”,它更像一个“合作伙伴”或“新物种”,拥有自主的、通用的、类人的智能。从AI到AGI的跨越,被认为是技术上的“最后一公里”,也是最艰难的一步,其实现可能带来人类社会的根本性变革。因此,当我们谈论ChatGPT的突破时,我们是在现有AI范畴内讨论其能力的飞跃,但它距离真正的AGI还有本质上的差距。

2026-02-08 22:05:35 1132

原创 Git 2.23新增命令switch使用指南

为了拆分这个“多功能”命令,使其更安全、语义更清晰,Git 在git switch和。简单来说,git switch使用新命令可以避免因文件和分支同名导致的误操作,也更符合“一个命令只做一件事”的原则。

2026-02-04 10:27:41 442

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关注的人

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