Mkdir700's Note

Mkdir700's Note

最新文章

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

本文深入探讨了 SQLite 数据库中的锁机制,特别是关于读操作的锁获取策略。在自动提交模式下,单条 SELECT 语句不会获取 SHARED 锁,并在读取完成后立即释放锁;而在显式事务中,BEGIN TRANSACTION 后的读操作会获取 SHARED 锁,并持续到事务结束。不同隔离级别也对锁的获取有影响。通过一个实验验证,展示了事务 A 在执行 UPDATE 操作时不被阻塞,但在尝试 COMMIT 时失败,最终数据库状态保持不变,验证了 SQLite 的锁升级延迟、写操作的内存更改和实际文件写入分离等特点。这种设计既保证了数据一致性,又提供了较好的并发性能。

使用 GoReleaser 发布 Rust 二进制文件

在软件发布中,消费者常通过操作系统原生包格式、语言原生包格式、curl shell 组合或现代二进制打包工具获取二进制发布。发布过程需要跨平台编译、打包、摘要验证和设置分发工件。GoReleaser针对Go项目的打包和分发效果出色。然而,GoReleaser目前不支持除Go以外的其他构建。破解GoReleaser构建过程可通过dummy.go文件与Rust构建钩入来实现。姊妹项目godownloader可生成curl-shell组合辅助安装二进制文件。对于Rust发布工具,目前存在一些类似于GoReleaser的项目,如cargo-release、cargo-deliver和cargo-hublish。探索这些工具有助于完善Rust二进制文件的发布流程,特别是在跨平台构建方面。
Tec
56
0
0
2024-10-10

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

在构建 Rust 项目时,若在 Windows 平台遇到 `openssl-sys` 缺失错误,需手动安装 OpenSSL。首先使用 choco 安装 OpenSSL,然后设置环境变量 `OPENSSL_DIR` 和 `OPENSSL_LIB_DIR`。最后,重启 VSCode 并重新构建项目。详细步骤可参考提供的链接。解决在 Windows 上 `openssl-sys` 构建失败问题关键在于正确安装 OpenSSL 和设置相关环境变量。
Tec
165
0
0
2024-09-16
解决 Rust 测试中的并行执行冲突:保护共享资源的策略

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

在 Rust 开发中,测试是确保代码质量的关键环节。然而,并行执行测试可能导致共享资源冲突。为解决这一问题,可以使用 serial_test crate 进行串行执行测试,使用互斥锁控制资源访问,创建独立测试环境避免干扰,使用测试模块和一次性初始化共享初始化逻辑,以及使用 #[ignore] 属性标记特别受影响的测试。最佳策略取决于具体需求和项目结构,但无论采用哪种方法,确保意识到并行测试可能带来的问题,采取适当措施确保测试可靠性和一致性。
Tec
37
0
0
2024-09-13
Rust 中的跨平台开发:处理平台特定代码和未使用代码警告

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

在 Rust 中进行跨平台开发时,使用条件编译可以实现平台特定代码,保持接口的一致性。然而,可能会面临静态分析工具错误标记代码为"未使用"的问题。解决方法包括使用 `#[allow(dead_code)]` 属性忽略警告、在测试中使用平台特定代码以确保使用、使用条件编译标记方法的可见性、使用特性标志以控制代码编译,以及使用条件编译属性抑制特定平台的未使用代码警告。这些方法确保了代码的兼容性和可读性,处理平台特定代码的同时避免了未使用代码的问题。
Tec
44
0
0
2024-09-13
Airpods 左右固件版本不一致

Airpods 左右固件版本不一致

AirPods 的左右固件版本不一致可能会导致只有一只耳机有声音的问题。解决方法是让它们都升级到最新版本,分别配对左右耳机,并等待固件自动升级。如果需要重新配对,可以按照特定步骤操作。通过这些步骤,可以解决 AirPods 固件版本不一致导致的声音问题。
333
0
0
2024-07-18
在 MacOS 上获取应用的捆绑标识符(Bundle identifier)

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

在 MacOS 上,`osascript` 是用于执行苹果脚本和其他 OSA 语言脚本的命令行工具。使用 `-e` 选项可以直接在命令行中获取应用程序的 bundle identifier,例如 `osascript -e 'id of app "Obsidian"'`。Bundle identifier 是一个唯一标识应用程序的字符串,类似于反向域名格式。通过执行这个命令,可以获取已安装并运行应用程序的 bundle identifier,如果应用程序不存在或未运行,则可能返回错误信息。
217
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
70
0
0
2024-07-12
使用 http-server 调试油猴脚本

使用 http-server 调试油猴脚本

背景 最近在学习前端相关的知识,刚好又碰到了一个小需求需要用到油猴插件。油猴(Tampermonkey)脚本可以极大地提升我们对网页的定制化能力。 本地开发这些脚本时,我需要频繁地复制粘贴代码到油猴插件编辑器中进行调试显得非常低效。 本文将介绍如何通过 HTTP 服务器高效地开发和调试油猴脚本。 效
Tec
50
0
0
2024-07-12
愚蠢的我,搞丢了 1 个助记词

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

愚蠢的我在生成加密货币钱包助记词时,因复制失误导致缺少一个单词,但幸好私钥尚在。私钥虽能替代助记词管理钱包,但助记词更易记忆。通过暴力计算匹配缺失单词,我成功找回了最后一个单词“stuff”。BIP39定义的2048个单词列表保障了助记词熵和信息量的有效转换,简化了用户备份和恢复私钥的步骤。助记词的生成过程包括熵生成、校验和计算、分组、映射和助记词生成,确保了安全和便捷性。我的故事突显了区块链钱包管理中助记词的重要性。
72
0
1
2024-07-12
阅读更多