Mkdir700's Note

Mkdir700's Note

最新文章

SQLite 锁机制:读锁策略与并发事务分析

在使用 SQLite 数据库时,经常会遇到并发事务问题。本文通过实验深入探讨 SQLite 的锁机制,特别是关于读操作锁获取策略。SQLite 中读操作获取锁的策略根据不同上下文变化,包括事务外的读操作和显式事务内的读操作。实验验证了在并发事务中的行为,展示了事务 A 能执行 UPDATE 操作但在 COMMIT 时失败的情况,最终数据库状态未改变。总结发现 SQLite 的锁升级延迟至真正写入数据库文件时发生,写操作内存更改与文件写入分离,事务 COMMIT 阶段是关键的锁竞争点,该设计确保了数据一致性和较好的并发性能。

使用 GoReleaser 发布 Rust 二进制文件

作为消费者,我们获取二进制发布有多种方式,例如操作系统原生包格式、语言原生包格式、curl shell 组合、现代二进制打包工具。打包和发布需要跨平台编译、打包、摘要、上传等步骤。GoReleaser支持Go项目的打包和分发,但不支持Go以外的构建。通过破解GoReleaser构建过程,可以使用dummy.go文件满足GoReleaser需求,在后阶段执行Rust构建并覆盖Go工件。另外,godownloader是GoReleaser的姊妹项目,可生成curl-shell组合。探索其他Rust发布工具如cargo-release、cargo-deliver和cargo-hublish。 macOS上进行Rust跨平台构建可以使用docker-rustup。
Tec
58
0
0
2024-10-10

解决在 Windows 上 openssl-sys 构建失败的问题

在 Windows 平台构建 Rust 时可能会遇到 openssl-sys 缺失的错误,需要手动安装 OpenSSL。通过 choco 安装 OpenSSL 后,设置环境变量 OPENSSL_DIR 和 OPENSSL_LIB_DIR,重启 VSCode 后即可解决问题。详细安装步骤可参考提供的链接。这个过程涉及到环境变量配置和软件安装,确保按照指示完成后再进行构建操作。
Tec
188
0
0
2024-09-16
解决 Rust 测试中的并行执行冲突:保护共享资源的策略

解决 Rust 测试中的并行执行冲突:保护共享资源的策略

在 Rust 开发中,测试是关键环节,但测试框架默认并行执行时可能导致共享资源冲突。解决方案包括使用 serial_test crate 进行串行测试、互斥锁控制资源访问、创建独立测试环境、模块化测试和一次性初始化、以及使用 #[ignore] 属性标记易受影响的测试。选择适合的策略取决于需求,但通常 serial_test 和独立测试环境是简单有效的方法。无论策略,重要的是要意识到潜在问题并确保测试可靠性。
Tec
39
0
0
2024-09-13
Rust 中的跨平台开发:处理平台特定代码和未使用代码警告

Rust 中的跨平台开发:处理平台特定代码和未使用代码警告

在 Rust 中进行跨平台开发时,使用条件编译可以实现平台特定代码,保持接口一致性。然而,可能会出现静态分析工具错误标记代码为"未使用"的问题。解决方法包括使用 `#[allow(dead_code)]` 属性、在测试中使用平台特定代码、条件编译标记方法的可见性以及使用特性标志。其中,使用条件编译属性抑制特定平台的未使用代码警告是一个优雅解决方案,可精确控制、保持跨平台一致性、清晰明了、文档完整,解决问题并保持代码的兼容性和可读性。这些策略有效处理了平台特定代码和未使用代码警告带来的挑战。
Tec
45
0
0
2024-09-13
Airpods 左右固件版本不一致

Airpods 左右固件版本不一致

Airpods 用户遇到左右耳机固件版本不一致导致一只耳机没有声音的问题。解决方法包括等待耳机自动升级固件、分别配对左右耳机、等待升级过程中的操作步骤。文章提供了详细的步骤指导,包括忘记连接、重新配对等操作方式。同时,参考了苹果官方支持文档,帮助用户解决Airpods连接问题。
371
0
0
2024-07-18
在 MacOS 上获取应用的捆绑标识符(Bundle identifier)

在 MacOS 上获取应用的捆绑标识符(Bundle identifier)

在 MacOS 上,`osascript` 是用于执行苹果脚本和其他 OSA 语言脚本的命令行工具。使用 `-e` 选项可以直接在命令行中执行脚本代码,比如获取应用程序的 bundle identifier。Bundle identifier 是用于标识应用程序的唯一字符串,通常格式为类似反向域名的形式。通过 `osascript -e 'id of app "Obsidian"'` 命令可以获取到名为 "Obsidian" 应用程序的 bundle identifier,如果应用程序已安装并在运行,则会返回相应的标识符,否则可能会提示应用程序未找到。
228
0
0
2024-07-17
JS基础|let与var有什么区别?

JS基础|let与var有什么区别?

在 JavaScript 中,var 和 let 用于声明变量,区别主要体现在作用域和提升方面。var 是函数或全局作用域,let 是块作用域。使用 var 会提升变量到作用域顶部,但不初始化;而 let 会导致 ReferenceError。var 允许同一作用域内重复声明,let 不允许。var 声明的全局变量成为全局对象属性,let 不会。let 提供更严格作用域控制与安全的变量声明,更适合现代 JavaScript 开发。
Tec
74
0
0
2024-07-12
使用 http-server 调试油猴脚本

使用 http-server 调试油猴脚本

最近学习前端知识,需要用油猴插件,提升网页定制化能力。为高效开发调试油猴脚本,介绍使用 HTTP 服务器,解决文件访问权限问题。通过安装 `http-server` 模块,并更新油猴脚本以使用 HTTP URL。不使用 `@require`,每次页面加载重新加载 JS 脚本。检查浏览器控制台以查看错误信息。【关键词】油猴脚本, 前端, 使用 http-server 调试油猴脚本.
Tec
51
0
0
2024-07-12
愚蠢的我,搞丢了 1 个助记词

愚蠢的我,搞丢了 1 个助记词

一位用户在尝试通过Python脚本自动生成新颖的地址时,误操作遗漏了一个助记词,幸好仍保留了私钥。尽管私钥可以管理钱包,但助记词有助于记忆。用户使用BIP39标准生成助记词,并实现了一个函数来找回缺失的助记词。文章详细介绍了BIP39助记词生成原理以及实现过程,阐述了为何BIP39助记词列表含有2048个单词。通过补全缺失的助记词,用户成功找回了完整的助记词:"twelve pact library equip steak cherry choice caught method treat door stuff"。文章关键词:愚蠢的我,搞丢了 1 个助记词,区块链,钱包。
73
0
1
2024-07-12
阅读更多